Subversion Repositories eFlore/Applications.del

Rev

Rev 1950 | 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
1950 aurelien 44
		if ($this->etreCommentaireSansEnfant() && $this->etreUtilisateurAutorise() &&
45
			$this->nePasEtreDeterminationInitiale()) {
864 gduche 46
			$this->supprimerCommentaire();
971 aurelien 47
			$this->supprimerVotesAssocies();
864 gduche 48
		}
1612 jpm 49
 
1795 jpm 50
		$resultat = new ResultatService();
864 gduche 51
		return $resultat;
52
	}
1612 jpm 53
 
1795 jpm 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
		}
864 gduche 59
	}
1950 aurelien 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
	}
1612 jpm 75
 
1795 jpm 76
	private function etreCommentaireSansEnfant() {
77
		$idCommentaireP = $this->bdd->proteger($this->commentaireId);
1612 jpm 78
		$requete = 'SELECT * '.
79
			'FROM del_commentaire '.
1795 jpm 80
			"WHERE (ce_proposition = $idCommentaireP ".
81
			"OR ce_commentaire_parent = $idCommentaireP) ".
82
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 83
		$resultats = $this->bdd->recupererTous($requete);
84
		if (!empty($resultats)) {
1795 jpm 85
			$msg = "Impossible de supprimer le commentaire car il a des réponses.";
86
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
864 gduche 87
		}
88
		return true;
89
	}
1612 jpm 90
 
1795 jpm 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);
971 aurelien 95
		}
1795 jpm 96
		return true;
971 aurelien 97
	}
1612 jpm 98
 
1795 jpm 99
	private function etreProprietaire() {
1612 jpm 100
		$requete = 'SELECT * '.
101
			'FROM del_commentaire '.
102
			"WHERE id_commentaire = {$this->commentaireId} ".
1795 jpm 103
			"AND ce_utilisateur = {$this->utilisateurId} ".
104
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 105
		$resultats = $this->bdd->recupererTous($requete);
971 aurelien 106
		return !empty($resultats);
107
	}
1612 jpm 108
 
1795 jpm 109
	private function supprimerCommentaire() {
110
		$commentaireIdP = $this->bdd->proteger($this->commentaireId);
111
		$utilisateurIdP = $this->bdd->proteger($this->utilisateurId);
1612 jpm 112
		$requete = 'DELETE FROM del_commentaire '.
1795 jpm 113
			"WHERE id_commentaire = $commentaireIdP ".
114
			"AND ce_utilisateur = $utilisateurIdP ".
115
			' -- '.__FILE__.' : '.__LINE__;
864 gduche 116
		$retour = $this->bdd->requeter($requete);
971 aurelien 117
		if (!$retour) {
1795 jpm 118
			$msg = 'Erreur lors de la suppression.';
119
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
864 gduche 120
		}
121
	}
1612 jpm 122
 
1795 jpm 123
	private function supprimerVotesAssocies() {
1612 jpm 124
		$commentaireId = $this->bdd->proteger($this->commentaireId);
1795 jpm 125
		$requete = 'DELETE FROM del_commentaire_vote '.
126
			"WHERE ce_proposition = $commentaireId ".
127
			' -- '.__FILE__.' : '.__LINE__;
971 aurelien 128
		$retour = $this->bdd->requeter($requete);
129
		if (!$retour) {
1795 jpm 130
			$msg = 'Erreur lors de la suppression des votes associés.';
131
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
971 aurelien 132
		}
133
	}
1795 jpm 134
}