Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 930 Rev 936
Line 1... Line 1...
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
-
 
4
* PHP Version 5
-
 
5
*
-
 
6
* @category  PHP
-
 
7
* @package   jrest
-
 
8
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
-
 
9
* @copyright 2010 Tela-Botanica
-
 
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
11
* @version   SVN: <svn_id>
-
 
12
* @link      /doc/jrest/
-
 
13
*/
-
 
14
 
-
 
15
/**
-
 
16
* in : utf8
-
 
17
* out : utf8
-
 
18
* 
4
 * Service de liaisons de mots clés à des observations.
19
 * Service de liaisons de mots clés à des observations.
5
 * Le service lie une ou plusieurs mots clés à une ou plusieurs observations
20
 * Le service lie une ou plusieurs mots clés à une ou plusieurs observations
6
 * 
-
 
7
 * Encodage en entrée : utf8
-
 
8
 * Encodage en sortie : utf8
-
 
9
 *
21
*
10
 * Cas d'utilisation :
-
 
11
 *
-
 
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
-
 
17
 */
22
*/
18
class InventoryKeyWordObsLink extends Cel {
23
class InventoryKeyWordObsLink extends Cel {
19
	
24
			
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) {
25
	public function getElement($uid) {
Line 28... Line 26...
28
	
26
	
Line 29... Line 27...
29
	}
27
	}
Line 41... Line 39...
41
		$observations = explode(',',$pairs['observations']);
39
		$observations = explode(',',$pairs['observations']);
42
		$mots_cles = explode(',',$pairs['mots_cles']);
40
		$mots_cles = explode(',',$pairs['mots_cles']);
Line 43... Line 41...
43
		
41
		
44
		$gestionnaire_observation = new RechercheObservation($this->config);
42
		$gestionnaire_observation = new RechercheObservation($this->config);
45
		$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($pairs['ce_utilisateur'],$observations);
-
 
46
				
-
 
47
		$requete_liaison_mots_cles = 'INSERT INTO cel_obs_mots_cles '.
-
 
48
								   '(id_observation, id_mot_cle_utilisateur)'.
-
 
49
								   'VALUES (';
-
 
50
								   
-
 
51
		foreach($ids_obs as $obs) {
-
 
52
			foreach($mots_cles as $mot) {
-
 
53
				$requete_liaison_mots_cles .= '('.$obs.','.$mot.')';
-
 
54
			}
-
 
55
			$this->regenererIndexTexteMotCleObservation($obs, $pairs['ce_utilisateur']);
-
 
56
		}
-
 
57
 
-
 
58
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
-
 
59
		
-
 
60
		if(!$resultat_liaison_mots_cles) {
-
 
61
			$this->logger('CEL_bugs', "Erreur d'ajout de mots clés à des obs : ".$requete_liaison_mots_cles);	
-
 
Line -... Line 43...
-
 
43
		$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($pairs['ce_utilisateur'],$observations);
-
 
44
		
-
 
45
		$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs');
62
		}
46
		$liaison_mot_cle = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($ids_obs, $mots_cles);
63
		
47
				
Line 64... Line 48...
64
		return $resultat_liaison_mots_cles;		
48
		return $liaison_mot_cle;
65
	}
49
	}
Line 66... Line 50...
66
 
50
 
67
	public function deleteElement($uid){
51
	public function deleteElement($uid){
68
		$retour = false;
52
		$retour = false;
Line 69... Line 53...
69
		
53
		
70
		// Controle detournement utilisateur
54
		// Controle detournement utilisateur
71
		session_start();
55
		session_start();
-
 
56
		$this->controleUtilisateur($uid[0]);
-
 
57
	
-
 
58
		if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || !$this->estUnIdentifiantMotCle($uid[2])) {
Line 72... Line -...
72
		$this->controleUtilisateur($uid[0]);
-
 
73
	
-
 
74
		if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) {
-
 
75
			return;
59
			return;
76
		}
60
		}
Line 77... Line 61...
77
		
61
	
78
		$mots_cle = $this->nettoyerMotsCles($uid[2]);
62
		$mots_cles = $this->nettoyerMotsCles($uid[2]);
Line 79... Line 63...
79
		$mots_cle = $this->proteger($mots_cle);
63
		$mots_cles = explode(',',$mots_cles);
80
		
-
 
81
		$ordre_observations = $uid[1];
-
 
82
		$id_utilisateur = $uid[0];
-
 
83
		
64
		
84
		$gestionnaire_observation = new RechercheObservation($this->config);
-
 
85
		$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($id_utilisateur,$ordre_observations);
-
 
86
		
-
 
87
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_obs_mots_cles WHERE ';
-
 
88
											   'id_observation IN ('.implode(',',$ids_obs).') '.
-
 
89
											   'AND id_mot_cle_utilisateur IN ('.$mots_cle.')';
-
 
90
		
-
 
91
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
-
 
92
		
-
 
