Subversion Repositories eFlore/Applications.coel-consultation

Compare Revisions

Ignore whitespace Rev 245 → Rev 246

/trunk/configurations/config.default.ini
42,6 → 42,7
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = true
fw_debogage_mode = echo
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
/trunk/squelettes/moteur_publications.tpl.html
New file
0,0 → 1,118
<!-- COL - DEBUT MOTEUR RECHERCHE PUBLICATIONS -->
<script type="text/javascript">
// Function pour cacher / afficher les options de recherche
$(document).ready(function() {
$("#col-rech-opt-toggle").html("Afficher les options de recherche");
$("#col-rech-opt").hide();
$("#col-rech-opt-toggle").toggle(
function() {
$("#col-rech-opt-toggle").html("Cacher les options de recherche");
$("#col-rech-opt").slideDown("fast");
},
function() {
$("#col-rech-opt-toggle").html("Afficher les options de recherche");
$("#col-rech-opt").slideUp("fast");
}
);
// Rechargement des options sélectionnées dans les select
$('#col-form select').each(function() {
var optionSelectionnee = $(this).attr('data-option-selectionnee');
$(this).find('option[value="' + optionSelectionnee + '"]').attr('selected', 'selected');
});
});
</script>
 
<div class="coel-consultation">
<h2 class="titre-moteur-recherche">Rechercher une publication</h2>
 
<form id="pub-form" name="col-form" action="<?=$url_form;?>" method="get">
 
<input name="module" type="hidden" value="<?=$url_module;?>" />
<input name="action" type="hidden" value="<?=$url_action;?>" />
<?php if (isset($url_contexte)) : ?>
<input name="contexte" type="hidden" value="<?=$url_contexte;?>" />
<? endif; ?>
 
<div id="col-rech-masque">
<div class="champ-masque" title="Titre">
<label class="label-gauche">Titre</label>
<input name="masque[titre]" type="text" value="<?= $masque['titre'] ?>" />
</div>
<div class="champ-masque" title="Auteur">
<label class="label-droite">Auteur</label>
<input name="masque[auteur]" type="text" value="<?= $masque['auteur'] ?>" />
</div>
<div class="champ-masque" title="Date">
<label class="label-gauche">Date</label>
<input name="masque[date]" type="text" value="<?= $masque['date'] ?>" />
</div>
<!-- <div class="champ-masque">
<label class="label-droite">Revue</label>
<input name="masque[revue]" value="<?= $masque['revue'] ?>" />
</div> -->
<!-- <div class="champ-masque">
<label class="label-gauche">Mot-clé</label>
<input name="masque[mot-cle]" value="<?= $masque['mot-cle'] ?>" />
</div> -->
</div>
 
<input id="col-rech-ok" type="submit" value="OK" />
</form>
 
<br/>
<a id="col-rech-opt-toggle" href="#col-rech-opt-txt" title="Précisions sur les options de recherche"></a>
 
