Subversion Repositories eFlore/Applications.del

Rev

Rev 1794 | Blame | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Retourne le contenu d'un commentaire pour un identifiant donné.
 * http://localhost/service:del:0.1/commentaires/#id => retourne le contenu d'un commentaire d'id #id
 *
 * @category   DEL
 * @package    Services
 * @subpackage Commentaires
 * @version    0.1
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */

class ConsulterCommentaire {

        private $conteneur;
        private $navigation;
        private $bdd;
        private $idCommentaire;

        private $mapping = array();
        private $mappingInverse = array();

        public function __construct(Conteneur $conteneur = null) {
                $this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
                $this->navigation = $conteneur->getNavigation();
                $this->bdd = $this->conteneur->getBdd();

                $this->mapping = $this->conteneur->getParametreTableau('commentaires.mapping');
                $this->mappingInverse = array_flip($this->mapping);
        }

        public function consulter($ressources) {
                $this->idCommentaire = $ressources[0];

                // Lancement du service
                $commentaire = $this->chargerCommentaire();
                $commentaire = $this->formaterCommentaires($commentaire);
                $this->navigation->setTotal(count($commentaire));

                // Mettre en forme le résultat et l'envoyer pour affichage*/
                $resultat = new ResultatService();
                $resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => $commentaire);

                return $resultat;
        }

        private function chargerCommentaire() {
                $requete = 'SELECT * '.
                        'FROM del_commentaire '.
                        'WHERE id_commentaire = '.$this->idCommentaire.' '.
                        'LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite().' '.
                        ' -- '.__FILE__.' : '.__LINE__;
                $resultat = $this->bdd->recuperer($requete);
                if ($resultat === false) {
                        $message = "Aucune information ne correspond au commentaire # «{$this->idCommentaire}».";
                        throw new Exception($message, RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE);
                }
                return is_array($resultat) ? $resultat : array();
        }

        private function formaterCommentaires($infos) {
                $retour = array();
                $idCommentaire = $infos['id_commentaire'];
                foreach ($this->mapping as $nomChampBdd => $nomAttributSortie) {
                        $retour[$idCommentaire][$nomAttributSortie] = $infos[$nomChampBdd];
                }
                return $retour;
        }
}