Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1048 Rev 1049
Line 16... Line 16...
16
	private $parametres = null;
16
	private $parametres = null;
17
	private $format = null;
17
	private $format = null;
18
	private $service = null;
18
	private $service = null;
19
	private $squelette = null;
19
	private $squelette = null;
20
	private $squelette_dossier = null;
20
	private $squelette_dossier = null;
21
	private $auteurs = array();
21
	private $masque = array();
22
	private $flux = array();
22
	private $mappingFiltre = array();
23
	private $conteneur = null;
23
	private $conteneur = null;
24
	private $gestionBdd = null;
24
	private $gestionBdd = null;
Line 25... Line 25...
25
	
25
	
26
	public function __construct(Conteneur $conteneur = null) {
26
	public function __construct(Conteneur $conteneur = null) {
-
 
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
-
 
28
		$this->conteneur->chargerConfiguration('config_syndication_commentaires.ini');
-
 
29
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->masque = $conteneur->getMasque();
28
		$this->gestionBdd = $conteneur->getGestionBdd();
31
		$this->gestionBdd = $conteneur->getGestionBdd();
Line 29... Line 32...
29
	}
32
	}
-
 
33
		
30
		
34
	public function consulter($params = array()) {	
31
	public function consulter($params = array()) {		
35
		$this->verifierConfiguration();	
32
		$donnees_brutes = $this->getDerniersCommentaires();
36
		$donnees_brutes = $this->getDerniersCommentaires();
33
		$commentaires_formates = $this->formaterPourRss($donnees_brutes) ; 
37
		$commentaires_formates = $this->formaterPourRss($donnees_brutes) ; 
Line -... Line 38...
-
 
38
		return $commentaires_formates;
-
 
39
	}
-
 
40
	
-
 
41
	/**
-
 
42
	* Vérifier que le service est bien configuré
-
 
43
	* */
-
 
44
	public function verifierConfiguration() {
-
 
45
	
-
 
46
		$erreurs = array();
-
 
47
		$tableauImages = $this->conteneur->getParametre('mapping_masque');
-
 
48
	
-
 
49
		if (empty($this->mappingFiltre)) {
-
 
50
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
-
 
51
		} else {
-
 
52
			$champsMappingFiltre = array('espece', 'observation');
-
 
53
			foreach ($champsMappingFiltre as $champ) {
-
 
54
				if (!isset($this->mappingFiltre[$champ])) {
-
 
55
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';
-
 
56
				}
-
 
57
			}
-
 
58
		}
-
 
59
	
-
 
60
		if (!empty($erreurs)) {
-
 
61
			$e = 'Erreur lors de la configuration : '."\n";
-
 
62
			$e .= implode("\n", $erreurs);
-
 
63
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
34
		return $commentaires_formates;
64
		}
35
	}
-
 
36
	
65
	}