<div id="col-rech-opt">
<h2 id="col-rech-opt-titre">Options de recherche</h2>
<div id="col-rech-opt-txt">
<p>
Par défaut, la recherche est insensible à la casse (majuscule / minuscule) et s'effectue
en intercalant automatiquement le joker % avant et après la chaine recherchée et entre chaque mot
de celle-ci.
</p>
<p>Pour les opérateurs dont la valeur est un <em>texte libre</em> ou une <em>liste</em>,
il est possible d'utiliser des jokers.
Ces "jokers" permettent de modifier la recherche.
</p>
<table>
<thead>
<tr>
<th>Joker</th>
<th>Applicable sur</th>
<th>Explication</th>
<!-- <th>Exemples</th> -->
</tr>
</thead>
<tbody>
<tr>
<td>""</td>
<td>Texte libre</td>
<td>Permet de rechercher sur une expression exacte.</td>
<!-- <td><a href="<?=Recherche::getUrlExemple('"Archives de l\'herbier Granger"')?>">
"Archives de l'herbier Granger"</a></td> -->
</tr>
<tr>
<td>%</td>
<td>Texte libre</td>
<td>Remplace n'importe quel nombre de caractères, y compris aucun.</td>
<!-- <td><a href="<?=Recherche::getUrlExemple('"herbier %Abbé% Carondelet"')?>">
"herbier %Abbé% Carondelet"</a></td> -->
</tr>
<tr>
<td>_</td>
<td>Texte libre</td>
<td>Remplace exactement un caractère</td>
<!-- <td><a href="<?=Recherche::getUrlExemple('p:"Jo_l"')?>">p:"Jo_l"</a></td> -->
</tr>
<tr>
<td>,</td>
<td>Liste</td>
<td>Permet d'indiquer plusieurs valeurs</td>
<!-- <td><a href="<?=Recherche::getUrlExemple('veg:br,ph')?>">veg:br,ph</a></td> -->
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- COL - FIN MOTEUR RECHERCHE PUBLICATIONS -->
/trunk/squelettes/resultat.tpl.html
2,38 → 2,51
<div id="col_resultat" class="coel-consultation">
<?=$fragmenteur;?>
<?php if (isset($infos)) : ?>
<ul>
<!-- recherche de collections -->
<?php if ($masque['cible'] == 'collections'): ?>
<?php foreach ($infos as $info) : ?>
<li><?=$info['structure']['ville']?> - <a href="<?=$info['structure']['url']?>"><?=$info['structure']['nom']?></a>
<?php if (isset($info['collections'])) : ?>
<ul>
<?php foreach ($info['collections'] as $collection) : ?>
<li><a href="<?=$collection['url']?>"><?=$collection['nom']?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
<!-- recherche de personnes -->
<?php elseif ($masque['cible'] == 'personnes'): ?>
<?php foreach ($infos['personnes'] as $personne) : ?>
<li>
<a href="<?=$personne['url']?>">
<?php if($personne['nomcomplet']): ?>
<?=$personne['nomcomplet']?>
<?php else: ?>
<?=$personne['prenom']?> <?=$personne['nom']?>
<ul>
<!-- recherche de collections -->
<?php if ($masque['cible'] == 'collections'): ?>
<?php foreach ($infos as $info) : ?>
<li><?=$info['structure']['ville']?> - <a href="<?=$info['structure']['url']?>"><?=$info['structure']['nom']?></a>
<?php if (isset($info['collections'])) : ?>
<ul>
<?php foreach ($info['collections'] as $collection) : ?>
<li><a href="<?=$collection['url']?>"><?=$collection['nom']?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</a>
<?php if($personne['surnom']): ?>
(<?=$personne['surnom']?>)
<?php endif; ?>
</li>
<?php endforeach; ?>
</li>
<?php endforeach; ?>
<!-- recherche de personnes -->
<?php elseif ($masque['cible'] == 'personnes'): ?>
<?php foreach ($infos['personnes'] as $personne) : ?>
<li>
<a href="<?=$personne['url']?>">
<?php if($personne['nomcomplet']): ?>
<?=$personne['nomcomplet']?>
<?php else: ?>
<?=$personne['prenom']?> <?=$personne['nom']?>
<?php endif; ?>
</a>
<?php if($personne['surnom']): ?>
(<?=$personne['surnom']?>)
<?php endif; ?>
</li>
<?php endforeach; ?>
<!-- recherche de publications -->
<?php elseif ($masque['cible'] == 'publications'): ?>
<?php foreach ($infos['publications'] as $publication) : ?>
<li>
<!-- <a href="<?=$publication['url']?>"> -->
<?php if($publication['nomcomplet']): ?>
<?=$publication['nomcomplet']?>
<?php else: ?>
<?=$publication['auteur']?> - <?=$publication['date']?> - <?=$publication['titre']?> - <?=$publication['editeur']?> - <?=$publication['nb_pages']?>
<?php endif; ?>
<!-- </a> -->
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
<?php endif; ?>
</ul>
<?php endif; ?>
</div>
<!-- COL - FIN RESULTAT -->
/trunk/bibliotheque/dao/RechercheDao.php
44,7 → 44,7
}
// recherche du nombre de publications : nouveau
public function chercherPersonnesNbre($parametres) {
public function chercherPublicationsNbre($parametres) {
$url = $this->construireUrlRecherchePublications('NombrePublications', $parametres, false);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
/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);