Subversion Repositories eFlore/Applications.del

Rev

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