Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

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