Subversion Repositories eFlore/Applications.cel

Rev

Rev 816 | Rev 828 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 816 Rev 819
Line 1... Line 1...
1
<?php
1
<?php
2
 
-
 
-
 
2
// declare(encoding='UTF-8');
3
/**
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.
4
 * Service de liaisons d'images à des observations.
17
 
-
 
18
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
5
 * Le service lie une ou plusieurs images à une ou plusieurs observations
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?.
6
 * Le service renvoie les observations liées à une image
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
7
 * Encodage en entrée : utf8
38
/*
-
 
39
 * InventoryImageLink.php
8
 * Encodage en sortie : utf8
40
 *
9
 *
41
 * Cas d'utilisation :
10
 * Cas d'utilisation :
42
 * Service de liaisons d'images à des observations
-
 
43
 *
11
 *
44
 * 2: Le service lie une ou plusieurs images à une ou plusieurs observations
12
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
45
 * 3: Le service renvoie les observations liées à une image
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
15
 * @version $Id$
-
 
16
 * @copyright © 2011, Tela-Botanica
46
 */
17
 */
47
 Class InventoryKeyWordObsLink extends Cel {
18
class InventoryKeyWordObsLink extends Cel {
48
 	
19
	
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
20
	const SEPARATEUR_MOT_CLE_TEXTE = '##';
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
21
	const SEPARATEUR_MOT_CLE_ID = ';';
51
 	
22
	
52
 	function getRessource() {
23
	public function getRessource() {
53
 		//$this->migrerMotsClesDansTableLiaison();	
24
		//$this->migrerMotsClesDansTableLiaison();	
54
 	}
25
	}
55
 	
26
	
56
 	function getElement($uid) {
27
	public function getElement($uid) {
57
 		
28
	
58
 	}
29
	}
Line 59... Line 30...
59
 
30
 
60
	// met à jour les associations des mots clés des observations
31
	// met à jour les associations des mots clés des observations
61
	function updateElement($uid,$pairs)
-
 
62
	{
32
	public function updateElement($uid,$pairs) {
63
		// Controle detournement utilisateur
33
		// Controle detournement utilisateur
64
	    session_start();
34
		session_start();
65
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
35
		if (($_SESSION['user'] != '') && $_SESSION['user']['name'] != $uid[0]) {
66
	 		print "Acces interdit";
36
			print "Acces interdit";
67
 			return;
37
			return;
68
     	}
38
		}
69
     	
39
	
70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
40
		if (!isset($pairs['mots_cles']) || !isset($uid[1])) {
71
     		return;
41
			return;
Line 72... Line 42...
72
     	}
42
		}
73
 
43
 
74
     	if(isset($pairs['action'])) {
44
		if (isset($pairs['action'])) {
Line 75... Line 45...
75
     		$action = $pairs['action'];
45
			$action = $pairs['action'];
76
     	}
-
 
77
 
46
		}
-
 
47
 
-
 
48
		$valeur = $pairs['mots_cles'];
-
 
49
		$valeur = $this->nettoyerMotsCles($valeur);
Line 78... Line -...
78
     	$valeur = $pairs['mots_cles'];
-
 
79
     	
-
 
80
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
81
 
-
 
82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET ".
-
 
83
								"mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''),'".$valeur.";'),'null','') ".
50
		$requete =	'UPDATE cel_inventory '.
Line 84... Line 51...
84
								"WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
51
					"SET mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''), '$valeur;'), 'null', '') ".
85
 
-
 
86
		/*echo $requete_maj_liaison_mots_cles; exit;*/
52
					"WHERE ordre IN ({$uid[1]}) AND identifiant = ".$this->proteger($uid[0]);
87
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
53
 
88
		
54
		$resultat = $this->executerRequeteSimple($requete);
89
		$retour = false;
55
		
90
		
56
		$retour = false;
Line 91... Line 57...
91
		if ($resultat_maj_liaison_mots_cles) {
57
		if ($resultat) {
92
			$retour = 'OK';
58
			$retour = true;
93
		} else {
59
		} else {
94
			$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);
60
			$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete");
Line 95... Line 61...
95
		}
61
		}
96
		
62
		
Line 97... Line 63...
97
		$tableau_id_obs = split(',',$uid[1]);
63
		$tableau_id_obs = split(',', $uid[1]);
-
 
64
		foreach($tableau_id_obs as $ordre_obs) {
98
		foreach($tableau_id_obs as $ordre_obs) {
65
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
99
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
66
		}
100
		}
67
 
101
 
68
		return $retour;
102
        return true;
69
	}
