Subversion Repositories eFlore/Applications.del

Rev

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