Subversion Repositories Applications.referentiel

Rev

Rev 300 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe Arbre du module Consultation.
 * Permet de consultater un référentiel sous forme d'arbre
 * 
 * @package             Referentiel
 * @category    Php5.2
 * @author              Aurélien PERONNET <aurelien@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$
 */
class Arbre extends AppliControleur {
        
        private $referentiel = null;
        private $rechercheDao = null;
        
        public function __construct()  {
                parent::__construct();
                
                // Récupération de paramètres
                if (isset($_GET['ref'])) { // code du projet courant
                        $this->referentiel = strtolower($_GET['ref']);
                }
        }
        
        //+----------------------------------------------------------------------------------------------------------------+
        // Méthodes
        /**
         * Fonction d'affichage par défaut
         */
        public function executerActionParDefaut() {
                $this->definirCommeModulePrincipal(get_class($this));
                $this->construireMenu($this->referentiel);
                $this->construireFilAriane($this->referentiel);
                $this->executerActionReferentiel('Arbre', 'afficherArbre', $this->referentiel, false);
        }
        
        public function afficherArbre() {
                $donnees = array();
                $donnees['resultats'] = $this->chercherFamilles();
                $nns = array();
                foreach($donnees['resultats'] as $resultat) {
                        $nns[] = $resultat['num_nom'];
                }
                
                $donnees['resultats_nb_infra'] = $this->chercherNombreInfras($nns);
                $donnees['resultats_nb_syn'] = $this->chercherNombreSynonymes($nns);
                
                $donnees['url_service_tpl'] = Config::get('url_jrest');
                $donnees['url_sous_taxons_tpl'] = $this->obtenirUrlMenuBranche($this->referentiel, '');
                $donnees['url_synonymes_tpl'] = $this->obtenirUrlMenuBrancheSynonyme($this->referentiel, '');
                $donnees['url_fiche_taxon_tpl'] = $this->obtenirUrlFicheTaxon($this->referentiel, '%s');
                $donnees['referentiel'] = $this->referentiel;
                
                $resultat = $this->getVue('arbre_taxon', $donnees);
                $this->setSortie(self::RENDU_CORPS, $resultat);
        }
        
        public function afficherBranche() {
                $donnees = array();
                $donnees['resultats_infra'] = $this->chercherInfras($_GET['num_nom']);
                foreach($donnees['resultats_infra'] as $resultat) {
                        $nns[] = $resultat['num_nom'];
                }
                
                $donnees['resultats_nb_infra'] = $this->chercherNombreInfras($nns);
                $donnees['resultats_nb_syn'] = $this->chercherNombreSynonymes($nns);
                
                $resultat = json_encode($donnees);
                header('Content-type: application/json'); 
                echo $resultat;
                exit;
        }
        
        public function afficherBrancheSynonyme() {
                $donnees['resultats_syn'] = $this->chercherSynonymes($_GET['num_nom']);
                $resultat = json_encode($donnees);
                header('Content-type: application/json');
                echo $resultat;
                exit;
        }
        
        private function getDao() {
                if($this->rechercheDao == null) {
                        $this->rechercheDao = new RechercheDao();
                }
                return $this->rechercheDao;
        }
        
        private function chercherFamilles() {
                $rechercheDao = $this->getDao();
                $rechercheDao->setLimitation(0,10000);
                $parametres = array('mots' => '*',
                                                                        'ref' => $this->referentiel,
                                                                        'rg' => 180);
                $resultats = $rechercheDao->chercher('ParDefaut', $parametres , 500);
                return $resultats; 
        }
        
        private function chercherNombreSynonymes($tableau_nn) {
                $rechercheDao = $this->getDao();
                $parametres_syn = array('mots' => '*',
                                                                                'ref' => $this->referentiel,
                                                                                'nn' => implode(',', $tableau_nn));
                $resultats_nb_syn = $rechercheDao->chercher('NombreSynonymeParTaxon', $parametres_syn);
                return $resultats_nb_syn;
        }
        
        private function chercherSynonymes($num_nom) {
                $rechercheDao = $this->getDao();
                $parametres_syn = array('mots' => '*',
                                                                'ref' => $this->referentiel,
                                                                'nn' => $num_nom);
                $resultats_syn = $rechercheDao->chercher('ParTaxon', $parametres_syn);
                return $resultats_syn;
        }
        
        private function chercherNombreInfras($tableau_nn) {
                $rechercheDao = $this->getDao();
                $parametres_infra = array('mots' => '*',
                                                                  'ref' => $this->referentiel,
                                                                  'classif' => 'infra',
                                                                  'nn' => implode(',', $tableau_nn));
                $resultats_nb_infra = $rechercheDao->chercher('NombreClassifParTaxon', $parametres_infra);
                return $resultats_nb_infra;
        }
        
        private function chercherInfras($num_nom) {
                $rechercheDao = $this->getDao();
                $parametres = array('mots' => '*',
                                                                                        'ref' => $this->referentiel,
                                                                                        'classif' => 'infra',
                                                                                        'nn' => $num_nom);
                $resultats_infra = $rechercheDao->chercher('Classification', $parametres);
                return $resultats_infra;
        }
}
?>