103
	}
70
 
104
 
-
 
105
	function deleteElement($uid){
-
 
106
 
71
	public function deleteElement($uid){
107
	 	// Controle detournement utilisateur
72
		$retour = false;
108
	    session_start();
73
		
109
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
-
 
110
	 		print "Acces interdit";
-
 
111
 			return;
-
 
112
     	}
-
 
113
 
74
		// Controle detournement utilisateur
114
     	if(!isset($uid[2]) || !isset($uid[1])) {
75
		session_start();
115
     		echo 'pas de mots clés';
76
		if ($_SESSION['user'] != '' && $_SESSION['user']['name'] != $uid[0]) {
116
     		return;
77
			print "Acces interdit";
117
     	}
-
 
118
 
78
		} else {
-
 
79
			if (!isset($uid[2]) || !isset($uid[1])) {
119
     	$valeur = $uid[2] ;
80
				print 'pas de mots clés';
120
 
81
			} else {
121
     	$valeur = $this->nettoyerMotsCles($valeur);
82
				$mot_cle = $this->nettoyerMotsCles($uid[2]);
122
     	$chaine = $this->proteger($valeur);
83
				$mot_cle = $this->proteger($mot_cle);
-
 
84
		
-
 
85
				$requete =	'UPDATE cel_inventory '.
123
 
86
							"SET mots_cles = REPLACE(REPLACE(mots_cles, '$mot_cle', ''), ';;', ';') ".
124
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
87
							"WHERE ordre IN ({$uid[1]}) ".
125
 
88
							"	AND identifiant = '".$DB->escapeSimple($uid[0])."'";
-
 
89
				$resultat = $this->executerRequeteSimple($requete);
-
 
90
		
Line 126... Line 91...
126
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
91
				if ($resultat) {
127
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
92
					$retour = true;
Line 128... Line 93...
128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
93
				} else {
129
 
-
 
130
        if ($resultat_suppression_mots_cles) {
94
					$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
Line 131... Line 95...
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
95
					$this->logger('CEL_bugs', $e);
132
        	return false;
-
 
133
        }
96
				}
134
 
-
 
135
        return true;
97
			}
136
	}
-
 
137
	
98
		}
138
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
99
 
139
			
100
		return $retour;
Line 140... Line 101...
140
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
101
	}
-
 
102
	
-
 
103
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
-
 
104
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
-
 
105
		
Line 141... Line -...
141
		
-
 
142
		if(count($mots_cles_obs) > 0) {
-
 
143
 
-
 
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);
106
		if (count($mots_cles_obs) > 0) {
147
			
107
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'], $identifiant_utilisateur);
Line 148... Line 108...
148
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
108
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
-
 
109
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
-
 
110
		}
-
 
111
	}
-
 
112
	
Line 149... Line -...
149
		}
-
 
150
	}
-
 
151
	
-
 
152
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
-
 
153
		
113
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
Line 154... Line 114...
154
			$requete_regeneration_texte_mots_cles = 'UPDATE cel_inventory '.
114
		$requete = 	'UPDATE cel_inventory '.
155
													'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
115
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
Line 156... Line 116...
156
													'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
116
					'WHERE ordre = '.$this->proteger($ordre_observation).
157
													'identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
158
			
117
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
Line 159... Line 118...
159
			$this->executerRequeteSimple($requete_regeneration_texte_mots_cles);
118
		
160
	}
