Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
858 gduche 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
	* Le web service image récupère toutes les données de la table del_obs_images
5
 * pour retourner une liste d'images associée à une observation
6
 *
7
 * @category	php 5.2
8
 * @package	del
9
 * @subpackage images
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
12
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
16
 */
17
 
18
class ConsulterCommentaire {
19
 
20
	private $conteneur;
21
	private $navigation;
22
	private $masque;
23
	private $gestionBdd;
24
	private $bdd;
25
	private $parametres = array();
26
	private $ressources = array();
27
	private $idCommentaire;
28
 
29
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
32
		$this->navigation = $conteneur->getNavigation();
33
		$this->masque = $conteneur->getMasque();
34
		$this->gestionBdd = $conteneur->getGestionBdd();
35
		$this->bdd = $this->gestionBdd->getBdd();
36
	}
37
 
38
	/**
39
	 * Méthode principale de la classe.
40
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
41
	 * pour l'afficher.
42
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
43
	 * @param array $parametres les paramètres situés après le ? dans l'url
44
	 * */
45
	public function consulter($ressources, $parametres) {
46
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
47
 
48
		// Gestion des configuration du script
49
		$this->configurer();
50
		$this->verifierConfiguration();
51
 
52
		// Lancement du service
53
		$commentaires = $this->chargerCommentaires();
54
		$commentaires = $this->formaterCommentaires($commentaires);
55
		$total = $this->compterCommentaires();
56
		$this->navigation->setTotal($total);
57
		/*$images = $this->chargerImage($liaisons);
58
		$images = $this->chargerVotes($images);
59
 
60
		// Mettre en forme le résultat et l'envoyer pour affichage*/
61
		$resultat = new ResultatService();
62
 
63
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $commentaires);
64
		return $resultat;
65
	}
66
 
67
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
68
		$this->ressources = $ressources;
69
 
70
		if (sizeof($this->ressources) == 1 && (is_numeric($this->ressources[0]))) {
71
			$this->idCommentaire = $ressources[0];
72
		} else {
73
			$e = 'L\identifiant d\un commentaire est numérique';
74
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
75
		}
76
 
77
		$this->parametres = $parametres;
78
 
79
	}
80
 
81
	/*-------------------------------------------------------------------------------
82
	 							CONFIGURATION DU SERVICE
83
	 --------------------------------------------------------------------------------*/
84
	/**
85
	 * Configuration du service en fonction du fichier de config config_del.ini
86
	 * */
87
	public function configurer() {
88
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
89
		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');
90
	}
91
 
92
	/**
93
	 * Vérifier que le service est bien configuré
94
	 * */
95
	public function verifierConfiguration() {
96
 
97
		$erreurs = array();
98
		$tableauCommentaires = $this->conteneur->getParametre('commentaires');
99
		if (empty($tableauCommentaires)) {
100
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [commentaires] ou celui-ci est vide ;';
101
		} else {
102
			if ($this->conteneur->getParametre('url_service') == null) {
103
				$erreurs[] = '- paramètre "url_service" manquant ;';
104
			}
105
		}
106
 
107
		if (empty($this->mappingCommentaire)) {
108
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;';
109
		} else {
110
			$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_courriel', 'date');
111
			foreach ($champsMappingCom as $champ) {
112
				if (!isset($this->mappingCommentaire[$champ])) {
113
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';
114
				}
115
			}
116
		}
117
 
118
		if (empty($this->mappingFiltre)) {
119
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
120
		} else {
121
			$champsMappingFiltre = array('observation');
122
			foreach ($champsMappingFiltre as $champ) {
123
				if (!isset($this->mappingFiltre[$champ])) {
124
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
125
				}
126
			}
127
		}
128
 
129
 
130
		if (!empty($erreurs)) {
131
			$e = 'Erreur lors de la configuration : '."\n";
132
			$e .= implode("\n", $erreurs);
133
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
134
		}
135
	}
136
 
137
	/**
138
	* Charger la clause WHERE en fonction des paramètres de masque
139
	* */
140
	private function chargerClauseWhere() {
141
		$where = array();
142
		if (isset($this->idCommentaire)) {
143
			$where[] = 'id_commentaire = '.$this->idCommentaire;
144
		}
145
 
146
		$tableauMasque = $this->masque->getMasque();
147
		if (!empty($tableauMasque)) {
148
			foreach($tableauMasque as $idMasque => $valeurMasque) {
149
				//TODO: scinder ceci en fonctions réutilisables ?
150
				// voir si c'est interessant par rapport à la recherche générale
151
				$idMasque = str_replace('masque.', '', $idMasque);
152
				switch ($idMasque) {
153
					default:
154
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
155
					break;
156
				}
157
			}
158
		}
159
 
160
		if (!empty($where)) {
161
			return ' WHERE '.implode('AND', $where);
162
		} else {
163
			return;
164
		}
165
	}
166
 
167
	/*-------------------------------------------------------------------------------
168
							   CHARGEMENT DES COMMENTAIRES
169
	--------------------------------------------------------------------------------*/
170
	/**
171
	* Chargement depuis la bdd de tous les commentaires
172
	* */
173
	private function chargerCommentaires() {
174
 
175
		$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '.
176
						   'FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc');
177
		$requeteLiaisons .= $this->chargerClauseWhere();
178
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
179
		return $this->bdd->recupererTous($requeteLiaisons);
180
	}
181
 
182
	/**
183
	* Compter le nombre total de commentaires dans la base pour affichage dans entete.
184
	* */
185
	private function compterCommentaires() {
186
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
187
		$resultats = $this->bdd->recuperer($requete);
188
		return (int) $resultats['nbre'];
189
	}
190
 
191
	/*-------------------------------------------------------------------------------
192
								FORMATER ET METTRE EN FORME
193
	--------------------------------------------------------------------------------*/
194
 
195
	/**
196
	*  Formater les commentaires
197
	*  @param $commentaires les commentaires à mettre à jour
198
	*  @return $commentaires les commentaires mis à jour
199
	* */
200
	private function formaterCommentaires($commentaires) {
201
		$retourCommentaires = array();
202
 
203
		foreach ($commentaires as $id => $commentaire) {
204
			foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
205
				$retourCommentaires[$nomFinal] = $commentaire[$nomOriginal];
206
			}
207
		}
208
 
209
		return $retourCommentaires;
210
	}
211
 
212
	private function proteger($valeur) {
213
		if (is_array($valeur)) {
214
			return $this->bdd->protegerTableau($valeur);
215
		} else {
216
			return $this->bdd->proteger($valeur);
217
		}
218
	}
219
}
220
?>