Subversion Repositories eFlore/Applications.del

Rev

Rev 1251 | Rev 1793 | Go to most recent revision | 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 {
1612 jpm 19
 
864 gduche 20
	private $conteneur;
21
	private $navigation;
22
	private $masque;
23
	private $gestionBdd;
24
	private $bdd;
25
	private $parametres = array();
26
	private $ressources = array();
1612 jpm 27
 
864 gduche 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();
1612 jpm 38
		$this->bdd = $this->gestionBdd->getBdd();
864 gduche 39
	}
1612 jpm 40
 
864 gduche 41
	/**
42
	 * Méthode principale de la classe.
1612 jpm 43
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
864 gduche 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();
1612 jpm 50
 
864 gduche 51
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
52
		// Gestion des configuration du script
53
		$this->configurer();
1612 jpm 54
 
971 aurelien 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
		}
1612 jpm 64
 
864 gduche 65
		return $resultat;
66
	}
1612 jpm 67
 
864 gduche 68
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
69
		$this->ressources = $ressources;
70
		$this->parametres = $parametres;
71
	}
1612 jpm 72
 
864 gduche 73
	/*-------------------------------------------------------------------------------
74
	 							CONFIGURATION DU SERVICE
75
	 --------------------------------------------------------------------------------*/
1612 jpm 76
	/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer
864 gduche 77
	 * n'a aucune réponse
78
	 * */
79
	public function sansEnfant() {
1612 jpm 80
		$requete = 'SELECT * '.
81
			'FROM del_commentaire '.
82
			"WHERE (ce_proposition = {$this->commentaireId} ".
83
			"OR ce_commentaire_parent = {$this->commentaireId}) ";
864 gduche 84
		$resultats = $this->bdd->recupererTous($requete);
85
		if (!empty($resultats)) {
86
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
87
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
88
		}
1612 jpm 89
 
864 gduche 90
		return true;
91
	}
1612 jpm 92
 
971 aurelien 93
	private function utilisateurEstAutorise() {
94
		$autorise = true;
1612 jpm 95
		if (!$this->estProprietaire() && !$this->utilisateurEstAdmin()) {
971 aurelien 96
			$e = 'Impossible de supprimer le commentaire car l\'utilisateur n\'a pas les droits requis';
97
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
98
			$autorise = false;
99
		}
100
		return $autorise;
101
	}
1612 jpm 102
 
103
	/**
971 aurelien 104
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
1612 jpm 105
	*
864 gduche 106
	* */
107
	public function estProprietaire() {
1612 jpm 108
		$requete = 'SELECT * '.
109
			'FROM del_commentaire '.
110
			"WHERE id_commentaire = {$this->commentaireId} ".
111
			"AND ce_utilisateur = {$this->utilisateurId} ";
112
 
864 gduche 113
		$resultats = $this->bdd->recupererTous($requete);
1612 jpm 114
 
971 aurelien 115
		return !empty($resultats);
116
	}
1612 jpm 117
 
971 aurelien 118
	/**
119
	* Obtient l'utilisateur par le cookie
120
	*/
121
	public function getUtilisateurParCookie() {
122
		//TODO: utiliser le cookie n'est pas très sécurisé
123
		// ceci aussi devrait être dans une classe utilitaire
1612 jpm 124
		if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
125
			$courriel = $this->bdd->proteger($_COOKIE['del_courriel']);
126
			$requete = "SELECT id_utilisateur FROM del_utilisateur WHERE courriel = $courriel ";
971 aurelien 127
			$utilisateur = $this->bdd->recuperer($requete);
128
			$this->utilisateurId = $utilisateur['id_utilisateur'];
864 gduche 129
		}
971 aurelien 130
	}
1612 jpm 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
1612 jpm 137
		$idUtilisateur = $this->bdd->proteger($this->utilisateurId);
138
		$requete = 'SELECT admin '.
139
			'FROM del_utilisateur_infos '.
140
			"WHERE id_utilisateur = $idUtilisateur ";
141
 
971 aurelien 142
		$resultat = $this->bdd->recuperer($requete);
143
		return ($resultat && $resultat['admin'] == 1);
864 gduche 144
	}
1612 jpm 145
 
864 gduche 146
	/**
1612 jpm 147
	 * Initialiser les attributs de la classe avec les parametres
864 gduche 148
	 * */
149
	public function configurer() {
150
		$erreurs= array();
151
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
152
			$this->commentaireId = $this->ressources[0];
153
		} else {
154
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
155
		}
1612 jpm 156
 
157
		if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
971 aurelien 158
			$this->getUtilisateurParCookie();
864 gduche 159
		} else {
971 aurelien 160
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
864 gduche 161
		}
1612 jpm 162
 
864 gduche 163
		if (!empty($erreurs)) {
164
			$e = 'Erreur de configuration :';
165
			$e = implode("\n", $erreurs);
166
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
167
		}
168
	}
1612 jpm 169
 
864 gduche 170
	/*-------------------------------------------------------------------------------
1612 jpm 171
							   SUPPRESSION DES COMMENTAIRES
864 gduche 172
	--------------------------------------------------------------------------------*/
173
	/**
174
	 * Requete effective de suppression
175
	 * */
176
	public function supprimerCommentaire() {
1612 jpm 177
		$commentaireId = $this->bdd->proteger($this->commentaireId);
178
		$utilisateurId = $this->bdd->proteger($this->utilisateurId);
179
		$requete = 'DELETE FROM del_commentaire '.
180
			"WHERE id_commentaire = $commentaireId ".
181
			"AND ce_utilisateur = $utilisateurId ";
864 gduche 182
		$retour = $this->bdd->requeter($requete);
971 aurelien 183
		if (!$retour) {
864 gduche 184
			$e = 'Erreur lors de la suppression';
185
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
186
		}
187
	}
1612 jpm 188
 
971 aurelien 189
	/**
190
	 * Requete de suppression de votes associés au commentaire
191
	 */
192
	public function supprimerVotesAssocies() {
1612 jpm 193
		$commentaireId = $this->bdd->proteger($this->commentaireId);
194
		$requete = "DELETE FROM del_commentaire_vote WHERE ce_proposition = $commentaireId ";
971 aurelien 195
		$retour = $this->bdd->requeter($requete);
196
		if (!$retour) {
197
			$e = 'Erreur lors de la suppression des votes associés';
198
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
199
		}
200
	}
864 gduche 201
}
202
?>