Subversion Repositories eFlore/Applications.cel

Rev

Rev 2116 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2116 Rev 2143
Line 52... Line 52...
52
			"FROM {$this->table_mots_cles} ".
52
			"FROM {$this->table_mots_cles} ".
53
			"WHERE chemin LIKE CONCAT(($sousRequete), '%') ".
53
			"WHERE chemin LIKE CONCAT(($sousRequete), '%') ".
54
			"AND id_utilisateur = ".$idUtilisateurP." ".
54
			"AND id_utilisateur = ".$idUtilisateurP." ".
55
			' -- '.__FILE__.':'.__LINE__;
55
			' -- '.__FILE__.':'.__LINE__;
Line 56... Line 56...
56
 
56
 
Line 57... Line 57...
57
		$ids_enfants = Cel::db()->executerRequete($requete);
57
		$ids_enfants = Cel::db()->requeter($requete);
58
 
58
 
Line 59... Line 59...
59
		return $ids_enfants;
59
		return $ids_enfants;
Line 68... Line 68...
68
			"FROM {$this->table_mots_cles} ".
68
			"FROM {$this->table_mots_cles} ".
69
			"WHERE chemin = $cheminMotCleP ".
69
			"WHERE chemin = $cheminMotCleP ".
70
			"AND id_utilisateur = $idUtilisateurP ".
70
			"AND id_utilisateur = $idUtilisateurP ".
71
			' -- '.__FILE__.':'.__LINE__;
71
			' -- '.__FILE__.':'.__LINE__;
Line 72... Line 72...
72
 
72
 
Line 73... Line 73...
73
		$infosMotCle = Cel::db()->executerRequete($requete);
73
		$infosMotCle = Cel::db()->requeter($requete);
74
 
74
 
75
		if (!empty($infosMotCle)) {
75
		if (!empty($infosMotCle)) {
76
			$idMotCle = $infosMotCle[0]['id_mot_cle'];
76
			$idMotCle = $infosMotCle[0]['id_mot_cle'];
Line 126... Line 126...
126
	}
126
	}
Line 127... Line 127...
127
 
127
 
128
	public function lierParId($id_mot_cle, $id_element_lie) {
128
	public function lierParId($id_mot_cle, $id_element_lie) {
129
		$idElementLieP = Cel::db()->proteger($id_element_lie);
129
		$idElementLieP = Cel::db()->proteger($id_element_lie);
130
		$idMotCleP = Cel::db()->proteger($id_mot_cle);
130
		$idMotCleP = Cel::db()->proteger($id_mot_cle);
131
		
131
 
132
		$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
132
		$requete = "INSERT INTO {$this->table_liaison} (id_element_lie, id_mot_cle) ".
133
			"VALUES ($idElementLieP, $idMotCleP) ".
133
			"VALUES ($idElementLieP, $idMotCleP) ".
134
			'ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie '.
134
			'ON DUPLICATE KEY UPDATE id_element_lie = id_element_lie '.
Line 140... Line 140...
140
 
140
 
141
	public function lierParChemin($chemin, $id_element_lie, $id_utilisateur) {
141
	public function lierParChemin($chemin, $id_element_lie, $id_utilisateur) {
142
		$cheminP = Cel::db()->proteger(self::harmoniserChemin($chemin));
142
		$cheminP = Cel::db()->proteger(self::harmoniserChemin($chemin));
143
		$idElementLieP = Cel::db()->proteger($id_element_lie);
143
		$idElementLieP = Cel::db()->proteger($id_element_lie);
144
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
144
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
145
		
145
 
146
		$sousRequete = '(SELECT id_mot_cle '.
146
		$sousRequete = '(SELECT id_mot_cle '.
147
			"FROM {$this->table_mots_cles} ".
147
			"FROM {$this->table_mots_cles} ".
148
			"WHERE chemin = $cheminP ".
148
			"WHERE chemin = $cheminP ".
149
			"AND id_utilisateur = $idUtilisateurP ".
149
			"AND id_utilisateur = $idUtilisateurP ".
Line 185... Line 185...
185
				$idElementLieP = Cel::db()->proteger($id_element_lie);
185
				$idElementLieP = Cel::db()->proteger($id_element_lie);
186
				$combinaisons[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
186
				$combinaisons[] = "(id_element_lie = $idElementLieP AND id_mot_cle = $idMotCleP)";
187
			}
187
			}
188
		}
188
		}
189
		$clauseWhere = implode(' OR ', $combinaisons);
189
		$clauseWhere = implode(' OR ', $combinaisons);
190
		
190
 
191
		$requete = "DELETE FROM {$this->table_liaison} ".
191
		$requete = "DELETE FROM {$this->table_liaison} ".
192
			"WHERE $clauseWhere ".
192
			"WHERE $clauseWhere ".
193
			' -- '.__FILE__.':'.__LINE__;
193
			' -- '.__FILE__.':'.__LINE__;
194
		
194
 
195
		$suppression = Cel::db()->executer($requete);
195
		$suppression = Cel::db()->executer($requete);
196
		return $suppression;
196
		return $suppression;
197
	}
