Subversion Repositories eFlore/Applications.del

Rev

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

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