Subversion Repositories eFlore/Applications.cel

Rev

Rev 934 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 934 Rev 958
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
/**
3
/**
4
* PHP Version 5
4
* PHP Version 5
5
*
5
*
6
* @category  PHP
6
* @category  PHP
7
* @package   jrest
7
* @package   jrest
8
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
8
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
9
* @copyright 2010 Tela-Botanica
9
* @copyright 2010 Tela-Botanica
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @version   SVN: <svn_id>
11
* @version   SVN: <svn_id>
12
* @link      /doc/jrest/
12
* @link      /doc/jrest/
13
*/
13
*/
14
 
14
 
15
/**
15
/**
16
* in : utf8
16
* in : utf8
17
* out : utf8
17
* out : utf8
18
* 
18
* 
19
* Librairie de liaison d'images et d'observation à des mots clés
19
* Librairie de liaison d'images et d'observation à des mots clés
20
*
20
*
21
*/
21
*/
22
class LiaisonMotsCles extends Cel {
22
class LiaisonMotsCles extends Cel {
23
	
23
	
24
	const SEPARATEUR_MOT_CLE_TEXTE = '##';
24
	const SEPARATEUR_MOT_CLE_TEXTE = '##';
25
	private $mode = 'obs';
25
	private $mode = 'obs';
26
	
26
	
27
	public function LiaisonMotsCles($config, $mode) {
27
	public function LiaisonMotsCles($config, $mode) {
-
 
28
		parent::__construct($config);
28
		$this->mode = $mode;
29
		$this->mode = $mode;
29
	}
30
	}
30
	
31
	
31
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
32
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
-
 
33
		
-
 
34
		// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons
32
		
35
		// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène
33
		$requete_liaison_mots_cles = 'INSERT INTO cel_'.$this->mode.'_mots_cles '.
36
		$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '.
34
								   '(id_observation, id_mot_cle_utilisateur)'.
37
								   '(id_observation, id_mot_cle_utilisateur) '.
35
								   'VALUES (';
38
								   'VALUES ';
36
								   
39
								   
37
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
40
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
38
			foreach($mots_cles as $mot) {
41
			foreach($mots_cles as $mot) {
39
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$mot.')';
42
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
40
			}
43
			}
41
			$this->regenererIndexTexteMotCleObservation($id_image_ou_obs, $id_utilisateur);
44
			$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
42
		}
45
		}
-
 
46
		
-
 
47
		$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
43
 
48
 
44
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
49
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
45
		
50
		
46
		if(!$resultat_liaison_mots_cles) {
51
		if(!$resultat_liaison_mots_cles) {
47
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
52
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
48
		}
53
		}
49
		
54
		
50
		return $resultat_liaison_mots_cles;			
55
		return $resultat_liaison_mots_cles;			
51
	}
56
	}
52
	
57
	
53
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
58
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
54
		
59
		
55
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
60
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
56
		
61
		
57
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE ';
62
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
58
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') '.
63
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') '.
59
											   'AND id_mot_cle_utilisateur IN ('.implode(',',$ids_images_ou_obs).')';
64
											   'AND id_mot_cle_utilisateur IN ('.implode(',',$mots_cles).')';
60
		
65
		
61
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
66
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
62
		
67
		
63
		if ($resultat_suppression_mot_cle) {
68
		if ($resultat_suppression_mot_cle) {
64
			$retour = true;
69
			$retour = true;
65
		} else {
70
		} else {
66
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
71
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
67
			$this->logger($message);
72
			$this->logger($message);
-
 
73
			
-
 
74
			$retour = false;
68
		}
75
		}
69
		
76
		
70
		foreach($ids_images_ou_obs as $image_ou_obs) {
77
		foreach($ids_images_ou_obs as $image_ou_obs) {
71
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
78
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
72
		}	
79
		}	
-
 
80
		
-
 
81
		return $retour;
73
	}
82
	}
74
		
83
		
75
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
84
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
76
		
85
		
77
		$mots_cles = $this->obtenirMotsCles($image_ou_obs, $identifiant_utilisateur);
86
		$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur);
78
		
87
		
79
		if (count($mots_cles) > 0) {
88
		if (count($mots_cles) > 0) {
80
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
89
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
81
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
90
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
82
		}
91
		}
83
	}
92
	}
84
	
-
 
85
	//TODO : a refaire 
93
	
86
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
94
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
87
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_observation' : 'cel_image').
95
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
88
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
96
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
89
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
97
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
90
					'	AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
98
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
91
		
99
		
92
		$this->executerRequeteSimple($requete);
100
		return $this->executer($requete);
93
	}
101
	}
94
	
102
	
95
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
103
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
96
		$requete = 	'SELECT mots_cles_texte '.
104
		$requete = 	'SELECT mot_cle '.
-
 
105
					'FROM '.'cel_mots_cles_'.$this->mode.' '.
-
 
106
					'WHERE id_mot_cle_utilisateur IN '.
-
 
107
						'('.
-
 
108
							'SELECT id_mot_cle_utilisateur '.
97
					'FROM '.(($this->mode == 'obs') ? 'cel_observation' : 'cel_image').
109
							'FROM cel_'.$this->mode.'_mots_cles '.
98
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
110
							'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
-
 
111
						')'.
99
					'	AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
112
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
100
		
113
		
101
		$resultats = $this->executerRequete($requete);
114
		$resultats = $this->requeter($requete);
102
				
115
				
103
		return $resultats;
116
		return $resultats;
104
	}
117
	}
105
	
118
	
106
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
119
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
107
		$mot_cles_texte_chaine = '';
120
		$mot_cles_texte_chaine = '';
108
		
121
		
109
		if (is_array($tableau_mots_cles_texte)) { 
122
		if (is_array($tableau_mots_cles_texte)) { 
110
			foreach ($tableau_mots_cles_texte as $mot_cle) {
123
			foreach ($tableau_mots_cles_texte as $mot_cle) {
111
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
124
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
112
			}
125
			}
113
		}
126
		}
114
		
127
		
115
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
128
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
116
		
129
		
117
		return $mot_cles_texte_chaine;
130
		return $mot_cles_texte_chaine;
118
	}
131
	}
119
	
132
	
120
	private function nettoyerMotsCles($chaine) {
133
	public function nettoyerMotsCles($chaine) {
121
		$valeur = str_replace('null', '', $chaine);
134
		$valeur = str_replace('null', '', $chaine);
122
		$valeur = trim($valeur, ';;');
135
		$valeur = trim($valeur, ';;');
123
		
136
		
124
		return $valeur;
137
		return $valeur;
125
	}
138
	}
126
}
139
}
127
?>
140
?>