Subversion Repositories eFlore/Applications.cel

Rev

Rev 631 | Rev 780 | Go to most recent revision | 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
64
	    session_start();
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
 
769 aurelien 82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET " ;
83
		$requete_maj_liaison_mots_cles .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$valeur.";') ";
84
		$requete_maj_liaison_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
416 aurelien 85
 
769 aurelien 86
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
87
 
88
		$retour = false;
89
 
90
		if ($resultat_maj_liaison_mots_cles) {
91
			$retour = 'OK';
92
		} else {
93
			$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);
94
		}
95
 
96
		$tableau_id_obs = split(',',$uid[1]);
97
		foreach($tableau_id_obs as $ordre_obs) {
98
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
99
		}
416 aurelien 100
 
769 aurelien 101
        return true;
416 aurelien 102
	}
103
 
104
	function deleteElement($uid){
105
 
106
	 	// Controle detournement utilisateur
107
	    session_start();
108
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
109
	 		print "Acces interdit";
110
 			return;
111
     	}
112
 
113
     	if(!isset($uid[2]) || !isset($uid[1])) {
114
     		echo 'pas de mots clés';
115
     		return;
116
     	}
117
 
118
     	$valeur = $uid[2] ;
119
 
769 aurelien 120
     	$valeur = $this->nettoyerMotsCles($valeur);
121
     	$chaine = $this->proteger($valeur);
416 aurelien 122
 
769 aurelien 123
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
416 aurelien 124
 
769 aurelien 125
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
126
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
416 aurelien 127
 
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, "null");
214
       	$valeur = trim($valeur, ";;");
215
 
216
       	return $valeur;
217
	}
218
 
219
	private function migrerMotsClesDansTableLiaison() {
220
 
221
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
222
											'WHERE TRIM(mots_cles) != ""';
223
 
224
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
225
 
226
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
227
 
228
		$max = 20000;
229
		$i = 0;
230
 
231
		foreach($obs_mots_cles as $obs_mc) {
232
 
233
			/*if($i >= $max) {
234
				return;
235
			}*/
236
 
237
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
238
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);
239
 
240
			$sous_requete_insertion_valeur = '';
241
 
242
			if(count($tableau_mots_cles_codes) > 0) {
243
 
244
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
245
 
246
					$mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID);
247
					if($this->estUnIdentifiantMotCle($mots_cles_codes)) {
248
						$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
249
					}
250
				}
251
 
252
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
253
 
254
				if(trim($sous_requete_insertion_valeur) != '') {
255
 
256
					$requete_insertion_mot_cles  = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
257
													'VALUES '.$sous_requete_insertion_valeur.' ';
258
 
259
					echo $requete_insertion_mot_cles.'<br />';
260
 
261
					$i++;
262
				}
263
			}
264
		}
265
	}
266
 
267
	private function estUnIdentifiantMotCle($chaine) {
268
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
269
	}
270
 
416 aurelien 271
 
272
}
273
?>