Subversion Repositories eFlore/Applications.coel-consultation

Compare Revisions

Ignore whitespace Rev 245 → Rev 246

/trunk/controleurs/RecherchePublications.php
New file
0,0 → 1,117
<?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;
}
}
/trunk/controleurs/Recherche.php
13,9 → 13,9
*/
class Recherche extends aControleur {
//private $chaine_recherche = null;
private $masque = null;
private static $url_exemple = null;
//protected $chaine_recherche = null;
protected $masque = null;
protected static $url_exemple = null;
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
52,7 → 52,7
$this->setSortie(self::RENDU_TETE, $this->getVue('moteur', $donnees));
}
 
private function obtenirMasqueRecherche() {
protected function obtenirMasqueRecherche() {
$masque = array();
if (!is_null($this->masque)) {
$masque = $this->masque;
96,15 → 96,18
//echo "PARAM 2: <pre>" . print_r($parametres, true) . "</pre><br/>";
// Gestion du nombre de résultats
switch ($masque['cible']) {
case 'collections':
$donnees_total = $rechercheDao->chercherCollectionsNbre($parametres);
break;
case 'personnes':
$donnees_total = $rechercheDao->chercherPersonnesNbre($parametres);
break;
default:
// @TODO qu'est-ce qui se passe ?
$donnees_total = null;
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
$donnees_total = $rechercheDao->chercherCollectionsNbre($parametres);
break;
case 'personnes':
$donnees_total = $rechercheDao->chercherPersonnesNbre($parametres);
break;
default:
// @TODO qu'est-ce qui se passe ?
}
}
 
// Gestion du fragmenteur
124,58 → 127,62
$rechercheDao->setDistinction(1);
// Récupération des résultats
switch ($masque['cible']) {
case 'collections':
$resultats = $rechercheDao->chercherCollections($parametres);
break;
case 'personnes':
$resultats = $rechercheDao->chercherPersonnes($parametres);
break;
default:
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
$resultats = $rechercheDao->chercherCollections($parametres);
break;
case 'personnes':
$resultats = $rechercheDao->chercherPersonnes($parametres);
break;
default:
}
}
 
// Affichage de la liste de résultats
switch ($masque['cible']) {
case 'collections':
foreach ($resultats as $resultat) {
// Ajout des données concernant la structure si ce n'est pas déjà fait
$structure_id = $resultat['cs_id_structure'];
if (!isset($donnees['infos'][$structure_id])) {
$structure = array(
'nom' => $resultat['cs_nom'],
'ville' => $resultat['cs_ville'],
'url' => $this->obtenirUrlFicheStructure($resultat['cs_id_structure'])
);
$donnees['infos'][$structure_id]['structure'] = $structure;
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
foreach ($resultats as $resultat) {
// Ajout des données concernant la structure si ce n'est pas déjà fait
$structure_id = $resultat['cs_id_structure'];
if (!isset($donnees['infos'][$structure_id])) {
$structure = array(
'nom' => $resultat['cs_nom'],
'ville' => $resultat['cs_ville'],
'url' => $this->obtenirUrlFicheStructure($resultat['cs_id_structure'])
);
$donnees['infos'][$structure_id]['structure'] = $structure;
}
// Si la structure possède des collections
if (!empty($resultat['cc_id_collection'])) {
$collection = array(
'nom' => $resultat['cc_nom'],
'url' => $this->obtenirUrlFicheCollection($resultat['cc_id_collection'])
);
$donnees['infos'][$structure_id]['collections'][] = $collection;
}
}
// Si la structure possède des collections
if (!empty($resultat['cc_id_collection'])) {
$collection = array(
'nom' => $resultat['cc_nom'],
'url' => $this->obtenirUrlFicheCollection($resultat['cc_id_collection'])
);
$donnees['infos'][$structure_id]['collections'][] = $collection;
break;
case 'personnes':
foreach ($resultats as $resultat) {
//echo "<pre>".print_r($resultat,true)."</pre>";
if (!empty($resultat['cp_id_personne'])) {
$personne = array(
'nomcomplet' => $resultat['cp_fmt_nom_complet'],
'nom' => $resultat['cp_nom'],
'prenom' => $resultat['cp_prenom'],
'url' => $this->obtenirUrlFichePersonne($resultat['cp_id_personne'])
);
$donnees['infos']['personnes'][] = $personne;
}
}
}
break;
 
case 'personnes':
foreach ($resultats as $resultat) {
//echo "<pre>".print_r($resultat,true)."</pre>";
if (!empty($resultat['cp_id_personne'])) {
$personne = array(
'nomcomplet' => $resultat['cp_fmt_nom_complet'],
'nom' => $resultat['cp_nom'],
'prenom' => $resultat['cp_prenom'],
'url' => $this->obtenirUrlFichePersonne($resultat['cp_id_personne'])
);
$donnees['infos']['personnes'][] = $personne;
}
}
break;
 
default:
break;
default:
}
}
 
// Post-traitement des résultats pour l'affichage
188,7 → 195,7
$this->chargerPiedDePage();
}
private function initialiserMasquesVides($masque) {
protected function initialiserMasquesVides($masque) {
$masques_possibles = array('lieu-stockage',
'veg','zg','bot','p','pr','nom-famille','date-vivant','date-deces','adresse');
foreach($masques_possibles as $masque_possible) {
199,7 → 206,7
return $masque;
}
 
private function remplacerAbreviationParId(&$parametres) {
protected function remplacerAbreviationParId(&$parametres) {
// liste 27 : Liste des relations entre une collection et une personne (id:1030)
// liste 80 : Liste des types de collection botanique (id:1083)
$params_a_remplacer = array('veg' => 1043, 'bot' => 1083, 'pr' => 1030);