Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2211 arthur 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Permet de supprimer un commentaire.
5
 *
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>
16
 */
17
 
18
class SupprimerCommentaire {
19
 
20
	private $conteneur;
21
	private $navigation;
22
	private $bdd;
23
	private $utilisateur;
24
 
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();
31
		$this->bdd = $this->conteneur->getBdd();
32
		$this->utilisateur = $this->conteneur->getUtilisateur();
33
	}
34
 
35
	public function supprimer($ressources) {
36
		$this->commentaireId = $ressources[0];
37
 
38
		$utilisateur = $this->utilisateur->getUtilisateurIdentifie();
39
		$this->verifierIdentificationUtilisateur($utilisateur);
40
		$this->utilisateurId = $utilisateur['id_utilisateur'];
41
 
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
44
		if ($this->etreCommentaireSansEnfant() && $this->etreUtilisateurAutorise() &&
45
			$this->nePasEtreDeterminationInitiale()) {
46
			$this->supprimerCommentaire();
47
			$this->supprimerVotesAssocies();
48
		}
49
 
50
		$resultat = new ResultatService();
51
		return $resultat;
52
	}
53
 
54
	private function verifierIdentificationUtilisateur($utilisateur) {
55
		if ($utilisateur == null) {
56
			$msg = "Ce service nécessite d'être identifié.";
57
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
58
		}
59
	}
60
 
61
	private function nePasEtreDeterminationInitiale() {
62
		$idCommentaireP = $this->bdd->proteger($this->commentaireId);
63
		$requete = 'SELECT * '.
64
				'FROM del_commentaire '.
65
				"WHERE id_commentaire = $idCommentaireP ".
66
				"AND (proposition_initiale = 1 OR proposition_retenue = 1) ".
67
				' -- '.__FILE__.' : '.__LINE__;
68
		$resultats = $this->bdd->recupererTous($requete);
69
		if (!empty($resultats)) {
70
			$msg = "Impossible de supprimer la proposition initiale ou la proposition retenue.";
71
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
72
		}
73
		return true;
74
	}
75
 
76
	private function etreCommentaireSansEnfant() {
77
		$idCommentaireP = $this->bdd->proteger($this->commentaireId);
78
		$requete = 'SELECT * '.
79
			'FROM del_commentaire '.
80
			"WHERE (ce_proposition = $idCommentaireP ".
81
			"OR ce_commentaire_parent = $idCommentaireP) ".
82
			' -- '.__FILE__.' : '.__LINE__;
83
		$resultats = $this->bdd->recupererTous($requete);
84
		if (!empty($resultats)) {
85
			$msg = "Impossible de supprimer le commentaire car il a des réponses.";
86
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
87
		}
88
		return true;
89
	}
90
 
91
	private function etreUtilisateurAutorise() {
92
		if (! $this->etreProprietaire() && ! $this->utilisateur->etreAdmin()) {
93
			$msg = "Impossible de supprimer le commentaire car l'utilisateur n'a pas les droits requis.";
94
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
95
		}
96
		return true;
97
	}
98
 
99
	private function etreProprietaire() {
100
		$requete = 'SELECT * '.
101
			'FROM del_commentaire '.
102
			"WHERE id_commentaire = {$this->commentaireId} ".
103
			"AND ce_utilisateur = {$this->utilisateurId} ".
104
			' -- '.__FILE__.' : '.__LINE__;
105
		$resultats = $this->bdd->recupererTous($requete);
106
		return !empty($resultats);
107
	}
108
 
109
	private function supprimerCommentaire() {
110
		$commentaireIdP = $this->bdd->proteger($this->commentaireId);
111
		$utilisateurIdP = $this->bdd->proteger($this->utilisateurId);
112
		$requete = 'DELETE FROM del_commentaire '.
113
			"WHERE id_commentaire = $commentaireIdP ".
114
			"AND ce_utilisateur = $utilisateurIdP ".
115
			' -- '.__FILE__.' : '.__LINE__;
116
		$retour = $this->bdd->requeter($requete);
117
		if (!$retour) {
118
			$msg = 'Erreur lors de la suppression.';
119
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
120
		}
121
	}
122
 
123
	private function supprimerVotesAssocies() {
124
		$commentaireId = $this->bdd->proteger($this->commentaireId);
125
		$requete = 'DELETE FROM del_commentaire_vote '.
126
			"WHERE ce_proposition = $commentaireId ".
127
			' -- '.__FILE__.' : '.__LINE__;
128
		$retour = $this->bdd->requeter($requete);
129
		if (!$retour) {
130
			$msg = 'Erreur lors de la suppression des votes associés.';
131
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
132
		}
133
	}
134
}