197
	}
Line 198... Line 198...
198
 
198
 
199
	public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
199
	public function supprimerToutesLiaisonsPourIdsElementsLies($ids_elements_lies) {
200
		$idsElementsLiesP = Cel::db()->protegerTableau($ids_elements_lies);
200
		$idsElementsLiesP = Cel::db()->proteger($ids_elements_lies);
201
		$listeIds = implode(',', $idsElementsLiesP);
201
		$listeIds = implode(',', $idsElementsLiesP);
202
		
202
 
203
		$requete = "DELETE FROM {$this->table_liaison} ".
203
		$requete = "DELETE FROM {$this->table_liaison} ".
204
			"WHERE id_element_lie IN ($listeIds) ".
204
			"WHERE id_element_lie IN ($listeIds) ".
Line 205... Line 205...
205
			' -- '.__FILE__.':'.__LINE__;
205
			' -- '.__FILE__.':'.__LINE__;
Line 210... Line 210...
210
	}
210
	}
Line 211... Line 211...
211
 
211
 
212
	public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
212
	public function supprimerToutesLiaisonsIdsMotsCles($ids_mots_cles, $id_utilisateur) {
213
		$suppression = true;
213
		$suppression = true;
214
		if (!empty($ids_mots_cles)) {
214
		if (!empty($ids_mots_cles)) {
215
			$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
215
			$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
216
			$listeIds = implode(',', $idsMotsClesP);
216
			$listeIds = implode(',', $idsMotsClesP);
217
			
217
 
218
			$requete = "DELETE FROM {$this->table_liaison} ".
218
			$requete = "DELETE FROM {$this->table_liaison} ".
219
				"WHERE id_mot_cle IN ($listeIds) ".
219
				"WHERE id_mot_cle IN ($listeIds) ".
Line 220... Line 220...
220
				' -- '.__FILE__.':'.__LINE__;
220
				' -- '.__FILE__.':'.__LINE__;
221
 
221
 
222
			$suppression = Cel::db()->executerRequeteSimple($requete);
222
			$suppression = Cel::db()->executer($requete);
223
			$suppression = ($suppression !== false) ? true : false;
223
			$suppression = ($suppression !== false) ? true : false;
224
		}
224
		}
Line 225... Line 225...
225
		return $suppression;
225
		return $suppression;
226
	}
226
	}
227
 
227
 
228
	/**
228
	/**
229
	 * Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
229
	 * Supprime toutes les laisons pour un utilisateur et un mot clé (au sens textuel) donnés.
230
	 * 
230
	 *
231
	 */
231
	 */
232
	public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
