16,7 → 16,7 |
*/ |
|
class AjouterCommentaire { |
|
|
private $conteneur; |
private $navigation; |
private $masque; |
24,7 → 24,7 |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
|
|
private $commentaire; |
|
public function __construct(Conteneur $conteneur = null) { |
35,9 → 35,8 |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
|
} |
|
|
/** |
* Ajoute un commentaire/determination si les objets fournis en paramètres sont valides |
* pour l'afficher. |
46,7 → 45,7 |
* */ |
public function ajouter($ressources, $parametres) { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
|
|
// Gestion des configuration du script |
$this->configurer(); |
$this->verifierConfiguration(); |
53,39 → 52,37 |
$utilisateur = $this->chercherUtilisateur(); |
$proposition_initiale = $this->verifierEtCreerPropositionDeterminationInitiale(); |
$insertion = $this->insererCommentaire($utilisateur); |
|
|
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = array('id_commentaire' => $insertion); |
|
|
return $resultat; |
} |
|
|
//ce_observation=728176&texte=ABC&auteur.id=11623&auteur.prenom=grégoire&auteur.nom=duché&auteur.courriel=gregoire@tela-botanica.org |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->parametres = $parametres; |
} |
|
|
/*------------------------------------------------------------------------------- |
CONFIGURATION DU SERVICE |
--------------------------------------------------------------------------------*/ |
/** |
* Initialiser les attributs de la classe avec les parametres |
* Initialiser les attributs de la classe avec les parametres |
* */ |
public function configurer() { |
|
$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');; |
//TODO : Gérer le cas d'une proposition |
} |
|
|
/** |
* Vérifier que le service est bien configuré |
* Vérifier que le service est bien configuré |
* */ |
public function verifierConfiguration() { |
|
$erreurs = array(); |
|
|
if (empty($this->mappingCommentaire)) { |
$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;'; |
} else { |
96,7 → 93,7 |
} |
} |
} |
|
|
$parametresPossibles = array('observation', 'proposition', 'id_parent', 'texte', 'auteur.id', |
'auteur.prenom', 'auteur.nom', 'auteur.courriel', 'nom_sel', |
'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille'); |
103,33 → 100,33 |
foreach ($this->parametres as $nomParam => $valeur) { |
if (!in_array($nomParam, $parametresPossibles)) { |
$erreurs[] = ' - paramètre '.$nomParam.' non autorisé; '; |
} |
} |
} |
|
|
if (!isset($this->parametres['observation'])) { |
$erreurs[] = ' - impossible d\'ajouter un commentaire sans observation ;'; |
} |
|
} |
|
if (!isset($this->parametres['auteur.id'])) { |
if (!isset($this->parametres['auteur.nom'])) { |
$erreurs[] = ' - pas de nom donné ;'; |
} |
|
|
if (!isset($this->parametres['auteur.prenom'])) { |
$erreurs[] = ' - pas de prenom donné; '; |
} |
|
|
if (!isset($this->parametres['auteur.courriel'])) { |
$erreurs[] = ' - pas de courriel donné;'; |
} |
} |
|
} |
|
if (isset($this->parametres['nom_sel']) &&trim($this->parametres['nom_sel']) == '') { |
$erreurs[] = ' - S\'il est présent le paramètre nom_sel ne peut pas être vide ;'; |
} |
|
|
//TODO : Gérer le cas d'une proposition |
|
|
if (!empty($erreurs)) { |
$e = 'Erreur de configuration :'; |
$e = implode("\n", $erreurs); |
137,17 → 134,17 |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
} |
|
|
/*------------------------------------------------------------------------------- |
INSERTION DES COMMENTAIRES |
INSERTION DES COMMENTAIRES |
--------------------------------------------------------------------------------*/ |
/** |
* Trouver l'utilisateur en fonction des paramètres ou de la base de données si le nom, prénom et courriel ne sont pas donnés |
* @return le tableau utilisateur |
* @return le tableau utilisateur |
* */ |
private function chercherUtilisateur() { |
$utilisateur = array(); |
|
|
// Si l'id est fournit, on récupère les informations de l'utilisateur dans la base de données |
// Sinon, on récupère les informations depuis le tableau Commentaire et on vérifie leur cohérence |
if (isset($this->parametres['auteur.id'])) { |
164,98 → 161,102 |
// si l'utilisateur est trouvé, on affecte son id au lieu du numéro temporaire |
$utilisateur = $utilisateur_recherche; |
$this->parametres['auteur.id'] = $utilisateur_recherche['auteur.id']; |
} |
} |
// sinon pas d'erreur, on considere simplement que l'utilisateur |
// est un homonyme ou bien qu'il a décidé d'utiliser un autre mail |
} |
} |
} |
|
|
return $utilisateur; |
} |
|
|
/** |
* Vérifier que les informations saisies pour un utilisateur sont valides pour la bdd |
* @param $utilisateur array le tableau de l'utilisateur |
* */ |
private function estValideDansBdd($utilisateur) { |
$requete = "SELECT id_utilisateur as 'auteur.id', nom as 'auteur.nom', prenom as 'auteur.prenom', courriel as 'auteur.courriel' ". |
'FROM '.$this->gestionBdd->formaterTable('del_utilisateur'). |
'WHERE courriel = '.$this->bdd->proteger($utilisateur['auteur.courriel']). |
' AND nom = '.$this->bdd->proteger($utilisateur['auteur.nom']). |
' AND prenom = '.$this->bdd->proteger($utilisateur['auteur.prenom']); |
$nom = $this->bdd->proteger($utilisateur['auteur.nom']); |
$prenom = $this->bdd->proteger($utilisateur['auteur.prenom']); |
$courriel = $this->bdd->proteger($utilisateur['auteur.courriel']); |
|
$requete = "SELECT id_utilisateur AS 'auteur.id', nom AS 'auteur.nom', prenom AS 'auteur.prenom', ". |
" courriel AS 'auteur.courriel' ". |
'FROM del_utilisateur '. |
"WHERE courriel = $courriel ". |
" AND nom = $nom ". |
" AND prenom = $prenom "; |
$utilisateurBdd = $this->bdd->recuperer($requete); |
return $utilisateurBdd; |
} |
|
|
/** |
* Insère un commentaire dans la table |
* @param $utilisateur array la liste des paramètres utilisateur |
* */ |
private function insererCommentaire($utilisateur) { |
|
$requete = 'INSERT INTO '.$this->gestionBdd->formaterTable('del_commentaire'); |
$requete .= '('.$this->genererEntete($utilisateur).') '; |
$requete .= 'VALUES ('.$this->genererValues().')'; |
$requete = 'INSERT INTO del_commentaire '. |
'('.$this->genererEntete($utilisateur).') '. |
'VALUES ('.$this->genererValues().')'; |
|
$retour = $this->bdd->requeter($requete); |
if ($retour == null) { |
$e = 'Erreur inopinée lors de l\insertion'; |
$e = "Erreur inopinée lors de l'insertion"; |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
|
|
$retour = $this->bdd->recupererIdDernierAjout(); |
|
|
return $retour; |
} |
|
|
private function verifierEtCreerPropositionDeterminationInitiale() { |
$id_observation = $this->parametres['observation']; |
$proposition_existe = $this->propositionInitialeExiste($id_observation); |
if(!$proposition_existe) { |
if (!$proposition_existe) { |
$this->creerPropositionAPartirObservation($id_observation); |
} |
} |
|
|
private function propositionInitialeExiste($id_observation) { |
|
$requete = "SELECT COUNT(*) >= 1 as existe FROM del_commentaire WHERE ce_observation = ".$id_observation." ". |
"AND proposition_initiale = 1"; |
$requete = 'SELECT COUNT(*) >= 1 AS existe '. |
'FROM del_commentaire '. |
"WHERE ce_observation = $id_observation ". |
' AND proposition_initiale = 1'; |
$resultat = $this->bdd->recuperer($requete); |
return $resultat['existe'] == 1; |
} |
|
|
private function creerPropositionAPartirObservation($id_observation) { |
$idObs = $this->bdd->proteger($id_observation); |
$insertion = 'INSERT IGNORE INTO del_commentaire '. |
'(ce_observation, ce_utilisateur, utilisateur_prenom, utilisateur_nom, utilisateur_courriel, '. |
'nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, nom_referentiel, proposition_initiale) '. |
'SELECT id_observation, ce_utilisateur, prenom, nom, '. |
' courriel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, '. |
' nt, famille, "bdtfx_v1", "1" '. |
'FROM del_observation do '. |
' LEFT JOIN del_utilisateur du ON '. |
'do.ce_utilisateur = du.id_utilisateur '. |
'WHERE id_observation = '.$this->bdd->proteger($id_observation); |
|
'(ce_observation, ce_utilisateur, utilisateur_prenom, utilisateur_nom, utilisateur_courriel, '. |
'nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, nom_referentiel, proposition_initiale) '. |
'SELECT id_observation, ce_utilisateur, prenom, nom, '. |
' courriel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, '. |
" nt, famille, 'bdtfx_v1', '1' ". |
'FROM del_observation AS do '. |
' LEFT JOIN del_utilisateur AS du '. |
' ON do.ce_utilisateur = du.id_utilisateur '. |
"WHERE id_observation = $idObs "; |
|
$resultat = $this->bdd->requeter($insertion); |
|
return $resultat; |
} |
|
|
|
private function genererEntete($utilisateur) { |
$this->parametres = array_merge($this->parametres, $utilisateur); |
|
$entete = array(); |
|
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) { |
if (isset($this->parametres[$nomFinal]) && $this->parametres[$nomFinal] != null) { |
$entete[] = $nomOriginal; |
} |
} |
|
$entete[] = 'date'; |
$entete[] = 'date'; |
|
return implode(', ', $entete); |
} |
|
|
private function genererValues() { |
$valeurs = array(); |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) { |
263,8 → 264,8 |
$valeurs[] = $this->bdd->proteger($this->parametres[$nomFinal]); |
} |
} |
|
$valeurs[] = 'NOW()'; |
|
return implode(', ', $valeurs); |
} |
} |