Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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