Subversion Repositories eFlore/Applications.del

Rev

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

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