Subversion Repositories eFlore/Applications.cel

Rev

Rev 2059 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2059 Rev 2060
Line 22... Line 22...
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;
Line 26... Line 26...
26
		
26
		
27
		list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
-
 
28
	}
-
 
29
	
-
 
30
	public static function getTablesMotsClesEtLiaison($mode) {
-
 
31
		if($mode == 'obs') {
-
 
32
			$table_liaison = 'cel_mots_cles_obs_liaison';
-
 
33
			$table_mots_cles = 'cel_arbre_mots_cles_obs';
-
 
34
		} else {
-
 
35
			$table_liaison = 'cel_mots_cles_images_liaison';
-
 
36
			$table_mots_cles = 'cel_arbre_mots_cles_images';
-
 
37
		}
-
 
38
		return array($table_liaison, $table_mots_cles);
27
		list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
Line 39... Line 28...
39
	}
28
	}
40
	
29
	
41
	public function obtenirArbre($id_utilisateur, $chemin = "/") {
30
	public function obtenirArbre($id_utilisateur, $chemin = "/") {
Line 239... Line 228...
239
		return $suppression_liaison;
228
		return $suppression_liaison;
240
	}
229
	}
Line 241... Line 230...
241
	
230
	
Line -... Line 231...
-
 
231
	public function renommerMotCle($id_mot_cle, $nouveau_nom) {
-
 
232
		
242
	public function renommerMotCle($id_mot_cle, $nouveau_nom) {
233
		$nouveau_nom = self::simplifier($nouveau_nom);
243
		
234
		
244
		$requete_ancien_chemin = 'SELECT chemin, id_utilisateur FROM '.$this->table_mots_cles.' '.
235
		$requete_ancien_chemin = 'SELECT chemin, id_utilisateur FROM '.$this->table_mots_cles.' '.
Line 245... Line 236...
245
								  'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
236
								  'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
Line 326... Line 317...
326
		$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle);
317
		$ids_mot_cle_et_enfants = $this->obtenirIdsMotsClesParIdParent($id_utilisateur, $id_mot_cle);
Line 327... Line 318...
327
		
318
		
Line 328... Line 319...
328
		$print = array();
319
		$print = array();
329
		
320
		
330
		// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
321
		// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
331
		// régénérer les index texte de mots clés sur les éléments liés
322
		// régénérer les index texte de mots clés sur les éléments liés)
332
		$ids_a_delier = array();
323
		$ids_a_delier = array();
333
		foreach($ids_mot_cle_et_enfants as $id) {
324
		foreach($ids_mot_cle_et_enfants as $id) {
Line 352... Line 343...
352
		$selection_chemin = 'SELECT chemin FROM '.$this->table_mots_cles.' '.
343
		$selection_chemin = 'SELECT chemin FROM '.$this->table_mots_cles.' '.
353
										 'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
344
										 'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
354
		$chemin = Cel::db()->requeter($selection_chemin.' -- '.__FILE__.':'.__LINE__);
345
		$chemin = Cel::db()->requeter($selection_chemin.' -- '.__FILE__.':'.__LINE__);
Line 355... Line 346...
355
		
346
		
356
		$suppression = true;
347
		$suppression = true;
-
 
348
		// vérification pour empecher la suppression accidentelle de tout l'arbre, 
357
		// vérification pour empecher la suppression accidentelle de tout l'arbre, cas qui ne devrait arriver
349
		// cas qui ne devrait jamais arriver normalement
358
		if(!empty($chemin) && $chemin != "/") {	
350
		if(!empty($chemin) && $chemin != "/") {	
359
			$chemin = $chemin[0]['chemin'];		
351
			$chemin = $chemin[0]['chemin'];		
360
			$requete = "DELETE FROM ".$this->table_mots_cles." WHERE chemin LIKE ".
352
			$requete = "DELETE FROM ".$this->table_mots_cles." WHERE chemin LIKE ".
361
						Cel::db()->proteger($chemin.'%')." ".
353
						Cel::db()->proteger($chemin.'%')." ".
Line 410... Line 402...
410
		}
402
		}
Line 411... Line 403...
411
 
403
 
412
		return $ids_elements_lies;
404
		return $ids_elements_lies;
Line -... Line 405...
-
 
405
	}
-
 
406
	
-
 
407
	/*****
-
 
408
	 * 
-
 
409
	 * Fonctions statiques utilitaires
-
 
410
	 * (Dans l'idéal toute la classe pourrait être statique car elle n'a 
-
 
411
	 * pas d'état (mais il faudrait passer $mode à toutes les fonctions)
-
 
412
	 * 
-
 
413
	 */
-
 
414
	public static function getTablesMotsClesEtLiaisons($mode) {
-
 
415
		if($mode == 'obs') {
-
 
416
			$table_liaison = 'cel_mots_cles_obs_liaison';
-
 
417
			$table_mots_cles = 'cel_arbre_mots_cles_obs';
-
 
418
		} else {
-
 
419
			$table_liaison = 'cel_mots_cles_images_liaison';
-
 
420
			$table_mots_cles = 'cel_arbre_mots_cles_images';
-
 
421
		}
-
 
422
		return array($table_liaison, $table_mots_cles);
413
	}
423
	}
414
	
424
	
415
	public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
425
	public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
Line 416... Line 426...
416
		$sous_requete_concat = '('.sprintf(GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte($mode),
426
		$sous_requete_concat = '('.sprintf(GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte($mode),
417
		Cel::db()->proteger($id_element_lie)).')';
427
		Cel::db()->proteger($id_element_lie)).')';
418
		
428
		
419
		list($table, $champ_id) = self::getNomTablesEtChampsElementsLies($mode);
429
		list($table, $champ_id) = self::getNomTablesEtChampsElementsLies($mode);
420
		$requete = 'UPDATE '.$table.' SET mots_cles_texte = '.$sous_requete_concat.' '.
430
		$requete = 'UPDATE '.$table.' SET mots_cles_texte = '.$sous_requete_concat.' '.
421
				           'WHERE '.$champ_id.' = '.Cel::db()->proteger($id_element_lie).' ';
431
				           'WHERE '.$champ_id.' = '.Cel::db()->proteger($id_element_lie).' ';
Line 422... Line 432...
422
		
432
 
423
		return Cel::db()->executer($requete, __FILE__ , __LINE__);
433
		return Cel::db()->executer($requete, __FILE__ , __LINE__);
Line 431... Line 441...
431
			$tables = array('cel_images','id_image');
441
			$tables = array('cel_images','id_image');
432
		}