93
		if ($resultat_suppression_mot_cle) {
-
 
94
			$retour = true;
-
 
Line 95... Line 65...
95
		} else {
65
		$ordre_observations = explode(',',$uid[1]);
96
			$message = "Erreur de suppression des mots clés de plusieurs observations : $requete";
-
 
97
			$this->logger($message);
-
 
98
		}
-
 
99
		
-
 
100
		foreach($ids_obs as $obs) {
-
 
101
			$this->regenererIndexTexteMotCleObservation($obs, $id_utilisateur);	
-
 
102
		}
-
 
103
 
-
 
104
		return $retour;
-
 
105
	}
-
 
106
	
-
 
107
	private function regenererIndexTexteMotCleObservation($id_observation, $identifiant_utilisateur) {
-
 
108
		$mots_cles_obs = $this->obtenirMotsClesObs($id_observation, $identifiant_utilisateur);
-
 
109
		
-
 
110
		if (count($mots_cles_obs) > 0) {
-
 
111
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'], $identifiant_utilisateur);
-
 
112
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
-
 
113
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_observation, $identifiant_utilisateur);
-
 
114
		}
-
 
115
	}
-
 
116
	
-
 
117
	//TODO : a refaire 
66
		$id_utilisateur = $uid[0];
118
	
-
 
119
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_observation, $identifiant_utilisateur) {
-
 
120
		$requete = 	'UPDATE cel_obs '.
-
 
121
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
-
 
122
					'WHERE id_observation = '.$this->proteger($id_observation).
-
 
123
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
124
		
-
 
125
		$this->executerRequeteSimple($requete);
-
 
126
	}
-
 
127
	
-
 
128
	private function obtenirMotsClesTexte($id_observation, $identifiant_utilisateur) {
-
 
129
		$requete = 	'SELECT mots_cles_texte '.
-
 
130
					'FROM cel_obs '.
-
 
131
					'WHERE id_observation = '.$this->proteger($id_observation).
-
 
132
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
133
		
-
 
134
		$resultats = $this->executerRequete($requete);
-
 
135
				
-
 
136
		return $resultats;
-
 
137
	}
-
 
138
	
-
 
139
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
-
 
140
		$chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs);
-
 
141
		$chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID, ',', $chaine_mot_cle_obs);
-
 
142
		$chaine_mot_cle_obs = trim($chaine_mot_cle_obs, ',');
-
 
143
		
-
 
144
		return $chaine_mot_cle_obs;
-
 
145
	}
-
 
146
	
-
 
147
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
-
 
148
		$mot_cles_texte_chaine = '';
-
 
149
		
-
 
150
		if (is_array($tableau_mots_cles_texte)) { 
-
 
151
			foreach ($tableau_mots_cles_texte as $mot_cle) {
-
 
152
				$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
-
 
153
			}
-
 
154
		}
-
 
155
		
-
 
156
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
-
 
157
		
-
 
158
		return $mot_cles_texte_chaine;
-
 
159
	}
-
 
160
	
-
 
161
	private function nettoyerMotsCles($chaine) {
-
 
162
		$valeur = str_replace('null', '', $chaine);
-
 
163
		$valeur = trim($valeur, ';;');
-
 
164
		
-
 
165
		return $valeur;
-
 
166
	}
-
 
167
	
-
 
168
	private function migrerMotsClesDansTableLiaison() {
-
 
169
		$requete = 	'SELECT id, ordre, identifiant, mots_cles '.
-
 
170
					'FROM cel_inventory '.
-
 
171
					'WHERE TRIM(mots_cles) != "" ';
-
 
172
		$obs_mots_cles = $this->executerRequete($requete);
-
 
173
		
-
 
174
		echo '<pre>'.print_r($obs_mots_cles, true).'</pre>';
-
 
175
		
-
 
176
		$max = 20000;
-
 
177
		$i = 0;
-
 
178
		foreach ($obs_mots_cles as $obs_mc) {
-
 
179
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
-
 
180
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID, $mots_cles_nettoyes);
-
 
181
			
-
 
182
			$requete_values = '';
-
 
183
			
-
 
184
			if (count($tableau_mots_cles_codes) > 0) {
-
 
185
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
-
 
186
					$mots_cles_codes = trim($mots_cles_codes, self::SEPARATEUR_MOT_CLE_ID);
-
 
187
					if ($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
-
 
188
						$requete_values .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
-
 
189
					}
-
 
190
				}
-
 
191
				
-
 
192
				$requete_values = rtrim($requete_values, ',');
-
 
193
				if (trim($requete_values) != '') { 
67
		
194
					$requete = 	'INSERT IGNORE INTO cel_obs_mots_cles (id_observation, id_mot_cle_utilisateur) '.
68
		$gestionnaire_observation = new RechercheObservation($this->config);
195
								'VALUES '.$requete_values.' ';
69
		$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($id_utilisateur,$ordre_observations);
196
					echo $requete.'<br />';
70
		
197
					$i++;
71
		$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs');
198
				}
72
		$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsCles($ids_obs, $mots_cles);
199
			}
73