Subversion Repositories eFlore/Applications.coel-consultation

Rev

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

<?php
/**
 * classe Controleur du module RecherchePublications
 *
 * @package             Collection
 * @category    Php5
 * @author              Satanas et Diabolo <wtf@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
 */
class RecherchePublications extends Recherche {

        protected $masque = null;
        protected static $url_exemple = null;

        /**
         * Charge le moteur de recherche et l'envoie à la vue.
         */
        public function chargerMoteurRecherche() {
                $donnees = array();

                // masque multi-critères
                $donnees['masque'] = $this->obtenirMasqueRecherche();

                // Gestion des urls
                $donnees['url_form'] = $this->obtenirUrlRecherche();
                $donnees['url_module'] = 'RecherchePublications';
                $donnees['url_action'] = 'rechercher';
                $donnees['url_contexte'] = $this->registre->get('contexte');
                self::$url_exemple = $this->obtenirUrlRecherche('%s');

                // remplissage de cases de tableaux vides pour éviter des warnings
                $donnees['masque'] = $this->initialiserMasquesVides($donnees['masque']);
                //echo '<pre>'.print_r($donnees['masque'],true).'</pre>';exit;

                // Gestion du squelette et de la sortie
                $this->setSortie(self::RENDU_TETE, $this->getVue('moteur_publications', $donnees));
        }

        // recherche des publications
        public function rechercher() {
                $masque = $this->obtenirMasqueRecherche();
                $masque['cible'] = "publications";

                $donnees = array();
                $donnees['masque'] = $masque;
                $rechercheDao =  new RechercheDao();

                // Récupération des paramètres depuis le masque
                $parametres = $masque;
                $this->remplacerAbreviationParId($parametres);
                //echo "PARAM 2: <pre>" . print_r($parametres, true) . "</pre><br/>";

                // Gestion du nombre de résultats
                $donnees_total = $rechercheDao->chercherPublicationsNbre($parametres);

                // Gestion du fragmenteur
                $options = array(
                        'url' => $this->url, 
                        'donnees_total' => $donnees_total,
                        'donnees_par_page' => Config::get('resultat_par_page_defaut'),
                        'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
                );
                $fragmenteur = Composant::fabrique('fragmenteur', $options);
                $donnees['fragmenteur'] = $fragmenteur->executer();
                list($de, $a) = $fragmenteur->getDeplacementParPageId();
                $this->url->unsetVariablesRequete(array('recherche', 'page'));

                // Gestion de l'accès aux données
                $rechercheDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
                $rechercheDao->setDistinction(1);

                // Récupération des résultats
                $resultats = $rechercheDao->chercherPublications($parametres);

                // Affichage de la liste de résultats
                foreach ($resultats as $resultat) {
                        if (!empty($resultat['cpu_id_publication'])) {
                                $editeur = $resultat['cpu_ce_truk_editeur'];
                                $pdd = strpos($editeur, "##");
                                if ($pdd !== false) {
                                        $editeur = substr($editeur, $pdd + 2);
                                }
                                $publication = array(
                                        'nomcomplet' => $resultat['cpu_fmt_nom_complet'],
                                        'date' => $resultat['cpu_date_parution'],
                                        'titre' => $resultat['cpu_titre'],
                                        'auteur' => $resultat['cpu_fmt_auteur'],
                                        'editeur' => $editeur,
                                        'nb_pages' => $resultat['cpu_truk_pages'],
                                        //'url' => $this->obtenirUrlFichePersonne($resultat['cp_id_personne'])
                                );
                                $donnees['infos']['publications'][] = $publication;
                        }
                }

                // Post-traitement des résultats pour l'affichage
                $this->postraiterDonnees($donnees['infos']);
                
                // Gestion des squelettes
                $this->chargerMoteurRecherche();
                $resultat = $this->getVue('resultat', $donnees);
                $this->setSortie(self::RENDU_CORPS, $resultat);
                $this->chargerPiedDePage();
        }

        protected function initialiserMasquesVides($masque) {
                $masques_possibles = array('titre', 'auteur', 'date', 'revue');
                foreach($masques_possibles as $masque_possible) {
                        if(!isset($masque[$masque_possible])) {
                                $masque[$masque_possible] = '';
                        }
                }
                return $masque;
        }
}