232
	public function supprimerLiaisonPourMotCleEtIdElementLie($mot_cle, $id_element_lie, $id_utilisateur) {
233
		$idElementLieP = Cel::db()->proteger($id_element_lie);
233
		$idElementLieP = Cel::db()->proteger($id_element_lie);
234
		$motCleP = Cel::db()->proteger($mot_cle);
234
		$motCleP = Cel::db()->proteger($mot_cle);
235
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
235
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
236
		
236
 
237
		$sousRequete = "SELECT id_mot_cle FROM {$this->table_mots_cles} ".
237
		$sousRequete = "SELECT id_mot_cle FROM {$this->table_mots_cles} ".
238
			"WHERE mot_cle = $motCleP ".
238
			"WHERE mot_cle = $motCleP ".
239
			"AND id_utilisateur = $idUtilisateurP ";
239
			"AND id_utilisateur = $idUtilisateurP ";
240
		$requete = "DELETE FROM {$this->table_liaison} ".
240
		$requete = "DELETE FROM {$this->table_liaison} ".
Line 241... Line 241...
241
			"WHERE id_element_lie = $idElementLieP ".
241
			"WHERE id_element_lie = $idElementLieP ".
242
			"AND id_mot_cle IN ($sousRequete) ".
242
			"AND id_mot_cle IN ($sousRequete) ".
Line 243... Line 243...
243
			' -- '.__FILE__.':'.__LINE__;
243
			' -- '.__FILE__.':'.__LINE__;
244
 
244
 
Line 282... Line 282...
282
		}
282
		}
Line 283... Line 283...
283
 
283
 
284
		return $renommage;
284
		return $renommage;
Line 285... Line 285...
285
	}
285
	}
286
 
286
 
287
	/** 
287
	/**
288
	 * Si aucun id_père n'est mentionné, c'est un déplacement vers la racine de l'arbre (qui n'existe pas).
288
	 * Si aucun id_père n'est mentionné, c'est un déplacement vers la racine de l'arbre (qui n'existe pas).
289
	 */
289
	 */
290
	public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
290
	public function deplacerMotCle($id_mot_cle, $id_pere, $id_utilisateur) {
Line 389... Line 389...
389
		// cas qui ne devrait jamais arriver normalement
389
		// cas qui ne devrait jamais arriver normalement
390
		if (!empty($chemin) && $chemin != '/') {
390
		if (!empty($chemin) && $chemin != '/') {
391
			$chemin = $chemin[0]['chemin'];
391
			$chemin = $chemin[0]['chemin'];
392
			$cheminP = Cel::db()->proteger($chemin.'%');
392
			$cheminP = Cel::db()->proteger($chemin.'%');
393
			$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
393
			$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
394
			
394
 
395
			$requete = "DELETE FROM {$this->table_mots_cles} ".
395
			$requete = "DELETE FROM {$this->table_mots_cles} ".
396
				"WHERE chemin LIKE $cheminP ".
396
				"WHERE chemin LIKE $cheminP ".
397
				"AND id_utilisateur = $idUtilisateurP ".
397
				"AND id_utilisateur = $idUtilisateurP ".
398
				' -- '.__FILE__.':'.__LINE__;;
398
				' -- '.__FILE__.':'.__LINE__;;
Line 403... Line 403...
403
		return ($suppression !== false);
403
		return ($suppression !== false);
Line 404... Line 404...
404
 
404
 
Line 405... Line 405...
405
	}
405
	}
406
 
406
 
407
	public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
407
	public function obtenirIdsMotClesPourMotsCles($mots_cles, $id_utilisateur) {
408
		$motsClesP = Cel::db()->protegerTableau($mots_cles);
408
		$motsClesP = Cel::db()->proteger($mots_cles);
Line 409... Line 409...
409
		$listeMotsClesP = implode(',', $motsClesP);
409
		$listeMotsClesP = implode(',', $motsClesP);
410
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
410
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
411
 
411
 
412
		$requete = 'SELECT id_mot_cle, mot_cle '.
412
		$requete = 'SELECT id_mot_cle, mot_cle '.
413
			"FROM {$this->table_mots_cles} ".
413
			"FROM {$this->table_mots_cles} ".
414
			"WHERE mot_cle IN ($listeMotsClesP) ".
414
			"WHERE mot_cle IN ($listeMotsClesP) ".
415
			"AND id_utilisateur = $idUtilisateurP ".
415
			"AND id_utilisateur = $idUtilisateurP ".
416
			' -- '.__FILE__.':'.__LINE__;
416
			' -- '.__FILE__.':'.__LINE__;
417
			
417
 
Line 418... Line 418...
418
		$resultat = Cel::db()->executer($requete);
418
		$resultat = Cel::db()->executer($requete);
419
		return $resultat;
419
		return $resultat;
420
	}
420
	}
