Subversion Repositories eFlore/Applications.del

Rev

Rev 1251 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
864 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 SupprimerCommentaire {
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 $commentaireId;
29
	private $utilisateurId;
30
 
31
	public function __construct(Conteneur $conteneur = null) {
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
33
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
950 aurelien 34
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
864 gduche 35
		$this->navigation = $conteneur->getNavigation();
36
		$this->masque = $conteneur->getMasque();
37
		$this->gestionBdd = $conteneur->getGestionBdd();
38
		$this->bdd = $this->gestionBdd->getBdd();
39
	}
971 aurelien 40
 
864 gduche 41
	/**
42
	 * Méthode principale de la classe.
43
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
44
	 * pour l'afficher.
45
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
46
	 * @param array $parametres les paramètres situés après le ? dans l'url
47
	 * */
48
	public function supprimer($ressources, $parametres) {
49
		$resultat = new ResultatService();
50
 
51
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
52
		// Gestion des configuration du script
53
		$this->configurer();
971 aurelien 54
 
55
		// la suppression est autorisée pour le propriétaire et l'admin sur un commentaire ou une proposition
56
		// qui n'a jamais été commentée en retour
57
		if ($this->sansEnfant() && $this->utilisateurEstAutorise()) {
864 gduche 58
			$this->supprimerCommentaire();
971 aurelien 59
			$this->supprimerVotesAssocies();
864 gduche 60
		} else {
61
			$e = 'Impossible de supprimer le commentaire car il a des réponses ou ce n\'est pas le vôtre.';
62
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
63
		}
64
 
65
		return $resultat;
66
	}
971 aurelien 67
 
864 gduche 68
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
69
		$this->ressources = $ressources;
70
		$this->parametres = $parametres;
71
	}
72
 
73
	/*-------------------------------------------------------------------------------
74
	 							CONFIGURATION DU SERVICE
75
	 --------------------------------------------------------------------------------*/
76
	/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer
77
	 * n'a aucune réponse
78
	 * */
79
	public function sansEnfant() {
80
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
81
				   'WHERE (ce_proposition  = '.$this->commentaireId.' '.
82
				   'OR ce_commentaire_parent = '.$this->commentaireId.')';
83
		$resultats = $this->bdd->recupererTous($requete);
84
		if (!empty($resultats)) {
85
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
86
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
87
		}
88
 
89
		return true;
90
	}
91
 
971 aurelien 92
	private function utilisateurEstAutorise() {
93
		$autorise = true;
94
		if(!$this->estProprietaire() && !$this->utilisateurEstAdmin()) {
95
			$e = 'Impossible de supprimer le commentaire car l\'utilisateur n\'a pas les droits requis';
96
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
97
			$autorise = false;
98
		}
99
		return $autorise;
100
	}
101
 
102
	/**
103
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
104
	*
864 gduche 105
	* */
106
	public function estProprietaire() {
971 aurelien 107
 
864 gduche 108
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
109
				   'WHERE id_commentaire = '.$this->commentaireId.' '.
110
				   'AND ce_utilisateur = '.$this->utilisateurId;
971 aurelien 111
 
864 gduche 112
		$resultats = $this->bdd->recupererTous($requete);
971 aurelien 113
 
114
		return !empty($resultats);
115
	}
116
 
117
	/**
118
	* Obtient l'utilisateur par le cookie
119
	*/
120
	public function getUtilisateurParCookie() {
121
		//TODO: utiliser le cookie n'est pas très sécurisé
122
		// ceci aussi devrait être dans une classe utilitaire
123
		if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
124
			$courriel = $_COOKIE['del_courriel'];
125
			$requete = 'SELECT id_utilisateur FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
126
										'WHERE courriel = '.$this->bdd->proteger($courriel);
127
			$utilisateur = $this->bdd->recuperer($requete);
128
			$this->utilisateurId = $utilisateur['id_utilisateur'];
864 gduche 129
		}
971 aurelien 130
	}
864 gduche 131
 
971 aurelien 132
	/**
133
	 * Renvoie vrai si l'utilisateur existe dans la base de données et si son champ admin est à 1
134
	 */
135
	private function utilisateurEstAdmin() {
136
		//TODO: déplacer ceci dans une classe utilitaire
1251 aurelien 137
		$requete = 'SELECT admin FROM '.$this->gestionBdd->formaterTable('del_utilisateur_infos', 'dui').
971 aurelien 138
									'WHERE id_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
139
 
140
		$resultat = $this->bdd->recuperer($requete);
141
		return ($resultat && $resultat['admin'] == 1);
864 gduche 142
	}
143
 
144
 
145
	/**
146
	 * Initialiser les attributs de la classe avec les parametres
147
	 * */
148
	public function configurer() {
149
		$erreurs= array();
150
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
151
			$this->commentaireId = $this->ressources[0];
152
		} else {
153
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
154
		}
155
 
971 aurelien 156
		if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
157
			$this->getUtilisateurParCookie();
864 gduche 158
		} else {
971 aurelien 159
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
864 gduche 160
		}
971 aurelien 161
 
864 gduche 162
		if (!empty($erreurs)) {
163
			$e = 'Erreur de configuration :';
164
			$e = implode("\n", $erreurs);
165
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
166
		}
167
	}
168
 
169
	/*-------------------------------------------------------------------------------
170
							   SUPPRESSION DES COMMENTAIRES
171
	--------------------------------------------------------------------------------*/
172
	/**
173
	 * Requete effective de suppression
174
	 * */
175
	public function supprimerCommentaire() {
971 aurelien 176
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire').' '.
177
				   'WHERE id_commentaire = '.$this->bdd->proteger($this->commentaireId).' '.
178
				   	'AND ce_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
864 gduche 179
		$retour = $this->bdd->requeter($requete);
971 aurelien 180
		if (!$retour) {
864 gduche 181
			$e = 'Erreur lors de la suppression';
182
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
183
		}
184
	}
971 aurelien 185
 
186
	/**
187
	 * Requete de suppression de votes associés au commentaire
188
	 */
189
	public function supprimerVotesAssocies() {
190
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire_vote').' '.
191
				   'WHERE ce_proposition = '.$this->bdd->proteger($this->commentaireId);
192
		$retour = $this->bdd->requeter($requete);
193
		if (!$retour) {
194
			$e = 'Erreur lors de la suppression des votes associés';
195
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
196
		}
197
	}
864 gduche 198
}
199
?>