442
		}
433
		return $tables;
443
		return $tables;
434
	}
444
	}
Line 435... Line 445...
435
	
445
	
436
	public static function obtenirTemplateRequeteMotsClesMotsClesIds($mode) {
446
	public static function obtenirTemplateRequeteMotsClesTexte($mode) {
Line 437... Line 447...
437
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
447
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
438
		
448
		
439
		// renvoie un template de requete pour selectionner la concatenation
449
		// renvoie un template de requete pour selectionner la concatenation
440
		// de mots clé pour un element donné (utilisable avec sprintf)
450
		// de mots clé pour un element donné (utilisable avec sprintf)
441
		return 'SELECT GROUP_CONCAT(mot_cle) '.
451
		return 'SELECT GROUP_CONCAT(mot_cle) '.
442
					'FROM '.$table_mots_cles.' cm '.
452
					'FROM '.$table_mots_cles.' cm '.
443
					'INNER JOIN '.$table_liaison.' cml '.
453
					'INNER JOIN '.$table_liaison.' cml '.
444
					'ON cml.id_mot_cle = cm.id_mot_cle '.
454
					'ON cml.id_mot_cle = cm.id_mot_cle '.
Line 445... Line 455...
445
					'AND cml.id_element_lie = %s ';
455
					'AND cml.id_element_lie = %s ';
446
	}
456
	}
Line 447... Line 457...
447
	
457
	
