Subversion Repositories eFlore/Applications.cel

Rev

Rev 1076 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
 * InventoryImageLink.php
40
 *
41
 * Cas d'utilisation :
42
 * Service de liaisons d'images à des observations
43
 *
44
 * 2: Le service lie une ou plusieurs images à une ou plusieurs observations
45
 * 3: Le service renvoie les observations liées à une image
46
 */
769 aurelien 47
 Class InventoryKeyWordObsLink extends Cel {
48
 
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
51
 
52
 	function getRessource() {
53
 		$this->migrerMotsClesDansTableLiaison();
54
 	}
55
 
56
 	function getElement($uid) {
57
 
58
 	}
416 aurelien 59
 
769 aurelien 60
	// met à jour les associations des mots clés des observations
416 aurelien 61
	function updateElement($uid,$pairs)
62
	{
63
		// Controle detournement utilisateur
1080 aurelien 64
		if(!isset($_SESSION)) {session_start();}
416 aurelien 65
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
66
	 		print "Acces interdit";
67
 			return;
68
     	}
769 aurelien 69
 
416 aurelien 70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
71
     		return;
72
     	}
73
 
74
     	if(isset($pairs['action'])) {
75
     		$action = $pairs['action'];
76
     	}
77
 
78
     	$valeur = $pairs['mots_cles'];
631 aurelien 79
 
769 aurelien 80
		$valeur = $this->nettoyerMotsCles($valeur);
416 aurelien 81
 
780 aurelien 82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET ".
83
								"mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''),'".$valeur.";'),'null','') ".
84
								"WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
416 aurelien 85
 
780 aurelien 86
		/*echo $requete_maj_liaison_mots_cles; exit;*/
769 aurelien 87
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
88
 
89
		$retour = false;
90
 
91
		if ($resultat_maj_liaison_mots_cles) {
92
			$retour = 'OK';
93
		} else {
94
			$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);
95
		}
96
 
97
		$tableau_id_obs = split(',',$uid[1]);
98
		foreach($tableau_id_obs as $ordre_obs) {
99
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
100
		}
416 aurelien 101
 
769 aurelien 102
        return true;
416 aurelien 103
	}
104
 
105
	function deleteElement($uid){
106
 
107
	 	// Controle detournement utilisateur
1080 aurelien 108
		if(!isset($_SESSION)) {session_start();}
416 aurelien 109
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
110
	 		print "Acces interdit";
111
 			return;
112
     	}
113
 
114
     	if(!isset($uid[2]) || !isset($uid[1])) {
115
     		echo 'pas de mots clés';
116
     		return;
117
     	}
118
 
119
     	$valeur = $uid[2] ;
120
 
769 aurelien 121
     	$valeur = $this->nettoyerMotsCles($valeur);
122
     	$chaine = $this->proteger($valeur);
416 aurelien 123
 
769 aurelien 124
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
416 aurelien 125
 
1076 aurelien 126
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,".$chaine.",''),';;',';') ";
127
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$this->proteger($uid[1]).") AND identifiant = ".$this->proteger($uid[0]);
769 aurelien 128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
416 aurelien 129
 
769 aurelien 130
        if ($resultat_suppression_mots_cles) {
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
132
        	return false;
416 aurelien 133
        }
134
 
135
        return true;
769 aurelien 136
	}
137
 
138
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
139
 
140
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
141
 
142
		if(count($mots_cles_obs) > 0) {
416 aurelien 143
 
769 aurelien 144
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'],$identifiant_utilisateur);
145
 
146
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
147
 
148
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
149
		}
416 aurelien 150
	}
769 aurelien 151
 
152
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
153
 
154
			$requete_regeneration_texte_mots_cles = 'UPDATE cel_inventory '.
155
													'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
156
													'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
157
													'identifiant = '.$this->proteger($identifiant_utilisateur);
158
 
159
			$this->executerRequeteSimple($requete_regeneration_texte_mots_cles);
160
	}
161
 
162
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
163
 
164
		$requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '.
165
								'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
166
								' identifiant = '.$this->proteger($identifiant_utilisateur);
167
 
168
		$resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs);
169
 
170
		return $resultats_mot_cles_obs;
171
	}
172
 
173
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
174
 
175
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
176
 
177
		$requete_selection_texte_mot_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
178
												'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
179
												'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
180
 
181
		$resultat_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles);
182
 
183
		return $resultat_selection_texte_mot_cles;
184
	}
185
 
186
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
187
 
188
			$chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs);
189
			$chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID,',',$chaine_mot_cle_obs);
190
			$chaine_mot_cle_obs = trim($chaine_mot_cle_obs,',');
191
 
192
			return $chaine_mot_cle_obs;
193
	}
194
 
195
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
196
 
197
			$mot_cles_texte_chaine = '';
198
 
199
			if(is_array($tableau_mots_cles_texte)) {
200
				foreach($tableau_mots_cles_texte as $mot_cle) {
201
					$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
202
				}
203
			}
204
 
205
			$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine,self::SEPARATEUR_MOT_CLE_TEXTE);
206
 
207
			return $mot_cles_texte_chaine;
208
	}
209
 
210
	private function nettoyerMotsCles($chaine) {
211
 
212
		$valeur = str_replace('null','',$chaine);
213
       	$valeur = trim($valeur, ";;");
214
 
215
       	return $valeur;
216
	}
217
 
218
	private function migrerMotsClesDansTableLiaison() {
219
 
220
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
221
											'WHERE TRIM(mots_cles) != ""';
222
 
223
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
224
 
225
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
226
 
227
		$max = 20000;
228
		$i = 0;
229
 
230
		foreach($obs_mots_cles as $obs_mc) {
231
 
232
			/*if($i >= $max) {
233
				return;
234
			}*/
235
 
236
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
237
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);
238
 
239
			$sous_requete_insertion_valeur = '';
240
 
241
			if(count($tableau_mots_cles_codes) > 0) {
242
 
243
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
244
 
245
					$mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID);
246
					if($this->estUnIdentifiantMotCle($mots_cles_codes)) {
247
						$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
248
					}
249
				}
250
 
251
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
252
 
253
				if(trim($sous_requete_insertion_valeur) != '') {
254
 
255
					$requete_insertion_mot_cles  = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
256
													'VALUES '.$sous_requete_insertion_valeur.' ';
257
 
258
					echo $requete_insertion_mot_cles.'<br />';
259
 
260
					$i++;
261
				}
262
			}
263
		}
264
	}
265
 
266
	private function estUnIdentifiantMotCle($chaine) {
267
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
268
	}
269
 
416 aurelien 270
 
271
}
272
?>