Subversion Repositories eFlore/Applications.del

Rev

Rev 950 | Rev 1251 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 950 Rev 971
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
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
5
 * pour retourner une liste d'images associée à une observation
6
 *
6
 *
7
 * @category	php 5.2
7
 * @category	php 5.2
8
 * @package	del
8
 * @package	del
9
 * @subpackage images
9
 * @subpackage images
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@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
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
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 $
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
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
16
 */
16
 */
17
 
17
 
18
class SupprimerCommentaire {
18
class SupprimerCommentaire {
19
	
19
	
20
	private $conteneur;
20
	private $conteneur;
21
	private $navigation;
21
	private $navigation;
22
	private $masque;
22
	private $masque;
23
	private $gestionBdd;
23
	private $gestionBdd;
24
	private $bdd;
24
	private $bdd;
25
	private $parametres = array();
25
	private $parametres = array();
26
	private $ressources = array();
26
	private $ressources = array();
27
	
27
	
28
	private $commentaireId;
28
	private $commentaireId;
29
	private $utilisateurId;
29
	private $utilisateurId;
30
 
30
 
31
	public function __construct(Conteneur $conteneur = null) {
31
	public function __construct(Conteneur $conteneur = null) {
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
33
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
33
		$this->conteneur->chargerConfiguration('config_commentaires.ini');
34
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
34
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
35
		$this->navigation = $conteneur->getNavigation();
35
		$this->navigation = $conteneur->getNavigation();
36
		$this->masque = $conteneur->getMasque();
36
		$this->masque = $conteneur->getMasque();
37
		$this->gestionBdd = $conteneur->getGestionBdd();
37
		$this->gestionBdd = $conteneur->getGestionBdd();
38
		$this->bdd = $this->gestionBdd->getBdd();	
38
		$this->bdd = $this->gestionBdd->getBdd();	
39
	}
39
	}
40
	
40
		
41
	/**
41
	/**
42
	 * Méthode principale de la classe.
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 
43
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
44
	 * pour l'afficher.
44
	 * pour l'afficher.
45
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
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
46
	 * @param array $parametres les paramètres situés après le ? dans l'url
47
	 * */
47
	 * */
48
	public function supprimer($ressources, $parametres) {
48
	public function supprimer($ressources, $parametres) {
49
		$resultat = new ResultatService();
49
		$resultat = new ResultatService();
50
		
50
		
51
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
51
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
52
		// Gestion des configuration du script
52
		// Gestion des configuration du script
53
		$this->configurer();
53
		$this->configurer();
-
 
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
54
		if ($this->sansEnfant() && $this->estProprietaire()) {
57
		if ($this->sansEnfant() && $this->utilisateurEstAutorise()) {
55
			$this->supprimerCommentaire();
58
			$this->supprimerCommentaire();
-
 
59
			$this->supprimerVotesAssocies();
56
		} else {
60
		} else {
57
			$e = 'Impossible de supprimer le commentaire car il a des réponses ou ce n\'est pas le vôtre.';
61
			$e = 'Impossible de supprimer le commentaire car il a des réponses ou ce n\'est pas le vôtre.';
58
			echo var_dump($e);
-
 
59
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
62
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
60
		}
63
		}
61
				
64
				
62
		return $resultat;
65
		return $resultat;
63
	}
66
	}
64
	
-
 
65
	
67
		
66
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
68
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
67
		$this->ressources = $ressources;
69
		$this->ressources = $ressources;
68
		$this->parametres = $parametres;
70
		$this->parametres = $parametres;
69
	}
71
	}
70
	
72
	
71
	/*-------------------------------------------------------------------------------
73
	/*-------------------------------------------------------------------------------
72
	 							CONFIGURATION DU SERVICE
74
	 							CONFIGURATION DU SERVICE
73
	 --------------------------------------------------------------------------------*/
75
	 --------------------------------------------------------------------------------*/
74
	/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer 
76
	/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer 
75
	 * n'a aucune réponse
77
	 * n'a aucune réponse
76
	 * */
78
	 * */
77
	public function sansEnfant() {
79
	public function sansEnfant() {
78
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
80
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
79
				   'WHERE (ce_proposition  = '.$this->commentaireId.' '.
81
				   'WHERE (ce_proposition  = '.$this->commentaireId.' '.
80
				   'OR ce_commentaire_parent = '.$this->commentaireId.')';
82
				   'OR ce_commentaire_parent = '.$this->commentaireId.')';
81
		$resultats = $this->bdd->recupererTous($requete);
83
		$resultats = $this->bdd->recupererTous($requete);
82
		if (!empty($resultats)) {
84
		if (!empty($resultats)) {
83
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
85
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
84
			echo var_dump($resultats);
-
 
85
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
86
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
86
		}
87
		}
87
		
88
		
88
		return true;
89
		return true;
89
	}
90
	}
