Subversion Repositories eFlore/Applications.del

Rev

Rev 1795 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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