Subversion Repositories eFlore/Applications.del

Rev

Rev 1794 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1794 Rev 1795
Line 1... Line 1...
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
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
4
 * Permet de supprimer un commentaire.
6
 *
5
 *
7
 * @category	php 5.2
6
 * @category   DEL
8
 * @package	del
7
 * @package    Services
9
 * @subpackage images
8
 * @subpackage Commentaires
-
 
9
 * @version    0.1
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
11
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
13
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
16
 */
16
 */
Line 17... Line 17...
17
 
17
 
Line 18... Line 18...
18
class SupprimerCommentaire {
18
class SupprimerCommentaire {
19
 
19
 
20
	private $conteneur;
20
	private $conteneur;
21
	private $navigation;
-
 
22
	private $bdd;
21
	private $navigation;
Line 23... Line 22...
23
	private $parametres = array();
22
	private $bdd;
24
	private $ressources = array();
23
	private $utilisateur;
Line 25... Line 24...
25
 
24
 
26
	private $commentaireId;
25
	private $commentaireId;
27
	private $utilisateurId;
-
 
28
 
-
 
29
	public function __construct(Conteneur $conteneur = null) {
26
	private $utilisateurId;
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
27
 
-
 
28
	public function __construct(Conteneur $conteneur = null) {
31
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
29
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
Line 32... Line -...
32
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
-
 
33
		$this->navigation = $conteneur->getNavigation();
-
 
34
		$this->bdd = $this->conteneur->getBdd();
-
 
35
	}
-
 
36
 
-
 
37
	/**
-
 
38
	 * Méthode principale de la classe.
-
 
39
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
30
		$this->navigation = $conteneur->getNavigation();
40
	 * pour l'afficher.
31
		$this->bdd = $this->conteneur->getBdd();
Line 41... Line 32...
41
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
32
		$this->utilisateur = $this->conteneur->getUtilisateur();
42
	 * @param array $parametres les paramètres situés après le ? dans l'url
33
	}
43
	 * */
34
 
Line 44... Line 35...
44
	public function supprimer($ressources, $parametres) {
35
	public function supprimer($ressources) {
45
		$resultat = new ResultatService();
36
		$this->commentaireId = $ressources[0];
46
 
37
 
47
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
38
		$utilisateur = $this->utilisateur->getUtilisateurIdentifie();
48
		// Gestion des configuration du script
39
		$this->verifierIdentificationUtilisateur($utilisateur);
49
		$this->configurer();
-
 
50
 
-
 
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
40
		$this->utilisateurId = $utilisateur['id_utilisateur'];
Line -... Line 41...
-
 
41
 
53
		if ($this->sansEnfant() && $this->utilisateurEstAutorise()) {
42
		// la suppression est autorisée pour le propriétaire et l'admin sur un commentaire ou une proposition
54
			$this->supprimerCommentaire();
43
		// qui n'a jamais été commentée en retour
Line 55... Line 44...
55
			$this->supprimerVotesAssocies();
44
		if ($this->etreCommentaireSansEnfant() && $this->etreUtilisateurAutorise()) {
56
		} else {
45
			$this->supprimerCommentaire();
57
			$e = 'Impossible de supprimer le commentaire car il a des réponses ou ce n\'est pas le vôtre.';
46
			$this->supprimerVotesAssocies();
-
 
47
		}
-
 
48
 
58
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
49
		$resultat = new ResultatService();
Line 59... Line -...
59
		}
-
 
60
 
50
		return $resultat;
61
		return $resultat;
-
 
62
	}
51
	}
63
 
-
 
64
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
-
 
65
		$this->ressources = $ressources;
-
 
66
		$this->parametres = $parametres;
52
 
67
	}
53
	private function verifierIdentificationUtilisateur($utilisateur) {
68
 
54
		if ($utilisateur == null) {
69
	/*-------------------------------------------------------------------------------
55
			$msg = "Ce service nécessite d'être identifié.";
-
 
56
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
70
	 							CONFIGURATION DU SERVICE
57
		}
71
	 --------------------------------------------------------------------------------*/
58
	}
72
	/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer
59
 
73
	 * n'a aucune réponse
60
	private function etreCommentaireSansEnfant() {
74
	 * */
61
		$idCommentaireP = $this->bdd->proteger($this->commentaireId);
75
	public function sansEnfant() {
-
 
76
		$requete = 'SELECT * '.
62
		$requete = 'SELECT * '.
77
			'FROM del_commentaire '.
63
			'FROM del_commentaire '.
Line 78... Line 64...
78
			"WHERE (ce_proposition = {$this->commentaireId} ".
64
			"WHERE (ce_proposition = $idCommentaireP ".
79
			"OR ce_commentaire_parent = {$this->commentaireId}) ";
-
 
80
		$resultats = $this->bdd->recupererTous($requete);
65
			"OR ce_commentaire_parent = $idCommentaireP) ".
81
		if (!empty($resultats)) {
66
			' -- '.__FILE__.' : '.__LINE__;
82
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
67
		$resultats = $this->bdd->recupererTous($requete);
83
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
-
 
84
		}
68
		if (!empty($resultats)) {
85
 
69
			$msg = "Impossible de supprimer le commentaire car il a des réponses.";
86
		return true;
70
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
Line 87... Line -...
87
	}
-
 
88
 
-
 
89
	private function utilisateurEstAutorise() {
-
 
90
		$autorise = true;
-
 
91
		if (!$this->estProprietaire() && !$this->utilisateurEstAdmin()) {
71
		}
92
			$e = 'Impossible de supprimer le commentaire car l\'utilisateur n\'a pas les droits requis';
72
		return true;
93
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
73
	}
94
			$autorise = false;
74
 
95
		}
75
	private function etreUtilisateurAutorise() {
96
		return $autorise;
-
 
-
 
76
		if (! $this->etreProprietaire() && ! $this->utilisateur->etreAdmin()) {
97
	}
77
			$msg = "Impossible de supprimer le commentaire car l'utilisateur n'a pas les droits requis.";
98
 
-
 
99
	/**
78
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
100
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
79
		}
Line 101... Line -...
101
	*
-
 
102
	* */
-
 
103
	public function estProprietaire() {
-
 
104
		$requete = 'SELECT * '.
-
 
105
			'FROM del_commentaire '.
-
 
106
			"WHERE id_commentaire = {$this->commentaireId} ".
-
 
107
			"AND ce_utilisateur = {$this->utilisateurId} ";
-
 
108
 
-
 
109
		$resultats = $this->bdd->recupererTous($requete);
-
 
110
 
-
 
111
		return !empty($resultats);
-
 
112
	}
-
 
113
 
-
 
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
-
 
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 ";
-
 
123
			$utilisateur = $this->bdd->recuperer($requete);
-
 
124
			$this->utilisateurId = $utilisateur['id_utilisateur'];
-
 
125
		}
-
 
126
	}
-
 
127
 
-
 
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
-
 
133
		$idUtilisateur = $this->bdd->proteger($this->utilisateurId);
-
 
134
		$requete = 'SELECT admin '.
-
 
135
			'FROM del_utilisateur_infos '.
-
 
136
			"WHERE id_utilisateur = $idUtilisateur ";
-
 
137
 
-
 
138
		$resultat = $this->bdd->recuperer($requete);
-
 
139
		return ($resultat && $resultat['admin'] == 1);
-
 
140
	}
-
 
141
 
-
 
142
	/**
-
 
143
	 * Initialiser les attributs de la classe avec les parametres
-
 
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
		}
-
 
152
 
-
 
153
		if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
-
 
154
			$this->getUtilisateurParCookie();
-
 
155
		} else {
-
 
156
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
-
 
157
		}
-
 
158
 
-
 
159
		if (!empty($erreurs)) {
80
		return true;
160
			$e = 'Erreur de configuration :';
81
	}
161
			$e = implode("\n", $erreurs);
82
 
162
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
83
	private function etreProprietaire() {
163
		}
84
		$requete = 'SELECT * '.
164
	}
85
			'FROM del_commentaire '.
-
 
86
			"WHERE id_commentaire = {$this->commentaireId} ".
165
 
87
			"AND ce_utilisateur = {$this->utilisateurId} ".
166
	/*-------------------------------------------------------------------------------
88
			' -- '.__FILE__.' : '.__LINE__;
167
							   SUPPRESSION DES COMMENTAIRES
89
		$resultats = $this->bdd->recupererTous($requete);
168
	--------------------------------------------------------------------------------*/
90
		return !empty($resultats);
169
	/**
91
	}
170
	 * Requete effective de suppression
92
 
Line 171... Line -...
171
	 * */
-
 
172
	public function supprimerCommentaire() {
-
 
173
		$commentaireId = $this->bdd->proteger($this->commentaireId);
-
 
174
		$utilisateurId = $this->bdd->proteger($this->utilisateurId);
93
	private function supprimerCommentaire() {
175
		$requete = 'DELETE FROM del_commentaire '.
94
		$commentaireIdP = $this->bdd->proteger($this->commentaireId);
176
			"WHERE id_commentaire = $commentaireId ".
95
		$utilisateurIdP = $this->bdd->proteger($this->utilisateurId);
-
 
96
		$requete = 'DELETE FROM del_commentaire '.
-
 
97
			"WHERE id_commentaire = $commentaireIdP ".
177
			"AND ce_utilisateur = $utilisateurId ";
98
			"AND ce_utilisateur = $utilisateurIdP ".
178
		$retour = $this->bdd->requeter($requete);
99
			' -- '.__FILE__.' : '.__LINE__;
179
		if (!$retour) {
100
		$retour = $this->bdd->requeter($requete);
180
			$e = 'Erreur lors de la suppression';
101
		if (!$retour) {
181
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
102
			$msg = 'Erreur lors de la suppression.';
182
		}
103
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
183
	}
-
 
184
 
-
 
185
	/**
104
		}
-
 
105
	}
186
	 * Requete de suppression de votes associés au commentaire
106