Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2240 → Rev 2241

/trunk/jrest/lib/GestionMotsClesChemin.php
62,6 → 62,21
return $ids_enfants;
}
 
/**
* Retourne la liste des mots clés pour l'élément lié fourni. Ne tient pas compte de l'utilisateur
* car seul le propriétaire d'un élément lié peut y lier des mots clés
*/
public function obtenirIdsMotsClesParIdElementLie($id_element_lie) {
$idElementLieP = Cel::db()->proteger($id_element_lie);
 
$requete = "SELECT id_mot_cle FROM {$this->table_liaison} WHERE id_element_lie = $idElementLieP" .
' -- '.__FILE__.':'.__LINE__;
 
$ids_mots_cles = Cel::db()->requeter($requete);
 
return $ids_mots_cles;
}
 
public function insererParCheminSiInexistant($mot_cle, $chemin_parent, $id_utilisateur) {
$mot_cle = self::simplifier($mot_cle);
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
162,7 → 177,7
return $liaison;
}
 
public function lierParTableaux($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
public function lierParTableaux($ids_mots_cles, $ids_elements_lies) {
$combinaisons = array();
foreach ($ids_mots_cles as $id_mot_cle) {
$idMotCleP = Cel::db()->proteger($id_mot_cle);
182,6 → 197,66
return $liaison;
}
 
/**
* Modifie les liaisons aux mots clés pour chaque element lié, en supprimant et ajoutant seulement les
* mots clés qui ont changé, sans toucher à ceux qui sont conservés. Ça évite de tout supprimer avant,
* et ainsi de perdre la date de liaison des mots clés conservés.
*/
public function modifierLiaisonParTableaux($ids_mots_cles, $ids_elements_lies) {
$reussi = true;
 
foreach ($ids_elements_lies as $id_element_lie) {
$idElementLieP = Cel::db()->proteger($id_element_lie);
// trouver les mots clés actuels
$ids_mots_cles_actuels = $this->obtenirIdsMotsClesParIdElementLie($id_element_lie);
if (! is_array($ids_mots_cles_actuels)) {
$ids_mots_cles_actuels = array();
}
// remise en forme
foreach ($ids_mots_cles_actuels as $k => $v) {
if (isset($v['id_mot_cle'])) { // je vois mal comment ça pourrait ne pas être set
$ids_mots_cles_actuels[$k] = $v['id_mot_cle'];
}
}
 
// changements
$ids_mots_cles_ajoutes = array_diff($ids_mots_cles, $ids_mots_cles_actuels);
$ids_mots_cles_supprimes = array_diff($ids_mots_cles_actuels, $ids_mots_cles);
 
// insérer
if (count($ids_mots_cles_ajoutes) > 0) {
$combinaisons = array();
foreach ($ids_mots_cles_ajoutes as $id_mot_cle) {
$idMotCleP = Cel::db()->proteger($id_mot_cle);
$combinaisons[] = "($idElementLieP, $idMotCleP)";
}
$valeursGroupees = implode(', ', $combinaisons);
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
"VALUES $valeursGroupees ".
"ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie ". // normalement pas nécessaire
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->executer($requete);
$reussi = ($reussi && $resultat);
}
 
// supprimer
if (count($ids_mots_cles_supprimes) > 0) {
$clauses = array();
foreach ($ids_mots_cles_supprimes as $id_mot_cle) {
$idMotCleP = Cel::db()->proteger($id_mot_cle);
$clauses[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
}
$clause = implode(' OR ', $clauses);
$requete = "DELETE FROM {$this->table_liaison} WHERE $clause" .
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->executer($requete);
$reussi = ($reussi && $resultat);
}
}
 
return $reussi;
}
 
public function supprimerLiaisonsMotsCles($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
$combinaisons = array();
foreach ($ids_mots_cles as $id_mot_cle) {