Subversion Repositories eFlore/Applications.del

Rev

Rev 1259 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Le web service récupére un identifiant de proposition et appelle un service web externe 
 * (du cel) afin de modifier le nom de l'observation associée par celui de la proposition
 *
 * @category    php 5.2
 * @package     del
 * @subpackage images
 * @author              Aurélien Peronnet <aurelien@tela-botanica.org>
 * @copyright   Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version     $Id$
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
 */

class ValiderDetermination {
        
        private $conteneur;
        private $navigation;
        private $masque;
        private $gestionBdd;
        private $bdd;
        private $parametres = array();
        private $ressources = array();
        
        public function __construct(Conteneur $conteneur = null) {
                $this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
                $this->conteneur->chargerConfiguration('config_determinations.ini');
                $this->gestionBdd = $conteneur->getGestionBdd();
                $this->bdd = $this->gestionBdd->getBdd();       
        }
        
        public function modifier($ressources, $parametres) {
                $this->verifierParametres($ressources, $parametres);
                $id_proposition = $ressources[1];
                
                $retour = $this->modifierObservationParDetermination($id_proposition, $parametres);
                
                if ($retour == false) {
                        throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
                } else {
                        RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_CREATION_OK);
                }
        }
        
        public function verifierParametres($ressources, $parametres) {
                $erreurs = array();
                if (!is_numeric($ressources[1])) {
                        $erreurs[] = '- le paramètre indiquant l\'identifiant de la proposition doit être numérique ;';
                }

                //Le paramètre auteur.id (id de l'auteur de la détermination)
                // est là pour éviter que le $_POST ne soit vide
                if (!isset($parametres['auteur.id'])) {
                        $erreurs[] = '- paramètre "auteur.id" manquant ;';
                }
                
                if (!empty($erreurs)) {
                        $e = 'Erreur lors de la configuration : '."\n";
                        $e .= implode("\n", $erreurs);
                        throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
                }
        }
        
        
        private function modifierObservationParDetermination($id_proposition, $parametres) {
                $informations_proposition = $this->obtenirInformationDetermination($id_proposition, $parametres['auteur.id']);
                $id_observation = $informations_proposition['ce_observation'];
                $informations_observation = $this->obtenirInformationsObservation($id_observation);

                $est_autorise = $this->comparerAuteurObservationUtilisateurIdentifie($informations_observation);
                if($est_autorise) {
                        $succes_modification = $this->envoyerRequeteModificationObservation($id_observation, $informations_proposition);
                } else {
                        $e = 'Seul l\'utilisateur ayant saisi l\'observation peut la valider : veuillez vous identifier.'."\n";
                        throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
                        exit;
                }
                
                return $succes_modification;
        }
        
        private function comparerAuteurObservationUtilisateurIdentifie($informations_observation) {     
                $controle_utilisateur = new ControleAcces($this->conteneur);
                $utilisateur_connecte = $controle_utilisateur->getInfosUtilisateurConnecte();
                $id_utilisateur_auteur_obs = $informations_observation['ce_utilisateur'];
                
                return $id_utilisateur_auteur_obs == $utilisateur_connecte['id_utilisateur'];
        }
        
        private function obtenirInformationDetermination($id_proposition, $id_utilisateur) {
                $requete = "SELECT * FROM del_commentaire WHERE id_commentaire = ".$this->bdd->proteger($id_proposition)." ".
                           "AND ce_utilisateur = ".$this->bdd->proteger($id_utilisateur);
                $infos_proposition = $this->bdd->recuperer($requete);
                
                return $infos_proposition;
        }
        
        private function obtenirInformationsObservation($id_observation) {
                $requete = "SELECT * FROM del_observation WHERE id_observation = ".$this->bdd->proteger($id_observation)." ";
                $infos_observation = $this->bdd->recuperer($requete);
        
                return $infos_observation;
        }
        
        private function envoyerRequeteModificationObservation($id_observation, $parametres) {
                $url_requete = $this->conteneur->getParametre('url_service_validation_base');
                $url_requete = $url_requete.$id_observation;
                $requeteur = $this->conteneur->getRestClient();
                $parametres['id_observation'] = $id_observation;
                $parametres_formates = $this->formaterParametresRequeteModificationObservation($parametres);

                $succes = $requeteur->modifier($url_requete, $parametres_formates);
                echo '<pre>'.print_r($succes,true).'</pre>';exit;
                return $succes;
        }
        
        private function formaterParametresRequeteModificationObservation($parametres) {
                return array('id_observation' => $parametres['id_observation'],
                                         'ce_utilisateur' => $parametres['ce_utilisateur'],
                                         'nom_sel' => $parametres['nom_sel'], 
                                         'nom_sel_nn' => $parametres['nom_sel_nn'],
                                         'nom_ret' => $parametres['nom_ret'], 
                                         'nom_ret_nn' => $parametres['nom_ret_nn'],
                                         'nom_referentiel' => $parametres['nom_referentiel']);
        }
}
?>