448
	public static function obtenirTemplateRequeteMotsClesTexte($mode) {
458
	public static function obtenirTemplateRequeteMotsClesIds($mode) {
449
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
459
		list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
450
		
460
		
451
		// renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf
461
		// renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf
Line 452... Line 462...
452
		return "SELECT id_element_lie ".
462
		return "SELECT id_element_lie ".
453
				"FROM ".$table_liaison." ".
463
				"FROM ".$table_liaison." ".
454
				"WHERE id_mot_cle IN (%s) ";
-
 
-
 
464
				"WHERE id_mot_cle IN (%s) ";
-
 
465
	}
455
	}
466
	
456
	
467
	// Fonctions utilitaires	
457
	// Fonctions utilitaires	
468
	static public function comparerProfNoeuds($a, $b) {
Line 458... Line 469...
458
	static public function comparerProfNoeuds($a, $b) {
469
		// la profondeur d'un noeud est déterminée par le nombre de slashs 
Line 479... Line 490...
479
		$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
490
		$chemin = self::endsWith($chemin,'/') ? $chemin : $chemin.'/';
480
		return str_replace('//', '/', $chemin);
491
		return str_replace('//', '/', $chemin);
481
	}
492
	}
Line 482... Line 493...
482
	
493
	
483
	// fonction de slugification du mot clé
-
 
484
	// http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string
494
	// fonction de slugification du mot clé
485
	static public function simplifier($text)
495
	static public function simplifier($text)
-
 
496
	{
-
 
497
		// ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots 
486
	{
498
		// clés texte dans les tables obs ou image)
-
 
499
		return trim(str_replace(array('\\','/', ','), '', $text));
-
 
500
	}
-
 
501
	
-
 
502
	// gardée pour compatibilité ancienne version (mais devrait être supprimée
-
 
503
	// dans le futur
-
 
504
	static function nettoyerMotsClesAvantSuppression($chaine) {
-
 
505
		$valeur = str_replace('null', '', $chaine);
-
 
506
		$valeur = trim($valeur, ';;');
-
 
507
				
487
		return trim(str_replace(array('\\','/'), '', $text));
508
		return $valeur;
Line 488... Line 509...
488
	}
509
	}
489
	
510
	
490
	static public function startsWith($haystack, $needle) {
511
	static public function startsWith($haystack, $needle) {
Line 491... Line 512...
491
		return $needle === "" || strpos($haystack, $needle) === 0;
512
		return $needle === "" || strpos($haystack, $needle) === 0;
492
	}
513
	}
493
	
514
	
-
 
515
	static public function endsWith($haystack, $needle) {
-
 
516
		return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
-
 
517
	}
-
 
518
	
-
 
519
	/**
-
 
520
	* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
-
 
521
	* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie
-
 
522
	* @param string $mail_utilisateur
-
 
523
	* @param string $id_utilisateur
-
 
524
	*/
-
 
525
	public static function migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur) {
-
 
526
		return self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'obs') &&
-
 
527
				self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'images');
-
 
528
	}
-
 
529
	
-
 
530
	private static function migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, $mode) {
-
 
531
		
-
 
532
		list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
-
 
533
		
-
 
534
		// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
-
 
535
		// avec l'identifiant $id_utilisateur ce qui est normalement le cas
-
 
536
		// ça devrait normalement marcher correctement même s'il en a déjà mais ça n'a pas été testé
-
 
537
		$requete_migration_mc = 'UPDATE '.$table_mots_cles.' SET '.
-
 
538
		'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
-
 
539
		'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
-
 
540
		
-
 
541
		$migration_mc = Cel::db()->executerRequeteSimple($requete_migration_mc);
-
 
542
		
-
 
543
		$requete_migration_mc_liaisons = 'UPDATE '.$table_liaisons.' SET '.
-
 
544
                'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
-
 
545
                'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
-
 
546
               
-
 
547
        $migration_mc_liaisons = Cel::db()->executerRequeteSimple($requete_migration_mc_liaisons);
-
 
548
		
494
	static public function endsWith($haystack, $needle) {
549
		return $migration_mc !== false &&
495
		return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
550
		$migration_mc_liaisons  !== false;
496
	}
551
	}