421
 
421
 
422
	public function obtenirIdElementsLiesPourChemins($chemins, $id_utilisateur) {
422
	public function obtenirIdElementsLiesPourChemins($chemins, $id_utilisateur) {
423
		foreach ($chemins as &$chemin) {
423
		foreach ($chemins as &$chemin) {
424
			$chemin = Cel::db()->proteger(self::harmoniserChemin($chemin));
424
			$chemin = Cel::db()->proteger(self::harmoniserChemin($chemin));
425
		}
425
		}
426
		$listeChemins = implode(',', $chemin);
426
		$listeChemins = implode(',', $chemin);
427
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
427
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
428
		
428
 
429
		$requete = 'SELECT id_element_lie '.
429
		$requete = 'SELECT id_element_lie '.
Line 441... Line 441...
441
	}
441
	}
Line 442... Line 442...
442
 
442
 
443
	public function obtenirIdElementsLiesPourIds($ids_mots_cles) {
443
	public function obtenirIdElementsLiesPourIds($ids_mots_cles) {
444
		$idsElementsLies = array();
444
		$idsElementsLies = array();
445
		if (!empty($ids_mots_cles)) {
445
		if (!empty($ids_mots_cles)) {
446
			$idsMotsClesP = Cel::db()->protegerTableau($ids_mots_cles);
446
			$idsMotsClesP = Cel::db()->proteger($ids_mots_cles);
447
			$listeIdsMotsCles = implode(',', $idsMotsClesP);
447
			$listeIdsMotsCles = implode(',', $idsMotsClesP);
448
			
448
 
449
			$requete = 'SELECT id_element_lie '.
449
			$requete = 'SELECT id_element_lie '.
450
				"FROM {$this->table_liaison} ".
450
				"FROM {$this->table_liaison} ".
451
				"WHERE id_mot_cle IN ($listeIdsMotsCles) ".
451
				"WHERE id_mot_cle IN ($listeIdsMotsCles) ".
452
				' -- '.__FILE__.':'.__LINE__;
-
 
Line -... Line 452...
-
 
452
				' -- '.__FILE__.':'.__LINE__;
453
				
453
 
454
 
454
 
455
			$idsElementsLies = Cel::db()->executerRequete($requete);
455
			$idsElementsLies = Cel::db()->requeter($requete);
456
		}
456
		}
Line 457... Line 457...
457
		return $idsElementsLies;
457
		return $idsElementsLies;
Line 498... Line 498...
498
		}
498
		}
499
		return $tables;
499
		return $tables;
500
	}
500
	}
Line 501... Line 501...
501
 
501
 
502
	/**
502
	/**
503
	 * Renvoie un template de requete pour selectionner la concatenation de mots clé 
503
	 * Renvoie un template de requete pour selectionner la concatenation de mots clé
504
	 * pour un element donné (utilisable avec sprintf)
504
	 * pour un element donné (utilisable avec sprintf)
505
	 */
505
	 */
506
	public static function obtenirTemplateRequeteMotsClesTexte($mode) {
506
	public static function obtenirTemplateRequeteMotsClesTexte($mode) {
507
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
507
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
508
		
508
 
509
		$requeteTpl = 'SELECT GROUP_CONCAT(mot_cle) '.
509
		$requeteTpl = 'SELECT GROUP_CONCAT(mot_cle) '.
510
			"FROM $table_mots_cles AS cm ".
510
			"FROM $table_mots_cles AS cm ".
511
			"INNER JOIN $table_liaison AS cml ON cml.id_mot_cle = cm.id_mot_cle ".
511
			"INNER JOIN $table_liaison AS cml ON cml.id_mot_cle = cm.id_mot_cle ".
512
			'AND cml.id_element_lie = %s ';
512
			'AND cml.id_element_lie = %s ';
513
		
513
 
514
		return $requeteTpl;
514
		return $requeteTpl;
515
	}
515
	}
