Subversion Repositories eFlore/Applications.del

Rev

Rev 861 | Rev 924 | Go to most recent revision | Details | Compare with Previous | 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 AjouterCommentaire {
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
 
28
	private $commentaire;
29
 
30
	public function __construct(Conteneur $conteneur = null) {
31
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
33
		$this->navigation = $conteneur->getNavigation();
34
		$this->masque = $conteneur->getMasque();
35
		$this->gestionBdd = $conteneur->getGestionBdd();
874 gduche 36
		$this->bdd = $this->gestionBdd->getBdd();
37
 
858 gduche 38
	}
39
 
40
	/**
41
	 * Méthode principale de la classe.
42
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
43
	 * pour l'afficher.
44
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
45
	 * @param array $parametres les paramètres situés après le ? dans l'url
46
	 * */
47
	public function ajouter($ressources, $parametres) {
48
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
874 gduche 49
 
858 gduche 50
		// Gestion des configuration du script
51
		$this->configurer();
52
		$this->verifierConfiguration();
53
		$utilisateur = $this->chercherUtilisateur();
54
		$this->insererCommentaire($utilisateur);
55
		// Lancement du service
56
		$resultat = new ResultatService();
57
 
58
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => '');
59
		return $resultat;
60
	}
61
 
62
	//ce_observation=728176&texte=ABC&auteur.id=11623&auteur.prenom=grégoire&auteur.nom=duché&auteur.courriel=gregoire@tela-botanica.org
63
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
64
		$this->ressources = $ressources;
65
		$this->parametres = $parametres;
66
 
67
	}
68
 
69
	/*-------------------------------------------------------------------------------
70
	 							CONFIGURATION DU SERVICE
71
	 --------------------------------------------------------------------------------*/
72
	/**
73
	 * Initialiser les attributs de la classe avec les parametres
74
	 * */
75
	public function configurer() {
76
 
77
		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');;
78
		//TODO : Gérer le cas d'une proposition
79
	}
80
 
81
	/**
82
	 * Vérifier que le service est bien configuré
83
	 * */
84
	public function verifierConfiguration() {
85
 
86
	$erreurs = array();
87
 
874 gduche 88
		$parametresPossibles = array('observation', 'proposition', 'id_parent', 'texte', 'auteur.id',
858 gduche 89
									'prenom_auteur', 'nom_auteur', 'courriel_auteur', 'nom_sel',
90
									'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille');
91
		foreach ($this->parametres as $nomParam => $valeur) {
92
			if (!in_array($nomParam, $parametresPossibles)) {
93
				$erreurs[] = ' - paramètre '.$nomParam.' non autorisé; ';
94
			}
95
		}
96
 
97
		if (!isset($this->parametres['observation'])) {
98
			$erreurs[] = ' - impossible d\'ajouter un commentaire sans observation ;';
99
		}
100
 
874 gduche 101
		if (!isset($this->parametres['auteur.id'])) {
858 gduche 102
			if (!isset($this->parametres['nom_auteur'])) {
103
				$erreurs[] = ' - pas de nom donné ;';
104
			}
105
 
106
			if (!isset($this->parametres['prenom_auteur'])) {
107
				$erreurs[] = ' - pas de prenom donné; ';
108
			}
109
 
110
			if (!isset($this->parametres['courriel_auteur'])) {
111
				$erreurs[] = ' - pas de courriel donné;';
112
			}
113
		}
114
 
115
		//TODO : Gérer le cas d'une proposition
116
 
117
		if (!empty($erreurs)) {
118
			$e = 'Erreur de configuration :';
119
			$e = implode("\n", $erreurs);
874 gduche 120
			echo var_dump($e);
858 gduche 121
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
122
		}
123
	}
124
 
125
	/*-------------------------------------------------------------------------------
126
							   INSERTION DES COMMENTAIRES
127
	--------------------------------------------------------------------------------*/
128
	/**
129
	 * Trouver l'utilisateur en fonction des paramètres ou de la base de données si le nom, prénom et courriel ne sont pas donnés
130
	 * @return le tableau utilisateur
131
	 * */
