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 |
}
|