37
	private function formaterPourRss($elements) {
66
	
38
		// Prétraitement des données
67
	private function formaterPourRss($elements) {
39
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
68
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
40
		foreach ($elements as $element) {
69
		foreach ($elements as $element) {
Line 138... Line 167...
138
		$requete =  "SELECT DISTINCT dc.*, dob.id_observation as dob_id_observation, dob.ce_zone_geo as dob_ce_zone_geo, ".
167
		$requete =  "SELECT DISTINCT dc.*, dob.id_observation as dob_id_observation, dob.ce_zone_geo as dob_ce_zone_geo, ".
139
		            "dob.zone_geo as dob_zone_geo, dob.date_observation as dob_date_observation, dob.nom_sel as dob_nom_sel ".
168
		            "dob.zone_geo as dob_zone_geo, dob.date_observation as dob_date_observation, dob.nom_sel as dob_nom_sel ".
140
					"FROM del_commentaire dc ".
169
					"FROM del_commentaire dc ".
141
					"INNER JOIN del_observation dob ".
170
					"INNER JOIN del_observation dob ".
142
					"ON dob.id_observation = dc.ce_observation ".
171
					"ON dob.id_observation = dc.ce_observation ".
143
					"WHERE (dob.ce_utilisateur = dc.ce_utilisateur AND dob.nom_sel != dc.nom_sel) ".
172
					"WHERE ((dob.ce_utilisateur = dc.ce_utilisateur AND dob.nom_sel != dc.nom_sel) ".
144
					"	OR (dob.ce_utilisateur != dc.ce_utilisateur) ".
173
					"	OR (dob.ce_utilisateur != dc.ce_utilisateur)) ".
-
 
174
					$this->chargerClauseWhere()." ".
145
					"ORDER BY dc.date DESC ".
175
					"ORDER BY dc.date DESC ".
146
					"LIMIT 0,50 ";
176
					"LIMIT 0,50 ";
Line 147... Line 177...
147
 
177
 
148
		$elements = $this->gestionBdd->getBdd()->recupererTous($requete);
178
		$elements = $this->gestionBdd->getBdd()->recupererTous($requete);
149
		return $elements;
179
		return $elements;
-
 
180
	}
-
 
181
	
-
 
182
	/**
-
 
183
	* Charger la clause WHERE en fonction des paramètres de masque
-
 
184
	* */
-
 
185
	private function chargerClauseWhere() {
-
 
186
		$where = array();
-
 
187
		$tableauMasque = $this->masque->getMasque();
-
 
188
		if (!empty($tableauMasque)) {
-
 
189
			foreach($tableauMasque as $idMasque => $valeurMasque) {	
-
 
190
				$idMasque = str_replace('masque.', '', $idMasque);
-
 
191
				switch ($idMasque) {
-
 
192
					case 'espece':
-
 
193
						$where[] = ' dob.'.$this->mappingFiltre[$idMasque].' LIKE '.$this->gestionBdd->getBdd()->proteger($valeurMasque.'%').' '.
-
 
194
						           ' OR '.' dc.'.$this->mappingFiltre[$idMasque].' LIKE '.$this->gestionBdd->getBdd()->proteger($valeurMasque.'%').' ';                                                                                                             
-
 
195
					break;
-
 
196
					case 'auteur':
-
 
197
						$where[] = $this->creerFiltreAuteur($valeurMasque).' ';                                                                                                             
-
 
198
					break;
-
 
199
					default:
-
 
200
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->gestionBdd->getBdd()->proteger($valeurMasque);
-
 
201
					break;
-
 
202
				}
-
 
203
			}	
-
 
204
		}
-
 
205
		if (!empty($where)) {
-
 
206
			return ' AND '.implode('AND', $where);
-
 
207
		} else {
-
 
208
			return;
-
 
209
		}
-
 
210
	}
-
 
211
	
-
 
212
	private function creerFiltreAuteur($valeurMasque) {
-
 
213
		$masque = '';
-
 
214
		$auteurId = $valeurMasque;
-
 
215
		if (is_numeric($auteurId)) {
-
 
216
			$masque = ' dc.ce_utilisateur = '.$auteurId;
-
 
217
		} else {
-
 
218
			if (strpos($auteurId, '@') === false) {
-
 
219
				$tableauNomPrenom = explode(' ',$auteurId, 2);
-
 
220
				if(count($tableauNomPrenom) == 2) {
-
 
221
					// on teste potentiellement un nom prenom ou bien un prénom nom
-
 
222
					$masque = '('.
-
 
223
							          	'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').' AND '.
-
 
224
									  	'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').') OR '.
-
 
225
									 	'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').' AND '.
-
 
226
									  	'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').')'.
-
 
227
									  ')';
-
 
228
				} else {
-
 
229
					$masque = '(
-
 
230
							            (dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').' OR '.
-
 
231
										'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').')'.
-
 
232
									  ')';
-
 
233
				}
-
 
234
			} else {
-
 
235
				$masque = " dob.utilisateur_courriel LIKE ".$this->gestionBdd->getBdd()->proteger($valeurMasque.'%')." ";
-
 
236
			}
-
 
237
		}
-
 
238
		return $masque;
150
	}
239
	}
151
}	
240
}