132
	private function chercherUtilisateur() {
133
		$utilisateur = array();
134
 
135
		// Si l'id est fournit, on récupère les informations de l'utilisateur dans la base de données
136
		// Sinon, on récupère les informations depuis le tableau Commentaire et on vérifie leur cohérence
137
		if (isset($this->parametres['id_auteur'])) {
138
			$requete = 'SELECT id_utilisateur as id_auteur, nom as nom_auteur, prenom as prenom_auteur, courriel as courriel_auteur '.
139
						           'FROM '.$this->gestionBdd->formaterTable('del_utilisateur').
140
								   'WHERE id_utilisateur = '.$this->parametres['id_auteur'];
141
			$utilisateur = $this->bdd->recuperer($requete);
142
		} else {
143
			if (isset($this->parametres['nom_auteur']) && isset($this->parametres['prenom_auteur']) && isset($this->parametres['courriel_auteur'])) {
144
				$utilisateur['nom_auteur'] = $this->parametres['nom_auteur'];
145
				$utilisateur['prenom_auteur'] = $this->parametres['prenom_auteur'];
146
				$utilisateur['courriel_auteur'] = $this->parametres['courriel_auteur'];
147
 
148
				if (!($utilisateur = $this->estValideDansBdd($utilisateur))) {
149
					$e = 'L\'utilisateur saisi existe déjà dans la base de données';
150
					throw new Exception($e, RestServeur::HTTP_CODE_ACCES_NON_AUTORISE);
151
				} else {
152
					$this->parametres['id_auteur'] = $utilisateur['id_auteur'];
153
				}
154
 
155
			}
156
		}
157
 
158
		return $utilisateur;
159
	}
160
 
161
	/**
162
	 * Vérifier que les informations saisies pour un utilisateur sont valides pour la bdd
163
	 * @param $utilisateur array le tableau de l'utilisateur
164
	 * */
165
	private function estValideDansBdd($utilisateur) {
166
		$requete = 'SELECT id_utilisateur as id_auteur, nom as nom_auteur, prenom as prenom_auteur, courriel_auteur '.
167
		           'FROM '.$this->gestionBdd->formaterTable('del_utilisateur').
168
		           'WHERE courriel = '.$this->bdd->proteger($utilisateur['courriel_auteur']).
169
				   ' AND nom = '.$this->bdd->proteger($utilisateur['nom_auteur']).
170
				   ' AND prenom = '.$this->bdd->proteger($utilisateur['prenom_auteur']);
171
		$utilisateurBdd = $this->bdd->recuperer($requete);
172
		return $utilisateurBdd;
173
	}
174
 
175
	/**
176
	 * Insère un commentaire dans la table
177
	 * @param $utilisateur array la liste des paramètres utilisateur
178
	 * */
179
	private function insererCommentaire($utilisateur) {
180
 
181
		$requete = 'INSERT INTO '.$this->gestionBdd->formaterTable('del_commentaire');
182
		$requete .= '('.$this->genererEntete($utilisateur).') ';
183
		$requete .= 'VALUES ('.$this->genererValues().')';
184
 
185
		$retour = $this->bdd->requeter($requete);
186
		if ($retour == null) {
187
			$e = 'Erreur inopinée lors de l\insertion';
188
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
189
		}
190
	}
191
 
192
	private function genererEntete($utilisateur) {
193
		$this->parametres = array_merge($this->parametres, $utilisateur);
194
		$entete = array();
874 gduche 195
 
196
		foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
197
			if (isset($this->parametres[$nomFinal]) && $this->parametres[$nomFinal] != null) {
198
				$entete[] = $nomOriginal;
858 gduche 199
			}
200
		}
201
 
202
		return implode(', ', $entete);
203
	}
204
 
205
	private function genererValues() {
206
		$valeurs = array();
207
		foreach ($this->parametres as $var => $val) {
208
			if ($val != null) {
209
				$valeurs[] = $val;
210
			}
211
		}
212
 
213
		$valeurs = $this->bdd->protegerTableau($valeurs);
214
		return implode(', ', $valeurs);
215
	}
216
}
217
?>