Subversion Repositories eFlore/Applications.coel-consultation

Rev

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

<?php
// declare(encoding='UTF-8');
/**
 * Modèle d'accès à la base de données des Collections pour le module Personnes.
 *
 * @package     Collection
 * @category    php 5.2
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   2010 Tela-Botanica
 * @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     SVN: $Id: PersonneDao.php 154 2010-09-13 12:15:11Z jpm $
 *
 */
class PersonneDao extends Dao {
        const SERVICE_PERSONNE = 'CoelPersonne';
        const SERVICE_PERSONNE_A_PUBLICATION = 'CoelPublicationAPersonne';
        const SERVICE_PERSONNE_A_COLLECTION = 'CoelCollectionAPersonne';
        const SERVICE_PERSONNE_A_STRUCTURE = 'CoelStructureAPersonne';
        
        private $cache = array();

        /**
         * Retourne l'ensemble des information d'une personne.
         * 
         * @param integer l'id de la personne.
         * @return array un tableau contenant les informations sur la personne.
         */
        public function getPersonne($id) {
                $donnees = array();
                if (is_numeric($id)) {
                        $url = $this->url_jrest.self::SERVICE_PERSONNE."/$id";
                        $json = $this->envoyerRequeteConsultation($url);
                        $donnees = json_decode($json, true);
                        if ($donnees['nbElements'] == 1) {
                                $donnees = $donnees['personnes'][0];
                        }
                }
                return $donnees;
        }
        
        /**
         * Retourne l'ensemble des publications liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return array un tableau contenant les informations sur les publications liées à la personne.
         */
        public function getPublicationsLiees($id_personne) {
                $donnees = $this->getPersonneAPublication($id_personne);
                return $donnees['publicationsAPersonne'];
        }
        
        /**
         * Retourne le nombre des publications liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return integer le nombre de publications liées à la personne.
         */
        public function getNbrePublicationsLiees($id_personne) {
                $donnees = $this->getPersonneAPublication($id_personne);
                return $donnees['nbElements'];
        }
        
        private function getPersonneAPublication($id_personne) {
                $cache =& $this->cache['PersonneAPublication'];
                if (isset($cache[$id_personne])) {
                        $donnees = $cache[$id_personne];
                } else {
                        $url = $this->url_jrest.self::SERVICE_PERSONNE_A_PUBLICATION."/*/$id_personne/2361,2362,2363";
                        $json = $this->envoyerRequeteConsultation($url);
                        $donnees = json_decode($json, true);
                        $cache[$id_personne] = $donnees;
                }
                return $donnees;
        }
        
        /**
         * Retourne l'ensemble des collections liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return array un tableau contenant les informations sur les collections liées à la personne.
         */
        public function getCollectionsLiees($id_personne) {
                $donnees = $this->getPersonneACollection($id_personne);
                return $donnees['collectionsAPersonne'];
        }
        
        /**
         * Retourne le nombre de collections liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return integer le nombre de collections liées à la personne.
         */
        public function getNbreCollectionsLiees($id_personne) {
                $donnees = $this->getPersonneACollection($id_personne);
                return $donnees['nbElements'];
        }
        
        private function getPersonneACollection($id_personne) {
                $cache =& $this->cache['PersonneACollection'];
                if (isset($cache[$id_personne])) {
                        $donnees = $cache[$id_personne];
                } else {
                        $url = $this->url_jrest.self::SERVICE_PERSONNE_A_COLLECTION."/*/*/$id_personne";
                        $this->addOrdre('cc_nom', self::ORDRE_ASCENDANT);
                        $json = $this->envoyerRequeteConsultation($url);
                        $donnees = json_decode($json, true);
                        $cache[$id_personne] = $donnees;
                }
                return $donnees;
        }
        
        /**
         * Retourne l'ensemble des structures liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return array un tableau contenant les informations sur les structures liées à la personne.
         */
        public function getStructuresLiees($id_personne) {
                $donnees = $this->getPersonneAStructure($id_personne);
                return $donnees['structuresAPersonne'];
        }
        
        /**
         * Retourne le nombre de structures liées à une personne.
         * 
         * @param integer l'id de la personne.
         * @return integer le nombre de structures liées à la personne.
         */
        public function getNbreStructuresLiees($id_personne) {
                $donnees = $this->getPersonneAStructure($id_personne);
                return $donnees['nbElements'];
        }
        
        private function getPersonneAStructure($id_personne) {
                $cache =& $this->cache['PersonneAStructure'];
                if (isset($cache[$id_personne])) {
                        $donnees = $cache[$id_personne];
                } else {
                        $url = $this->url_jrest.self::SERVICE_PERSONNE_A_STRUCTURE."/*/*/$id_personne";
                        $this->addOrdre('cp_nom', self::ORDRE_ASCENDANT);
                        $json = $this->envoyerRequeteConsultation($url);
                        $donnees = json_decode($json, true);
                        $cache[$id_personne] = $donnees;
                }
                return $donnees;
        }
        
        /**
         * Retourne le nom complet d'une personne.
         * 
         * @param integer l'id de la personne.
         * @return string le nom complet de la personne.
         */
        public function getPersonneNomComplet($id) {
                $nom_complet = '';
                $donnees = $this->getPersonne($id);
                if (isset($donnees['nbElements']) && $donnees['nbElements'] >= 1) {
                        $nom_complet = $donnees['personnes'][0]['cp_fmt_nom_complet'];
                } else if (isset($donnees['cp_fmt_nom_complet'])) {
                        $nom_complet = $donnees['cp_fmt_nom_complet'];
                }
                return $nom_complet;
        }
        
        /**
         * Retourne la chaine "truk" des courriels d'une personne.
         * 
         * @param integer l'id de la personne.
         * @return string la chaine "truk" des courriels de la personne.
         */
        public function getPersonneCourriels($id) {
                $courriels = '';
                $donnees = $this->getPersonne($id);
                if (isset($donnees['nbElements']) && $donnees['nbElements'] >= 1) {
                        $courriels = $donnees['personnes'][0]['cp_truk_courriel'];
                } else if (isset($donnees['cp_truk_courriel'])) {
                        $courriels = $donnees['cp_truk_courriel'];
                }
                return $courriels;
        }
}
?>