516
	/**
516
	/**
517
	* Renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf.
517
	* Renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf.
Line 521... Line 521...
521
		$requeteTpl = "SELECT id_element_lie FROM $table_liaison WHERE id_mot_cle IN (%s) ";
521
		$requeteTpl = "SELECT id_element_lie FROM $table_liaison WHERE id_mot_cle IN (%s) ";
522
		return $requeteTpl;
522
		return $requeteTpl;
523
	}
523
	}
Line 524... Line 524...
524
 
524
 
525
	// Fonctions utilitaires
525
	// Fonctions utilitaires
526
	
526
 
527
	/**
527
	/**
528
	 * La profondeur d'un noeud est déterminée par le nombre de slashs
528
	 * La profondeur d'un noeud est déterminée par le nombre de slashs
529
	 * qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
529
	 * qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé.
530
	 */
530
	 */
Line 550... Line 550...
550
		$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
550
		$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
551
		$chemin = str_replace('//', '/', $chemin);
551
		$chemin = str_replace('//', '/', $chemin);
552
		return $chemin;
552
		return $chemin;
553
	}
553
	}
Line 554... Line 554...
554
 
554
 
555
	/** 
555
	/**
556
	 * Fonction de slugification du mot clé
556
	 * Fonction de slugification du mot clé
557
	 * 
557
	 *
558
	 * Ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
558
	 * Ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
559
	 * clés texte dans les tables obs ou image)
559
	 * clés texte dans les tables obs ou image)
560
	 */
560
	 */
561
	static public function simplifier($text) {
561
	static public function simplifier($text) {
562
		$caracteresASupprimer = array('\\','/', ',');
562
		$caracteresASupprimer = array('\\','/', ',');
563
		$text = str_replace($caracteresASupprimer, '', $text);
563
		$text = str_replace($caracteresASupprimer, '', $text);
564
		$text = trim($text);
564
		$text = trim($text);
565
		return $text;
565
		return $text;
Line 566... Line 566...
566
	}
566
	}
567
 
567
 
568
	/** 
568
	/**
569
	 * Gardée pour compatibilité ancienne version (mais devrait être supprimée
569
	 * Gardée pour compatibilité ancienne version (mais devrait être supprimée
570
	 * dans le futur
570
	 * dans le futur
571
	 */
571
	 */
Line 601... Line 601...
601
	 */
601
	 */
602
	private static function migrerLiaisonEtMotsCles($email_utilisateur, $infos_utilisateur, $mode) {
602
	private static function migrerLiaisonEtMotsCles($email_utilisateur, $infos_utilisateur, $mode) {
603
		list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
603
		list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
604
		$idUtilisateurP = Cel::db()->proteger($infos_utilisateur['id_utilisateur']);
604
		$idUtilisateurP = Cel::db()->proteger($infos_utilisateur['id_utilisateur']);
605
		$emailUtilisateurP = Cel::db()->proteger($email_utilisateur);
605
		$emailUtilisateurP = Cel::db()->proteger($email_utilisateur);
606
		
606
 
607
		$requete_migration_mc = "UPDATE {$table_mots_cles} ".
607
		$requete_migration_mc = "UPDATE {$table_mots_cles} ".
608
			"SET id_utilisateur = $idUtilisateurP ".
608
			"SET id_utilisateur = $idUtilisateurP ".
609
			"WHERE id_utilisateur = $emailUtilisateurP ";
609
			"WHERE id_utilisateur = $emailUtilisateurP ";
Line 610... Line 610...
610
 
610
 
611
		$migration = Cel::db()->executerRequeteSimple($requete_migration_mc);
611
		$migration = Cel::db()->executer($requete_migration_mc);
612
		$migration = ($migration !== false) ? true : false;
612
		$migration = ($migration !== false) ? true : false;
613
		return $migration;
613
		return $migration;
614
	}
614
	}
615
}
615
}