| Line 20... |
Line 20... |
| 20 |
private $config;
|
20 |
private $config;
|
| 21 |
private $mode;
|
21 |
private $mode;
|
| Line 22... |
Line 22... |
| 22 |
|
22 |
|
| 23 |
private $table_liaison;
|
23 |
private $table_liaison;
|
| - |
|
24 |
private $table_mots_cles;
|
| - |
|
25 |
private $id_mot_cle;
|
| Line 24... |
Line 26... |
| 24 |
private $table_mots_cles;
|
26 |
private $id_element_lie;
|
| Line 25... |
Line 27... |
| 25 |
|
27 |
|
| 26 |
//TODO: trigger pour les tables liaisons
|
28 |
//TODO: trigger pour les tables liaisons
|
| 27 |
|
29 |
|
| 28 |
public function __construct($config, $mode = 'obs') {
|
30 |
public function __construct($config, $mode = 'obs') {
|
| Line 29... |
Line 31... |
| 29 |
$this->config = $config;
|
31 |
$this->config = $config;
|
| 30 |
//TODO: switch suivant mode
|
32 |
//TODO: switch suivant mode
|
| Line 31... |
Line -... |
| 31 |
$this->mode = $mode;
|
- |
|
| 32 |
|
- |
|
| 33 |
list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
- |
|
| 34 |
}
|
- |
|
| 35 |
|
- |
|
| 36 |
public function obtenirArbre($id_utilisateur, $chemin = '/') {
|
- |
|
| 37 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
- |
|
| 38 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
- |
|
| 39 |
|
- |
|
| 40 |
$requete = 'SELECT * '.
|
- |
|
| Line 41... |
Line -... |
| 41 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| 42 |
"WHERE id_utilisateur = $idUtilisateurP ".
|
- |
|
| 43 |
"AND chemin LIKE $cheminP ".
|
- |
|
| 44 |
'ORDER BY chemin '.
|
- |
|
| 45 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 46 |
|
- |
|
| 47 |
$arbre = Cel::db()->requeter($requete);
|
- |
|
| Line 48... |
Line 33... |
| 48 |
foreach ($arbre as &$noeud) {
|
33 |
$this->mode = $mode;
|
| 49 |
$noeud['chemin'] = strtolower($noeud['chemin']);
|
34 |
|
| 50 |
}
|
35 |
list($this->table_liaison, $this->table_mots_cles, $this->id_mot_cle, $this->id_element_lie) = self::getTablesMotsClesEtLiaisons($mode);
|
| Line 51... |
Line 36... |
| 51 |
usort($arbre, array('GestionMotsClesChemin', 'comparerProfNoeuds'));
|
36 |
}
|
| 52 |
return $arbre;
|
37 |
|
| 53 |
}
|
38 |
|
| 54 |
|
39 |
|
| 55 |
public function obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle) {
|
40 |
public function obtenirIdsMotsClesParIdParent($user_id, $id_mot_cle) {
|
| 56 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
41 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 57 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
42 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| 58 |
|
43 |
|
| Line 59... |
Line 44... |
| 59 |
$sousRequete = "SELECT chemin FROM {$this->table_mots_cles} WHERE id_mot_cle = $idMotCleP ";
|
44 |
$sousRequete = "SELECT path FROM {$this->table_mots_cles} WHERE $this->id_mot_cle = $idMotCleP ";
|
| Line 70... |
Line 55... |
| 70 |
* car seul le propriétaire d'un élément lié peut y lier des mots clés
|
55 |
* car seul le propriétaire d'un élément lié peut y lier des mots clés
|
| 71 |
*/
|
56 |
*/
|
| 72 |
public function obtenirIdsMotsClesParIdElementLie($id_element_lie) {
|
57 |
public function obtenirIdsMotsClesParIdElementLie($id_element_lie) {
|
| 73 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
58 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| Line 74... |
Line 59... |
| 74 |
|
59 |
|
| 75 |
$requete = "SELECT id_mot_cle FROM {$this->table_liaison} ".
|
60 |
$requete = "SELECT {$this->id_mot_cle} FROM {$this->table_liaison} ".
|
| 76 |
"WHERE id_element_lie = $idElementLieP ".
|
61 |
"WHERE {$this->id_element_lie} = $idElementLieP ".
|
| 77 |
' -- '.__FILE__.':'.__LINE__;
|
62 |
' -- '.__FILE__.':'.__LINE__;
|
| 78 |
return Cel::db()->requeter($requete);
|
63 |
return Cel::db()->requeter($requete);
|
| Line 79... |
Line 64... |
| 79 |
}
|
64 |
}
|
| 80 |
|
65 |
|
| 81 |
public function insererParCheminSiInexistant($mot_cle, $chemin_parent, $id_utilisateur) {
|
66 |
public function insererParCheminSiInexistant($mot_cle, $chemin_parent, $user_id) {
|
| 82 |
$mot_cle = self::simplifier($mot_cle);
|
67 |
$mot_cle = self::simplifier($mot_cle);
|
| 83 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
68 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
| Line 84... |
Line 69... |
| 84 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
69 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
| 85 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
70 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| 86 |
|
71 |
|
| 87 |
$requete = 'SELECT id_mot_cle '.
|
72 |
$requete = "SELECT {$this->id_mot_cle} ".
|
| 88 |
"FROM {$this->table_mots_cles} ".
|
73 |
"FROM {$this->table_mots_cles} ".
|
| 89 |
"WHERE chemin = $cheminMotCleP ".
|
74 |
"WHERE path = $cheminMotCleP ".
|
| Line 90... |
Line 75... |
| 90 |
"AND id_utilisateur = $idUtilisateurP ".
|
75 |
"AND user_id = $idUtilisateurP ".
|
| 91 |
' -- '.__FILE__.':'.__LINE__;
|
76 |
' -- '.__FILE__.':'.__LINE__;
|
| 92 |
$infosMotCle = Cel::db()->requeter($requete);
|
77 |
$infosMotCle = Cel::db()->requeter($requete);
|
| 93 |
|
78 |
|
| 94 |
if (!empty($infosMotCle)) {
|
79 |
if (!empty($infosMotCle)) {
|
| 95 |
$idMotCle = $infosMotCle[0]['id_mot_cle'];
|
80 |
$idMotCle = $infosMotCle[0]['id_mot_cle'];
|
| 96 |
} else {
|
81 |
} else {
|
| Line 97... |
Line 82... |
| 97 |
$idMotCle = $this->insererParChemin($mot_cle, $chemin_parent, $id_utilisateur);
|
82 |
$idMotCle = $this->insererParChemin($mot_cle, $chemin_parent, $user_id);
|
| 98 |
}
|
83 |
}
|
| 99 |
return $idMotCle;
|
84 |
return $idMotCle;
|
| 100 |
}
|
85 |
}
|
| 101 |
|
86 |
|
| 102 |
public function insererParChemin($mot_cle, $chemin_parent, $id_utilisateur) {
|
87 |
public function insererParChemin($mot_cle, $chemin_parent, $user_id) {
|
| Line 103... |
Line 88... |
| 103 |
$mot_cle = self::simplifier($mot_cle);
|
88 |
$mot_cle = self::simplifier($mot_cle);
|
| 104 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
89 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
| 105 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
90 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
| 106 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
91 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| 107 |
$motCleP = Cel::db()->proteger($mot_cle);
|
92 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| Line 108... |
Line 93... |
| 108 |
|
93 |
|
| Line 117... |
Line 102... |
| 117 |
$resultat = Cel::db()->obtenirDernierId();
|
102 |
$resultat = Cel::db()->obtenirDernierId();
|
| 118 |
}
|
103 |
}
|
| 119 |
return $resultat;
|
104 |
return $resultat;
|
| 120 |
}
|
105 |
}
|
| Line 121... |
Line 106... |
| 121 |
|
106 |
|
| 122 |
public function insererParIdParent($mot_cle, $id_parent, $id_utilisateur) {
|
107 |
public function insererParIdParent($mot_cle, $id_parent, $user_id) {
|
| 123 |
$motCleSimple = self::simplifier($mot_cle);
|
108 |
$motCleSimple = self::simplifier($mot_cle);
|
| 124 |
$motCleSimpleP = Cel::db()->proteger(strtolower(self::supprimerAccents($mot_cle)));
|
109 |
$motCleSimpleP = Cel::db()->proteger(strtolower(self::supprimerAccents($mot_cle)));
|
| 125 |
$idParentP = Cel::db()->proteger($id_parent);
|
110 |
$idParentP = Cel::db()->proteger($id_parent);
|
| 126 |
$racineP = Cel::db()->proteger('/');
|
111 |
$racineP = Cel::db()->proteger('/');
|
| 127 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
112 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| Line 128... |
Line 113... |
| 128 |
$motCleP = Cel::db()->proteger($mot_cle);
|
113 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| 129 |
|
114 |
|
| 130 |
$sousRequete = $racineP;
|
115 |
$sousRequete = $racineP;
|
| 131 |
if ($id_parent != '') {
|
116 |
if ($id_parent != '') {
|
| 132 |
$sousRequete = '(SELECT chemin '.
|
117 |
$sousRequete = '(SELECT path '.
|
| 133 |
"FROM {$this->table_mots_cles} AS ctp ".
|
118 |
"FROM {$this->table_mots_cles} AS ctp ".
|
| Line 134... |
Line 119... |
| 134 |
"WHERE ctp.id_mot_cle = $idParentP) ";
|
119 |
"WHERE ctp.id = $idParentP) ";
|
| 135 |
}
|
120 |
}
|
| 136 |
|
121 |
|
| 137 |
$requete = "INSERT INTO {$this->table_mots_cles} (chemin, id_utilisateur, mot_cle) ".
|
122 |
$requete = "INSERT INTO {$this->table_mots_cles} (path, user_id, name) ".
|
| Line 138... |
Line 123... |
| 138 |
"VALUES (CONCAT($sousRequete, $motCleSimpleP, '/'), $idUtilisateurP, $motCleP ) ".
|
123 |
"VALUES (CONCAT($sousRequete, $motCleSimpleP, '/'), $idUtilisateurP, $motCleP ) ".
|
| 139 |
' -- '.__FILE__.':'.__LINE__;
|
124 |
' -- '.__FILE__.':'.__LINE__;
|
| 140 |
$insertion = Cel::db()->executer($requete);
|
125 |
$insertion = Cel::db()->executer($requete);
|
| 141 |
|
126 |
|
| 142 |
if ($insertion !== false) {
|
127 |
if ($insertion !== false) {
|
| Line 143... |
Line -... |
| 143 |
$resultat = Cel::db()->obtenirDernierId();
|
- |
|
| 144 |
}
|
- |
|
| 145 |
return $resultat;
|
- |
|
| 146 |
}
|
- |
|
| 147 |
|
- |
|
| 148 |
public function lierParId($id_mot_cle, $id_element_lie) {
|
- |
|
| 149 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
- |
|
| 150 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
- |
|
| 151 |
|
- |
|
| 152 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
- |
|
| 153 |
"VALUES ($idElementLieP, $idMotCleP) ".
|
- |
|
| 154 |
'ON DUPLICATE KEY UPDATE `id_element_lie`=VALUES(`id_element_lie`), `id_mot_cle`=VALUES(`id_mot_cle`) '.
|
- |
|
| 155 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 156 |
return Cel::db()->executer($requete);
|
- |
|
| 157 |
}
|
- |
|
| 158 |
|
- |
|
| 159 |
public function lierParChemin($chemin, $id_element_lie, $id_utilisateur) {
|
- |
|
| 160 |
$cheminP = Cel::db()->proteger(self::harmoniserChemin($chemin));
|
- |
|
| 161 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
- |
|
| 162 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
- |
|
| 163 |
|
- |
|
| 164 |
$sousRequete = '(SELECT id_mot_cle '.
|
- |
|
| 165 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| 166 |
"WHERE chemin = $cheminP ".
|
- |
|
| 167 |
"AND id_utilisateur = $idUtilisateurP ".
|
- |
|
| 168 |
')';
|
- |
|
| 169 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
- |
|
| Line 170... |
Line 128... |
| 170 |
"VALUES ($idElementLieP, $sousRequete) ".
|
128 |
$resultat = Cel::db()->obtenirDernierId();
|
| 171 |
'ON DUPLICATE KEY UPDATE `id_element_lie`=VALUES(`id_element_lie`), `id_mot_cle`=VALUES(`id_mot_cle`) '.
|
129 |
}
|
| 172 |
' -- '.__FILE__.':'.__LINE__;
|
130 |
return $resultat;
|
| 173 |
return Cel::db()->executer($requete);
|
131 |
}
|
| Line 182... |
Line 140... |
| 182 |
$combinaisons[] = "($idElementLieP, $idMotCleP)";
|
140 |
$combinaisons[] = "($idElementLieP, $idMotCleP)";
|
| 183 |
}
|
141 |
}
|
| 184 |
}
|
142 |
}
|
| Line 185... |
Line 143... |
| 185 |
|
143 |
|
| 186 |
$valeursGroupees = implode(', ', $combinaisons);
|
144 |
$valeursGroupees = implode(', ', $combinaisons);
|
| 187 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
145 |
$requete = "INSERT INTO {$this->table_liaison} ({$this->id_element_lie}, {$this->id_mot_cle}) ".
|
| 188 |
"VALUES $valeursGroupees ".
|
146 |
"VALUES $valeursGroupees ".
|
| 189 |
"ON DUPLICATE KEY UPDATE `id_element_lie`=VALUES(`id_element_lie`), `id_mot_cle`=VALUES(`id_mot_cle`) ".
|
147 |
"ON DUPLICATE KEY UPDATE {$this->id_element_lie}=VALUES(`id_element_lie`), {$this->id_mot_cle}=VALUES(`id_mot_cle`) ".
|
| 190 |
' -- '.__FILE__.':'.__LINE__;
|
148 |
' -- '.__FILE__.':'.__LINE__;
|
| 191 |
return Cel::db()->executer($requete);
|
149 |
return Cel::db()->executer($requete);
|
| Line 192... |
Line -... |
| 192 |
}
|
- |
|
| 193 |
|
- |
|
| 194 |
/**
|
- |
|
| 195 |
* Modifie les liaisons aux mots clés pour chaque element lié, en supprimant et ajoutant seulement les
|
- |
|
| 196 |
* mots clés qui ont changé, sans toucher à ceux qui sont conservés. Ça évite de tout supprimer avant,
|
- |
|
| 197 |
* et ainsi de perdre la date de liaison des mots clés conservés.
|
- |
|
| 198 |
* Si $supprimer est true, les mots clefs existant mais non spécifiés dans le POST seront supprimés,
|
- |
|
| 199 |
* sinon ils seront laissés en l'état.
|
- |
|
| 200 |
*/
|
- |
|
| 201 |
public function modifierLiaisonParTableaux($ids_mots_cles, $ids_elements_lies, $supprimer) {
|
- |
|
| 202 |
$reussi = true;
|
- |
|
| 203 |
foreach ($ids_elements_lies as $id_element_lie) {
|
- |
|
| 204 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
- |
|
| 205 |
// trouver les mots clés actuels
|
- |
|
| 206 |
$ids_mots_cles_actuels = $this->obtenirIdsMotsClesParIdElementLie($id_element_lie);
|
- |
|
| 207 |
if (! is_array($ids_mots_cles_actuels)) {
|
- |
|
| 208 |
$ids_mots_cles_actuels = array();
|
- |
|
| 209 |
}
|
- |
|
| 210 |
// remise en forme
|
- |
|
| 211 |
foreach ($ids_mots_cles_actuels as $k => $v) {
|
- |
|
| 212 |
if (isset($v['id_mot_cle'])) { // je vois mal comment ça pourrait ne pas être set
|
- |
|
| 213 |
$ids_mots_cles_actuels[$k] = $v['id_mot_cle'];
|
- |
|
| 214 |
}
|
- |
|
| 215 |
}
|
- |
|
| 216 |
|
- |
|
| 217 |
// changements
|
- |
|
| 218 |
$ids_mots_cles_ajoutes = array_diff($ids_mots_cles, $ids_mots_cles_actuels);
|
- |
|
| 219 |
if ($supprimer === true) {
|
- |
|
| Line 220... |
Line -... |
| 220 |
$ids_mots_cles_supprimes = array_diff($ids_mots_cles_actuels, $ids_mots_cles);
|
- |
|
| 221 |
}
|
- |
|
| 222 |
|
- |
|
| 223 |
// insérer
|
- |
|
| 224 |
if (count($ids_mots_cles_ajoutes) > 0) {
|
- |
|
| 225 |
$combinaisons = array();
|
- |
|
| 226 |
foreach ($ids_mots_cles_ajoutes as $id_mot_cle) {
|
- |
|
| 227 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
- |
|
| 228 |
$combinaisons[] = "($idElementLieP, $idMotCleP)";
|
- |
|
| 229 |
}
|
- |
|
| 230 |
$valeursGroupees = implode(', ', $combinaisons);
|
- |
|
| 231 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
- |
|
| 232 |
"VALUES $valeursGroupees ".
|
- |
|
| 233 |
"ON DUPLICATE KEY UPDATE `id_element_lie`=VALUES(`id_element_lie`), `id_mot_cle`=VALUES(`id_mot_cle`) ". // normalement pas nécessaire
|
- |
|
| 234 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| Line 235... |
Line -... |
| 235 |
$resultat = Cel::db()->executer($requete);
|
- |
|
| 236 |
$reussi = ($reussi && $resultat);
|
- |
|
| 237 |
}
|
- |
|
| 238 |
|
- |
|
| 239 |
// supprimer
|
- |
|
| 240 |
if ($supprimer === true && count($ids_mots_cles_supprimes) > 0) {
|
- |
|
| 241 |
$clauses = array();
|
- |
|
| 242 |
foreach ($ids_mots_cles_supprimes as $id_mot_cle) {
|
- |
|
| 243 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
- |
|
| 244 |
$clauses[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
|
- |
|
| 245 |
}
|
- |
|
| 246 |
$clause = implode(' OR ', $clauses);
|
- |
|
| 247 |
$requete = "DELETE FROM {$this->table_liaison} WHERE $clause" .
|
- |
|
| 248 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 249 |
$resultat = Cel::db()->executer($requete);
|
- |
|
| 250 |
$reussi = ($reussi && $resultat);
|
- |
|
| 251 |
}
|
- |
|
| 252 |
}
|
150 |
}
|
| 253 |
return $reussi;
|
151 |
|
| 254 |
}
|
152 |
|
| 255 |
|
153 |
|
| 256 |
public function supprimerLiaisonsMotsCles($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
|
154 |
public function supprimerLiaisonsMotsCles($ids_mots_cles, $ids_elements_lies, $user_id) {
|
| 257 |
$combinaisons = array();
|
155 |
$combinaisons = array();
|
| 258 |
foreach ($ids_mots_cles as $id_mot_cle) {
|
156 |
foreach ($ids_mots_cles as $id_mot_cle) {
|
| 259 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
157 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 260 |
foreach ($ids_elements_lies as $id_element_lie) {
|
158 |
foreach ($ids_elements_lies as $id_element_lie) {
|
| 261 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
159 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| Line 262... |
Line 160... |
| 262 |
$combinaisons[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
|
160 |
$combinaisons[] = "({$this->id_element_lie} = $idElementLieP AND {$this->id_mot_cle} = $idMotCleP)";
|
| Line 273... |
Line 171... |
| 273 |
public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
|
171 |
public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
|
| 274 |
$idsElementsLiesP = Cel::db()->proteger($ids_elements_lies);
|
172 |
$idsElementsLiesP = Cel::db()->proteger($ids_elements_lies);
|
| 275 |
$listeIds = implode(',', $idsElementsLiesP);
|
173 |
$listeIds = implode(',', $idsElementsLiesP);
|
| Line 276... |
Line 174... |
| 276 |
|
174 |
|
| 277 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
175 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 278 |
"WHERE id_element_lie IN ($listeIds) ".
|
176 |
"WHERE {$this->id_element_lie} IN ($listeIds) ".
|
| Line 279... |
Line 177... |
| 279 |
' -- '.__FILE__.':'.__LINE__;
|
177 |
' -- '.__FILE__.':'.__LINE__;
|
| 280 |
|
178 |
|
| 281 |
$suppression = Cel::db()->executer($requete);
|
179 |
$suppression = Cel::db()->executer($requete);
|
| 282 |
$suppression = ($suppression !== false) ? true : false;
|
180 |
$suppression = ($suppression !== false) ? true : false;
|
| Line 283... |
Line 181... |
| 283 |
return $suppression;
|
181 |
return $suppression;
|
| 284 |
}
|
182 |
}
|
| 285 |
|
183 |
|
| 286 |
public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
|
184 |
public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $user_id) {
|
| 287 |
$suppression = true;
|
185 |
$suppression = true;
|
| Line 288... |
Line 186... |
| 288 |
if (!empty($ids_mots_cles)) {
|
186 |
if (!empty($ids_mots_cles)) {
|
| 289 |
$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
|
187 |
$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
|
| 290 |
$listeIds = implode(',', $idsMotsClesP);
|
188 |
$listeIds = implode(',', $idsMotsClesP);
|
| Line 291... |
Line 189... |
| 291 |
|
189 |
|
| 292 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
190 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 293 |
"WHERE id_mot_cle IN ($listeIds) ".
|
191 |
"WHERE {$this->id_mot_cle} IN ($listeIds) ".
|
| Line 301... |
Line 199... |
| 301 |
|
199 |
|
| 302 |
/**
|
200 |
/**
|
| 303 |
* Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
|
201 |
* Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
|
| 304 |
*
|
202 |
*
|
| 305 |
*/
|
203 |
*/
|
| 306 |
public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
|
204 |
public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $user_id) {
|
| 307 |
$mot_cle = self::simplifier($mot_cle);
|
205 |
$mot_cle = self::simplifier($mot_cle);
|
| 308 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
206 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| 309 |
$motCleP = Cel::db()->proteger($mot_cle);
|
207 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| Line 310... |
Line 208... |
| 310 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
208 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| 311 |
|
209 |
|
| 312 |
$sousRequete = "SELECT id_mot_cle FROM {$this->table_mots_cles} ".
|
210 |
$sousRequete = "SELECT id FROM {$this->table_mots_cles} ".
|
| 313 |
"WHERE mot_cle = $motCleP ".
|
211 |
"WHERE name = $motCleP ".
|
| 314 |
"AND id_utilisateur = $idUtilisateurP ";
|
212 |
"AND userId = $idUtilisateurP ";
|
| 315 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
213 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 316 |
"WHERE id_element_lie = $idElementLieP ".
|
214 |
"WHERE {$this->id_element_lie} = $idElementLieP ".
|
| Line 317... |
Line 215... |
| 317 |
"AND id_mot_cle IN ($sousRequete) ".
|
215 |
"AND {$this->id_mot_cle} IN ($sousRequete) ".
|
| 318 |
' -- '.__FILE__.':'.__LINE__;
|
216 |
' -- '.__FILE__.':'.__LINE__;
|
| Line 319... |
Line 217... |
| 319 |
|
217 |
|
| 320 |
$suppression_liaison = Cel::db()->executer($requete);
|
218 |
$suppression_liaison = Cel::db()->executer($requete);
|
| Line 321... |
Line -... |
| 321 |
$suppression_liaison = ($suppression_liaison !== false);
|
- |
|
| 322 |
|
- |
|
| 323 |
return $suppression_liaison;
|
- |
|
| 324 |
}
|
- |
|
| 325 |
|
- |
|
| 326 |
public function renommerMotCle($id_mot_cle, $nouveau_nom) {
|
- |
|
| 327 |
$nouveauNomSimple = self::simplifier($nouveau_nom);
|
- |
|
| 328 |
$nouveauNomSimpleP = Cel::db()->proteger($nouveauNomSimple);
|
- |
|
| 329 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
- |
|
| 330 |
|
- |
|
| 331 |
$requete = 'SELECT chemin, id_utilisateur '.
|
- |
|
| 332 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| 333 |
"WHERE id_mot_cle = $idMotCleP ".
|
- |
|
| 334 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 335 |
$ancienCheminInfos = Cel::db()->requeter($requete);
|
- |
|
| 336 |
|
- |
|
| 337 |
$ancienChemin = $ancienCheminInfos[0]['chemin'];
|
- |
|
| 338 |
$id_utilisateur = $ancienCheminInfos[0]['id_utilisateur'];
|
- |
|
| 339 |
|
- |
|
| 340 |
$cheminDecompo = explode('/', $ancienChemin);
|
- |
|
| 341 |
// le dernier élément du tableau est vide (à cause du / terminal)
|
- |
|
| 342 |
// c'est également le cas pour le premier (à cause du / qui commence le chemin)
|
- |
|
| 343 |
$cheminDecompo[count($cheminDecompo) - 2] = $nouveauNomSimple;
|
- |
|
| 344 |
$nouveauChemin = implode('/', $cheminDecompo);
|
- |
|
| 345 |
|
- |
|
| 346 |
$requete = "UPDATE {$this->table_mots_cles} ".
|
- |
|
| 347 |
"SET mot_cle = $nouveauNomSimpleP ".
|
- |
|
| 348 |
"WHERE id_mot_cle = $idMotCleP ".
|
- |
|
| 349 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 350 |
|
- |
|
| 351 |
$renommage = Cel::db()->executer($requete);
|
- |
|
| 352 |
$this->renommerChemin($ancienChemin, $nouveauChemin, $id_utilisateur);
|
- |
|
| Line 353... |
Line -... |
| 353 |
|
- |
|
| 354 |
$idsElementsLies = $this->obtenirIdElementsLiesPourIds(array($id_mot_cle));
|
- |
|
| 355 |
foreach ($idsElementsLies as $idElementLie) {
|
- |
|
| 356 |
self::regenererIndexTexteMotCle($idElementLie['id_element_lie'], $this->mode);
|
- |
|
| 357 |
}
|
- |
|
| 358 |
|
- |
|
| 359 |
return $renommage;
|
- |
|
| 360 |
}
|
- |
|
| 361 |
|
- |
|
| 362 |
/**
|
- |
|
| 363 |
* Si aucun id_père n'est mentionné, c'est un déplacement vers la racine de l'arbre (qui n'existe pas).
|
- |
|
| 364 |
*/
|
- |
|
| 365 |
public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
|
- |
|
| 366 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
- |
|
| 367 |
$idPereP = Cel::db()->proteger($id_pere);
|
- |
|
| 368 |
$cheminPere = '';
|
- |
|
| 369 |
|
- |
|
| 370 |
if ($id_pere != '') {
|
- |
|
| 371 |
$requete = 'SELECT chemin '.
|
- |
|
| 372 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| 373 |
"WHERE id_mot_cle = $idPereP ".
|
- |
|
| 374 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 375 |
|
- |
|
| 376 |
$cheminPereInfos = Cel::db()->requeter($requete);
|
- |
|
| 377 |
if (!empty($cheminPereInfos)) {
|
- |
|
| 378 |
$cheminPere = $cheminPereInfos[0]['chemin'];
|
- |
|
| 379 |
}
|
- |
|
| 380 |
}
|
- |
|
| 381 |
|
- |
|
| 382 |
$requete = 'SELECT chemin, mot_cle '.
|
- |
|
| 383 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| 384 |
"WHERE id_mot_cle = $idMotCleP ".
|
- |
|
| 385 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 386 |
$infosMotCle = Cel::db()->requeter($requete);
|
- |
|
| 387 |
$ancienChemin = $infosMotCle[0]['chemin'];
|
- |
|
| 388 |
$ancienMotCle = $infosMotCle[0]['mot_cle'];
|
- |
|
| 389 |
|
- |
|
| 390 |
$nouveauChemin = $cheminPere.'/'.$ancienMotCle;
|
- |
|
| 391 |
|
- |
|
| 392 |
return $this->renommerChemin($ancienChemin, $nouveauChemin, $id_utilisateur);
|
- |
|
| 393 |
}
|
- |
|
| 394 |
|
- |
|
| 395 |
public function renommerChemin($ancien_chemin, $nouveau_chemin, $id_utilisateur) {
|
- |
|
| 396 |
$ancienCheminHarmonise = self::harmoniserChemin($ancien_chemin);
|
- |
|
| 397 |
$nouveauCheminHarmonise = self::harmoniserChemin($nouveau_chemin);
|
- |
|
| 398 |
|
- |
|
| 399 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
- |
|
| 400 |
$ancienCheminP = Cel::db()->proteger($ancienCheminHarmonise);
|
- |
|
| 401 |
$nouveauCheminP = Cel::db()->proteger($nouveauCheminHarmonise);
|
- |
|
| 402 |
$conditionCheminP = Cel::db()->proteger($ancienCheminHarmonise.'%');
|
- |
|
| 403 |
|
- |
|
| 404 |
$requete = "UPDATE {$this->table_mots_cles} ".
|
- |
|
| 405 |
"SET chemin = REPLACE(chemin, $ancienCheminP, $nouveauCheminP) ".
|
- |
|
| 406 |
"WHERE chemin LIKE $conditionCheminP ".
|
- |
|
| 407 |
"AND id_utilisateur = $idUtilisateurP ".
|
219 |
$suppression_liaison = ($suppression_liaison !== false);
|
| 408 |
' -- '.__FILE__.':'.__LINE__;
|
220 |
|
| 409 |
|
221 |
return $suppression_liaison;
|
| 410 |
return Cel::db()->executer($requete);
|
222 |
}
|
| 411 |
}
|
223 |
|
| 412 |
|
224 |
|
| 413 |
public function supprimerChemin($chemin, $id_utilisateur) {
|
225 |
public function supprimerChemin($chemin, $user_id) {
|
| 414 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
226 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| Line 415... |
Line 227... |
| 415 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
227 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
| 416 |
// TODO : triggers pour les tables liées ?
|
228 |
// TODO : triggers pour les tables liées ?
|
| Line 417... |
Line 229... |
| 417 |
$requete = "DELETE FROM {$this->$table_mots_cles} ".
|
229 |
$requete = "DELETE FROM {$this->$table_mots_cles} ".
|
| 418 |
"WHERE chemin LIKE $cheminP ".
|
230 |
"WHERE path LIKE $cheminP ".
|
| 419 |
"AND id_utilisateur = $idUtilisateurP ".
|
231 |
"AND user_id = $idUtilisateurP ".
|
| 420 |
' -- '.__FILE__.':'.__LINE__;
|
232 |
' -- '.__FILE__.':'.__LINE__;
|
| 421 |
|
233 |
|
| 422 |
return Cel::db()->executer($requete);
|
234 |
return Cel::db()->executer($requete);
|
| 423 |
}
|
235 |
}
|
| 424 |
|
236 |
|
| Line 425... |
Line 237... |
| 425 |
/**
|
237 |
/**
|
| 426 |
* suppression des associations du mots clé aux images ou obs, mais aussi des associations de ses enfants
|
238 |
* suppression des associations du mots clé aux images ou obs, mais aussi des associations de ses enfants
|
| 427 |
* (car ceux-ci seront supprimés aussi dans le processus)
|
239 |
* (car ceux-ci seront supprimés aussi dans le processus)
|
| 428 |
* même s'il n'a pas d'enfants, le tableau contient au moins l'id du mot clé lui même
|
240 |
* même s'il n'a pas d'enfants, le tableau contient au moins l'id du mot clé lui même
|
| 429 |
*/
|
241 |
*/
|
| 430 |
public function supprimerMotCleParId($id_mot_cle, $id_utilisateur) {
|
242 |
public function supprimerMotCleParId($id_mot_cle, $user_id) {
|
| Line 431... |
Line 243... |
| 431 |
//TODO: simplifier cette fonction
|
243 |
//TODO: simplifier cette fonction
|
| 432 |
$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle);
|
244 |
$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($user_id, $id_mot_cle);
|
| Line 433... |
Line 245... |
| 433 |
|
245 |
|
| 434 |
// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
|
246 |
// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
|
| 435 |
// régénérer les index texte de mots clés sur les éléments liés)
|
247 |
// régénérer les index texte de mots clés sur les éléments liés)
|
| Line 436... |
Line 248... |
| 436 |
$ids_a_delier = array();
|
248 |
$ids_a_delier = array();
|
| 437 |
foreach ($ids_mot_cle_et_enfants as $id) {
|
249 |
foreach ($ids_mot_cle_et_enfants as $id) {
|
| Line 438... |
Line 250... |
| 438 |
$ids_a_delier[] = $id['id_mot_cle'];
|
250 |
$ids_a_delier[] = $id['id_mot_cle'];
|
| 439 |
}
|
251 |
}
|
| Line 440... |
Line 252... |
| 440 |
|
252 |
|
| 441 |
$ids_elements_lies = $this->obtenirIdElementsLiesPourIds($ids_a_delier);
|
253 |
$ids_elements_lies = $this->obtenirIdElementsLiesPourIds($ids_a_delier);
|
| 442 |
$suppression_liaison = $this->supprimerToutesLiaisonsIdsMotsCles($ids_a_delier, $id_utilisateur);
|
254 |
$suppression_liaison = $this->supprimerToutesLiaisonsIdsMotsCles($ids_a_delier, $user_id);
|
| 443 |
|
255 |
|
| 444 |
foreach ($ids_elements_lies as $id_element_lie) {
|
256 |
foreach ($ids_elements_lies as $id_element_lie) {
|
| 445 |
self::regenererIndexTexteMotCle($id_element_lie['id_element_lie'], $this->mode);
|
257 |
self::regenererIndexTexteMotCle($id_element_lie['id_element_lie'], $this->mode);
|
| 446 |
}
|
258 |
}
|
| Line 447... |
Line 259... |
| 447 |
|
259 |
|
| 448 |
// suppression du mot clé proprement dit ainsi que de ses enfants
|
260 |
// suppression du mot clé proprement dit ainsi que de ses enfants
|
| 449 |
$suppression = $this->supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur);
|
261 |
$suppression = $this->supprimerMotCleEtEnfantsParId($id_mot_cle, $user_id);
|
| 450 |
|
262 |
|
| 451 |
return $suppression && $suppression_liaison;
|
263 |
return $suppression && $suppression_liaison;
|
| 452 |
}
|
264 |
}
|
| 453 |
|
265 |
|
| Line 454... |
Line 266... |
| 454 |
public function supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur) {
|
266 |
public function supprimerMotCleEtEnfantsParId($id_mot_cle, $user_id) {
|
| 455 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
267 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 456 |
$requete = 'SELECT chemin '.
|
268 |
$requete = 'SELECT path '.
|
| 457 |
"FROM {$this->table_mots_cles} ".
|
269 |
"FROM {$this->table_mots_cles} ".
|
| Line 458... |
Line 270... |
| 458 |
"WHERE id_mot_cle = $idMotCleP ".
|
270 |
"WHERE id = $idMotCleP ".
|
| 459 |
' -- '.__FILE__.':'.__LINE__;
|
271 |
' -- '.__FILE__.':'.__LINE__;
|
| Line 460... |
Line 272... |
| 460 |
$chemin = Cel::db()->requeter($requete);
|
272 |
$chemin = Cel::db()->requeter($requete);
|
| Line 461... |
Line 273... |
| 461 |
|
273 |
|
| Line 462... |
Line 274... |
| 462 |
$suppression = true;
|
274 |
$suppression = true;
|
| 463 |
// vérification pour empecher la suppression accidentelle de tout l'arbre,
|
275 |
// vérification pour empecher la suppression accidentelle de tout l'arbre,
|
| 464 |
// cas qui ne devrait jamais arriver normalement
|
276 |
// cas qui ne devrait jamais arriver normalement
|
| 465 |
if (!empty($chemin) && $chemin != '/') {
|
277 |
if (!empty($chemin) && $chemin != '/') {
|
| 466 |
$chemin = $chemin[0]['chemin'];
|
278 |
$chemin = $chemin[0]['chemin'];
|
| 467 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
279 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
| 468 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
280 |
$idUtilisateurP = Cel::db()->proteger($user_id);
|
| Line 469... |
Line 281... |
| 469 |
|
281 |
|
| 470 |
$requete = "DELETE FROM {$this->table_mots_cles} ".
|
282 |
$requete = "DELETE FROM {$this->table_mots_cles} ".
|
| 471 |
"WHERE chemin LIKE $cheminP ".
|
283 |
"WHERE path LIKE $cheminP ".
|
| 472 |
"AND id_utilisateur = $idUtilisateurP ".
|
284 |
"AND user_id = $idUtilisateurP ".
|
| 473 |
' -- '.__FILE__.':'.__LINE__;;
|
285 |
' -- '.__FILE__.':'.__LINE__;;
|
| Line 474... |
Line 286... |
| 474 |
|
286 |
|
| 475 |
$suppression = Cel::db()->executer($requete);
|
287 |
$suppression = Cel::db()->executer($requete);
|
| 476 |
}
|
288 |
}
|
| Line 477... |
Line -... |
| 477 |
|
- |
|
| 478 |
return ($suppression !== false);
|
- |
|
| 479 |
|
- |
|
| 480 |
}
|
- |
|
| 481 |
|
- |
|
| 482 |
public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
|
- |
|
| 483 |
$motsClesP = array();
|
- |
|
| 484 |
foreach ($mots_cles as $mot_cle) {
|
- |
|
| 485 |
$motsClesP[] = Cel::db()->proteger(self::simplifier($mot_cle));
|
- |
|
| 486 |
}
|
- |
|
| 487 |
$listeMotsClesP = implode(',', $motsClesP);
|
- |
|
| 488 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
- |
|
| 489 |
|
- |
|
| 490 |
$requete = 'SELECT id_mot_cle, mot_cle '.
|
- |
|
| 491 |
"FROM {$this->table_mots_cles} ".
|
- |
|
| Line 492... |
Line -... |
| 492 |
"WHERE mot_cle IN ($listeMotsClesP) ".
|
- |
|
| 493 |
"AND id_utilisateur = $idUtilisateurP ".
|
- |
|
| 494 |
' -- '.__FILE__.':'.__LINE__;
|
- |
|
| 495 |
|
- |
|
| Line 496... |
Line 289... |
| 496 |
$resultat = Cel::db()->executerRequete($requete);
|
289 |
|
| 497 |
return $resultat;
|
290 |
return ($suppression !== false);
|
| 498 |
}
|
291 |
|
| 499 |
|
292 |
}
|
| 500 |
public function obtenirIdElementsLiesPourChemins($chemins, $id_utilisateur) {
|
293 |
|
| Line 501... |
Line 294... |
| 501 |
foreach ($chemins as &$chemin) {
|
294 |
public function obtenirIdsMotClesPourMotsCles($mots_cles, $user_id) {
|
| 502 |
$chemin = Cel::db()->proteger(self::harmoniserChemin($chemin));
|
295 |
$motsClesP = array();
|
| 503 |
}
|
296 |
foreach ($mots_cles as $mot_cle) {
|
| 504 |
$listeChemins = implode(',', $chemin);
|
297 |
$motsClesP[] = Cel::db()->proteger(self::simplifier($mot_cle));
|
| Line 505... |
Line 298... |
| 505 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
298 |
}
|
| 506 |
|
299 |
$listeMotsClesP = implode(',', $motsClesP);
|
| Line 542... |
Line 335... |
| 542 |
* pas d'état (mais il faudrait passer $mode à toutes les fonctions)
|
335 |
* pas d'état (mais il faudrait passer $mode à toutes les fonctions)
|
| 543 |
*
|
336 |
*
|
| 544 |
*/
|
337 |
*/
|
| 545 |
public static function getTablesMotsClesEtLiaisons($mode) {
|
338 |
public static function getTablesMotsClesEtLiaisons($mode) {
|
| 546 |
if ($mode == 'obs') {
|
339 |
if ($mode == 'obs') {
|
| 547 |
$table_liaison = 'cel_mots_cles_obs_liaison';
|
340 |
$table_liaison = 'occurrence_user_occurrence_tag';
|
| 548 |
$table_mots_cles = 'cel_arbre_mots_cles_obs';
|
341 |
$table_mots_cles = 'user_occurrence_tag';
|
| - |
|
342 |
$id_mot_cle = "user_occurrence_tag_id";
|
| - |
|
343 |
$id_element_lie = "occurrence_id";
|
| 549 |
} else {
|
344 |
} else {
|
| 550 |
$table_liaison = 'cel_mots_cles_images_liaison';
|
345 |
$table_liaison = 'photo_tag_photo';
|
| 551 |
$table_mots_cles = 'cel_arbre_mots_cles_images';
|
346 |
$table_mots_cles = 'photo_tag';
|
| - |
|
347 |
$id_mot_cle = "photo_tag_id";
|
| - |
|
348 |
$id_element_lie = "photo_id";
|
| 552 |
}
|
349 |
}
|
| 553 |
return array($table_liaison, $table_mots_cles);
|
350 |
return array($table_liaison, $table_mots_cles, $id_mot_cle, $id_element_lie);
|
| - |
|
351 |
}
|
| - |
|
352 |
/**
|
| - |
|
353 |
* Renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf.
|
| - |
|
354 |
*/
|
| - |
|
355 |
public static function obtenirTemplateRequeteMotsClesIds($mode) {
|
| - |
|
356 |
list($table_liaison, $table_mots_cles, $id_mot_cle, $id_element_lie) = self::getTablesMotsClesEtLiaisons($mode);
|
| - |
|
357 |
$requeteTpl = "SELECT $id_element_lie FROM $table_liaison WHERE $id_mot_cle IN (%s) ";
|
| - |
|
358 |
return $requeteTpl;
|
| 554 |
}
|
359 |
}
|
| 555 |
|
- |
|
| 556 |
/**
|
360 |
/**
|
| 557 |
* Régénère le champ "mots_cles_texte" l'entité liée (image ou obs)
|
361 |
* Régénère le champ "mots_cles_texte" l'entité liée (image ou obs)
|
| 558 |
* et met à jour sa date de modification
|
362 |
* et met à jour sa date de modification
|
| 559 |
*/
|
363 |
*/
|
| 560 |
public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
|
364 |
public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
|
| Line 573... |
Line 377... |
| 573 |
}
|
377 |
}
|
| Line 574... |
Line 378... |
| 574 |
|
378 |
|
| 575 |
private static function getNomTablesEtChampsElementsLies($mode) {
|
379 |
private static function getNomTablesEtChampsElementsLies($mode) {
|
| 576 |
$tables = array();
|
380 |
$tables = array();
|
| 577 |
if ($mode == 'obs') {
|
381 |
if ($mode == 'obs') {
|
| 578 |
$tables = array('cel_obs', 'id_observation');
|
382 |
$tables = array('occurrence', 'id');
|
| 579 |
} else {
|
383 |
} else {
|
| 580 |
$tables = array('cel_images', 'id_image');
|
384 |
$tables = array('photo', 'id');
|
| 581 |
}
|
385 |
}
|
| 582 |
return $tables;
|
386 |
return $tables;
|
| Line 583... |
Line 387... |
| 583 |
}
|
387 |
}
|
| 584 |
|
388 |
|
| 585 |
/**
|
389 |
/**
|
| 586 |
* Renvoie un template de requete pour selectionner la concatenation de mots clé
|
390 |
* Renvoie un template de requete pour selectionner la concatenation de mots clé
|
| 587 |
* pour un element donné (utilisable avec sprintf)
|
391 |
* pour un element donné (utilisable avec sprintf)
|
| 588 |
*/
|
392 |
*/
|
| Line 589... |
Line 393... |
| 589 |
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
|
393 |
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
|
| 590 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
394 |
list($table_liaison, $table_mots_cles, $id_mot_cle, $id_element_lie) = self::getTablesMotsClesEtLiaisons($mode);
|
| 591 |
|
395 |
|
| 592 |
$requeteTpl = 'SELECT GROUP_CONCAT(mot_cle) '.
|
396 |
$requeteTpl = 'SELECT GROUP_CONCAT(name) '.
|
| Line 593... |
Line 397... |
| 593 |
"FROM $table_mots_cles AS cm ".
|
397 |
"FROM $table_mots_cles AS cm ".
|
| 594 |
"INNER JOIN $table_liaison AS cml ON cml.id_mot_cle = cm.id_mot_cle ".
|
398 |
"INNER JOIN $table_liaison AS cml ON cml.$id_mot_cle = cm.$id_mot_cle ".
|
| 595 |
'AND cml.id_element_lie = %s ';
|
- |
|
| 596 |
|
- |
|
| 597 |
return $requeteTpl;
|
- |
|
| 598 |
}
|
- |
|
| 599 |
/**
|
- |
|
| 600 |
* Renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf.
|
- |
|
| 601 |
*/
|
- |
|
| 602 |
public static function obtenirTemplateRequeteMotsClesIds($mode) {
|
399 |
"AND cml.$id_element_lie = %s ";
|
| Line 603... |
Line 400... |
| 603 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
400 |
|
| Line 604... |
Line 401... |
| 604 |
$requeteTpl = "SELECT id_element_lie FROM $table_liaison WHERE id_mot_cle IN (%s) ";
|
401 |
return $requeteTpl;
|
| 605 |
return $requeteTpl;
|
402 |
}
|
| 606 |
}
|
403 |
|
| 607 |
|
404 |
|
| 608 |
// Méthodes utilitaires
|
405 |
// Méthodes utilitaires
|
| 609 |
|
406 |
|
| 610 |
/**
|
407 |
/**
|
| 611 |
* La profondeur d'un noeud est déterminée par le nombre de slashs
|
408 |
* La profondeur d'un noeud est déterminée par le nombre de slashs
|
| Line 612... |
Line 409... |
| 612 |
* qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
|
409 |
* qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
|
| 613 |
*/
|
410 |
*/
|
| 614 |
static public function comparerProfNoeuds($a, $b) {
|
411 |
static public function comparerProfNoeuds($a, $b) {
|
| 615 |
$nb_slashs_a = substr_count($a['chemin'], '/');
|
412 |
$nb_slashs_a = substr_count($a['path'], '/');
|
| 616 |
$nb_slashs_b = substr_count($a['chemin'], '/');
|
413 |
$nb_slashs_b = substr_count($a['path'], '/');
|
| 617 |
$cmp = 0;
|
414 |
$cmp = 0;
|
| 618 |
|
415 |
|
| Line 619... |
Line 416... |
| 619 |
if ($nb_slashs_a == $nb_slashs_b) {
|
416 |
if ($nb_slashs_a == $nb_slashs_b) {
|
| Line 678... |
Line 475... |
| 678 |
return $needle === '' || substr($haystack, -strlen($needle)) === $needle;
|
475 |
return $needle === '' || substr($haystack, -strlen($needle)) === $needle;
|
| 679 |
}
|
476 |
}
|
| Line 680... |
Line 477... |
| 680 |
|
477 |
|
| 681 |
/**
|
478 |
/**
|
| 682 |
* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
|
479 |
* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
|
| 683 |
* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie
|
480 |
* Dans ce cas là, le widget remplit la case user_id par le mail indiqué lors de la saisie
|
| 684 |
* @param string $mail_utilisateur
|
481 |
* @param string $mail_utilisateur
|
| 685 |
* @param string $id_utilisateur
|
482 |
* @param string $user_id
|
| 686 |
*/
|
483 |
*/
|
| 687 |
public static function migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur) {
|
484 |
public static function migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur) {
|
| 688 |
return self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'obs') &&
|
485 |
return self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'obs') &&
|
| 689 |
self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'images');
|
486 |
self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'images');
|
| Line 690... |
Line 487... |
| 690 |
}
|
487 |
}
|
| 691 |
|
488 |
|
| 692 |
/**
|
489 |
/**
|
| 693 |
* ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
|
490 |
* ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
|
| 694 |
* avec l'identifiant $id_utilisateur ce qui est normalement le cas
|
491 |
* avec l'identifiant $user_id ce qui est normalement le cas
|
| 695 |
* ça devrait normalement marcher correctement même s'il en a déjà mais ça n'a pas été testé
|
492 |
* ça devrait normalement marcher correctement même s'il en a déjà mais ça n'a pas été testé
|
| 696 |
*/
|
493 |
*/
|
| 697 |
private static function migrerLiaisonEtMotsCles($email_utilisateur, $infos_utilisateur, $mode) {
|
494 |
private static function migrerLiaisonEtMotsCles($email_utilisateur, $infos_utilisateur, $mode) {
|
| 698 |
list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
495 |
list($table_liaisons, $table_mots_cles, $id_mot_cle, $id_element_lie) = self::getTablesMotsClesEtLiaisons($mode);
|
| Line 699... |
Line 496... |
| 699 |
$idUtilisateurP = Cel::db()->proteger($infos_utilisateur['id_utilisateur']);
|
496 |
$idUtilisateurP = Cel::db()->proteger($infos_utilisateur['user_id']);
|
| 700 |
$emailUtilisateurP = Cel::db()->proteger($email_utilisateur);
|
497 |
$emailUtilisateurP = Cel::db()->proteger($email_utilisateur);
|
| 701 |
|
498 |
|
| Line 702... |
Line 499... |
| 702 |
$requete_migration_mc = "UPDATE {$table_mots_cles} ".
|
499 |
$requete_migration_mc = "UPDATE {$table_mots_cles} ".
|
| 703 |
"SET id_utilisateur = $idUtilisateurP ".
|
500 |
"SET user_id = $idUtilisateurP ".
|
| 704 |
"WHERE id_utilisateur = $emailUtilisateurP ";
|
501 |
"WHERE user_id = $emailUtilisateurP ";
|
| 705 |
|
502 |
|