| Line 8... |
Line 8... |
| 8 |
* Librairie de liaison d'images et d'observation à des mots clés en utilisant la méthode
|
8 |
* Librairie de liaison d'images et d'observation à des mots clés en utilisant la méthode
|
| 9 |
* path enumeration
|
9 |
* path enumeration
|
| 10 |
*/
|
10 |
*/
|
| Line 11... |
Line 11... |
| 11 |
|
11 |
|
| 12 |
class GestionMotsClesChemin {
|
12 |
class GestionMotsClesChemin {
|
| 13 |
|
13 |
|
| 14 |
private $config;
|
14 |
private $config;
|
| 15 |
private $mode;
|
15 |
private $mode;
|
| 16 |
|
16 |
|
| 17 |
private $table_liaison;
|
17 |
private $table_liaison;
|
| 18 |
private $table_mots_cles;
|
18 |
private $table_mots_cles;
|
| 19 |
|
19 |
|
| 20 |
//TODO: trigger pour les tables liaisons
|
20 |
//TODO: trigger pour les tables liaisons
|
| 21 |
|
21 |
|
| 22 |
public function GestionMotsClesChemin($config, $mode = 'obs') {
|
22 |
public function GestionMotsClesChemin($config, $mode = 'obs') {
|
| 23 |
$this->config = $config;
|
23 |
$this->config = $config;
|
| 24 |
//TODO: switch suivant mode
|
24 |
//TODO: switch suivant mode
|
| 25 |
$this->mode = $mode;
|
25 |
$this->mode = $mode;
|
| 26 |
|
26 |
|
| 27 |
list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
27 |
list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
| 28 |
}
|
28 |
}
|
| 29 |
|
29 |
|
| - |
|
30 |
public function obtenirArbre($id_utilisateur, $chemin = '/') {
|
| - |
|
31 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
32 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
| - |
|
33 |
|
| 30 |
public function obtenirArbre($id_utilisateur, $chemin = "/") {
|
34 |
$requete = 'SELECT * '.
|
| 31 |
$requete = "SELECT * FROM ".$this->table_mots_cles." ".
|
35 |
"FROM {$this->table_mots_cles} ".
|
| 32 |
"WHERE id_utilisateur = ".Cel::db()->proteger($id_utilisateur)." AND ".
|
36 |
"WHERE id_utilisateur = $idUtilisateurP ".
|
| 33 |
"chemin LIKE ".Cel::db()->proteger($chemin."%")." ".
|
37 |
"AND chemin LIKE $cheminP ".
|
| - |
|
38 |
'ORDER BY chemin '.
|
| 34 |
"ORDER BY chemin";
|
39 |
' -- '.__FILE__.':'.__LINE__;
|
| 35 |
|
40 |
|
| 36 |
$arbre = Cel::db()->requeter($requete.' -- '.__FILE__.':'.__LINE__);
|
41 |
$arbre = Cel::db()->requeter($requete);
|
| 37 |
usort($arbre, array('GestionMotsClesChemin', 'comparerProfNoeuds'));
|
- |
|
| 38 |
|
42 |
usort($arbre, array('GestionMotsClesChemin', 'comparerProfNoeuds'));
|
| 39 |
return $arbre;
|
43 |
return $arbre;
|
| 40 |
}
|
44 |
}
|
| 41 |
|
45 |
|
| - |
|
46 |
public function obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle) {
|
| - |
|
47 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 42 |
public function obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle) {
|
48 |
|
| 43 |
$requete = "SELECT id_mot_cle FROM ".$this->table_mots_cles." ".
|
49 |
$sousRequete = "SELECT chemin FROM {$this->table_mots_cles} WHERE id_mot_cle = $idMotCleP ";
|
| 44 |
"WHERE chemin LIKE CONCAT(".
|
50 |
$requete = 'SELECT id_mot_cle '.
|
| 45 |
"(SELECT chemin FROM ".$this->table_mots_cles." ".
|
51 |
"FROM {$this->table_mots_cles} ".
|
| 46 |
"WHERE id_mot_cle = ".Cel::db()->proteger($id_mot_cle)."), ".
|
52 |
"WHERE chemin LIKE CONCAT(($sousRequete), '%') ".
|
| 47 |
"'%')";
|
53 |
' -- '.__FILE__.':'.__LINE__;
|
| 48 |
|
54 |
|
| Line 49... |
Line 55... |
| 49 |
$ids_enfants = Cel::db()->executerRequete($requete.' -- '.__FILE__.':'.__LINE__);
|
55 |
$ids_enfants = Cel::db()->executerRequete($requete);
|
| 50 |
|
56 |
|
| 51 |
return $ids_enfants;
|
57 |
return $ids_enfants;
|
| 52 |
}
|
58 |
}
|
| 53 |
|
59 |
|
| 54 |
public function insererParCheminSiInexistant($mot_cle, $chemin_parent, $id_utilisateur) {
|
60 |
public function insererParCheminSiInexistant($mot_cle, $chemin_parent, $id_utilisateur) {
|
| 55 |
$chemin_mot_cle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
61 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
| - |
|
62 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
| - |
|
63 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
64 |
|
| - |
|
65 |
$requete = 'SELECT id_mot_cle '.
|
| 56 |
$requete_mot_cle_existe = "SELECT id_mot_cle FROM ".$this->table_mots_cles." ".
|
66 |
"FROM {$this->table_mots_cles} ".
|
| - |
|
67 |
"WHERE chemin = $cheminMotCleP ".
|
| 57 |
"WHERE chemin = ".Cel::db()->proteger($chemin_mot_cle)." AND ".
|
68 |
"AND id_utilisateur = $idUtilisateurP ".
|
| 58 |
"id_utilisateur = ".Cel::db()->proteger($id_utilisateur);
|
69 |
' -- '.__FILE__.':'.__LINE__;
|
| Line 59... |
Line 70... |
| 59 |
|
70 |
|
| 60 |
$infos_mot_cle = Cel::db()->executerRequete($requete_mot_cle_existe.' -- '.__FILE__.':'.__LINE__);
|
71 |
$infosMotCle = Cel::db()->executerRequete($requete);
|
| 61 |
|
72 |
|
| 62 |
if(!empty($infos_mot_cle)) {
|
73 |
if (!empty($infosMotCle)) {
|
| 63 |
$id_mot_cle = $infos_mot_cle[0]['id_mot_cle'];
|
74 |
$idMotCle = $infosMotCle[0]['id_mot_cle'];
|
| 64 |
} else {
|
75 |
} else {
|
| 65 |
$id_mot_cle = $this->insererParChemin($mot_cle, $chemin_parent, $id_utilisateur);
|
76 |
$idMotCle = $this->insererParChemin($mot_cle, $chemin_parent, $id_utilisateur);
|
| 66 |
}
|
77 |
}
|
| 67 |
return $id_mot_cle;
|
78 |
return $idMotCle;
|
| 68 |
}
|
79 |
}
|
| 69 |
|
80 |
|
| 70 |
public function insererParChemin($mot_cle, $chemin_parent, $id_utilisateur) {
|
81 |
public function insererParChemin($mot_cle, $chemin_parent, $id_utilisateur) {
|
| 71 |
$chemin_mot_cle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
82 |
$cheminMotCle = self::getCheminHarmonise($chemin_parent, $mot_cle);
|
| - |
|
83 |
$cheminMotCleP = Cel::db()->proteger($cheminMotCle);
|
| 72 |
$requete = "INSERT INTO ".$this->table_mots_cles." (chemin, id_utilisateur, mot_cle) ".
|
84 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| 73 |
"VALUES (".
|
85 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| - |
|
86 |
|
| 74 |
Cel::db()->proteger($chemin_mot_cle).", ".
|
87 |
$requete = "INSERT INTO {$this->table_mots_cles} ".
|
| 75 |
Cel::db()->proteger($id_utilisateur).", ".
|
88 |
'(chemin, id_utilisateur, mot_cle) '.
|
| 76 |
Cel::db()->proteger($mot_cle)." ".
|
89 |
"VALUES ($cheminMotCleP, $idUtilisateurP, $motCleP ) ".
|
| 77 |
") ";
|
90 |
' -- '.__FILE__.':'.__LINE__;
|
| 78 |
|
91 |
|
| 79 |
$insertion = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
92 |
$insertion = Cel::db()->executer($requete);
|
| 80 |
$resultat = false;
|
93 |
$resultat = false;
|
| 81 |
if($insertion !== false) {
|
- |
|
| 82 |
$resultat = Cel::db()->obtenirDernierId();
|
94 |
if ($insertion !== false) {
|
| 83 |
}
|
95 |
$resultat = Cel::db()->obtenirDernierId();
|
| 84 |
|
- |
|
| 85 |
return $resultat;
|
- |
|
| 86 |
}
|
- |
|
| 87 |
|
- |
|
| 88 |
public function insererParIdParent($mot_cle, $id_parent, $id_utilisateur) {
|
- |
|
| 89 |
$mot_cle_simp = self::simplifier($mot_cle);
|
- |
|
| 90 |
|
- |
|
| 91 |
if($id_parent != "") {
|
- |
|
| 92 |
$sous_requete_chemin = "(SELECT chemin FROM ".$this->table_mots_cles." ctp ".
|
- |
|
| 93 |
"WHERE ctp.id_mot_cle = ".Cel::db()->proteger($id_parent).")";
|
- |
|
| 94 |
} else {
|
- |
|
| 95 |
$sous_requete_chemin = Cel::db()->proteger("/");
|
- |
|
| 96 |
}
|
- |
|
| 97 |
|
- |
|
| 98 |
$requete = "INSERT INTO ".$this->table_mots_cles."(chemin, id_utilisateur, mot_cle) ".
|
- |
|
| 99 |
"VALUES (".
|
- |
|
| 100 |
"CONCAT(".$sous_requete_chemin.",".Cel::db()->proteger($mot_cle_simp).",'/'), ".
|
- |
|
| Line -... |
Line 96... |
| - |
|
96 |
}
|
| - |
|
97 |
return $resultat;
|
| - |
|
98 |
}
|
| 101 |
Cel::db()->proteger($id_utilisateur).", ".
|
99 |
|
| - |
|
100 |
public function insererParIdParent($mot_cle, $id_parent, $id_utilisateur) {
|
| - |
|
101 |
$motCleSimple = self::simplifier($mot_cle);
|
| - |
|
102 |
$motCleSimpleP = Cel::db()->proteger($motCleSimple);
|
| - |
|
103 |
$idParentP = Cel::db()->proteger($id_parent);
|
| - |
|
104 |
$racineP = Cel::db()->proteger('/');
|
| - |
|
105 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
106 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| - |
|
107 |
|
| - |
|
108 |
$sousRequete = $racineP;
|
| - |
|
109 |
if ($id_parent != '') {
|
| - |
|
110 |
$sousRequete = '(SELECT chemin '.
|
| - |
|
111 |
"FROM {$this->table_mots_cles} AS ctp ".
|
| - |
|
112 |
"WHERE ctp.id_mot_cle = $idParentP) ";
|
| - |
|
113 |
}
|
| 102 |
Cel::db()->proteger($mot_cle)." ".
|
114 |
|
| - |
|
115 |
$requete = "INSERT INTO {$this->table_mots_cles} (chemin, id_utilisateur, mot_cle) ".
|
| 103 |
")";
|
116 |
"VALUES (CONCAT($sousRequete, $motCleSimpleP, '/'), $idUtilisateurP, $motCleP ) ".
|
| 104 |
|
117 |
' -- '.__FILE__.':'.__LINE__;
|
| 105 |
$insertion = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
118 |
|
| 106 |
|
- |
|
| 107 |
if($insertion !== false) {
|
119 |
$insertion = Cel::db()->executer($requete);
|
| 108 |
$resultat = Cel::db()->obtenirDernierId();
|
120 |
if ($insertion !== false) {
|
| 109 |
}
|
121 |
$resultat = Cel::db()->obtenirDernierId();
|
| 110 |
|
122 |
}
|
| 111 |
return $resultat;
|
- |
|
| 112 |
}
|
- |
|
| 113 |
|
- |
|
| 114 |
public function lierParId($id_mot_cle, $id_element_lie) {
|
123 |
return $resultat;
|
| 115 |
|
124 |
}
|
| 116 |
$requete = "INSERT INTO ".$this->table_liaison." (id_element_lie, id_mot_cle) ".
|
- |
|
| 117 |
"VALUES (".
|
- |
|
| 118 |
Cel::db()->proteger($id_element_lie).", ".
|
- |
|
| 119 |
Cel::db()->proteger($id_mot_cle)." ".
|
- |
|
| Line -... |
Line 125... |
| - |
|
125 |
|
| - |
|
126 |
public function lierParId($id_mot_cle, $id_element_lie) {
|
| - |
|
127 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| - |
|
128 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| - |
|
129 |
|
| - |
|
130 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
| 120 |
") ".
|
131 |
"VALUES ($idElementLieP, $idMotCleP) ".
|
| 121 |
"ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie ";
|
132 |
'ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie '.
|
| 122 |
|
133 |
' -- '.__FILE__.':'.__LINE__;
|
| 123 |
$liaison = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
134 |
|
| - |
|
135 |
$liaison = Cel::db()->executer($requete);
|
| - |
|
136 |
return $liaison;
|
| - |
|
137 |
}
|
| - |
|
138 |
|
| - |
|
139 |
public function lierParChemin($chemin, $id_element_lie, $id_utilisateur) {
|
| - |
|
140 |
$cheminP = Cel::db()->proteger(self::harmoniserChemin($chemin));
|
| - |
|
141 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| - |
|
142 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
143 |
|
| - |
|
144 |
$sousRequete = '(SELECT id_mot_cle '.
|
| - |
|
145 |
"FROM {$this->table_mots_cles} ".
|
| - |
|
146 |
"WHERE chemin = $cheminP ".
|
| - |
|
147 |
"AND id_utilisateur = $idUtilisateurP ".
|
| Line 124... |
Line -... |
| 124 |
|
- |
|
| 125 |
return $liaison;
|
- |
|
| 126 |
}
|
- |
|
| 127 |
|
- |
|
| 128 |
public function lierParChemin($chemin, $id_element_lie, $id_utilisateur) {
|
- |
|
| 129 |
|
- |
|
| 130 |
$sous_requete_chemin = '(SELECT id_mot_cle FROM '.$this->table_mots_cles.' '.
|
- |
|
| 131 |
'WHERE chemin = '.Cel::db()->proteger(self::harmoniserChemin($chemin)).' '.
|
- |
|
| 132 |
'AND id_utilisateur = '.Cel::db()->proteger($id_utilisateur).' '.
|
- |
|
| 133 |
')';
|
- |
|
| 134 |
|
- |
|
| 135 |
$requete = "INSERT INTO ".$this->table_liaison." (id_element_lie, id_mot_cle) ".
|
- |
|
| 136 |
"VALUES (".
|
148 |
')';
|
| 137 |
Cel::db()->proteger($id_element_lie).", ".
|
- |
|
| 138 |
$sous_requete_chemin." ".
|
149 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
| 139 |
") ".
|
150 |
"VALUES ($idElementLieP, $sousRequete) ".
|
| 140 |
"ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie ";
|
151 |
'ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie '.
|
| 141 |
|
152 |
' -- '.__FILE__.':'.__LINE__;
|
| 142 |
$liaison = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
- |
|
| - |
|
153 |
|
| 143 |
|
154 |
$liaison = Cel::db()->executer($requete);
|
| - |
|
155 |
return $liaison;
|
| 144 |
return $liaison;
|
156 |
}
|
| 145 |
}
|
- |
|
| 146 |
|
157 |
|
| 147 |
public function lierParTableaux($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
|
158 |
public function lierParTableaux($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
|
| 148 |
|
- |
|
| 149 |
foreach($ids_mots_cles as $id_mot_cle) {
|
159 |
$combinaisons = array();
|
| 150 |
foreach($ids_elements_lies as $id_element_lie) {
|
160 |
foreach ($ids_mots_cles as $id_mot_cle) {
|
| 151 |
$combinaisons[] = '('.
|
161 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| - |
|
162 |
foreach ($ids_elements_lies as $id_element_lie) {
|
| 152 |
Cel::db()->proteger($id_element_lie).', '.
|
163 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| 153 |
Cel::db()->proteger($id_mot_cle).
|
164 |
$combinaisons[] = "($idElementLieP, $idMotCleP)";
|
| 154 |
')';
|
- |
|
| 155 |
}
|
165 |
}
|
| - |
|
166 |
}
|
| 156 |
}
|
167 |
|
| 157 |
|
168 |
$valeursGroupees = implode(', ', $combinaisons);
|
| 158 |
$requete = "INSERT INTO ".$this->table_liaison." (id_element_lie, id_mot_cle) ".
|
169 |
$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
|
| 159 |
"VALUES ".
|
170 |
"VALUES $valeursGroupees ".
|
| 160 |
implode(',', $combinaisons).' '.
|
171 |
"ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie ".
|
| 161 |
"ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie ";
|
172 |
' -- '.__FILE__.':'.__LINE__;
|
| 162 |
$liaison = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
- |
|
| 163 |
|
- |
|
| 164 |
return $liaison;
|
173 |
$liaison = Cel::db()->executer($requete);
|
| 165 |
}
|
174 |
|
| - |
|
175 |
return $liaison;
|
| 166 |
|
176 |
}
|
| 167 |
public function supprimerLiaisonsMotsCles($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
|
- |
|
| 168 |
|
177 |
|
| 169 |
$requete = 'DELETE FROM '.$this->table_liaison.' WHERE ';
|
178 |
public function supprimerLiaisonsMotsCles($ids_mots_cles, $ids_elements_lies, $id_utilisateur) {
|
| 170 |
$combinaisons = array();
|
- |
|
| 171 |
foreach($ids_mots_cles as $id_mot_cle) {
|
179 |
$combinaisons = array();
|
| 172 |
foreach($ids_elements_lies as $id_element_lie) {
|
180 |
foreach ($ids_mots_cles as $id_mot_cle) {
|
| 173 |
$combinaisons[] = '('.
|
181 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 174 |
'id_element_lie = '.Cel::db()->proteger($id_element_lie).' AND '.
|
- |
|
| Line -... |
Line 182... |
| - |
|
182 |
foreach ($ids_elements_lies as $id_element_lie) {
|
| - |
|
183 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| - |
|
184 |
$combinaisons[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
|
| - |
|
185 |
}
|
| - |
|
186 |
}
|
| 175 |
'id_mot_cle = '.Cel::db()->proteger($id_mot_cle).
|
187 |
$clauseWhere = implode(' OR ', $combinaisons);
|
| 176 |
')';
|
188 |
|
| 177 |
}
|
189 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 178 |
}
|
190 |
"WHERE $clauseWhere ".
|
| 179 |
$requete .= implode(' OR ', $combinaisons);
|
- |
|
| 180 |
$suppression = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
191 |
' -- '.__FILE__.':'.__LINE__;
|
| 181 |
|
- |
|
| 182 |
return $suppression;
|
- |
|
| 183 |
}
|
192 |
|
| Line -... |
Line 193... |
| - |
|
193 |
$suppression = Cel::db()->executer($requete);
|
| - |
|
194 |
return $suppression;
|
| - |
|
195 |
}
|
| - |
|
196 |
|
| 184 |
|
197 |
public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
|
| 185 |
public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
|
198 |
$idsElementsLiesP = Cel::db()->protegerTableau($ids_elements_lies);
|
| 186 |
foreach($ids_elements_lies as &$id_element_lie) {
|
199 |
$listeIds = implode(',', $idsElementsLiesP);
|
| 187 |
$id_element_lie = Cel::db()->proteger($id_element_lie);
|
200 |
|
| 188 |
}
|
201 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 189 |
$requete = 'DELETE FROM '.$this->table_liaison.' '.
|
202 |
"WHERE id_element_lie IN ($listeIds) ".
|
| 190 |
'WHERE id_element_lie IN ('.implode(',', $ids_elements_lies).')';
|
- |
|
| 191 |
|
- |
|
| 192 |
$suppression = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
203 |
' -- '.__FILE__.':'.__LINE__;
|
| 193 |
$suppression = ($suppression !== false);
|
204 |
|
| 194 |
return $suppression;
|
205 |
$suppression = Cel::db()->executer($requete);
|
| 195 |
}
|
- |
|
| 196 |
|
- |
|
| 197 |
public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
|
206 |
$suppression = ($suppression !== false) ? true : false;
|
| Line -... |
Line 207... |
| - |
|
207 |
return $suppression;
|
| - |
|
208 |
}
|
| - |
|
209 |
|
| - |
|
210 |
public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
|
| 198 |
|
211 |
$suppression = true;
|
| 199 |
if(!empty($ids_mots_cles)) {
|
212 |
if (!empty($ids_mots_cles)) {
|
| 200 |
$ids_mots_cles_p = array();
|
- |
|
| 201 |
foreach($ids_mots_cles as $id_mot_cle) {
|
- |
|
| 202 |
$id_mot_cle = Cel::db()->proteger($id_mot_cle);
|
213 |
$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
|
| 203 |
}
|
214 |
$listeIds = implode(',', $idsMotsClesP);
|
| 204 |
$requete = 'DELETE FROM '.$this->table_liaison.' '.
|
215 |
|
| 205 |
'WHERE id_mot_cle IN ('.implode(',', $ids_mots_cles).') ';
|
216 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| - |
|
217 |
"WHERE id_mot_cle IN ($listeIds) ".
|
| - |
|
218 |
' -- '.__FILE__.':'.__LINE__;
|
| - |
|
219 |
|
| - |
|
220 |
$suppression = Cel::db()->executerRequeteSimple($requete);
|
| 206 |
|
221 |
$suppression = ($suppression !== false) ? true : false;
|
| 207 |
$suppression = Cel::db()->executerRequeteSimple($requete.' -- '.__FILE__.':'.__LINE__);
|
222 |
}
|
| 208 |
$suppression = ($suppression !== false);
|
223 |
return $suppression;
|
| 209 |
} else {
|
224 |
}
|
| - |
|
225 |
|
| - |
|
226 |
/**
|
| 210 |
$suppression = true;
|
227 |
* Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
|
| - |
|
228 |
*
|
| 211 |
}
|
229 |
*/
|
| 212 |
return $suppression;
|
230 |
public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
|
| 213 |
}
|
231 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| 214 |
|
232 |
$motCleP = Cel::db()->proteger($mot_cle);
|
| Line 215... |
Line 233... |
| 215 |
public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
|
233 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| 216 |
// supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés
|
234 |
|
| Line 217... |
Line 235... |
| 217 |
$requete = "DELETE FROM ".$this->table_liaison." ".
|
235 |
$sousRequete = "SELECT id_mot_cle FROM {$this->table_mots_cles} ".
|
| 218 |
"WHERE id_element_lie = ".Cel::db()->proteger($id_element_lie)." ".
|
236 |
"WHERE mot_cle = $motCleP ".
|
| 219 |
"AND id_mot_cle IN (".
|
237 |
"AND id_utilisateur = $idUtilisateurP ";
|
| 220 |
"SELECT id_mot_cle FROM ".$this->table_mots_cles." ".
|
238 |
$requete = "DELETE FROM {$this->table_liaison} ".
|
| 221 |
"WHERE mot_cle = ".Cel::db()->proteger($mot_cle)." ".
|
- |
|
| 222 |
"AND id_utilisateur = ".Cel::db()->proteger($id_utilisateur)." ".
|
239 |
"WHERE id_element_lie = $idElementLieP ".
|
| - |
|
240 |
"AND id_mot_cle IN ($sousRequete) ".
|
| - |
|
241 |
' -- '.__FILE__.':'.__LINE__;
|
| 223 |
")";
|
242 |
|
| 224 |
|
243 |
$suppression_liaison = Cel::db()->executerRequeteSimple($requete);
|
| - |
|
244 |
$suppression_liaison = ($suppression_liaison !== false);
|
| 225 |
$suppression_liaison = Cel::db()->executerRequeteSimple($requete.' -- '.__FILE__.':'.__LINE__);
|
245 |
|
| - |
|
246 |
return $suppression_liaison;
|
| 226 |
$suppression_liaison = ($suppression_liaison !== false);
|
247 |
}
|
| 227 |
|
248 |
|
| 228 |
return $suppression_liaison;
|
249 |
public function renommerMotCle($id_mot_cle, $nouveau_nom) {
|
| 229 |
}
|
250 |
$nouveauNomSimple = self::simplifier($nouveau_nom);
|
| 230 |
|
251 |
$nouveauNomSimpleP = Cel::db()->proteger($nouveauNomSimple);
|
| 231 |
public function renommerMotCle($id_mot_cle, $nouveau_nom) {
|
252 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 232 |
|
- |
|
| 233 |
$nouveau_nom = self::simplifier($nouveau_nom);
|
253 |
|
| 234 |
|
254 |
$requete = 'SELECT chemin, id_utilisateur '.
|
| 235 |
$requete_ancien_chemin = 'SELECT chemin, id_utilisateur FROM '.$this->table_mots_cles.' '.
|
255 |
"FROM {$this->table_mots_cles} ".
|
| 236 |
'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
|
256 |
"WHERE id_mot_cle = $idMotCleP ".
|
| 237 |
$res_ancien_chemin = Cel::db()->requeter($requete_ancien_chemin.' -- '.__FILE__.':'.__LINE__);
|
257 |
' -- '.__FILE__.':'.__LINE__;
|
| 238 |
|
258 |
$ancienCheminInfos = Cel::db()->requeter($requete);
|
| 239 |
$ancien_chemin = $res_ancien_chemin[0]['chemin'];
|
259 |
|
| 240 |
$id_utilisateur = $res_ancien_chemin[0]['id_utilisateur'];
|
260 |
$ancienChemin = $ancienCheminInfos[0]['chemin'];
|
| - |
|
261 |
$id_utilisateur = $ancienCheminInfos[0]['id_utilisateur'];
|
| 241 |
|
262 |
|
| 242 |
$tab_chemin = explode('/', $ancien_chemin);
|
263 |
$cheminDecompo = explode('/', $ancienChemin);
|
| 243 |
|
- |
|
| 244 |
// le dernier élément du tableau est vide (à cause du / terminal)
|
264 |
// le dernier élément du tableau est vide (à cause du / terminal)
|
| 245 |
// c'est également le cas pour le premier (à cause du / qui commence le chemin)
|
265 |
// c'est également le cas pour le premier (à cause du / qui commence le chemin)
|
| 246 |
$tab_chemin[count($tab_chemin) - 2] = $nouveau_nom;
|
266 |
$cheminDecompo[count($cheminDecompo) - 2] = $nouveauNomSimple;
|
| 247 |
$nouveau_chemin = implode('/', $tab_chemin);
|
267 |
$nouveauChemin = implode('/', $cheminDecompo);
|
| 248 |
|
268 |
|
| 249 |
$requete = 'UPDATE '.$this->table_mots_cles.' '.
|
269 |
$requete = "UPDATE {$this->table_mots_cles} ".
|
| 250 |
'SET mot_cle = '.Cel::db()->proteger($nouveau_nom).' '.
|
270 |
"SET mot_cle = $nouveauNomSimpleP ".
|
| 251 |
'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle).' ';
|
271 |
"WHERE id_mot_cle = $idMotCleP ".
|
| 252 |
|
272 |
' -- '.__FILE__.':'.__LINE__;
|
| 253 |
$renommage = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
- |
|
| 254 |
|
- |
|
| Line 255... |
Line 273... |
| 255 |
$this->renommerChemin($ancien_chemin, $nouveau_chemin, $id_utilisateur);
|
273 |
|
| 256 |
|
274 |
$renommage = Cel::db()->executer($requete);
|
| - |
|
275 |
$this->renommerChemin($ancienChemin, $nouveauChemin, $id_utilisateur);
|
| - |
|
276 |
|
| - |
|
277 |
$idsElementsLies = $this->obtenirIdElementsLiesPourIds(array($id_mot_cle));
|
| 257 |
$ids_elements_lies = $this->obtenirIdElementsLiesPourIds(array($id_mot_cle));
|
278 |
foreach ($idsElementsLies as $idElementLie) {
|
| - |
|
279 |
self::regenererIndexTexteMotCle($idElementLie['id_element_lie'], $this->mode);
|
| - |
|
280 |
}
|
| 258 |
foreach($ids_elements_lies as $id_element_lie) {
|
281 |
|
| - |
|
282 |
return $renommage;
|
| 259 |
self::regenererIndexTexteMotCle($id_element_lie['id_element_lie'], $this->mode);
|
283 |
}
|
| 260 |
}
|
284 |
|
| - |
|
285 |
/**
|
| 261 |
|
286 |
* Si aucun id_père n'est mentionné, c'est un déplacement vers la racine de l'arbre (qui n'existe pas).
|
| 262 |
return $renommage;
|
287 |
*/
|
| 263 |
}
|
288 |
public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
|
| 264 |
|
289 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| 265 |
public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
|
290 |
$idPereP = Cel::db()->proteger($id_pere);
|
| 266 |
|
291 |
$cheminPere = '';
|
| 267 |
$chemin_pere = "";
|
292 |
|
| 268 |
// si aucun id_père n'a été mentionné, c'est un déplacement vers
|
293 |
if ($id_pere != '') {
|
| - |
|
294 |
$requete = 'SELECT chemin '.
|
| 269 |
// la racine de l'arbre (qui n'existe pas)
|
295 |
"FROM {$this->table_mots_cles} ".
|
| 270 |
if($id_pere != "") {
|
- |
|
| - |
|
296 |
"WHERE id_mot_cle = $idPereP ".
|
| 271 |
$selection_chemin_pere = 'SELECT chemin FROM '.$this->table_mots_cles.' '.
|
297 |
' -- '.__FILE__.':'.__LINE__;
|
| 272 |
'WHERE id_mot_cle = '.Cel::db()->proteger($id_pere);
|
298 |
|
| - |
|
299 |
$cheminPereInfos = Cel::db()->requeter($requete);
|
| 273 |
|
300 |
if (!empty($cheminPereInfos)) {
|
| 274 |
$chemin_pere = Cel::db()->requeter($selection_chemin_pere.' -- '.__FILE__.':'.__LINE__);
|
301 |
$cheminPere = $cheminPereInfos[0]['chemin'];
|
| 275 |
if(!empty($chemin_pere)) {
|
302 |
}
|
| 276 |
$chemin_pere = $chemin_pere[0]['chemin'];
|
303 |
}
|
| 277 |
}
|
304 |
|
| 278 |
}
|
305 |
$requete = 'SELECT chemin, mot_cle '.
|
| 279 |
|
306 |
"FROM {$this->table_mots_cles} ".
|
| 280 |
$selection_infos_mot_cle = 'SELECT chemin, mot_cle FROM '.$this->table_mots_cles.' '.
|
- |
|
| 281 |
'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
|
307 |
"WHERE id_mot_cle = $idMotCleP ".
|
| 282 |
|
308 |
' -- '.__FILE__.':'.__LINE__;
|
| 283 |
$infos_mot_cle = Cel::db()->requeter($selection_infos_mot_cle.' -- '.__FILE__.':'.__LINE__);
|
309 |
$infosMotCle = Cel::db()->requeter($requete);
|
| - |
|
310 |
$ancienChemin = $infosMotCle[0]['chemin'];
|
| 284 |
$ancien_chemin = $infos_mot_cle[0]['chemin'];
|
311 |
$ancienMotCle = $infosMotCle[0]['mot_cle'];
|
| 285 |
|
312 |
|
| 286 |
$nouveau_chemin = $chemin_pere.'/'.$infos_mot_cle[0]['mot_cle'];
|
- |
|
| 287 |
|
313 |
$nouveauChemin = $cheminPere.'/'.$ancienMotCle;
|
| 288 |
return $this->renommerChemin($ancien_chemin, $nouveau_chemin, $id_utilisateur);
|
314 |
|
| 289 |
}
|
315 |
return $this->renommerChemin($ancienChemin, $nouveauChemin, $id_utilisateur);
|
| 290 |
|
316 |
}
|
| 291 |
public function renommerChemin($ancien_chemin, $nouveau_chemin, $id_utilisateur) {
|
317 |
|
| 292 |
|
318 |
public function renommerChemin($ancien_chemin, $nouveau_chemin, $id_utilisateur) {
|
| - |
|
319 |
$ancienCheminHarmonise = self::harmoniserChemin($ancien_chemin);
|
| 293 |
$ancien_chemin = self::harmoniserChemin($ancien_chemin);
|
320 |
$nouveauCheminHarmonise = self::harmoniserChemin($nouveau_chemin);
|
| 294 |
$nouveau_chemin = self::harmoniserChemin($nouveau_chemin);
|
321 |
|
| 295 |
|
322 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| 296 |
$ancien_chemin_p = Cel::db()->proteger($ancien_chemin);
|
323 |
$ancienCheminP = Cel::db()->proteger($ancienCheminHarmonise);
|
| 297 |
$nouveau_chemin_p = Cel::db()->proteger($nouveau_chemin);
|
324 |
$nouveauCheminP = Cel::db()->proteger($nouveauCheminHarmonise);
|
| - |
|
325 |
$conditionCheminP = Cel::db()->proteger($ancienCheminHarmonise.'%');
|
| - |
|
326 |
|
| 298 |
|
327 |
$requete = "UPDATE {$this->table_mots_cles} ".
|
| 299 |
$condition_chemin = Cel::db()->proteger($ancien_chemin.'%');
|
328 |
"SET chemin = REPLACE(chemin, $ancienCheminP, $nouveauCheminP) ".
|
| 300 |
|
329 |
"WHERE chemin LIKE $conditionCheminP ".
|
| 301 |
$requete = "UPDATE ".$this->table_mots_cles." ".
|
330 |
"AND id_utilisateur = $idUtilisateurP ".
|
| - |
|
331 |
' -- '.__FILE__.':'.__LINE__;
|
| Line 302... |
Line 332... |
| 302 |
"SET chemin = REPLACE(chemin,".$ancien_chemin_p.", ".$nouveau_chemin_p.") ".
|
332 |
|
| 303 |
"WHERE chemin LIKE ".$condition_chemin." AND ".
|
333 |
return Cel::db()->executer($requete);
|
| 304 |
"id_utilisateur = ".$id_utilisateur." ";
|
334 |
}
|
| - |
|
335 |
|
| - |
|
336 |
public function supprimerChemin($chemin, $id_utilisateur) {
|
| - |
|
337 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
338 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
| - |
|
339 |
// TODO : triggers pour les tables liées ?
|
| 305 |
|
340 |
$requete = "DELETE FROM {$this->$table_mots_cles} ".
|
| 306 |
return Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
341 |
"WHERE chemin LIKE $cheminP ".
|
| 307 |
}
|
- |
|
| 308 |
|
- |
|
| 309 |
public function supprimerChemin($chemin, $id_utilisateur) {
|
- |
|
| 310 |
// TODO : triggers pour les tables liées ?
|
- |
|
| 311 |
$requete = "DELETE FROM ".$this->$table_mots_cles." ".
|
342 |
"AND id_utilisateur = $idUtilisateurP ".
|
| 312 |
"WHERE chemin LIKE ".Cel::db()->proteger($chemin."%")." AND ".
|
343 |
' -- '.__FILE__.':'.__LINE__;
|
| 313 |
"id_utilisateur = ".Cel::db()->proteger($id_utilisateur)." ";
|
- |
|
| 314 |
|
- |
|
| 315 |
return Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
344 |
|
| 316 |
}
|
345 |
return Cel::db()->executer($requete);
|
| 317 |
|
346 |
}
|
| 318 |
public function supprimerMotCleParId($id_mot_cle, $id_utilisateur) {
|
347 |
|
| 319 |
//TODO: simplifier cette fonction
|
348 |
/**
|
| 320 |
|
349 |
* suppression des associations du mots clé aux images ou obs, mais aussi des associations de ses enfants
|
| 321 |
// suppression des associations du mots clé aux images ou obs, mais aussi des associations de ses enfants
|
350 |
* (car ceux-ci seront supprimés aussi dans le processus)
|
| 322 |
// (car ceux-ci seront supprimés aussi dans le processus)
|
351 |
* même s'il n'a pas d'enfants, le tableau contient au moins l'id du mot clé lui même
|
| 323 |
// même s'il n'a pas d'enfants, le tableau contient au moins l'id du mot clé lui même
|
352 |
*/
|
| Line 324... |
Line 353... |
| 324 |
$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle);
|
353 |
public function supprimerMotCleParId($id_mot_cle, $id_utilisateur) {
|
| 325 |
|
354 |
//TODO: simplifier cette fonction
|
| 326 |
$print = array();
|
355 |
$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle);
|
| 327 |
|
356 |
|
| 328 |
// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
|
357 |
// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
|
| 329 |
// régénérer les index texte de mots clés sur les éléments liés)
|
358 |
// régénérer les index texte de mots clés sur les éléments liés)
|
| 330 |
$ids_a_delier = array();
|
359 |
$ids_a_delier = array();
|
| 331 |
foreach($ids_mot_cle_et_enfants as $id) {
|
360 |
foreach ($ids_mot_cle_et_enfants as $id) {
|
| 332 |
$ids_a_delier[] = $id['id_mot_cle'];
|
361 |
$ids_a_delier[] = $id['id_mot_cle'];
|
| 333 |
}
|
362 |
}
|
| 334 |
|
363 |
|
| 335 |
$ids_elements_lies = $this->obtenirIdElementsLiesPourIds($ids_a_delier);
|
- |
|
| - |
|
364 |
$ids_elements_lies = $this->obtenirIdElementsLiesPourIds($ids_a_delier);
|
| 336 |
$suppression_liaison = $this->supprimerToutesLiaisonsIdsMotsCles($ids_a_delier, $id_utilisateur);
|
365 |
$suppression_liaison = $this->supprimerToutesLiaisonsIdsMotsCles($ids_a_delier, $id_utilisateur);
|
| - |
|
366 |
|
| 337 |
|
367 |
foreach ($ids_elements_lies as $id_element_lie) {
|
| - |
|
368 |
self::regenererIndexTexteMotCle($id_element_lie['id_element_lie'], $this->mode);
|
| 338 |
foreach($ids_elements_lies as $id_element_lie) {
|
369 |
}
|
| 339 |
self::regenererIndexTexteMotCle($id_element_lie['id_element_lie'], $this->mode);
|
370 |
|
| 340 |
}
|
371 |
// suppression du mot clé proprement dit ainsi que de ses enfants
|
| 341 |
|
372 |
$suppression = $this->supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur);
|
| 342 |
// suppression du mot clé proprement dit ainsi que de ses enfants
|
373 |
|
| 343 |
$suppression = $this->supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur);
|
374 |
return $suppression && $suppression_liaison;
|
| 344 |
|
375 |
}
|
| 345 |
return $suppression && $suppression_liaison;
|
- |
|
| 346 |
}
|
376 |
|
| 347 |
|
377 |
public function supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur) {
|
| Line -... |
Line 378... |
| - |
|
378 |
$idMotCleP = Cel::db()->proteger($id_mot_cle);
|
| - |
|
379 |
$selection_chemin = 'SELECT chemin '.
|
| - |
|
380 |
"FROM {$this->table_mots_cles} ".
|
| - |
|
381 |
"WHERE id_mot_cle = $idMotCleP ".
|
| - |
|
382 |
' -- '.__FILE__.':'.__LINE__;
|
| 348 |
public function supprimerMotCleEtEnfantsParId($id_mot_cle, $id_utilisateur) {
|
383 |
$chemin = Cel::db()->requeter($selection_chemin);
|
| 349 |
|
384 |
|
| Line 350... |
Line 385... |
| 350 |
$selection_chemin = 'SELECT chemin FROM '.$this->table_mots_cles.' '.
|
385 |
$suppression = true;
|
| 351 |
'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
|
386 |
// vérification pour empecher la suppression accidentelle de tout l'arbre,
|
| 352 |
$chemin = Cel::db()->requeter($selection_chemin.' -- '.__FILE__.':'.__LINE__);
|
387 |
// cas qui ne devrait jamais arriver normalement
|
| 353 |
|
- |
|
| 354 |
$suppression = true;
|
- |
|
| 355 |
// vérification pour empecher la suppression accidentelle de tout l'arbre,
|
- |
|
| 356 |
// cas qui ne devrait jamais arriver normalement
|
- |
|
| 357 |
if(!empty($chemin) && $chemin != "/") {
|
- |
|
| 358 |
$chemin = $chemin[0]['chemin'];
|
- |
|
| 359 |
$requete = "DELETE FROM ".$this->table_mots_cles." WHERE chemin LIKE ".
|
- |
|
| 360 |
Cel::db()->proteger($chemin.'%')." ".
|
- |
|
| 361 |
"AND id_utilisateur =".Cel::db()->proteger($id_utilisateur);
|
- |
|
| 362 |
|
- |
|
| Line -... |
Line 388... |
| - |
|
388 |
if (!empty($chemin) && $chemin != '/') {
|
| - |
|
389 |
$chemin = $chemin[0]['chemin'];
|
| - |
|
390 |
$cheminP = Cel::db()->proteger($chemin.'%');
|
| - |
|
391 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| - |
|
392 |
|
| - |
|
393 |
$requete = "DELETE FROM {$this->table_mots_cles} ".
|
| - |
|
394 |
"WHERE chemin LIKE $cheminP ".
|
| - |
|
395 |
"AND id_utilisateur = $idUtilisateurP ".
|
| - |
|
396 |
' -- '.__FILE__.':'.__LINE__;;
|
| - |
|
397 |
|
| - |
|
398 |
$suppression = Cel::db()->executer($requete);
|
| 363 |
$suppression = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
399 |
}
|
| - |
|
400 |
|
| 364 |
}
|
401 |
return ($suppression !== false);
|
| 365 |
|
402 |
|
| 366 |
return ($suppression !== false);
|
403 |
}
|
| 367 |
|
404 |
|
| 368 |
}
|
405 |
public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
|
| 369 |
|
406 |
$motsClesP = Cel::db()->protegerTableau($mots_cles);
|
| - |
|
407 |
$listeMotsClesP = implode(',', $motsClesP);
|
| - |
|
408 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| Line 370... |
Line 409... |
| 370 |
public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
|
409 |
|
| 371 |
$mots_cles_p = array();
|
410 |
$requete = 'SELECT id_mot_cle, mot_cle '.
|
| - |
|
411 |
"FROM {$this->table_mots_cles} ".
|
| 372 |
foreach($mots_cles as $mot_cle) {
|
412 |
"WHERE mot_cle IN ($listeMotsClesP) ".
|
| - |
|
413 |
"AND id_utilisateur = $idUtilisateurP ".
|
| 373 |
$mots_cles_p[] = Cel::db()->proteger($mot_cle);
|
414 |
' -- '.__FILE__.':'.__LINE__;
|
| - |
|
415 |
|
| - |
|
416 |
$resultat = Cel::db()->executer($requete);
|
| 374 |
}
|
417 |
return $resultat;
|
| 375 |
|
418 |
}
|
| 376 |
$requete = "SELECT id_mot_cle, mot_cle FROM ".$this->table_mots_cles." ".
|
419 |
|
| 377 |
"WHERE mot_cle IN (".implode(',', $mots_cles_p).") ".
|
420 |
public function obtenirIdElementsLiesPourChemins($chemins, $id_utilisateur) {
|
| 378 |
"AND id_utilisateur = ".Cel::db()->proteger($id_utilisateur);
|
421 |
foreach ($chemins as &$chemin) {
|
| 379 |
|
422 |
$chemin = Cel::db()->proteger(self::harmoniserChemin($chemin));
|
| 380 |
return Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
423 |
}
|
| 381 |
}
|
424 |
$listeChemins = implode(',', $chemin);
|
| 382 |
|
425 |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
|
| 383 |
public function obtenirIdElementsLiesPourChemins($chemins, $id_utilisateur) {
|
426 |
|
| 384 |
foreach($chemins as &$chemin) {
|
427 |
$requete = 'SELECT id_element_lie '.
|
| 385 |
$chemin = Cel::db()->proteger(self::harmoniserChemin($chemin));
|
- |
|
| 386 |
}
|
428 |
"FROM {$this->table_liaison} AS cl INNER JOIN {$this->table_mots_cles} AS cm ".
|
| 387 |
|
429 |
"ON (".
|
| - |
|
430 |
"cm.id_mot_cle = cl.id_mot_cle ".
|
| 388 |
$requete = 'SELECT id_element_lie FROM '.$this->table_liaison.' cl '.
|
431 |
"AND chemin IN ($listeChemins) ".
|
| - |
|
432 |
"AND cm.id_utilisateur = $idUtilisateurP ".
|
| 389 |
'INNER JOIN '.$this->table_mots_cles.' cm '.
|
433 |
") ".
|
| 390 |
'ON cm.id_mot_cle = cl.id_mot_cle AND chemin IN ('.implode(',', $chemin).') '.
|
- |
|
| 391 |
' AND cm.id_utilisateur = '.Cel::db()->proteger($id_utilisateur);
|
- |
|
| Line -... |
Line 434... |
| - |
|
434 |
' -- '.__FILE__.':'.__LINE__;
|
| - |
|
435 |
|
| 392 |
|
436 |
$idsPourChemin = Cel::db()->executer($requete);
|
| 393 |
$ids_pour_chemin = Cel::db()->executer($requete.' -- '.__FILE__.':'.__LINE__);
|
437 |
|
| 394 |
|
438 |
return $idsPourChemin;
|
| 395 |
return $ids_pour_chemin;
|
439 |
}
|
| 396 |
}
|
440 |
|
| 397 |
|
441 |
public function obtenirIdElementsLiesPourIds($ids_mots_cles) {
|
| 398 |
public function obtenirIdElementsLiesPourIds($ids_mots_cles) {
|
442 |
$idsElementsLies = array();
|
| 399 |
$ids_elements_lies = array();
|
443 |
if (!empty($ids_mots_cles)) {
|
| 400 |
if(!empty($ids_mots_cles)) {
|
444 |
$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
|
| 401 |
foreach($ids_mots_cles as $id_mot_cle) {
|
445 |
$listeIdsMotsCles = implode(',', $idsMotsClesP);
|
| 402 |
$id_mot_cle = Cel::db()->proteger($id_mot_cle);
|
446 |
|
| 403 |
}
|
447 |
$requete = 'SELECT id_element_lie '.
|
| 404 |
|
448 |
"FROM {$this->table_liaison} ".
|
| 405 |
$requete = 'SELECT id_element_lie FROM '.$this->table_liaison.' '.
|
449 |
"WHERE id_mot_cle IN ($listeIdsMotsCles) ".
|
| 406 |
'WHERE id_mot_cle IN ('.implode(',', $ids_mots_cles).')';
|
450 |
' -- '.__FILE__.':'.__LINE__;
|
| 407 |
|
451 |
|
| 408 |
$ids_elements_lies = Cel::db()->executerRequete($requete.' -- '.__FILE__.':'.__LINE__);
|
452 |
|
| 409 |
}
|
453 |
$idsElementsLies = Cel::db()->executerRequete($requete);
|
| 410 |
|
454 |
}
|
| 411 |
return $ids_elements_lies;
|
455 |
return $idsElementsLies;
|
| 412 |
}
|
456 |
}
|
| 413 |
|
457 |
|
| - |
|
458 |
/**
|
| 414 |
/*****
|
459 |
*
|
| 415 |
*
|
460 |
* Fonctions statiques utilitaires
|
| 416 |
* Fonctions statiques utilitaires
|
461 |
* (Dans l'idéal toute la classe pourrait être statique car elle n'a
|
| 417 |
* (Dans l'idéal toute la classe pourrait être statique car elle n'a
|
462 |
* pas d'état (mais il faudrait passer $mode à toutes les fonctions)
|
| - |
|
463 |
*
|
| 418 |
* pas d'état (mais il faudrait passer $mode à toutes les fonctions)
|
464 |
*/
|
| 419 |
*
|
465 |
public static function getTablesMotsClesEtLiaisons($mode) {
|
| - |
|
466 |
if ($mode == 'obs') {
|
| Line 420... |
Line 467... |
| 420 |
*/
|
467 |
$table_liaison = 'cel_mots_cles_obs_liaison';
|
| 421 |
public static function getTablesMotsClesEtLiaisons($mode) {
|
468 |
$table_mots_cles = 'cel_arbre_mots_cles_obs';
|
| 422 |
if($mode == 'obs') {
|
469 |
} else {
|
| 423 |
$table_liaison = 'cel_mots_cles_obs_liaison';
|
470 |
$table_liaison = 'cel_mots_cles_images_liaison';
|
| 424 |
$table_mots_cles = 'cel_arbre_mots_cles_obs';
|
471 |
$table_mots_cles = 'cel_arbre_mots_cles_images';
|
| 425 |
} else {
|
472 |
}
|
| 426 |
$table_liaison = 'cel_mots_cles_images_liaison';
|
473 |
return array($table_liaison, $table_mots_cles);
|
| 427 |
$table_mots_cles = 'cel_arbre_mots_cles_images';
|
474 |
}
|
| 428 |
}
|
475 |
|
| 429 |
return array($table_liaison, $table_mots_cles);
|
476 |
public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
|
| 430 |
}
|
477 |
$idElementLieP = Cel::db()->proteger($id_element_lie);
|
| 431 |
|
478 |
$sqlTpl = self::obtenirTemplateRequeteMotsClesTexte($mode);
|
| 432 |
public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
|
479 |
$sousRequete = sprintf($sqlTpl, $idElementLieP);
|
| - |
|
480 |
|
| - |
|
481 |
list($table, $champId) = self::getNomTablesEtChampsElementsLies($mode);
|
| - |
|
482 |
$requete = "UPDATE $table ".
|
| - |
|
483 |
"SET mots_cles_texte = ($sousRequete) ".
|
| 433 |
$sous_requete_concat = '('.sprintf(GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte($mode),
|
484 |
"WHERE $champId = $idElementLieP ".
|
| 434 |
Cel::db()->proteger($id_element_lie)).')';
|
485 |
' -- '.__FILE__.':'.__LINE__;
|
| Line 435... |
Line -... |
| 435 |
|
- |
|
| 436 |
list($table, $champ_id) = self::getNomTablesEtChampsElementsLies($mode);
|
- |
|
| 437 |
$requete = 'UPDATE '.$table.' SET mots_cles_texte = '.$sous_requete_concat.' '.
|
486 |
|
| 438 |
'WHERE '.$champ_id.' = '.Cel::db()->proteger($id_element_lie).' ';
|
487 |
return Cel::db()->executer($requete);
|
| 439 |
|
- |
|
| 440 |
return Cel::db()->executer($requete, __FILE__ , __LINE__);
|
488 |
}
|
| 441 |
}
|
489 |
|
| - |
|
490 |
private static function getNomTablesEtChampsElementsLies($mode) {
|
| - |
|
491 |
$tables = array();
|
| 442 |
|
492 |
if ($mode == 'obs') {
|
| - |
|
493 |
$tables = array('cel_obs', 'id_observation');
|
| - |
|
494 |
} else {
|
| 443 |
private static function getNomTablesEtChampsElementsLies($mode) {
|
495 |
$tables = array('cel_images', 'id_image');
|
| 444 |
$tables = array();
|
496 |
}
|
| 445 |
if($mode == 'obs') {
|
497 |
return $tables;
|
| 446 |
$tables = array('cel_obs','id_observation');
|
- |
|
| 447 |
} else {
|
498 |
}
|
| 448 |
$tables = array('cel_images','id_image');
|
499 |
|
| 449 |
}
|
- |
|
| 450 |
return $tables;
|
- |
|
| 451 |
}
|
500 |
/**
|
| - |
|
501 |
* Renvoie un template de requete pour selectionner la concatenation de mots clé
|
| - |
|
502 |
* pour un element donné (utilisable avec sprintf)
|
| Line -... |
Line 503... |
| - |
|
503 |
*/
|
| 452 |
|
504 |
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
|
| - |
|
505 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
| - |
|
506 |
|
| 453 |
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
|
507 |
$requeteTpl = 'SELECT GROUP_CONCAT(mot_cle) '.
|
| 454 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
- |
|
| 455 |
|
- |
|
| 456 |
// renvoie un template de requete pour selectionner la concatenation
|
508 |
"FROM $table_mots_cles AS cm ".
|
| 457 |
// de mots clé pour un element donné (utilisable avec sprintf)
|
509 |
"INNER JOIN $table_liaison AS cml ON cml.id_mot_cle = cm.id_mot_cle ".
|
| 458 |
return 'SELECT GROUP_CONCAT(mot_cle) '.
|
510 |
'AND cml.id_element_lie = %s ';
|
| 459 |
'FROM '.$table_mots_cles.' cm '.
|
511 |
|
| 460 |
'INNER JOIN '.$table_liaison.' cml '.
|
512 |
return $requeteTpl;
|
| 461 |
'ON cml.id_mot_cle = cm.id_mot_cle '.
|
513 |
}
|
| 462 |
'AND cml.id_element_lie = %s ';
|
514 |
/**
|
| 463 |
}
|
515 |
* Renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf.
|
| 464 |
|
516 |
*/
|
| 465 |
public static function obtenirTemplateRequeteMotsClesIds($mode) {
|
- |
|
| 466 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
517 |
public static function obtenirTemplateRequeteMotsClesIds($mode) {
|
| 467 |
|
518 |
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
|
| 468 |
// renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf
|
519 |
$requeteTpl = "SELECT id_element_lie FROM $table_liaison WHERE id_mot_cle IN (%s) ";
|
| 469 |
return "SELECT id_element_lie ".
|
520 |
return $requeteTpl;
|
| 470 |
"FROM ".$table_liaison." ".
|
521 |
}
|
| 471 |
"WHERE id_mot_cle IN (%s) ";
|
522 |
|
| 472 |
}
|
523 |
// Fonctions utilitaires
|
| 473 |
|
524 |
|
| 474 |
// Fonctions utilitaires
|
525 |
/**
|
| 475 |
static public function comparerProfNoeuds($a, $b) {
|
526 |
* La profondeur d'un noeud est déterminée par le nombre de slashs
|
| 476 |
// la profondeur d'un noeud est déterminée par le nombre de slashs
|
527 |
* qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
|
| - |
|
528 |
*/
|
| 477 |
// qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé
|
529 |
static public function comparerProfNoeuds($a, $b) {
|
| 478 |
$nb_slashs_a = substr_count($a['chemin'], '/');
|
530 |
$nb_slashs_a = substr_count($a['chemin'], '/');
|
| - |
|
531 |
$nb_slashs_b = substr_count($a['chemin'], '/');
|
| 479 |
$nb_slashs_b = substr_count($a['chemin'], '/');
|
532 |
$cmp = 0;
|
| 480 |
$cmp = 0;
|
- |
|
| 481 |
|
533 |
|
| 482 |
if($nb_slashs_a == $nb_slashs_b) {
|
534 |
if ($nb_slashs_a == $nb_slashs_b) {
|
| 483 |
$cmp = strcmp($a['chemin'], $b['chemin']);
|
535 |
$cmp = strcmp($a['chemin'], $b['chemin']);
|
| - |
|
536 |
} else {
|
| - |
|
537 |
$cmp = ($a['chemin'] > $b['chemin']) ? +1 : -1;
|
| - |
|
538 |
}
|
| 484 |
} else {
|
539 |
return $cmp;
|
| - |
|
540 |
}
|
| - |
|
541 |
|
| 485 |
$cmp = ($a['chemin'] > $b['chemin']) ? +1 : -1;
|
542 |
static public function getCheminHarmonise($chemin_parent, $mot_cle) {
|
| 486 |
}
|
543 |
return self::harmoniserChemin($chemin_parent.'/'.self::simplifier($mot_cle).'/');
|
| - |
|
544 |
}
|
| 487 |
|
545 |
|
| 488 |
return $cmp;
|
546 |
static public function harmoniserChemin($chemin) {
|
| - |
|
547 |
$chemin = self::startsWith($chemin,'/') ? $chemin : '/'.$chemin;
|
| 489 |
}
|
548 |
$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
|
| 490 |
|
549 |
$chemin = str_replace('//', '/', $chemin);
|
| 491 |
static public function getCheminHarmonise($chemin_parent, $mot_cle) {
|
550 |
return $chemin;
|
| 492 |
return self::harmoniserChemin($chemin_parent.'/'.self::simplifier($mot_cle).'/');
|
- |
|
| 493 |
}
|
551 |
}
|
| 494 |
|
552 |
|
| 495 |
static public function harmoniserChemin($chemin) {
|
553 |
/**
|
| 496 |
$chemin = self::startsWith($chemin,'/') ? $chemin : '/'.$chemin;
|
554 |
* Fonction de slugification du mot clé
|
| 497 |
$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
|
555 |
*
|
| 498 |
return str_replace('//', '/', $chemin);
|
556 |
* Ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
|
| 499 |
}
|
557 |
* clés texte dans les tables obs ou image)
|
| 500 |
|
558 |
*/
|
| 501 |
// fonction de slugification du mot clé
|
559 |
static public function simplifier($text) {
|
| 502 |
static public function simplifier($text)
|
560 |
$caracteresASupprimer = array('\\','/', ',');
|
| 503 |
{
|
561 |
$text = str_replace($caracteresASupprimer, '', $text);
|
| 504 |
// ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
|
562 |
$text = trim($text);
|
| 505 |
// clés texte dans les tables obs ou image)
|
563 |
return $text;
|
| 506 |
return trim(str_replace(array('\\','/', ','), '', $text));
|
564 |
}
|
| 507 |
}
|
565 |
|
| 508 |
|
566 |
/**
|
| 509 |
// gardée pour compatibilité ancienne version (mais devrait être supprimée
|
567 |
* Gardée pour compatibilité ancienne version (mais devrait être supprimée
|
| 510 |
// dans le futur
|
568 |
* dans le futur
|
| 511 |
static function nettoyerMotsClesAvantSuppression($chaine) {
|
569 |
*/
|
| 512 |
$valeur = str_replace('null', '', $chaine);
|
570 |
static function nettoyerMotsClesAvantSuppression($chaine) {
|
| 513 |
$valeur = trim($valeur, ';;');
|
571 |
$valeur = str_replace('null', '', $chaine);
|
| 514 |
|
572 |
$valeur = trim($valeur, ';;');
|
| - |
|
573 |
return $valeur;
|
| - |
|
574 |
}
|
| - |
|
575 |
|
| - |
|
576 |
static public function startsWith($haystack, $needle) {
|
| - |
|
577 |
return $needle === '' || strpos($haystack, $needle) === 0;
|
| 515 |
return $valeur;
|
578 |
}
|
| 516 |
}
|
- |
|
| 517 |
|
579 |
|
| - |
|
580 |
static public function endsWith($haystack, $needle) {
|
| - |
|
581 |
return $needle === '' || substr($haystack, -strlen($needle)) === $needle;
|
| Line 518... |
Line -... |
| 518 |
static public function startsWith($haystack, $needle) {
|
- |
|
| 519 |
return $needle === "" || strpos($haystack, $needle) === 0;
|
- |
|
| 520 |
}
|
- |
|
| 521 |
|
582 |
}
|
| 522 |
static public function endsWith($haystack, $needle) {
|
583 |
|
| 523 |
return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
|
584 |
/**
|
| 524 |
}
|
585 |
* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
|
| 525 |
|
586 |
* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie
|
| 526 |
/**
|
- |
|
| - |
|
587 |
* @param string $mail_utilisateur
|
| 527 |
* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
|
588 |
* @param string $id_utilisateur
|
| 528 |
* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie
|
589 |
*/
|
| 529 |
* @param string $mail_utilisateur
|
590 |
public static function migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur) {
|
| 530 |
* @param string $id_utilisateur
|
591 |
return self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'obs') &&
|
| 531 |
*/
|
592 |
self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'images');
|