Subversion Repositories eFlore/Applications.del

Rev

Rev 874 | 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
	/**
883 aurelien 41
	 * Ajoute un commentaire/determination si les objets fournis en paramètres sont valides
858 gduche 42
	 * pour l'afficher.
43
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
44
	 * @param array $parametres les paramètres situés après le ? dans l'url
45
	 * */
46
	public function ajouter($ressources, $parametres) {
47
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
874 gduche 48
 
858 gduche 49
		// Gestion des configuration du script
50
		$this->configurer();
51
		$this->verifierConfiguration();
52
		$utilisateur = $this->chercherUtilisateur();
883 aurelien 53
		$insertion = $this->insererCommentaire($utilisateur);
54
 
55
		// Mettre en forme le résultat et l'envoyer pour affichage
858 gduche 56
		$resultat = new ResultatService();
883 aurelien 57
		$resultat->corps = array('id_commentaire' => $insertion);
858 gduche 58
 
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;
883 aurelien 65
		$this->parametres = $parametres;
858 gduche 66
	}
67
 
68
	/*-------------------------------------------------------------------------------
69
	 							CONFIGURATION DU SERVICE
70
	 --------------------------------------------------------------------------------*/
71
	/**
72
	 * Initialiser les attributs de la classe avec les parametres
73
	 * */
74
	public function configurer() {
75
 
76
		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');;
77
		//TODO : Gérer le cas d'une proposition
78
	}
79
 
80
	/**
81
	 * Vérifier que le service est bien configuré
82
	 * */
83
	public function verifierConfiguration() {
84
 
85
	$erreurs = array();
86
 
874 gduche 87
		$parametresPossibles = array('observation', 'proposition', 'id_parent', 'texte', 'auteur.id',
883 aurelien 88
									'auteur.prenom', 'auteur.nom', 'auteur.courriel', 'nom_sel',
858 gduche 89
									'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille');
90
		foreach ($this->parametres as $nomParam => $valeur) {
91
			if (!in_array($nomParam, $parametresPossibles)) {
92
				$erreurs[] = ' - paramètre '.$nomParam.' non autorisé; ';
93
			}
94
		}
95
 
96
		if (!isset($this->parametres['observation'])) {
97
			$erreurs[] = ' - impossible d\'ajouter un commentaire sans observation ;';
98
		}
99
 
874 gduche 100
		if (!isset($this->parametres['auteur.id'])) {
883 aurelien 101
			if (!isset($this->parametres['auteur.nom'])) {
858 gduche 102
				$erreurs[] = ' - pas de nom donné ;';
103
			}
104
 
883 aurelien 105
			if (!isset($this->parametres['auteur.prenom'])) {
858 gduche 106
				$erreurs[] = ' - pas de prenom donné; ';
107
			}
108
 
883 aurelien 109
			if (!isset($this->parametres['auteur.courriel'])) {
858 gduche 110
				$erreurs[] = ' - pas de courriel donné;';
111
			}
112
		}
113
 
883 aurelien 114
		if (isset($this->parametres['nom_sel']) &&trim($this->parametres['nom_sel']) == '') {
115
			$erreurs[] = ' - S\'il est présent le paramètre nom_sel ne peut pas être vide ;';
116
		}
117
 
858 gduche 118
		//TODO : Gérer le cas d'une proposition
119
 
120
		if (!empty($erreurs)) {
121
			$e = 'Erreur de configuration :';
122
			$e = implode("\n", $erreurs);
874 gduche 123
			echo var_dump($e);
858 gduche 124
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
125
		}
126
	}
127
 
128
	/*-------------------------------------------------------------------------------
129
							   INSERTION DES COMMENTAIRES
130
	--------------------------------------------------------------------------------*/
131
	/**
132
	 * 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
133
	 * @return le tableau utilisateur
134
	 * */
