Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1251 Rev 1612
Line 14... Line 14...
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
 */
Line 17... Line 17...
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;
Line 29... Line 29...
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 * '.
80
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
81
			'FROM del_commentaire '.
81
				   'WHERE (ce_proposition  = '.$this->commentaireId.' '.
82
			"WHERE (ce_proposition = {$this->commentaireId} ".
82
				   'OR ce_commentaire_parent = '.$this->commentaireId.')';
83
			"OR ce_commentaire_parent = {$this->commentaireId}) ";
83
		$resultats = $this->bdd->recupererTous($requete);
84
		$resultats = $this->bdd->recupererTous($requete);
84
		if (!empty($resultats)) {
85
		if (!empty($resultats)) {
85
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
86
			$e = 'Impossible de supprimer le commentaire car il a des réponses';
86
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
87
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
87
		}
88
		}
88
		
89
 
89
		return true;
90
		return true;
90
	}
91
	}
91
	
92
 
92
	private function utilisateurEstAutorise() {
93
	private function utilisateurEstAutorise() {
93
		$autorise = true;
94
		$autorise = true;
94
		if(!$this->estProprietaire() && !$this->utilisateurEstAdmin()) {
95
		if (!$this->estProprietaire() && !$this->utilisateurEstAdmin()) {
95
			$e = 'Impossible de supprimer le commentaire car l\'utilisateur n\'a pas les droits requis';
96
			$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
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
97
			$autorise = false;
98
			$autorise = false;
98
		}
99
		}
99
		return $autorise;
100
		return $autorise;
100
	}
101
	}
101
	
102
 
102
	/** 
103
	/**
103
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
104
	* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur
104
	* 
105
	*
105
	* */
-
 
-
 
106
	* */
106
	public function estProprietaire() {
107
	public function estProprietaire() {
107
		
108
		$requete = 'SELECT * '.
108
		$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire').
109
			'FROM del_commentaire '.
109
				   'WHERE id_commentaire = '.$this->commentaireId.' '.
110
			"WHERE id_commentaire = {$this->commentaireId} ".
110
				   'AND ce_utilisateur = '.$this->utilisateurId;
111
			"AND ce_utilisateur = {$this->utilisateurId} ";
111
		
112
 
112
		$resultats = $this->bdd->recupererTous($requete);
113
		$resultats = $this->bdd->recupererTous($requete);
113
	
114
 
114
		return !empty($resultats);
115
		return !empty($resultats);
115
	}
116
	}
116
	
117
 
117
	/**
118
	/**
118
	* Obtient l'utilisateur par le cookie
119
	* Obtient l'utilisateur par le cookie
119
	*/
120
	*/
120
	public function getUtilisateurParCookie() {
121
	public function getUtilisateurParCookie() {
121
		//TODO: utiliser le cookie n'est pas très sécurisé
122
		//TODO: utiliser le cookie n'est pas très sécurisé
122
		// ceci aussi devrait être dans une classe utilitaire
123
		// ceci aussi devrait être dans une classe utilitaire
123
		if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
124
		if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
124
			$courriel = $_COOKIE['del_courriel'];
-
 
125
			$requete = 'SELECT id_utilisateur FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
125
			$courriel = $this->bdd->proteger($_COOKIE['del_courriel']);
126
										'WHERE courriel = '.$this->bdd->proteger($courriel);
126
			$requete = "SELECT id_utilisateur FROM del_utilisateur WHERE courriel = $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
-
 
137
		$idUtilisateur = $this->bdd->proteger($this->utilisateurId);
136
		//TODO: déplacer ceci dans une classe utilitaire
138
		$requete = 'SELECT admin '.
137
		$requete = 'SELECT admin FROM '.$this->gestionBdd->formaterTable('del_utilisateur_infos', 'dui').
139
			'FROM del_utilisateur_infos '.
138
									'WHERE id_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
140
			"WHERE id_utilisateur = $idUtilisateur ";
139
	
141
 
140
		$resultat = $this->bdd->recuperer($requete);
142
		$resultat = $this->bdd->recuperer($requete);
141
		return ($resultat && $resultat['admin'] == 1);
-
 
142
	}
143
		return ($resultat && $resultat['admin'] == 1);
143
	
144
	}
