16,7 → 16,7 |
*/ |
|
class SupprimerCommentaire { |
|
|
private $conteneur; |
private $navigation; |
private $masque; |
24,7 → 24,7 |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
|
|
private $commentaireId; |
private $utilisateurId; |
|
35,12 → 35,12 |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
} |
|
|
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
47,11 → 47,11 |
* */ |
public function supprimer($ressources, $parametres) { |
$resultat = new ResultatService(); |
|
|
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
// Gestion des configuration du script |
$this->configurer(); |
|
|
// la suppression est autorisée pour le propriétaire et l'admin sur un commentaire ou une proposition |
// qui n'a jamais été commentée en retour |
if ($this->sansEnfant() && $this->utilisateurEstAutorise()) { |
61,37 → 61,38 |
$e = 'Impossible de supprimer le commentaire car il a des réponses ou ce n\'est pas le vôtre.'; |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
|
|
return $resultat; |
} |
|
|
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
|
|
/*------------------------------------------------------------------------------- |
CONFIGURATION DU SERVICE |
--------------------------------------------------------------------------------*/ |
/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer |
/** sansEnfant permet de vérifier que le commentaire que l'on veut supprimer |
* n'a aucune réponse |
* */ |
public function sansEnfant() { |
$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire'). |
'WHERE (ce_proposition = '.$this->commentaireId.' '. |
'OR ce_commentaire_parent = '.$this->commentaireId.')'; |
$requete = 'SELECT * '. |
'FROM del_commentaire '. |
"WHERE (ce_proposition = {$this->commentaireId} ". |
"OR ce_commentaire_parent = {$this->commentaireId}) "; |
$resultats = $this->bdd->recupererTous($requete); |
if (!empty($resultats)) { |
$e = 'Impossible de supprimer le commentaire car il a des réponses'; |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
|
|
return true; |
} |
|
|
private function utilisateurEstAutorise() { |
$autorise = true; |
if(!$this->estProprietaire() && !$this->utilisateurEstAdmin()) { |
if (!$this->estProprietaire() && !$this->utilisateurEstAdmin()) { |
$e = 'Impossible de supprimer le commentaire car l\'utilisateur n\'a pas les droits requis'; |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
$autorise = false; |
98,22 → 99,22 |
} |
return $autorise; |
} |
|
/** |
|
/** |
* estProprietaire permet de vérifier que le commentaire appartient à l'utilisateur |
* |
* |
* */ |
public function estProprietaire() { |
|
$requete = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire'). |
'WHERE id_commentaire = '.$this->commentaireId.' '. |
'AND ce_utilisateur = '.$this->utilisateurId; |
|
$requete = 'SELECT * '. |
'FROM del_commentaire '. |
"WHERE id_commentaire = {$this->commentaireId} ". |
"AND ce_utilisateur = {$this->utilisateurId} "; |
|
$resultats = $this->bdd->recupererTous($requete); |
|
|
return !empty($resultats); |
} |
|
|
/** |
* Obtient l'utilisateur par le cookie |
*/ |
120,30 → 121,30 |
public function getUtilisateurParCookie() { |
//TODO: utiliser le cookie n'est pas très sécurisé |
// ceci aussi devrait être dans une classe utilitaire |
if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') { |
$courriel = $_COOKIE['del_courriel']; |
$requete = 'SELECT id_utilisateur FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du'). |
'WHERE courriel = '.$this->bdd->proteger($courriel); |
if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') { |
$courriel = $this->bdd->proteger($_COOKIE['del_courriel']); |
$requete = "SELECT id_utilisateur FROM del_utilisateur WHERE courriel = $courriel "; |
$utilisateur = $this->bdd->recuperer($requete); |
$this->utilisateurId = $utilisateur['id_utilisateur']; |
} |
} |
|
|
/** |
* Renvoie vrai si l'utilisateur existe dans la base de données et si son champ admin est à 1 |
*/ |
private function utilisateurEstAdmin() { |
//TODO: déplacer ceci dans une classe utilitaire |
$requete = 'SELECT admin FROM '.$this->gestionBdd->formaterTable('del_utilisateur_infos', 'dui'). |
'WHERE id_utilisateur = '.$this->bdd->proteger($this->utilisateurId); |
|
$idUtilisateur = $this->bdd->proteger($this->utilisateurId); |
$requete = 'SELECT admin '. |
'FROM del_utilisateur_infos '. |
"WHERE id_utilisateur = $idUtilisateur "; |
|
$resultat = $this->bdd->recuperer($requete); |
return ($resultat && $resultat['admin'] == 1); |
} |
|
|
|
/** |
* Initialiser les attributs de la classe avec les parametres |
* Initialiser les attributs de la classe avec les parametres |
* */ |
public function configurer() { |
$erreurs= array(); |
152,13 → 153,13 |
} else { |
$erreurs[] = ' - l\identifiant du commentaire doit être un entier; '; |
} |
|
if(isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') { |
|
if (isset($_COOKIE['del_courriel']) && $_COOKIE['del_courriel'] != '') { |
$this->getUtilisateurParCookie(); |
} else { |
$erreurs[] = ' - Ce service nécessite d\'être identifié; '; |
} |
|
|
if (!empty($erreurs)) { |
$e = 'Erreur de configuration :'; |
$e = implode("\n", $erreurs); |
165,17 → 166,19 |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
} |
|
|
/*------------------------------------------------------------------------------- |
SUPPRESSION DES COMMENTAIRES |
SUPPRESSION DES COMMENTAIRES |
--------------------------------------------------------------------------------*/ |
/** |
* Requete effective de suppression |
* */ |
public function supprimerCommentaire() { |
$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire').' '. |
'WHERE id_commentaire = '.$this->bdd->proteger($this->commentaireId).' '. |
'AND ce_utilisateur = '.$this->bdd->proteger($this->utilisateurId); |
$commentaireId = $this->bdd->proteger($this->commentaireId); |
$utilisateurId = $this->bdd->proteger($this->utilisateurId); |
$requete = 'DELETE FROM del_commentaire '. |
"WHERE id_commentaire = $commentaireId ". |
"AND ce_utilisateur = $utilisateurId "; |
$retour = $this->bdd->requeter($requete); |
if (!$retour) { |
$e = 'Erreur lors de la suppression'; |
182,13 → 185,13 |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
} |
|
|
/** |
* Requete de suppression de votes associés au commentaire |
*/ |
public function supprimerVotesAssocies() { |
$requete = 'DELETE FROM '.$this->gestionBdd->formaterTable('del_commentaire_vote').' '. |
'WHERE ce_proposition = '.$this->bdd->proteger($this->commentaireId); |
$commentaireId = $this->bdd->proteger($this->commentaireId); |
$requete = "DELETE FROM del_commentaire_vote WHERE ce_proposition = $commentaireId "; |
$retour = $this->bdd->requeter($requete); |
if (!$retour) { |
$e = 'Erreur lors de la suppression des votes associés'; |