| 416 | aurelien | 1 | <?php
 | 
        
           |  |  | 2 |   | 
        
           |  |  | 3 | /**
 | 
        
           |  |  | 4 |   | 
        
           |  |  | 5 |  Aurelien Peronnet aurelienperonnet@gmail.com 2008
 | 
        
           |  |  | 6 |   | 
        
           |  |  | 7 |  Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
 | 
        
           |  |  | 8 |  respectant les principes de diffusion des logiciels libres. Vous pouvez
 | 
        
           |  |  | 9 |  utiliser, modifier et/ou redistribuer ce programme sous les conditions
 | 
        
           |  |  | 10 |  de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
 | 
        
           |  |  | 11 |  sur le site "http://www.cecill.info".
 | 
        
           |  |  | 12 |  En contrepartie de l'accessibilit? au code source et des droits de copie,
 | 
        
           |  |  | 13 |  de modification et de redistribution accord?s par cette licence, il n'est
 | 
        
           |  |  | 14 |  offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
 | 
        
           |  |  | 15 |  seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
 | 
        
           |  |  | 16 |  titulaire des droits patrimoniaux et les conc?dants successifs.
 | 
        
           |  |  | 17 |   | 
        
           |  |  | 18 |  A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
 | 
        
           |  |  | 19 |  associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
 | 
        
           |  |  | 20 |  d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
 | 
        
           |  |  | 21 |  donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
 | 
        
           |  |  | 22 |  manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
 | 
        
           |  |  | 23 |  avertis poss?dant  des  connaissances  informatiques approfondies.  Les
 | 
        
           |  |  | 24 |  utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
 | 
        
           |  |  | 25 |  logiciel ? leurs besoins dans des conditions permettant d'assurer la
 | 
        
           |  |  | 26 |  s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
 | 
        
           |  |  | 27 |  ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
 | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 |  Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
 | 
        
           |  |  | 30 |  pris connaissance de la licence CeCILL, et que vous en avez accept? les
 | 
        
           |  |  | 31 |  termes.
 | 
        
           |  |  | 32 |   | 
        
           |  |  | 33 |  */
 | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 | // in : utf8
 | 
        
           |  |  | 37 | // out : utf8
 | 
        
           |  |  | 38 | /*
 | 
        
           |  |  | 39 |  * InventoryKeyWordList.php
 | 
        
           |  |  | 40 |  *
 | 
        
           |  |  | 41 |  * Cas d'utilisation :
 | 
        
           |  |  | 42 |  * Service recherche et modifie l'arbre des mots cl�s associ�s � un id
 | 
        
           |  |  | 43 |  *
 | 
        
           |  |  | 44 |  * 1: Le service recoit un mot cl� � ajouter � l'arbre
 | 
        
           |  |  | 45 |  * 2: Le service recherche l'arbre ou sous arbre correspondant au crit�res demand�
 | 
        
           |  |  | 46 |  * 3: Le service renvoie l'arbre au format json
 | 
        
           |  |  | 47 |  */
 | 
        
           |  |  | 48 |   | 
        
           |  |  | 49 |  Class InventoryKeyWordList extends DBAccessor {
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 | 	var $config ;
 | 
        
           |  |  | 52 |   | 
        
           |  |  | 53 | 	protected $suffix = "";
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 | 	function InventoryKeyWordList($config) {
 | 
        
           |  |  | 56 |   | 
        
           |  |  | 57 | 		$this->config=$config;
 | 
        
           |  |  | 58 | 	}
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 	function verifierPresenceRacine($id)
 | 
        
           |  |  | 61 | 	{
 | 
        
           |  |  | 62 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 | 		$query = 'SELECT COUNT(*) FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id).'"' ;
 | 
        
           |  |  | 65 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 66 |   | 
        
           |  |  | 67 | 		if (PEAR::isError($res)) {
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 |                 	die($res->getMessage());
 | 
        
           |  |  | 70 |                 }
 | 
        
           |  |  | 71 | 		else
 | 
        
           |  |  | 72 | 		{
 | 
        
           |  |  | 73 | 			$valeurs = $res->fetchrow(DB_FETCHMODE_ORDERED) ;
 | 
        
           |  |  | 74 |   | 
        
           |  |  | 75 | 			switch ($this->suffix) {
 | 
        
           |  |  | 76 | 				case "_obs":
 | 
        
           |  |  | 77 | 					$nom_racine = 'Projets';
 | 
        
           |  |  | 78 | 					$id_racine = 'racine_obs';
 | 
        
           |  |  | 79 | 				break;
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 | 				case "_images":
 | 
        
           |  |  | 82 | 					$nom_racine = 'Mots clés';
 | 
        
           |  |  | 83 | 					$id_racine = 'racine';
 | 
        
           |  |  | 84 | 				break;
 | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 | 				default:
 | 
        
           |  |  | 87 | 					$nom_racine = $this->suffix;
 | 
        
           |  |  | 88 | 					$id_racine = $this->suffix;
 | 
        
           |  |  | 89 | 			}
 | 
        
           |  |  | 90 |   | 
        
           |  |  | 91 | 			if($valeurs[0] == 0)
 | 
        
           |  |  | 92 | 			{
 | 
        
           |  |  | 93 | 				$query = 'INSERT INTO cel_mots_cles'.$this->suffix.' VALUES ("'.$nom_racine.'",1,2,"'.$id_racine.'","'.$id_racine.'","'.$DB->escapeSimple($id).'","",0) ' ;
 | 
        
           |  |  | 94 | 				$res =& $DB->query($query);
 | 
        
           |  |  | 95 |   | 
        
           |  |  | 96 | 				if (PEAR::isError($res)) {
 | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | 					die($res->getMessage());
 | 
        
           |  |  | 99 | 				}
 | 
        
           |  |  | 100 | 			}
 | 
        
           |  |  | 101 | 		}
 | 
        
           |  |  | 102 | 	}
 | 
        
           |  |  | 103 |   | 
        
           |  |  | 104 | 	function desactiverAutoCommitEtCommencerTransaction()
 | 
        
           |  |  | 105 | 	{
 | 
        
           |  |  | 106 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 107 |   | 
        
           |  |  | 108 | 		// desactive l'autocommit le temps de la maniulation de l'arbre
 | 
        
           |  |  | 109 | 		$query = "SET AUTOCOMMIT = 0" ;
 | 
        
           |  |  | 110 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 111 |   | 
        
           |  |  | 112 | 		// et debute une nouvelle transaction
 | 
        
           |  |  | 113 | 		$query = "BEGIN " ;
 | 
        
           |  |  | 114 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 115 | 	}
 | 
        
           |  |  | 116 |   | 
        
           |  |  | 117 | 	function reactiverAutoCommitEtCompleterTransaction()
 | 
        
           |  |  | 118 | 	{
 | 
        
           |  |  | 119 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 120 |   | 
        
           |  |  | 121 | 		// complete la transaction
 | 
        
           |  |  | 122 | 		$query = "COMMIT " ;
 | 
        
           |  |  | 123 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 124 |   | 
        
           |  |  | 125 | 		// reactive l'autocommit le temps de la maniulation de l'arbre
 | 
        
           |  |  | 126 | 		$query = "SET AUTOCOMMIT = 1" ;
 | 
        
           |  |  | 127 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 | 		echo "OK" ;
 | 
        
           |  |  | 130 | 	}
 | 
        
           |  |  | 131 |   | 
        
           |  |  | 132 | 	function reactiverAutoCommitEtAnnulerTransaction()
 | 
        
           |  |  | 133 | 	{
 | 
        
           |  |  | 134 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 135 |   | 
        
           |  |  | 136 | 		// annule la transaction
 | 
        
           |  |  | 137 | 		$query = "ROLLBACK " ;
 | 
        
           |  |  | 138 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 | 		// reactive l'autocommit le temps de la maniulation de l'arbre
 | 
        
           |  |  | 141 | 		$query = "SET AUTOCOMMIT = 1" ;
 | 
        
           |  |  | 142 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 143 |   | 
        
           |  |  | 144 | 		echo "ERROR" ;
 | 
        
           |  |  | 145 | 	}
 | 
        
           |  |  | 146 |   | 
        
           |  |  | 147 | 	// renvoie les bornes d'un noeud de l'arbre des mots cl�s
 | 
        
           |  |  | 148 | 	function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur)
 | 
        
           |  |  | 149 | 	{
 | 
        
           |  |  | 150 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 151 |   | 
        
           |  |  | 152 | 		$query = 'SELECT cmc_bd, cmc_bg, cmc_niveau FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 153 |   | 
        
           |  |  | 154 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 155 |                 if (PEAR::isError($res)) {
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 |                 	die($res->getMessage());
 | 
        
           |  |  | 158 |                 }
 | 
        
           |  |  | 159 |   | 
        
           |  |  | 160 | 		$results = array() ;
 | 
        
           |  |  | 161 | 		$valeurs = $res->fetchrow(DB_FETCHMODE_ASSOC) ;
 | 
        
           |  |  | 162 |   | 
        
           |  |  | 163 |   | 
        
           |  |  | 164 | 		return $valeurs ;
 | 
        
           |  |  | 165 |   | 
        
           |  |  | 166 | 	}
 | 
        
           |  |  | 167 |   | 
        
           |  |  | 168 | 	// decale les bornes de deux pour inserer un nouvel element
 | 
        
           |  |  | 169 | 	function decalerBornesPlusDeux($valeur,$id_utilisateur)
 | 
        
           |  |  | 170 | 	{
 | 
        
           |  |  | 171 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 172 |   | 
        
           |  |  | 173 | 		// decalage borne droite
 | 
        
           |  |  | 174 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + 2 WHERE cmc_bd >=  "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 175 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 176 |                 if (PEAR::isError($res)) {
 | 
        
           |  |  | 177 |   | 
        
           |  |  | 178 |                 	die($res->getMessage());
 | 
        
           |  |  | 179 | 			$reussi_1 = false ;
 | 
        
           |  |  | 180 |                 }
 | 
        
           |  |  | 181 | 		else
 | 
        
           |  |  | 182 | 		{
 | 
        
           |  |  | 183 | 			$reussi_1 = true ;
 | 
        
           |  |  | 184 | 		}
 | 
        
           |  |  | 185 |   | 
        
           |  |  | 186 | 		// decalage borne gauche
 | 
        
           |  |  | 187 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + 2 WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 188 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 189 |                   if (PEAR::isError($res)) {
 | 
        
           |  |  | 190 |   | 
        
           |  |  | 191 |                 	die($res->getMessage());
 | 
        
           |  |  | 192 | 			$reussi_2 = false ;
 | 
        
           |  |  | 193 |                 }
 | 
        
           |  |  | 194 | 		else
 | 
        
           |  |  | 195 | 		{
 | 
        
           |  |  | 196 | 			$reussi_2 = true ;
 | 
        
           |  |  | 197 | 		}
 | 
        
           |  |  | 198 |   | 
        
           |  |  | 199 | 		$reussi = $reussi_1 && $reussi_2  ;
 | 
        
           |  |  | 200 |   | 
        
           |  |  | 201 | 		return $reussi ;
 | 
        
           |  |  | 202 | 	}
 | 
        
           |  |  | 203 |   | 
        
           |  |  | 204 | 	// decale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre)
 | 
        
           |  |  | 205 | 	function decalerBornesMoinsIntervalle($bg, $bd,$id_utilisateur)
 | 
        
           |  |  | 206 | 	{
 | 
        
           |  |  | 207 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 208 |   | 
        
           |  |  | 209 |   | 
        
           |  |  | 210 | 		$decalage = $bd - $bg + 1 ;
 | 
        
           |  |  | 211 |   | 
        
           |  |  | 212 | 		// decalage borne droite
 | 
        
           |  |  | 213 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >=  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 214 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 215 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 216 |   | 
        
           |  |  | 217 |                 	die($res->getMessage());
 | 
        
           |  |  | 218 | 			$reussi_1 = false ;
 | 
        
           |  |  | 219 |                 }
 | 
        
           |  |  | 220 | 		else
 | 
        
           |  |  | 221 | 		{
 | 
        
           |  |  | 222 | 			$reussi_1 = true ;
 | 
        
           |  |  | 223 | 		}
 | 
        
           |  |  | 224 |   | 
        
           |  |  | 225 | 		// decalage borne gauche
 | 
        
           |  |  | 226 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg >  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 227 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 228 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 229 |   | 
        
           |  |  | 230 |                 	die($res->getMessage());
 | 
        
           |  |  | 231 | 			$reussi_2 = false ;
 | 
        
           |  |  | 232 |                 }
 | 
        
           |  |  | 233 | 		else
 | 
        
           |  |  | 234 | 		{
 | 
        
           |  |  | 235 | 			$reussi_2 = true ;
 | 
        
           |  |  | 236 | 		}
 | 
        
           |  |  | 237 |   | 
        
           |  |  | 238 | 		$reussi = $reussi_1 && $reussi_2 ;
 | 
        
           |  |  | 239 |   | 
        
           |  |  | 240 | 		return $reussi ;
 | 
        
           |  |  | 241 | 	}
 | 
        
           |  |  | 242 |   | 
        
           |  |  | 243 | 	// decale � droite des bornes don�es d'un intervalle positif donne (pour l'ajout d'un sous arbre)
 | 
        
           |  |  | 244 | 	function decalerBornesPlusIntervalle($valeur_bornes, $largeur,$id_utilisateur)
 | 
        
           |  |  | 245 | 	{
 | 
        
           |  |  | 246 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 247 |   | 
        
           |  |  | 248 | 		$decalage = $largeur ;
 | 
        
           |  |  | 249 |   | 
        
           |  |  | 250 | 		// decalage borne droite
 | 
        
           |  |  | 251 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >=  "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 252 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 253 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 254 |   | 
        
           |  |  | 255 |                 	die($res->getMessage());
 | 
        
           |  |  | 256 | 			$reussi_1 = false ;
 | 
        
           |  |  | 257 |                 }
 | 
        
           |  |  | 258 | 		else
 | 
        
           |  |  | 259 | 		{
 | 
        
           |  |  | 260 | 			$reussi_1 = true ;
 | 
        
           |  |  | 261 | 		}
 | 
        
           |  |  | 262 |   | 
        
           |  |  | 263 | 		// decalage borne gauche
 | 
        
           |  |  | 264 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 265 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 266 | 		if (PEAR::isError($res)) {
 | 
        
           |  |  | 267 |   | 
        
           |  |  | 268 |                 	die($res->getMessage());
 | 
        
           |  |  | 269 | 			$reussi_2 = false ;
 | 
        
           |  |  | 270 |                 }
 | 
        
           |  |  | 271 | 		else
 | 
        
           |  |  | 272 | 		{
 | 
        
           |  |  | 273 | 			$reussi_2 = true ;
 | 
        
           |  |  | 274 | 		}
 | 
        
           |  |  | 275 |   | 
        
           |  |  | 276 | 		$reussi = $reussi_1 && $reussi_2 ;
 | 
        
           |  |  | 277 |   | 
        
           |  |  | 278 | 		return $reussi ;
 | 
        
           |  |  | 279 | 	}
 | 
        
           |  |  | 280 |   | 
        
           |  |  | 281 | 	// inverse les bornes dun intervalle pour l'exclure des modifications sur l'arbre sans changer la hierarchie
 | 
        
           |  |  | 282 | 	function exclureIntervalle($bg, $bd, $id_utilisateur)
 | 
        
           |  |  | 283 | 	{
 | 
        
           |  |  | 284 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 285 |   | 
        
           |  |  | 286 | 		// decalage bornes
 | 
        
           |  |  | 287 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($bd).'" - 1 ,  cmc_bg =  cmc_bg -  "'.$DB->escapeSimple($bd).'" - 1 WHERE cmc_bd <=  "'.$DB->escapeSimple($bd).'" AND cmc_bg >=  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 288 |   | 
        
           |  |  | 289 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 290 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 291 |   | 
        
           |  |  | 292 |                 	die($res->getMessage());
 | 
        
           |  |  | 293 | 			return false ;
 | 
        
           |  |  | 294 |                 }
 | 
        
           |  |  | 295 | 		else
 | 
        
           |  |  | 296 | 		{
 | 
        
           |  |  | 297 | 			return true ;
 | 
        
           |  |  | 298 | 		}
 | 
        
           |  |  | 299 | 	}
 | 
        
           |  |  | 300 |   | 
        
           |  |  | 301 | 	// recale les bornes dun intervalle pour l'inclure dans l'arbre � la bonne place
 | 
        
           |  |  | 302 | 	function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur)
 | 
        
           |  |  | 303 | 	{
 | 
        
           |  |  | 304 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 305 |   | 
        
           |  |  | 306 | 		// decalage borne droite
 | 
        
           |  |  | 307 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg =  cmc_bg + "'.$DB->escapeSimple($decalage).'" , cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'", cmc_niveau = cmc_niveau + "'.$modif_niveau.'" WHERE cmc_bg >=  "'.$DB->escapeSimple($bg).'" AND cmc_bd <=  "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 308 |   | 
        
           |  |  | 309 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 310 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 311 |   | 
        
           |  |  | 312 |                 	die($res->getMessage());
 | 
        
           |  |  | 313 | 			return false ;
 | 
        
           |  |  | 314 |                 }
 | 
        
           |  |  | 315 | 		else
 | 
        
           |  |  | 316 | 		{
 | 
        
           |  |  | 317 | 			return true ;
 | 
        
           |  |  | 318 | 		}
 | 
        
           |  |  | 319 | 	}
 | 
        
           |  |  | 320 |   | 
        
           |  |  | 321 | 	function changerPere($id_mot_cle, $id_pere, $id_utilisateur)
 | 
        
           |  |  | 322 | 	{
 | 
        
           |  |  | 323 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 324 |   | 
        
           |  |  | 325 | 		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_id_parent = "'.$DB->escapeSimple($id_pere).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 326 |   | 
        
           |  |  | 327 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 328 |                  if (PEAR::isError($res)) {
 | 
        
           |  |  | 329 |   | 
        
           |  |  | 330 |                 	die($res->getMessage());
 | 
        
           |  |  | 331 | 			return false ;
 | 
        
           |  |  | 332 |                 }
 | 
        
           |  |  | 333 | 		else
 | 
        
           |  |  | 334 | 		{
 | 
        
           |  |  | 335 | 			return true ;
 | 
        
           |  |  | 336 | 		}
 | 
        
           |  |  | 337 | 	}
 | 
        
           |  |  | 338 |   | 
        
           |  |  | 339 | 	function getElement($uid)
 | 
        
           |  |  | 340 | 	{
 | 
        
           |  |  | 341 | 			// Controle detournement utilisateur
 | 
        
           |  |  | 342 | 		session_start();
 | 
        
           |  |  | 343 | 		$this->controleUtilisateur($uid[1]);
 | 
        
           |  |  | 344 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 345 |   | 
        
           |  |  | 346 | 		$this->suffix = '_'.$uid[0];
 | 
        
           |  |  | 347 | 		$id_utilisateur = $uid[1] ;
 | 
        
           |  |  | 348 |   | 
        
           |  |  | 349 | 		$query = 'SELECT cmc_mot_cle, cmc_id_mot_cle_utilisateur, cmc_id_parent FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ORDER BY cmc_niveau' ;
 | 
        
           |  |  | 350 |   | 
        
           |  |  | 351 | 		$result = array() ;
 | 
        
           |  |  | 352 |   | 
        
           |  |  | 353 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 354 | 		if (PEAR::isError($res))
 | 
        
           |  |  | 355 | 		{
 | 
        
           |  |  | 356 | 			die($res->getMessage());
 | 
        
           |  |  | 357 | 		}
 | 
        
           |  |  | 358 | 		else
 | 
        
           |  |  | 359 | 		{
 | 
        
           |  |  | 360 | 			while($motcle = $res->fetchrow(DB_FETCHMODE_ASSOC))
 | 
        
           |  |  | 361 | 			{
 | 
        
           |  |  | 362 | 				$result[] = $motcle ;
 | 
        
           |  |  | 363 | 			}
 | 
        
           |  |  | 364 |   | 
        
           |  |  | 365 | 			$res = json_encode($result) ;
 | 
        
           |  |  | 366 |   | 
        
           |  |  | 367 | 			header("content-type: text/json") ;
 | 
        
           |  |  | 368 | 			print $res ;
 | 
        
           |  |  | 369 | 			exit() ;
 | 
        
           |  |  | 370 | 		}
 | 
        
           |  |  | 371 | 	}
 | 
        
           |  |  | 372 |   | 
        
           |  |  | 373 | 	// met � jour les mots clés d'une image
 | 
        
           |  |  | 374 | 	function updateElement($uid,$pairs)
 | 
        
           |  |  | 375 | 	{
 | 
        
           |  |  | 376 | 		// Controle detournement utilisateur
 | 
        
           |  |  | 377 | 		session_start();
 | 
        
           |  |  | 378 | 		$this->controleUtilisateur($uid[1]);
 | 
        
           |  |  | 379 |   | 
        
           |  |  | 380 | 		$this->suffix = '_'.$uid[0];
 | 
        
           |  |  | 381 |   | 
        
           |  |  | 382 | 		$id_utilisateur = $uid[1] ;
 | 
        
           |  |  | 383 | 		$id_mot_cle = $pairs['id'] ;
 | 
        
           |  |  | 384 | 		$action = $pairs['action'] ;
 | 
        
           |  |  | 385 |   | 
        
           |  |  | 386 | 		if($action == 'modification')
 | 
        
           |  |  | 387 | 		{
 | 
        
           |  |  | 388 | 			$nouveau_nom = $pairs['motcle'] ;
 | 
        
           | 768 | aurelien | 389 | 			$nouvel_id_general = md5(strtolower($nouveau_nom)) ;
 | 
        
           | 416 | aurelien | 390 |   | 
        
           |  |  | 391 | 			$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 392 |   | 
        
           |  |  | 393 | 			$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_mot_cle = "'.$DB->escapeSimple($nouveau_nom).'" , cmc_id_mot_cle_general = "'.$DB->escapeSimple($nouvel_id_general).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 394 |   | 
        
           |  |  | 395 | 			$res =& $DB->query($query);
 | 
        
           |  |  | 396 | 			if (PEAR::isError($res))
 | 
        
           |  |  | 397 | 			{
 | 
        
           |  |  | 398 | 				die($res->getMessage());
 | 
        
           |  |  | 399 | 				$transaction_reussie_1 = false ;
 | 
        
           |  |  | 400 | 			}
 | 
        
           |  |  | 401 | 			else
 | 
        
           |  |  | 402 | 			{
 | 
        
           |  |  | 403 | 				$transaction_reussie_1 = true ;
 | 
        
           |  |  | 404 | 				echo "OK" ;
 | 
        
           |  |  | 405 | 			}
 | 
        
           |  |  | 406 | 		}
 | 
        
           |  |  | 407 |   | 
        
           |  |  | 408 | 		if($action == 'deplacement')
 | 
        
           |  |  | 409 | 		{
 | 
        
           |  |  | 410 | 			$this->desactiverAutoCommitEtCommencerTransaction() ;
 | 
        
           |  |  | 411 |   | 
        
           |  |  | 412 | 			$transaction_reussie_1 = true ;
 | 
        
           |  |  | 413 |   | 
        
           |  |  | 414 | 			$id_pere = $pairs['parent'] ;
 | 
        
           |  |  | 415 |   | 
        
           |  |  | 416 | 			$bornes = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ;
 | 
        
           |  |  | 417 | 			$bg = $bornes['cmc_bg']  ;
 | 
        
           |  |  | 418 | 			$bd = $bornes['cmc_bd']  ;
 | 
        
           |  |  | 419 | 			$niveau = $bornes['cmc_niveau'] ;
 | 
        
           |  |  | 420 |   | 
        
           |  |  | 421 | 			// on inverse l'intervalle de l'�l�ment d�plac� et du sous arbre
 | 
        
           |  |  | 422 | 			if($this->exclureIntervalle($bg,$bd,$id_utilisateur))
 | 
        
           |  |  | 423 | 			{
 | 
        
           |  |  | 424 | 				$transaction_reussie_2 = true ;
 | 
        
           |  |  | 425 | 			}
 | 
        
           |  |  | 426 | 			else
 | 
        
           |  |  | 427 | 			{
 | 
        
           |  |  | 428 | 				$transaction_reussie_2 = false ;
 | 
        
           |  |  | 429 | 			}
 | 
        
           |  |  | 430 |   | 
        
           |  |  | 431 | 			$bg_negative = $bg - $bd - 1 ;
 | 
        
           |  |  | 432 | 			$bd_negative = $bd - $bd - 1 ;
 | 
        
           |  |  | 433 |   | 
        
           |  |  | 434 | 			// on recalcule les intervalles de l'arbre priv� de ce sous arbre
 | 
        
           |  |  | 435 | 			if($this->decalerBornesMoinsIntervalle($bg,$bd,$id_utilisateur))
 | 
        
           |  |  | 436 | 			{
 | 
        
           |  |  | 437 | 				$transaction_reussie_3 = true ;
 | 
        
           |  |  | 438 | 			}
 | 
        
           |  |  | 439 | 			else
 | 
        
           |  |  | 440 | 			{
 | 
        
           |  |  | 441 | 				$transaction_reussie_3 = false ;
 | 
        
           |  |  | 442 | 			}
 | 
        
           |  |  | 443 |   | 
        
           |  |  | 444 | 			$bornes_pere = $this->calculerBornesEtNiveau($id_pere,$id_utilisateur) ;
 | 
        
           |  |  | 445 | 			$bg_pere = $bornes_pere['cmc_bg']  ;
 | 
        
           |  |  | 446 | 			$bd_pere = $bornes_pere['cmc_bd']  ;
 | 
        
           |  |  | 447 |   | 
        
           |  |  | 448 | 			$niveau_pere = $bornes_pere['cmc_niveau'] ;
 | 
        
           |  |  | 449 |   | 
        
           |  |  | 450 | 			$decalage = $bd - $bg + 1 ;
 | 
        
           |  |  | 451 |   | 
        
           |  |  | 452 | 			// on decale les bornes droite du pere pour pr�parer l'insertion
 | 
        
           |  |  | 453 | 			if($this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur))
 | 
        
           |  |  | 454 | 			{
 | 
        
           |  |  | 455 | 				$transaction_reussie_4 = true ;
 | 
        
           |  |  | 456 | 			}
 | 
        
           |  |  | 457 | 			else
 | 
        
           |  |  | 458 | 			{
 | 
        
           |  |  | 459 | 				$transaction_reussie_4 = false ;
 | 
        
           |  |  | 460 | 			}
 | 
        
           |  |  | 461 |   | 
        
           |  |  | 462 | 			$nouvelle_bd = $bd_pere + $decalage  ;
 | 
        
           |  |  | 463 |   | 
        
           |  |  | 464 | 			$modif_niveau = $niveau_pere - $niveau + 1 ;
 | 
        
           |  |  | 465 |   | 
        
           |  |  | 466 | 			if($this->inclureIntervalle($bg_negative,$bd_negative,$nouvelle_bd,$modif_niveau,$id_utilisateur))
 | 
        
           |  |  | 467 | 			{
 | 
        
           |  |  | 468 | 				$transaction_reussie_5 = true ;
 | 
        
           |  |  | 469 | 			}
 | 
        
           |  |  | 470 | 			else
 | 
        
           |  |  | 471 | 			{
 | 
        
           |  |  | 472 | 				$transaction_reussie_5 = false ;
 | 
        
           |  |  | 473 | 			}
 | 
        
           |  |  | 474 |   | 
        
           |  |  | 475 | 			if($this->changerPere($id_mot_cle,$id_pere,$id_utilisateur))
 | 
        
           |  |  | 476 | 			{
 | 
        
           |  |  | 477 | 				$transaction_reussie_6 = true ;
 | 
        
           |  |  | 478 | 			}
 | 
        
           |  |  | 479 | 			else
 | 
        
           |  |  | 480 | 			{
 | 
        
           |  |  | 481 | 				$transaction_reussie_6 = false ;
 | 
        
           |  |  | 482 | 			}
 | 
        
           |  |  | 483 |   | 
        
           |  |  | 484 | 			if($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6)
 | 
        
           |  |  | 485 | 			{
 | 
        
           |  |  | 486 | 				$this->reactiverAutoCommitEtCompleterTransaction() ;
 | 
        
           |  |  | 487 | 			}
 | 
        
           |  |  | 488 | 			else
 | 
        
           |  |  | 489 | 			{
 | 
        
           |  |  | 490 | 				$this->reactiverAutoCommitEtAnnulerTransaction() ;
 | 
        
           |  |  | 491 | 			}
 | 
        
           |  |  | 492 |   | 
        
           |  |  | 493 | 		}
 | 
        
           |  |  | 494 | 	}
 | 
        
           |  |  | 495 |   | 
        
           |  |  | 496 | 	function createElement($pairs)
 | 
        
           |  |  | 497 | 	{
 | 
        
           |  |  | 498 |   | 
        
           |  |  | 499 | 		// Controle detournement utilisateur
 | 
        
           |  |  | 500 | 		session_start();
 | 
        
           |  |  | 501 | 		$this->controleUtilisateur($pairs['identifiant']);
 | 
        
           |  |  | 502 |   | 
        
           |  |  | 503 | 		$this->suffix = '_'.$pairs['mode'];
 | 
        
           |  |  | 504 |   | 
        
           |  |  | 505 | 		$id_utilisateur = $pairs['identifiant'] ;
 | 
        
           |  |  | 506 | 		$mot_cle = $pairs['motcle'] ;
 | 
        
           |  |  | 507 |   | 
        
           |  |  | 508 | 		// TODO supprimer accents et majuscules
 | 
        
           |  |  | 509 | 		$id_mot_cle_general = md5(mb_strtolower($mot_cle)) ;
 | 
        
           |  |  | 510 | 		$id_mot_cle = $pairs['id'] ;
 | 
        
           |  |  | 511 | 		$id_parent = $pairs['parent'] ;
 | 
        
           |  |  | 512 |   | 
        
           |  |  | 513 | 		$this->verifierPresenceRacine($id_utilisateur) ;
 | 
        
           |  |  | 514 |   | 
        
           |  |  | 515 | 		$transaction_reussie = false ;
 | 
        
           |  |  | 516 |   | 
        
           |  |  | 517 | 		$this->desactiverAutoCommitEtCommencerTransaction() ;
 | 
        
           |  |  | 518 |   | 
        
           |  |  | 519 | 		$bornes = $this->calculerBornesEtNiveau($id_parent,$id_utilisateur) ;
 | 
        
           |  |  | 520 |   | 
        
           |  |  | 521 | 		$bg = $bornes['cmc_bd']  ;
 | 
        
           |  |  | 522 | 		$bd = $bg + 1 ;
 | 
        
           |  |  | 523 | 		$borne_pere = $bornes['cmc_bd'] ;
 | 
        
           |  |  | 524 |   | 
        
           |  |  | 525 | 		$niveau = $bornes['cmc_niveau']  + 1;
 | 
        
           |  |  | 526 |   | 
        
           |  |  | 527 | 		if($this->decalerBornesPlusDeux($borne_pere,$id_utilisateur))
 | 
        
           |  |  | 528 | 		{
 | 
        
           |  |  | 529 | 			$transaction_reussie_1 = true ;
 | 
        
           |  |  | 530 | 		}
 | 
        
           |  |  | 531 | 		else
 | 
        
           |  |  | 532 | 		{
 | 
        
           |  |  | 533 | 			$transaction_reussie_1 = false ;
 | 
        
           |  |  | 534 | 		}
 | 
        
           |  |  | 535 |   | 
        
           |  |  | 536 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 537 | 				$query = 'INSERT INTO  cel_mots_cles'.$this->suffix.' VALUES (' ;
 | 
        
           |  |  | 538 | 				$query .= '"'.$DB->escapeSimple($mot_cle).'",' ;
 | 
        
           |  |  | 539 | 				$query .= '"'.$DB->escapeSimple($bg).'",' ;
 | 
        
           |  |  | 540 | 				$query .= '"'.$DB->escapeSimple($bd).'",' ;
 | 
        
           |  |  | 541 | 				$query .= '"'.$DB->escapeSimple($id_mot_cle_general).'",' ;
 | 
        
           |  |  | 542 | 				$query .= '"'.$DB->escapeSimple($id_mot_cle).'",' ;
 | 
        
           |  |  | 543 | 				$query .= '"'.$DB->escapeSimple($id_utilisateur).'",' ;
 | 
        
           |  |  | 544 | 				$query .= '"'.$DB->escapeSimple($id_parent).'",' ;
 | 
        
           |  |  | 545 | 				$query .= '"'.$DB->escapeSimple($niveau).'"' ;
 | 
        
           |  |  | 546 | 				$query .= ')' ;
 | 
        
           |  |  | 547 |   | 
        
           |  |  | 548 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 549 |         if (PEAR::isError($res))
 | 
        
           |  |  | 550 | 		{
 | 
        
           |  |  | 551 | 			die($res->getMessage());
 | 
        
           |  |  | 552 | 			$transaction_reussie_2 = false ;
 | 
        
           |  |  | 553 |         }
 | 
        
           |  |  | 554 | 		else
 | 
        
           |  |  | 555 | 		{
 | 
        
           |  |  | 556 | 			$transaction_reussie_2 = true ;
 | 
        
           |  |  | 557 | 		}
 | 
        
           |  |  | 558 |   | 
        
           |  |  | 559 | 		if($transaction_reussie_1 && $transaction_reussie_2)
 | 
        
           |  |  | 560 | 		{
 | 
        
           |  |  | 561 | 			$this->reactiverAutoCommitEtCompleterTransaction() ;
 | 
        
           |  |  | 562 | 			echo "OK" ;
 | 
        
           |  |  | 563 | 		}
 | 
        
           |  |  | 564 | 		else
 | 
        
           |  |  | 565 | 		{
 | 
        
           |  |  | 566 | 			$this->reactiverAutoCommitEtAnnulerTransaction() ;
 | 
        
           |  |  | 567 | 		}
 | 
        
           |  |  | 568 |   | 
        
           |  |  | 569 | 	}
 | 
        
           |  |  | 570 |   | 
        
           |  |  | 571 | 	function deleteElement($uid){
 | 
        
           |  |  | 572 |   | 
        
           |  |  | 573 | 	   session_start();
 | 
        
           |  |  | 574 | 		$this->controleUtilisateur($uid[1]);
 | 
        
           |  |  | 575 | 		$this->suffix = '_'.$uid[0];
 | 
        
           |  |  | 576 |   | 
        
           |  |  | 577 | 		$DB=$this->connectDB($this->config,'cel_db');
 | 
        
           |  |  | 578 |   | 
        
           |  |  | 579 | 		$this->desactiverAutoCommitEtCommencerTransaction() ;
 | 
        
           |  |  | 580 |   | 
        
           |  |  | 581 | 		$id_mot_cle= $uid[2] ;
 | 
        
           |  |  | 582 | 		$id_utilisateur = $uid[1] ;
 | 
        
           |  |  | 583 |   | 
        
           |  |  | 584 | 		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ;
 | 
        
           |  |  | 585 |   | 
        
           |  |  | 586 | 		$bg = $bornes['cmc_bg'] ;
 | 
        
           |  |  | 587 | 		$bd = $bornes['cmc_bd'] ;
 | 
        
           |  |  | 588 |   | 
        
           |  |  | 589 | 		$query = 'DELETE FROM cel_mots_cles'.$this->suffix.' WHERE cmc_bg >= "'.$DB->escapeSimple($bg).'" AND cmc_bd <= "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
 | 
        
           |  |  | 590 |   | 
        
           |  |  | 591 | 		$res =& $DB->query($query);
 | 
        
           |  |  | 592 |         if (PEAR::isError($res))
 | 
        
           |  |  | 593 | 		{
 | 
        
           |  |  | 594 |                 	die($res->getMessage());
 | 
        
           |  |  | 595 | 			$transaction_reussie_1 = false ;
 | 
        
           |  |  | 596 |         }
 | 
        
           |  |  | 597 | 		else
 | 
        
           |  |  | 598 | 		{
 | 
        
           |  |  | 599 | 			if($DB->affectedRows() <= 0)
 | 
        
           |  |  | 600 | 			{
 | 
        
           |  |  | 601 | 				$transaction_reussie_1 = false ;
 | 
        
           |  |  | 602 | 			}
 | 
        
           |  |  | 603 | 			else
 | 
        
           |  |  | 604 | 			{
 | 
        
           |  |  | 605 | 				$transaction_reussie_1 = true ;
 | 
        
           |  |  | 606 | 			}
 | 
        
           |  |  | 607 | 		}
 | 
        
           |  |  | 608 |   | 
        
           |  |  | 609 |   | 
        
           |  |  | 610 | 		if($this->decalerBornesMoinsIntervalle($bg,$bd, $id_utilisateur))
 | 
        
           |  |  | 611 | 		{
 | 
        
           |  |  | 612 | 			$transaction_reussie_2 = true ;
 | 
        
           |  |  | 613 | 		}
 | 
        
           |  |  | 614 | 		else
 | 
        
           |  |  | 615 | 		{
 | 
        
           |  |  | 616 | 			$transaction_reussie_2 = false ;
 | 
        
           |  |  | 617 | 		}
 | 
        
           |  |  | 618 |   | 
        
           |  |  | 619 | 		if($transaction_reussie_1 && $transaction_reussie_2)
 | 
        
           |  |  | 620 | 		{
 | 
        
           |  |  | 621 | 			$this->reactiverAutoCommitEtCompleterTransaction() ;
 | 
        
           |  |  | 622 | 		}
 | 
        
           |  |  | 623 | 		else
 | 
        
           |  |  | 624 | 		{
 | 
        
           |  |  | 625 | 			$this->reactiverAutoCommitEtAnnulerTransaction() ;
 | 
        
           |  |  | 626 | 		}
 | 
        
           |  |  | 627 | 	}
 | 
        
           |  |  | 628 |   | 
        
           |  |  | 629 |  }
 | 
        
           |  |  | 630 | ?>
 |