144
	
145
 
145
	/**
146
	/**
146
	 * Initialiser les attributs de la classe avec les parametres 
147
	 * Initialiser les attributs de la classe avec les parametres
147
	 * */
148
	 * */
148
	public function configurer() {
149
	public function configurer() {
149
		$erreurs= array();
150
		$erreurs= array();
150
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
151
		if (isset($this->ressources[0]) && is_numeric($this->ressources[0])) {
151
			$this->commentaireId = $this->ressources[0];
152
			$this->commentaireId = $this->ressources[0];
152
		} else {
153
		} else {
153
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
154
			$erreurs[] = ' - l\identifiant du commentaire doit être un entier; ';
154
		}
155
		}
155
		
156
 
156
		if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
157
		if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') {
157
			$this->getUtilisateurParCookie();
158
			$this->getUtilisateurParCookie();
158
		} else {
159
		} else {
159
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
160
			$erreurs[] = ' - Ce service nécessite d\'être identifié; ';
160
		}
161
		}
161
				
162
 
162
		if (!empty($erreurs)) {
163
		if (!empty($erreurs)) {
163
			$e = 'Erreur de configuration :';
164
			$e = 'Erreur de configuration :';
164
			$e = implode("\n", $erreurs);
165
			$e = implode("\n", $erreurs);
165
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
166
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
166
		}
167
		}
167
	}
168
	}
168
	
169
 
169
	/*-------------------------------------------------------------------------------
170
	/*-------------------------------------------------------------------------------
170
							   SUPPRESSION DES COMMENTAIRES 
171
							   SUPPRESSION DES COMMENTAIRES
171
	--------------------------------------------------------------------------------*/
172
	--------------------------------------------------------------------------------*/
172
	/**
173
	/**
173
	 * Requete effective de suppression
174
	 * Requete effective de suppression
-
 
175
	 * */
-
 
176
	public function supprimerCommentaire() {
174
	 * */
177
		$commentaireId = $this->bdd->proteger($this->commentaireId);
175
	public function supprimerCommentaire() {
178
		$utilisateurId = $this->bdd->proteger($this->utilisateurId);
176
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire').' '.
179
		$requete = 'DELETE FROM del_commentaire '.
177
				   'WHERE id_commentaire = '.$this->bdd->proteger($this->commentaireId).' '.
180
			"WHERE id_commentaire = $commentaireId ".
178
				   	'AND ce_utilisateur = '.$this->bdd->proteger($this->utilisateurId);
181
			"AND ce_utilisateur = $utilisateurId ";
179
		$retour = $this->bdd->requeter($requete);
182
		$retour = $this->bdd->requeter($requete);
180
		if (!$retour) {
183
		if (!$retour) {
181
			$e = 'Erreur lors de la suppression';
184
			$e = 'Erreur lors de la suppression';
182
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
185
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
183
		}
186
		}
184
	}
187
	}
185
	
188
 
186
	/**
189
	/**
187
	 * Requete de suppression de votes associés au commentaire
190
	 * Requete de suppression de votes associés au commentaire
188
	 */
191
	 */
189
	public function supprimerVotesAssocies() {
192
	public function supprimerVotesAssocies() {
190
		$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire_vote').' '.
193
		$commentaireId = $this->bdd->proteger($this->commentaireId);
191
				   'WHERE ce_proposition = '.$this->bdd->proteger($this->commentaireId);
194
		$requete = "DELETE FROM del_commentaire_vote WHERE ce_proposition = $commentaireId ";
192
		$retour = $this->bdd->requeter($requete);
195
		$retour = $this->bdd->requeter($requete);
193
		if (!$retour) {
196
		if (!$retour) {
194
			$e = 'Erreur lors de la suppression des votes associés';
197
			$e = 'Erreur lors de la suppression des votes associés';