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