Subversion Repositories eFlore/Applications.cel

Rev

Rev 819 | Rev 930 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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