-
 
91
	
-
 
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
	
90
	
102
	/** 
-
 
103
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
91
	/** estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
104
	* 
92
	* */
105
	* */
-
 
106
	public function estProprietaire() {
93
	public function estProprietaire() {
107
		
94
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
108
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
95
				   'WHERE id_commentaire = '.$this->commentaireId.' '.
109
				   'WHERE id_commentaire = '.$this->commentaireId.' '.
96
				   'AND ce_utilisateur = '.$this->utilisateurId;
110
				   'AND ce_utilisateur = '.$this->utilisateurId;
-
 
111
		
97
		$resultats = $this->bdd->recupererTous($requete);
112
		$resultats = $this->bdd->recupererTous($requete);
-
 
113
	
98
		if (!empty($resultats)) {
114
		return !empty($resultats);
-
 
115
	}
-
 
116
	
-
 
117
	/**
-
 
118
	* Obtient l'utilisateur par le cookie
-
 
119
	*/
-
 
120
	public function getUtilisateurParCookie() {
99
			$e = 'Impossible de supprimer le commentaire car ce n\'est pas le vôtre';
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'] != '') {
100
			echo var_dump($e);
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);
101
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
128
			$this->utilisateurId = $utilisateur['id_utilisateur'];
102
		}
129
		}
-
 
130
	}
-
 
131
	
-
 
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
-
 
137
		$requete = 'SELECT admin FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
-
 
138
									'WHERE id_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
-
 
139
	
103
	
140
		$resultat = $this->bdd->recuperer($requete);
104
		return true;
141
		return ($resultat && $resultat['admin'] == 1);
105
	}
142
	}
106
	
143
	
107
	
144
	
108
	/**
145
	/**
109
	 * Initialiser les attributs de la classe avec les parametres 
146
	 * Initialiser les attributs de la classe avec les parametres 
110
	 * */
147
	 * */
111
	public function configurer() {
148
	public function configurer() {
112
		$erreurs= array();
149
		$erreurs= array();
113
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
150
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
114
			$this->commentaireId = $this->ressources[0];
151
			$this->commentaireId = $this->ressources[0];
115
		} else {
152
		} else {
116
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
153
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
117
		}
154
		}
118
		
155
		
119
		if (isset($this->ressources[1]) && is_numeric($this->ressources[1])) {
156
		if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
120
			$this->utilisateurId = $this->ressources[1];
157
			$this->getUtilisateurParCookie();
121
		} else {
158
		} else {
122
			$erreurs[] = ' - l\identifiant de l\utilisateur doit être un entier; ';
159
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
123
		}
160
		}
124
		
161
				
125
		if (!empty($erreurs)) {
162
		if (!empty($erreurs)) {
126
			$e = 'Erreur de configuration :';
163
			$e = 'Erreur de configuration :';
127
			$e = implode("\n", $erreurs);
164
			$e = implode("\n", $erreurs);
128
			echo var_dump($e);
-
 
129
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
165
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
130
		}
166
		}
131
	}
167
	}
132
	
168
	
133
	/*-------------------------------------------------------------------------------
169
	/*-------------------------------------------------------------------------------
134
							   SUPPRESSION DES COMMENTAIRES 
170
							   SUPPRESSION DES COMMENTAIRES 
135
	--------------------------------------------------------------------------------*/
171
	--------------------------------------------------------------------------------*/
136
	/**
172
	/**
137
	 * Requete effective de suppression
173
	 * Requete effective de suppression
138
	 * */
174
	 * */
139
	public function supprimerCommentaire() {
175
	public function supprimerCommentaire() {
140
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire').
176
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire').' '.
141
				   'WHERE id_commentaire = '.$this->bdd->proteger($this->commentaireId).
177
				   'WHERE id_commentaire = '.$this->bdd->proteger($this->commentaireId).' '.
142
				   ' AND ce_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
178
				   	'AND ce_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
143
		$retour = $this->bdd->requeter($requete);
179
		$retour = $this->bdd->requeter($requete);
144
		if ($retour == null) {
180
		if (!$retour) {
145
			$e = 'Erreur lors de la suppression';
181
			$e = 'Erreur lors de la suppression';
-
 
182
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
-
 
183
		}
-
 
184
	}
-
 
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);
146
			echo var_dump($e);
193
		if (!$retour) {
-
 
194
			$e = 'Erreur lors de la suppression des votes associés';
147
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
195
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
148
		}
196
		}
149
	}
197
	}
150
}
198
}
151
?>
199
?>