119
		$this->executerRequeteSimple($requete);
161
	
120
	}
Line 162... Line 121...
162
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
121
	
Line 163... Line 122...
163
		
122
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
164
		$requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '.
123
		$requete = 	'SELECT mots_cles '.
Line 165... Line 124...
165
								'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
124
					'FROM cel_inventory '.
-
 
125
					'WHERE ordre = '.$this->proteger($ordre_observation).
-
 
126
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
127
		
Line 166... Line -...
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;
128
		$resultats = $this->executerRequete($requete);
171
	}
129
				
Line 172... Line 130...
172
	
130
		return $resultats;
-
 
131
	}
Line 173... Line -...
173
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
-
 
174
		
-
 
175
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
132
	
176
		
133
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
177
		$requete_selection_texte_mot_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
134
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
178
												'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
-
 
179
												'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
135
		
-
 
136
		$requete = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
180
												
137
					'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
181
		$resultat_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles);
138
					'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
182
		
139
												
183
		return $resultat_selection_texte_mot_cles;
140
		$resultat = $this->executerRequete($requete);
184
	}
141
		
Line 185... Line 142...
185
	
142
		return $resultat;
-
 
143
	}
-
 
144
	
Line 186... Line -...
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);
145
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
190
			$chaine_mot_cle_obs = trim($chaine_mot_cle_obs,',');
146
		$chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs);
Line 191... Line 147...
191
			
147
		$chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID, ',', $chaine_mot_cle_obs);
-
 
148
		$chaine_mot_cle_obs = trim($chaine_mot_cle_obs, ',');
-
 
149
		
-
 
150
		return $chaine_mot_cle_obs;
-
 
151
	}
Line 192... Line -...
192
			return $chaine_mot_cle_obs;
-
 
193
	}
-
 
194
	
-
 
195
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
-
 
196
		
-
 
197
			$mot_cles_texte_chaine = '';
152
	
Line 198... Line 153...
198
			
153
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
199
			if(is_array($tableau_mots_cles_texte)) { 
154
		$mot_cles_texte_chaine = '';
200
				foreach($tableau_mots_cles_texte as $mot_cle) {
-
 
201
					$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
155
		
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;
156
		if (is_array($tableau_mots_cles_texte)) { 
208
	}
157
			foreach ($tableau_mots_cles_texte as $mot_cle) {
Line 209... Line 158...
209
	
158
				$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
Line 210... Line 159...
210
	private function nettoyerMotsCles($chaine) {
159
			}
211
		
-
 
212
		$valeur = str_replace('null','',$chaine);
160
		}
213
       	$valeur = trim($valeur, ";;");
-
 
214
       	
161
		
215
       	return $valeur;
162
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
216
	}
163
		
217
	
164
		return $mot_cles_texte_chaine;
218
	private function migrerMotsClesDansTableLiaison() {
165
	}
Line 219... Line 166...
219
		
166
	
220
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
-
 
221
											'WHERE TRIM(mots_cles) != ""';
167
	private function nettoyerMotsCles($chaine) {
222
		
-
 
223
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
168
		$valeur = str_replace('null', '', $chaine);
224
		
169
		$valeur = trim($valeur, ';;');
225
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
-
 
226
		
170
		
227
		$max = 20000;
-
 
228
		$i = 0;
171
		return $valeur;
229
		
172
	}
230
		foreach($obs_mots_cles as $obs_mc) {
173
	
231
			
174
	private function migrerMotsClesDansTableLiaison() {
232
			/*if($i >= $max) {
175
		$requete = 	'SELECT id, ordre, identifiant, mots_cles '.
Line 233... Line 176...
233
				return;
176
					'FROM cel_inventory '.
234
			}*/
177
					'WHERE TRIM(mots_cles) != "" ';
235
						
178
		$obs_mots_cles = $this->executerRequete($requete);
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
			
179
		
239
			$sous_requete_insertion_valeur = '';
180
		echo '<pre>'.print_r($obs_mots_cles, true).'</pre>';
240
			
181