135
	private function chercherUtilisateur() {
136
		$utilisateur = array();
137
 
138
		// Si l'id est fournit, on récupère les informations de l'utilisateur dans la base de données
139
		// Sinon, on récupère les informations depuis le tableau Commentaire et on vérifie leur cohérence
883 aurelien 140
		if (isset($this->parametres['auteur.id'])) {
141
			$requete = "SELECT id_utilisateur as 'auteur.id', nom as 'auteur.nom', prenom as 'auteur.prenom', courriel as 'auteur.courriel' ".
858 gduche 142
						           'FROM '.$this->gestionBdd->formaterTable('del_utilisateur').
883 aurelien 143
								   'WHERE id_utilisateur = '.$this->bdd->proteger($this->parametres['auteur.id']);
858 gduche 144
			$utilisateur = $this->bdd->recuperer($requete);
145
		} else {
883 aurelien 146
			if (isset($this->parametres['auteur.nom']) && isset($this->parametres['auteur.prenom']) && isset($this->parametres['auteur.courriel'])) {
147
				$utilisateur['auteur.nom'] = $this->parametres['auteur.nom'];
148
				$utilisateur['auteur.prenom'] = $this->parametres['auteur.prenom'];
149
				$utilisateur['auteur.courriel'] = $this->parametres['auteur.courriel'];
858 gduche 150
 
151
				if (!($utilisateur = $this->estValideDansBdd($utilisateur))) {
152
					$e = 'L\'utilisateur saisi existe déjà dans la base de données';
153
					throw new Exception($e, RestServeur::HTTP_CODE_ACCES_NON_AUTORISE);
154
				} else {
883 aurelien 155
					$this->parametres['auteur.id'] = $utilisateur['auteur.id'];
858 gduche 156
				}
157
 
158
			}
159
		}
160
 
161
		return $utilisateur;
162
	}
163
 
164
	/**
165
	 * Vérifier que les informations saisies pour un utilisateur sont valides pour la bdd
166
	 * @param $utilisateur array le tableau de l'utilisateur
167
	 * */
168
	private function estValideDansBdd($utilisateur) {
883 aurelien 169
		$requete = "SELECT id_utilisateur as 'auteur.id', nom as 'auteur.nom', prenom as 'auteur.prenom', courriel as 'auteur.courriel' ".
858 gduche 170
		           'FROM '.$this->gestionBdd->formaterTable('del_utilisateur').
883 aurelien 171
		           'WHERE courriel = '.$this->bdd->proteger($utilisateur['auteur.courriel']).
172
				   ' AND nom = '.$this->bdd->proteger($utilisateur['auteur.nom']).
173
				   ' AND prenom = '.$this->bdd->proteger($utilisateur['auteur.prenom']);
858 gduche 174
		$utilisateurBdd = $this->bdd->recuperer($requete);
175
		return $utilisateurBdd;
176
	}
177
 
178
	/**
179
	 * Insère un commentaire dans la table
180
	 * @param $utilisateur array la liste des paramètres utilisateur
181
	 * */
182
	private function insererCommentaire($utilisateur) {
183
 
184
		$requete = 'INSERT INTO '.$this->gestionBdd->formaterTable('del_commentaire');
185
		$requete .= '('.$this->genererEntete($utilisateur).') ';
186
		$requete .= 'VALUES ('.$this->genererValues().')';
883 aurelien 187
 
858 gduche 188
		$retour = $this->bdd->requeter($requete);
189
		if ($retour == null) {
190
			$e = 'Erreur inopinée lors de l\insertion';
191
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
192
		}
883 aurelien 193
 
194
		$retour = $this->bdd->recupererIdDernierAjout();
195
 
196
		return $retour;
858 gduche 197
	}
198
 
199
	private function genererEntete($utilisateur) {
200
		$this->parametres = array_merge($this->parametres, $utilisateur);
201
		$entete = array();
874 gduche 202
 
203
		foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
204
			if (isset($this->parametres[$nomFinal]) && $this->parametres[$nomFinal] != null) {
205
				$entete[] = $nomOriginal;
858 gduche 206
			}
207
		}
208
 
209
		return implode(', ', $entete);
210
	}
211
 
212
	private function genererValues() {
213
		$valeurs = array();
883 aurelien 214
		foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
215
			if (isset($this->parametres[$nomFinal]) && $this->parametres[$nomFinal] != null) {
216
				$valeurs[] = $this->bdd->proteger($this->parametres[$nomFinal]);
858 gduche 217
			}
218
		}
219
		return implode(', ', $valeurs);
220
	}
221
}
222
?>