Subversion Repositories eFlore/Applications.del

Rev

Rev 1795 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
864 gduche 1
<?php
2
// declare(encoding='UTF-8');
3
/**
1795 jpm 4
 * Permet de supprimer un commentaire.
864 gduche 5
 *
1795 jpm 6
 * @category   DEL
7
 * @package    Services
8
 * @subpackage Commentaires
9
 * @version    0.1
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
864 gduche 16
 */
17
 
18
class SupprimerCommentaire {
1612 jpm 19
 
864 gduche 20
	private $conteneur;
21
	private $navigation;
22
	private $bdd;
1795 jpm 23
	private $utilisateur;
1612 jpm 24
 
864 gduche 25
	private $commentaireId;
26
	private $utilisateurId;
27
 
28
	public function __construct(Conteneur $conteneur = null) {
29
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->navigation = $conteneur->getNavigation();
1793 jpm 31
		$this->bdd = $this->conteneur->getBdd();
1795 jpm 32
		$this->utilisateur = $this->conteneur->getUtilisateur();
864 gduche 33
	}
1612 jpm 34
 
1795 jpm 35
	public function supprimer($ressources) {
36
		$this->commentaireId = $ressources[0];
1612 jpm 37
 
1795 jpm 38
		$utilisateur = $this->utilisateur->getUtilisateurIdentifie();
39
		$this->verifierIdentificationUtilisateur($utilisateur);
40
		$this->utilisateurId = $utilisateur['id_utilisateur'];
1612 jpm 41
 
971 aurelien 42
		// la suppression est autorisée pour le propriétaire et l'admin sur un commentaire ou une proposition
43
		// qui n'a jamais été commentée en retour
1795 jpm 44
		if ($this->etreCommentaireSansEnfant() && $this->etreUtilisateurAutorise()) {
864 gduche 45
			$this->supprimerCommentaire();
971 aurelien 46
			$this->supprimerVotesAssocies();
864 gduche 47
		}
1612 jpm 48
 
1795 jpm 49
		$resultat = new ResultatService();
864 gduche 50
		return $resultat;
51
	}
1612 jpm 52
 
1795 jpm 53
	private function verifierIdentificationUtilisateur($utilisateur) {
54
		if ($utilisateur == null) {
55
			$msg = "Ce service nécessite d'être identifié.";
56
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
57
		}
864 gduche 58
	}
1612 jpm 59
 
1795 jpm 60
	private function etreCommentaireSansEnfant() {
61
		$idCommentaireP = $this->bdd->proteger($this->commentaireId);
1612 jpm 62
		$requete = 'SELECT * '.
63
			'FROM del_commentaire '.
1795 jpm 64
			"WHERE (ce_proposition = $idCommentaireP ".
65
			"OR ce_commentaire_parent = $idCommentaireP) ".
66
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 67
		$resultats = $this->bdd->recupererTous($requete);
68
		if (!empty($resultats)) {
1795 jpm 69
			$msg = "Impossible de supprimer le commentaire car il a des réponses.";
70
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
864 gduche 71
		}
72
		return true;
73
	}
1612 jpm 74
 
1795 jpm 75
	private function etreUtilisateurAutorise() {
76
		if (! $this->etreProprietaire() && ! $this->utilisateur->etreAdmin()) {
77
			$msg = "Impossible de supprimer le commentaire car l'utilisateur n'a pas les droits requis.";
78
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
971 aurelien 79
		}
1795 jpm 80
		return true;
971 aurelien 81
	}
1612 jpm 82
 
1795 jpm 83
	private function etreProprietaire() {
1612 jpm 84
		$requete = 'SELECT * '.
85
			'FROM del_commentaire '.
86
			"WHERE id_commentaire = {$this->commentaireId} ".
1795 jpm 87
			"AND ce_utilisateur = {$this->utilisateurId} ".
88
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 89
		$resultats = $this->bdd->recupererTous($requete);
971 aurelien 90
		return !empty($resultats);
91
	}
1612 jpm 92
 
1795 jpm 93
	private function supprimerCommentaire() {
94
		$commentaireIdP = $this->bdd->proteger($this->commentaireId);
95
		$utilisateurIdP = $this->bdd->proteger($this->utilisateurId);
1612 jpm 96
		$requete = 'DELETE FROM del_commentaire '.
1795 jpm 97
			"WHERE id_commentaire = $commentaireIdP ".
98
			"AND ce_utilisateur = $utilisateurIdP ".
99
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 100
		$retour = $this->bdd->requeter($requete);
971 aurelien 101
		if (!$retour) {
1795 jpm 102
			$msg = 'Erreur lors de la suppression.';
103
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
864 gduche 104
		}
105
	}
1612 jpm 106
 
1795 jpm 107
	private function supprimerVotesAssocies() {
1612 jpm 108
		$commentaireId = $this->bdd->proteger($this->commentaireId);
1795 jpm 109
		$requete = 'DELETE FROM del_commentaire_vote '.
110
			"WHERE ce_proposition = $commentaireId ".
111
			' -- '.__FILE__.' : '.__LINE__;
971 aurelien 112
		$retour = $this->bdd->requeter($requete);
113
		if (!$retour) {
1795 jpm 114
			$msg = 'Erreur lors de la suppression des votes associés.';
115
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
971 aurelien 116
		}
117
	}
1795 jpm 118
}