Subversion Repositories eFlore/Applications.eflore-consultation

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1581 → Rev 1580

/trunk/modules/recherche_avancee/squelettes/form_recherche_av.tpl.html
New file
0,0 → 1,285
<!-- DEBUT FORM_AVANCE -->
<script>
<!--
var AUTOCOMPLETION_ELEMENTS_NBRE = 50;
var URL_SERVICE_AUTOCOMPLETION_NOM_SCI = "<?=$url_base_completion_noms_sci?>";
var REFERENTIEL = "<?= Registre::get('parametres.referentiel');?>";
$(document).ready(function(){
$('#bloc_recherche_av').hide();
$('#recherche_av').click(function(event) {
$('#bloc_recherche_av').slideToggle();
event.preventDefault();
return false;
});
});
-->
</script>
 
<a href="" id="recherche_av" name="recherche_av"> Recherche avancée dans la base de données <?= strtoupper(Registre::get('parametres.referentiel')); ?> version <?= $metadonnees_referentiel['version'] ?>. </a>
<hr class="nettoyage"/>
<div id="bloc_recherche_av">
<form id="recherche_av_form" method="get" action="<?=$lien?>" >
<fieldset class="numero_form">
<label for="nn">Numéro nomenclatural </label>
<input id="nn" type="text" name="nn" class="largeur-01" value="<?=isset($param['nn'])? $param['nn'] : ''?>"/>
<label for="nt">Numéro taxonomique </label>
<input type="text" id="nt" name="nt" class="largeur-01" value="<?=isset($param['nt'])? $param['nt'] : ''?>"/>
</fieldset>
<fieldset class="classification_form">
<legend> Classification </legend>
<br/>
<label for="fam"> Famille </label>
<input type="text" id="fam" name="fam" class="champ_autocomplete" value="<?=isset($param['fam'])? $param['fam'] : ''?>" />
<label for="gen"> Genre </label>
<input type="text" id="gen" name="gen" class="champ_autocomplete" value="<?=isset($param['gen'])? $param['gen'] : ''?>" />
<label for="sp">Epithète sp.</label>
<input type="text" id="sp" name="sp" class="champ_autocomplete" value="<?=isset($param['sp'])? $param['sp'] : ''?>" />
<br/><br/>
<? $type = ''; if (isset($param['type'])){ $type = $param['type']; } ?>
<label for="type">Type épithète infra </label>
<select name="type">
<option value="" <?=($type == '') ? 'selected="selected"' : '' ?> >
</option>
<option value="subsp." <?=($type == 'subsp.') ? 'selected="selected"' : '' ?> >
sous-espèce
</option>
<option value="infra-sp." <?=($type == 'infra-sp.') ? 'selected="selected"' : '' ?> >
infra-espèce
</option>
<option value="var." <?=($type == 'var.') ? 'selected="selected"' : '' ?> >
variété
</option>
<option value="subvar." <?=($type == 'subvar.') ? 'selected="selected"' : '' ?> >
sous-variété
</option>
<option value="f." <?=($type == 'f.') ? 'selected="selected"' : '' ?> >
forme
</option>
<option value="subf." <?=($type == 'subf.') ? 'selected="selected"' : '' ?> >
sous-forme
</option>
<option value="f. sp." <?=($type == 'f. sp.') ? 'selected="selected"' : '' ?> >
forma species
</option>
<option value="race" <?=($type == 'race') ? 'selected="selected"' : '' ?> >
race
</option>
<option value="proles" <?=($type == 'proles') ? 'selected="selected"' : '' ?> >
proles
</option>
</select>
<label for="ssp">Epithète infra spé.</label>
<input class="champ_autocomplete" type="text" id="ssp" name="ssp" value="<?=isset($param['ssp'])? $param['ssp'] : ''?>" />
</fieldset>
<br/>
<fieldset class="publication_form">
<legend> Publication </legend>
<br/>
<label> décrit entre </label>
<input placeholder="<?=$i18n['valeur-form-date']?>" type="text" name="and" id="and" value="<? if (isset($param['and'])){echo $param['and'] ;}?>" class="largeur-01"/>
<label style="width:20px;"> et </label>
<input placeholder="<?=$i18n['valeur-form-date']?>" type="text" id="anf" name="anf" value="<? if (isset($param['anf'])){echo $param['anf'] ;}?>" class="largeur-01"/>
<label style="width:50px;"> par </label>
<input placeholder="<?=$i18n['valeur-form-auteur']?>" class="champ_autocomplete" style="width:150px;" id="au" type="text" name="au" value="<? if (isset($param['au'])){ echo $param['au']; } ?>"/> <br/><br/>
<label> dans </label>
<input placeholder="<?=$i18n['valeur-form-bib']?>" class="champ_autocomplete largeur-06" id="bib" type="text" name="bib" value="<? if(isset($param['bib'])){echo $param['bib'] ;}?>" "/>
</fieldset>
<? if(count($champs_presence) > 0) { ?>
<fieldset class="presence_form">
<legend> Présence </legend>
<br/>
<? foreach($champs_presence as $presence) : ?>
<? $nom_param_presence = $presence['param'] ?>
<? $param_presence = ''; if (isset($param[$nom_param_presence])){ $param_presence = $param[$nom_param_presence]; }?>
<label for="<?= $nom_param_presence ?>"><?= $presence['label'] ?></label>
<select name="<?= $nom_param_presence ?>">
<option value="" <?=($param_presence == '') ? 'selected="selected"' : '' ?> >
</option>
<option value="0" <?=($param_presence == '0') ? 'selected="selected"' : '' ?> >
pas d'information
</option>
<option value="P" <?=($param_presence == 'P') ? 'selected="selected"' : '' ?> >
présent
</option>
<option value="S" <?=($param_presence == 'S') ? 'selected="selected"' : '' ?> >
supposé présent
</option>
<option value="D" <?=($param_presence == 'D') ? 'selected="selected"' : '' ?>>
présence douteuse
</option>
<option value="E" <?=($param_presence == 'E') ? 'selected="selected"' : '' ?>>
éteint </option>
<option value="F" <?=($param_presence == 'F') ? 'selected="selected"' : '' ?>>
cité par erreur comme présent
</option>
<option value="A" <?=($param_presence == 'A') ? 'selected="selected"' : '' ?>>
absent
</option>
<option value="-" <?=($param_presence == '-') ? 'selected="selected"' : '' ?>>
autre statut de présence
</option>
<option value="E-W" <?=($param_presence == 'E-W') ? 'selected="selected"' : '' ?>>
disparu
</option>
<option value="P-B" <?=($param_presence == 'P-B') ? 'selected="selected"' : '' ?>>
présence accidentelle
</option>
<option value="E-F" <?=($param_presence == 'E-F') ? 'selected="selected"' : '' ?>>
trouvé en fouille
</option>
</select>
<br/> <br/>
<? endforeach; ?>
</fieldset>
<?php } ?>
<fieldset class="statuts_form">
<legend> Statuts </legend>
<br/>
<? $sto = ''; if (isset($param['sto'])){ $sto = $param['sto']; }?>
<label for="sto"> statut d'origine </label>
<select name="sto">
<option value="" <?=($sto == '') ? 'selected="selected"' : '' ?>>
</option>
<option value="0" <?=($sto == '0') ? 'selected="selected"' : '' ?>>
pas d'information
</option>
<option value="N" <?=($sto == 'N') ? 'selected="selected"' : '' ?>>
natif (=indigène)
</option>
<option value="S" <?=($sto == 'S') ? 'selected="selected"' : '' ?>>
supposé natif
</option>
<option value="D" <?=($sto == 'D') ? 'selected="selected"' : '' ?>>
origine douteuse
</option>
<option value="E" <?=($sto == 'E') ? 'selected="selected"' : '' ?>>
anciennement natif (éteint)
</option>
<option value="F" <?=($sto == 'F') ? 'selected="selected"' : '' ?>>
cité par erreur comme natif
</option>
<option value="A" <?=($sto == 'A') ? 'selected="selected"' : '' ?>>
non natif
</option>
<option value="X" <?=($sto == 'X') ? 'selected="selected"' : '' ?>>
inapplicable
</option>
<option value="-" <?=($sto == '-') ? 'selected="selected"' : '' ?>>
autre statut d'origine
</option>
<option value="N-E" <?=($sto == 'N-E') ? 'selected="selected"' : '' ?>>
endémique
</option>
<option value="N-S" <?=($sto == 'N-S') ? 'selected="selected"' : '' ?>>
sub-endémique
</option>
<option value="S-C" <?=($sto == 'S-C') ? 'selected="selected"' : '' ?>>
supposé natif cryptogène
</option>
</select>
<br/> <br/>
<? $sti = ''; if (isset($param['sti'])){ $sti = $param['sti']; }?>
<label for="sti"> statut d'introduction </label>
<select name="sti">
<option value="" <?=($sti == '') ? 'selected="selected"' : '' ?>>
</option>
<option value="0" <?=($sti == '0') ? 'selected="selected"' : '' ?> >
pas d'information
</option>
<option value="I" <?=($sti == 'I') ? 'selected="selected"' : '' ?>>
introduit
</option>
<option value="S" <?=($sti == 'S') ? 'selected="selected"' : '' ?>>
supposé introduit
</option>
<option value="D" <?=($sti == 'D') ? 'selected="selected"' : '' ?>>
introduction douteuse
</option>
<option value="E" <?=($sti == 'E') ? 'selected="selected"' : '' ?>>
anciennement introduit (éteint)
</option>
<option value="F" <?=($sti == 'F') ? 'selected="selected"' : '' ?>>
cité par erreur comme introduit
</option>
<option value="A" <?=($sti == 'A') ? 'selected="selected"' : '' ?>>
non introduit
</option>
<option value="X" <?=($sti == 'X') ? 'selected="selected"' : '' ?>>
inapplicable
</option>
<option value="-" <?=($sti == '-') ? 'selected="selected"' : '' ?>>
autre statut d'introduction
</option>
<option value="I-J" <?=($sti == 'I-J') ? 'selected="selected"' : '' ?>>
introduit envahissant
</option>
<option value="I-M" <?=($sti == 'I-M') ? 'selected="selected"' : '' ?>>
domestique, introduit non-établi
</option>
<option value="S-C" <?=($sti == 'S-C') ? 'selected="selected"' : '' ?>>
supposé introduit cryptogène
</option>
</select>
<br/> <br/>
<label for="stc"> statut de culture </label>
<? $stc = ''; if (isset($param['stc'])){ $stc = $param['stc']; }?>
<select name="stc">
<option value="" <?=($stc == '') ? 'selected="selected"' : '' ?>>
</option>
<option value="0" <?=($stc == '0') ? 'selected="selected"' : '' ?>>
pas d'information
</option>
<option value="C" <?=($stc == 'C') ? 'selected="selected"' : '' ?>>
cultivé en extérieur
</option>
<option value="I" <?=($stc == 'I') ? 'selected="selected"' : '' ?>>
cultivé en intérieur
</option>
<option value="S" <?=($stc == 'S') ? 'selected="selected"' : '' ?>>
supposé cultivé
</option>
<option value="D" <?=($stc == 'D') ? 'selected="selected"' : '' ?>>
culture douteuse
</option>
<option value="E" <?=($stc == 'E') ? 'selected="selected"' : '' ?>>
anciennement cultivé (éteint)
</option>
<option value="F" <?=($stc == 'F') ? 'selected="selected"' : '' ?>>
cité par erreur comme cultivé
</option>
<option value="X" <?=($stc == 'X') ? 'selected="selected"' : '' ?>>
inapplicable
</option>
<option value="-" <?=($stc == '-') ? 'selected="selected"' : '' ?>>
autre statut de culture
</option>
<option value="A" <?=($stc == 'A') ? 'selected="selected"' : '' ?>>
non cultivé
</option>
</select>
</fieldset>
<input id="eflore_nomenclature_referentiel" name="referentiel" type="hidden" value="<?=Registre::get('parametres.referentiel')?>" />
<input id="eflore_nomenclature_niveau" name="niveau" type="hidden" value="<?=Registre::get('parametres.niveau')?>" />
<input id="eflore_nomenclature_module" name="module" type="hidden" value="recherche" />
<input id="eflore_nomenclature_action" name="action" type="hidden" value="rechercheAvancee" />
<input type="hidden" name="type_nom" value="nom_scientifique" />
<input type="submit" class="rech" value="Lancer la recherche avancée"/>
</form>
<hr class="nettoyage"/>
</div>
 
<? if (isset($message_av)) : ?>
<p class="attention">
<?= $i18n[$message_av['attention']] ?>
</p>
<? endif; ?>
 
<!-- FIN FORM_AVANCE -->
/trunk/modules/recherche_avancee/RechercheAvancee.php
New file
0,0 → 1,30
<?php
class RechercheAvancee extends aControleur {
 
public function executerFormulaireRechercheAv($donnees= array()) {
$donnees['lien'] = (isset($donnees['params'])) ? $this->urls->obtenirUrlRechercheAvancee($donnees['params'])
: $this->urls->obtenirUrlRechercheAvancee();
$donnees['i18n'] = I18n::get('Recherche-form-avancee');
$donnees['referentiel'] = Registre::get('parametres.referentiel');
$donnees['url_base_completion_noms_sci'] = str_replace('{projet}', $donnees['referentiel'], Config::get('nomsTpl'));
$donnees['champs_presence'] = $this->obtenirChampsPresence();
$donnees['url_form'] = $this->urls->obtenirUrlBase();
return $this->getVue('form_recherche_av', $donnees);
}
private function obtenirChampsPresence() {
$tableau_champs_presence = array();
$referentiel = Registre::get('parametres.referentiel');
$champs_presence = Config::get($referentiel.'.champsPresence');
$champs_presence_spl = explode('|', $champs_presence);
foreach($champs_presence_spl as $champ) {
$label_param_champ = explode(':', $champ);
if(count($label_param_champ) >= 2) {
$tableau_champs_presence[] = array('param' => $label_param_champ[1],
'label' => $label_param_champ[0]);
}
}
return $tableau_champs_presence;
}
}
?>
/trunk/modules/recherche_simple/RechercheSimple.php
New file
0,0 → 1,40
<?php
class RechercheSimple extends aControleur {
 
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
$this->afficherMoteurSimple();
}
 
private function afficherMoteurSimple() {
$donnees['form_nom'] = $this->executerFormulaireNom();
$this->setSortie(self::RENDU_CORPS, $donnees['form_nom']);
}
 
 
public function executerFormulaireNom($donnees = array()) {
$donnees['url_base_completion_noms_verna'] = "";
if (Config::get(Registre::get('parametres.referentiel').'.referentielVerna')) {
if (!isset($donnees['type_nom'])) {
$donnees['type_nom'] = (Registre::get('parametres.niveau') == 1) ? 'nom_vernaculaire' : 'nom_scientifique';
}
$donnees['nom_verna'] = true;
$donnees['referentielVerna'] = Config::get(Registre::get('parametres.referentiel').'.referentielVerna');
$donnees['url_base_completion_noms_verna'] = str_replace('{projet}', $donnees['referentielVerna'], Config::get('nomsVernaTpl'));
}
$donnees['referentiel'] = Registre::get('parametres.referentiel');
 
// nécessaire pour une autocomplétion indépendante, pour ne pas avoir à modifier le javascript
$donnees['url_base_completion_noms_sci'] = str_replace('{projet}', $donnees['referentiel'], Config::get('nomsTpl'));
$donnees['url_base_fiche_taxon'] = str_replace('&amp;', '&', $this->urls->obtenirUrlFiche('{num_taxon}', 'nom_scientifique'));
 
$donnees['url_form'] = $this->urls->obtenirUrlBase();
$donnees['i18n'] = I18n::get('Recherche-form-nom');
return $this->getVue('form_nom', $donnees);
}
}
?>
/trunk/modules/recherche_simple/squelettes/form_nom.tpl.html
New file
0,0 → 1,63
<!-- DEBUT FORM_NOM -->
<script type="text/javascript">
<!--
var AUTOCOMPLETION_ELEMENTS_NBRE = 50;
var URL_SERVICE_AUTOCOMPLETION_NOM_SCI = "<?=$url_base_completion_noms_sci?>";
var URL_SERVICE_AUTOCOMPLETION_NOM_VERNA = "<?=$url_base_completion_noms_verna?>";
var VALEUR_DEFAUT_NOM_SCI = "<?= $i18n['valeur-form-nom-sci']; ?>";
var VALEUR_DEFAUT_NOM_VERNA = "<?= $i18n['valeur-form-nom-verna']; ?>";
var VALEUR_DEFAUT_AU = "<?=$i18n['valeur-form-auteur']?>";
var VALEUR_DEFAUT_BIB = "<?=$i18n['valeur-form-bib']?>";
var VALEUR_DEFAUT_DATE = "<?=$i18n['valeur-form-date']?>";
var URL_BASE_FICHE_TAXON = "<?=$url_base_fiche_taxon?>";
var URL_BASE_POPUP = "<?=Config::get('base_url_application_popup');?>";
var REFERENTIEL = "<?= Registre::get('parametres.referentiel');?>";
// -->
</script>
<form id="ef-form-nomenclature" name="ef-form-nomenclature" action="<?=$url_form;?>" method="get">
<fieldset>
<span class="zone-choix-type-nom">
<?php if (isset($nom_verna)) { ?>
<span class="type-nom">
<input id="type_nom_scientifique" name="type_nom" value="nom_scientifique" type="radio" <?=($type_nom == 'nom_scientifique') ? 'checked="checked"': '';?> />
<label for="type_nom_scientifique"><?=$i18n['ns'];?></label>
</span>
<span class="type-nom">
<input id="type_nom_vernaculaire" name="type_nom" value="nom_vernaculaire" type="radio" <?=($type_nom == 'nom_vernaculaire') ? 'checked="checked"': '';?> />
<label for="type_nom_vernaculaire" title="(en français, allemand, anglais, catalan, espagnol, italien ou néerlandais)"><?=$i18n['nv'];?></label>
</span>
<?php } else {?>
<input id="type-nom-scientifique" name="type_nom" type="hidden" value="nom_scientifique" />
<?=$i18n['ns'];?>
<?php } ?>
</span>
<input id="nom" name="nom" class="champ" size="30" maxlength="255" type="text" <?php if(isset($nom)) echo 'value="'.$nom.'"';?> />
<span id="zone-liens-recherche">
<input id="eflore_nomenclature_referentiel" name="referentiel" type="hidden" value="<?=Registre::get('parametres.referentiel')?>" />
<input id="eflore_nomenclature_niveau" name="niveau" type="hidden" value="<?=Registre::get('parametres.niveau')?>" />
<input id="eflore_nomenclature_module" name="module" type="hidden" value="recherche" />
<input id="eflore_nomenclature_action" name="action" type="hidden" value="rechercheSimple" />
<input id="eflore_nomenclature_submit" name="submit" type="submit" value="<?=$i18n['recherche'];?>" class="ok"/>
<input id="eflore_nomenclature_fiche" name="acces_fiche" type="submit" value="<?=$i18n['fiche'];?>" />
</span>
</fieldset>
</form>
 
 
<?php if (isset($message)) : ?>
<p class="<?= (isset($message['attention'])) ? 'attention' : 'information'; ?>">
<?= (isset($message['attention'])) ? $i18n[$message['attention']] : ''; ?>
<?= (isset($message['nom_ss_corresp'])) ? $message['nom_ss_corresp']['nom'].$i18n['nom_ss_corresp'].
'<a href="http://referentiels.tela-botanica.org/referentiel/index.php?ref=bdtfx&module=FicheTaxon&num_nom='.$message['nom_ss_corresp']['id'].'">'.
$i18n['reftax'].'</a>' : ''; ?>
<?php if (isset($message['nom_approche'])) : ?>
<?=$i18n['orthographe'];?>
<?php foreach ($message['nom_approche'] as $cle => $nom) :?>
<a href="<?=$nom['url_nom_approche']?>"><?=$nom['nom'];?></a>
<?= (isset($message['nom_approche'][$cle+1]['nom'])) ? ' ou ' : ''; ?>
<?php endforeach; ?>
<?php endif; ?>
</p>
<?php endif; ?>
<!-- FIN FORM_NOM -->
/trunk/modules/resultat/squelettes/determination.tpl.html
New file
0,0 → 1,94
<!-- onglet "Vignettes" -->
<ul id="ef-resultats-determination">
<?php if ($noms) : ?>
 
<? foreach ($noms as $nnTaxon => $nom) : ?>
<li class="zone-resultat">
<div class="nom-sci">
<a class="lien_fiche_eflore" href="<?=$nom['urlFiche']?>" >
<strong class="nom-sci-retenu"><?=$nom['nomSciRetenuSurligne']?></strong>
</a>
</div>
<?php if (isset($repartition)) : ?>
<?php if (isset($repartition['urls'][$nnTaxon]) ) : ?>
<img class="illustration_resultat_choro" src="<?=htmlentities($repartition['urls'][$nnTaxon])?>" alt="<?= $nom['nomSciRetenu'] ?> - Carte de répartition" />
<?php else : ?>
<div class="absent">Pas de carte</div>
<?php endif;endif; ?>
<?php if ($nom['rang'] != 'Famille' && $nom['rang'] != 'Genre' && $nom['rang'] != 'Ordre') : ?>
<?php if (isset($imagesUrls[$nnTaxon])) : ?>
<img class="illustration_resultat_cel" src="<?=htmlentities($imagesUrls[$nnTaxon][0])?>" data-num-nom="<?= $nnTaxon; ?>" title="<?= $nnTaxon; ?>" alt="<?= $nom['nomSciRetenu'] ?> (image CeL)" style="width:100px;height:100px;display:block;float:right;"/>
<?php else : ?>
<p class="absent">Pas de photo<br />
<a href="<?=$urlWidget.'&num_nom='.$nnTaxon?>"
title="Ajouter une photographie au moyen du Carnet en Ligne"
onclick="window.open(this.href); return false;" class="contribuer">
Contribuer
</a>
</p>
<?php endif; ?>
<?php if (isset($dessins) && isset($dessins[$taxons[$nnTaxon]][0])) : ?>
<img class="illustration_resultat_coste" src="<?=htmlentities($dessins[$taxons[$nnTaxon]][0])?>" alt="<?= $nom['nomSciRetenu'] ?> (illustration de Coste)" />
<?php endif; ?>
<?php endif; ?>
<?php if (isset($synonymes[$nnTaxon])) : ?>
<?php $nbrSynonymes = count($synonymes[$nnTaxon]) ?>
<ul class="synonymes" style="width:100%;">
<?php for ($i = 0; ($i < 3); $i++) : ?>
<?php if (isset($synonymes[$nnTaxon][$i])) : ?>
<li><b>syn.</b> <?=$synonymes[$nnTaxon][$i]['nomSci']?></li>
<?php endif; ?>
<? endfor; ?>
<?php if ($nbrSynonymes === 4) : ?>
<?php if (isset($synonymes[$nnTaxon][3])) : ?>
<li><b>syn.</b> <?=$synonymes[$nnTaxon][3]['nomSci']?></li>
<?php endif; ?>
<?php endif; ?>
<?php if ($nbrSynonymes > 3 && $nbrSynonymes != 4) : ?>
<li class="synonymes-autres">
<ul>
<?php for ($i = 3; $i < $nbrSynonymes; $i++) : ?>
<li><b>syn.</b> <?=$synonymes[$nnTaxon][$i]['nomSci']?></li>
<? endfor; ?>
</ul>
</li>
<?php endif; ?>
</ul>
<?php endif; ?>
</li>
<? endforeach; ?>
<?php endif; ?>
<?php if ($nomsSansCorrespondance) : ?>
<li class="zone-resultat" title="Aucun nom retenu n'a été trouvé pour ces noms scientifiques">
<strong>Noms sans correspondance</strong>
<ul class="noms-ss-correspondance">
<?php foreach ($nomsSansCorrespondance as $nomSC) : ?>
<li><?=$nomSC?></li>
<?php endforeach; ?>
</ul>
</li>
<?php endif; ?>
</ul>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
ajouterToggleSynonymesAutres();
});
function ajouterToggleSynonymesAutres() {
$("ul#ef-resultats-determination li").each(function(index) {
$(this).find('.synonymes-autres').prepend('<a id="bascule-'+index+'" href="#">et plus...</a>');
$(this).find('.synonymes-autres ul').css('display', 'none');
$(this).find('.synonymes-autres ul').attr('id', 'sa-'+index);
$('#bascule-'+index).on('click', function() {
$('#sa-'+index).toggle('blind', {}, 500);
return false;
});
});
}
//]]>
</script>
/trunk/modules/resultat/squelettes/resultat.tpl.html
New file
0,0 → 1,28
<div class="layout-col-gauche">
<div class="layout-wrapper">
<aside class="layout-colonne">
</aside>
<div class="layout-contenu">
<?php if($typeNom == "nom_scientifique"): ?>
<?php if ($rang == null): ?>
Cet affichage montre tous les résultats.
<a href="<?php echo $urlInverse; ?>">Cliquez ici pour afficher seulement les espèces</a>
<?php else: ?>
<!-- Cet affichage ne montre que le rang "<?php echo $rang; ?>".-->
Cet affichage ne montre que les espèces.
<a href="<?php echo $urlInverse; ?>">Cliquez ici pour afficher tous les taxons</a>
<?php endif; ?>
<br/><br/>
<?php endif; ?>
<?=$ongletsHtml?>
<p style="float:right;">
<?php if($typeNom == "nom_scientifique"): ?>
<?= $nombreTaxonsAffiches ?> nom<?php echo $nombreTaxonsAffiches > 1 ? 's' : ''; ?> affiché<?php echo $nombreTaxonsAffiches > 1 ? 's' : ''; ?> /
<?php endif; ?>
<?=$nbreTaxons?> nom<?php echo $nbreTaxons > 1 ? 's' : ''; ?> trouvé<?php echo $nbreTaxons > 1 ? 's' : ''; ?>.
</p>
<?=$nomsHtml?>
</div></div></div>
/trunk/modules/resultat/squelettes/liste_noms_verna.tpl.html
New file
0,0 → 1,19
<!-- onglet "Tableau multilingue" -->
<? if ($noms) : ?>
<table>
<tr>
<th>n°</th>
<th>langue</th>
<th>nom commun</th>
<th>nom latin</th>
</tr>
<? $i = 1; foreach ($noms as $id => $valeurs) : ?>
<tr>
<td><?=$i++?></td>
<td><?= $valeurs['langue']?></td>
<td><?= $valeurs['nomVerna']?></td>
<td><a href="<?= $valeurs['urlFiche']?>"><?= $valeurs['nomSci']?></a></td>
</tr>
<? endforeach; ?>
</table>
<? endif; ?>
/trunk/modules/resultat/squelettes/onglets.tpl.html
New file
0,0 → 1,15
<ul class="onglets">
<?php if ($typeNom == 'nom_scientifique') : ?>
<?php foreach ($ongletsNs as $onglet) : ?>
<li <?=($typeResultat == $onglet ? 'class="menu_actif sci"': 'class="sci"')?> >
<a href="<?=$urls[$onglet]?>"><?=$i18n['ns'][$onglet]?></a>
</li>
<?php endforeach; ?>
<?php elseif ($typeNom == 'nom_vernaculaire') : ?>
<?php foreach ($ongletsNv as $onglet) : ?>
<li <?=($typeResultat == $onglet ? 'class="menu_actif verna"': 'class="verna"')?> >
<a href="<?=$urls[$onglet]?>"><?=$i18n['nv'][$onglet]?></a>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
/trunk/modules/resultat/squelettes/decomposition.tpl.html
New file
0,0 → 1,67
<!-- onglet "Tableau" -->
<p>
Rechercher sur
<a href="http://www.theplantlist.org/tpl/search?q=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/tpl.png" alt="The Plant List"
title="Rechercher dans The Plant List"/>
</a>
<a href="http://www.ipni.org/ipni/simplePlantNameSearch.do?find_wholeName=<?=htmlentities($masqueRecherche)?>&amp;output_format=normal&amp;query_type=by_query&amp;back_page=query_ipni.html">
<img src="<?=$baseUrlIco?>presentations/images/sites/ipni.png" alt="IPNI" title="Rechercher dans IPNI"/>
</a>
<a href="http://plants.jstor.org/search?plantName=%22<?=htmlentities($masqueRecherche)?>%22&amp;syn=1">
<img src="<?=$baseUrlIco?>presentations/images/sites/jstor.png" alt="JSTOR Plant Science" title="Rechercher dans JSTOR Plant Science" />
</a>
<a href="http://coldb.mnhn.fr/Consultation?filtre=motif&amp;motif=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/mnhn.png" alt="Muséum national d'Histoire naturelle" title="Rechercher dans Muséum national d'Histoire naturelle" />
</a>
<a href="http://www.anbg.gov.au/cgi-bin/apni?TAXON_NAME=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/anbg.png" alt="Australian Plant Name Index" title="Rechercher dans Australian Plant Name Index" />
</a>
<a href="http://sweetgum.nybg.org/vh/specimen_list.php?QueryName=BasicQuery&amp;QueryPage=http%3A%2F%2Fsciweb.nybg.org%2Fscience2%2Fvii2.asp&amp;Restriction=NybRecordType+%3D+%27Specimen%27&amp;StartAt=1&amp;any=SummaryData%7CAdmWebMetadata&amp;QueryOption=any&amp;Submit=Search&amp;QueryTerms=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/nybg.png" alt="NYBG Virtual Herbarium" title="Rechercher dans NYBG Virtual Herbarium" />
</a>
<a href="http://collections.mnh.si.edu/search/botany/?qt=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/si.png" alt="Type Specimen Register of the U.S. National Herbarium" title="Rechercher dans Type Specimen Register of the U.S. National Herbarium" />
</a>
<a href="http://herbarium.univie.ac.at/database/search.php?taxon=<?=htmlentities($masqueRecherche)?>&amp;search=1">
<img src="<?=$baseUrlIco?>presentations/images/sites/vha.png" alt="Virtual Herbaria Austria" title="Rechercher dans Virtual Herbaria Austria" />
</a>
<a href="http://swbiodiversity.org/seinet/taxa/index.php?taxon=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/seinet.png" alt="SEINet" title="Rechercher dans SEINet" />
</a>
<a href="http://www.ville-ge.ch/musinfo/bd/cjb/africa/resultat.php?efFamille=&amp;projet%5B%5D=FSA&amp;projet%5B%5D=FTA&amp;projet%5B%5D=FNA&amp;projet%5B%5D=BDM&amp;langue=en&amp;pbRecherche=Rechercher&amp;efNom=<?=htmlentities($masqueRecherche)?>">
<img src="<?=$baseUrlIco?>presentations/images/sites/cjb.png" alt="African Plants Database" title="Rechercher dans African Plants Database du Jardin Botanique de Genève" />
</a>
</p>
<table id="ef-resultats-decomposition">
<thead>
<tr>
<th id="col-ns">Nom scientifique</th>
<th>Auteur</th>
<th>Année</th>
<th>Référence bibliographique</th>
<th title="Commentaires nomenclaturaux ou taxonomiques concernant le nom scientifique">Nom addendum</th>
<th title="Identifiant numérique du nom scientifique">N° nom</th>
</tr>
</thead>
<tbody>
<? $i = 1 ?>
<? foreach ($noms as $nom) : ?>
<tr
class="<?=$nom['retenu'] === 'true' ? 'retenu' : 'synonyme' ?>"
title="Ligne #<?=$i++?>">
<td>
<? if ($nom['retenu'] !== 'absent') : ?>
<a href="<?=$nom['urlFiche']?>"><?=$nom['nomSci']?></a>
<? else : ?><?=$nom['nomSci']?>
<? endif; ?>
</td>
<td><?=$nom['auteur']?></td>
<td><?=$nom['annee']?></td>
<td><?=$nom['biblio']?></td>
<td><?=$nom['addendum']?></td>
<td><?=$nom['nn']?></td>
</tr>
<? endforeach; ?>
</tbody>
</table>
/trunk/modules/resultat/squelettes/liste_noms.tpl.html
New file
0,0 → 1,18
<!-- onglet "Liste" -->
<ol>
<? foreach ($noms as $id => $nom) : ?>
<li>
<?php if ($nom['retenu'] == 'absent') : ?>
<?=$nom['nomSci']?>
<?php else : ?>
<a href="<?=$nom['urlFiche']?>">
<?php if ($nom['retenu'] == 'true') : ?>
<strong class="nom-sci-retenu"><?=$nom['nomSci']?></strong>
<?php else : ?>
<?=$nom['nomSci']?>
<?php endif; ?>
</a>
<?php endif; ?>
</li>
<? endforeach; ?>
</ol>
/trunk/modules/resultat/squelettes/determination_verna.tpl.html
New file
0,0 → 1,88
<!-- onglet "Vignettes noms français" -->
<?php if ($noms) : ?>
<ul id="ef-resultats-nv-determination">
<? foreach ($noms as $nnTaxon => $nom) : ?>
<li class="zone-resultat">
<table >
<tbody >
<tr><td class="nom">
<?php if (isset($nom['nomVerna'])) : ?>
<?php $nbrNomVerna = count($nom['nomVerna']) ?>
<ul class="synonymes" style="width:100%;">
<?php for ($i = 0; ($i < 3); $i++) : ?>
<?php if (isset($nom['nomVerna'][$i])) : ?>
<li><?=$nom['nomVerna'][$i]['nom_vernaculaire']?></li>
<?php endif; ?>
<? endfor; ?>
<?php if ($nbrNomVerna === 4) : ?>
<?php if (isset($nom['nomVerna'][3])) : ?>
<li><?=$nom['nomVerna'][3]['nom_vernaculaire']?></li>
<?php endif; ?>
<?php endif; ?>
<?php if ($nbrNomVerna > 3 && $nbrNomVerna != 4) : ?>
<li class="synonymes-autres">
<ul>
<?php for ($i = 3; $i < $nbrNomVerna; $i++) : ?>
<li><?=$nom['nomVerna'][$i]['nom_vernaculaire']?></li>
<? endfor; ?>
</ul>
</li>
<?php endif; ?>
</ul>
<?php endif; ?>
</td><td class="nom">
<a class="lien_fiche_eflore" href="<?=$nom['urlFiche']?>" ><?=$nom['nomSci']?></a>
</td>
<td>
<?php if (isset($imagesCoste[$taxons[$nom['nomSci']]][0])) : ?>
<img class="illustration_resultat_coste" src="<?=htmlentities($imagesCoste[$taxons[$nom['nomSci']]][0])?>" alt="illustration de Coste" />
<?php else : ?>
<div class="vide"></div>
<?php endif; ?>
</td>
<td>
<?php if (isset($imagesUrls[$nnTaxon])) : ?>
<img class="illustration_resultat_cel" src="<?=htmlentities($imagesUrls[$nnTaxon][0])?>" data-num-nom="<?= $nnTaxon; ?>" title="<?= $nnTaxon; ?>" alt="Images issues du CEL" style="width:100px;height:100px;display:block;float:right;"/>
<?php else : ?>
<p class="absent">
Pas de photo<br />
<a href="<?=$urlWidget.'&num_nom='.$nnTaxon?>"
title="Ajouter une photographie au moyen du Carnet en Ligne"
onclick="window.open(this.href); return false;" class="contribuer">
Contribuer
</a>
</p>
<?php endif; ?>
</td>
<td >
<?php if (isset($repartition['urls'][$nnTaxon])) : ?>
<img src="<?=htmlentities($repartition['urls'][$nnTaxon])?>" alt="Carte de répartition" class="repartition_vignette illustration_resultat_choro"/>
<?php else : ?>
<div class="absent">Pas de carte</div>
<?php endif; ?>
</td></tr>
</tbody>
</table>
</li>
<? endforeach; ?>
</ul>
<?php endif; ?>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
ajouterToggleSynonymesAutres();
});
function ajouterToggleSynonymesAutres() {
$("ul#ef-resultats-nv-determination li").each(function(index) {
$(this).find('.synonymes-autres').prepend('<a id="bascule-'+index+'" href="#">et plus...</a>');
$(this).find('.synonymes-autres ul').css('display', 'none');
$(this).find('.synonymes-autres ul').attr('id', 'sa-'+index);
$('#bascule-'+index).on('click', function() {
$('#sa-'+index).toggle('blind', {}, 500);
return false;
});
});
}
//]]>
</script>
/trunk/modules/resultat/ParametresResultats.php
New file
0,0 → 1,11
<?php
class ParametresResultats {
public $typeResultat = 'determination';
public $typeNom = '';
public $masqueRecherche = '';
public $reftaxCourant = 'bdtfx';
public $projetImg = 'cel';
/** Si "null", montre tous les résultats. Sinon, ne montre que le rang spécifié, par défaut les espèces (290). */
public $rang = null;
}
?>
/trunk/modules/resultat/formateurs/nom_vernaculaire/DeterminationVernaFormateur.php
New file
0,0 → 1,229
<?php
class DeterminationVernaFormateur implements Formateur {
 
const TPL_VUE = 'determination_verna';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $fusioneur = null;
private $manipulateurDeChaine = null;
private $imagesService = null;
 
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
private $conteneur = null;
private $apiCartes = null;
 
public function __construct(ParametresResultats $parametres, Array $resultats,
Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null,
ChaineManipulateur $manipulateurDeChaine = null, Images $imagesService = null) {
 
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
$this->manipulateurDeChaine = is_null($manipulateurDeChaine) ? new ChaineManipulateur() : $manipulateurDeChaine;
$this->imagesService = is_null($imagesService) ? new Images($this->parametres->projetImg) : $imagesService;
$this->conteneur = new Conteneur();
$this->apiCartes = $this->conteneur->getApiCartes();
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
 
public function formater() {
$this->obtenirUrlsDessins();
$this->obtenirUrlsPhotos();
$this->chargerRepartition();
$this->extraireInfosNomsPourTplDetermination();
$this->infosPourTpl['urlWidget'] = Config::get('base_url_widget_saisie')."?referentiel=".Registre::get('parametres.referentiel');
}
private function obtenirUrlsDessins() {
if (Config::get(Registre::get('parametres.referentiel').'.baseDessins') != "") {
$this->extraireInfosTaxons();
$this->imagesService->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseDessins'));
$tax = implode(',', $this->infosPourTpl['taxons']);
$this->imagesService->setNnTaxon($tax);
$costeImg = $this->imagesService->setApi(Eflore::API_EFLORE)->getInfosImagesTaxons();
if (!empty($costeImg)) {
foreach ($costeImg as $infos) {
$num_taxon = $infos['num_taxonomique'];
$images[$num_taxon][] = $infos['binaire.href'];
$this->infosPourTpl['imagesCoste'] = $images;
}
}
}
}
private function extraireInfosTaxons() {
foreach ($this->noms as $id => $nom ) {
if (array_key_exists('num_taxon', $nom)
&& array_key_exists('taxon', $nom)) {
$this->infosPourTpl['taxons'][$nom['taxon']] = $nom['num_taxon'];
}
}
}
 
private function obtenirUrlsPhotos() {
if (Config::get(Registre::get('parametres.referentiel').'.baseImages') != "") {
$this->imagesService->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseImages'));
$nns = $this->extraireNnDesNoms();
$urls = $this->imagesService->setApi(Eflore::API_EFLORE)->getUrlsImagesParIdsNoms($nns);
$this->infosPourTpl['imagesUrls'] = $this->supprimerCodeReferentielDesUrls($urls);
}
}
 
private function extraireNnDesNoms() {
$nns = array();
foreach ($this->noms as $id => $nom) {
if (array_key_exists('nom_retenu.code', $nom)) {
if (in_array($nom['nom_retenu.code'], $nns) == false) {
$idAAjouter = $this->supprimerCodeReferentielAvecNn($nom['nom_retenu.code']);
if (is_numeric($idAAjouter)) {
$nns[] = $idAAjouter;
}
}
}
}
return $nns;
}
 
private function supprimerCodeReferentielDesUrls($urls) {
$urlsNettoyees = array();
foreach ($urls as $id => $url) {
$id = $this->supprimerCodeReferentiel($id);
$urlsNettoyees[$id] = $url;
}
return $urlsNettoyees;
}
 
private function supprimerCodeReferentiel($chaine) {
$codeReferentiel = $this->parametres->referentielCourant.'.';
$chaine = str_replace($codeReferentiel, '', $chaine);
return $chaine;
}
private function chargerRepartition() {
// $numsNomsASynonymes = $this->extraireNumerosNomSynonymes();
if (Config::get(Registre::get('parametres.referentiel').'.baseRepartition') == "") {
return;
}
 
$this->apiCartes->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseRepartition'));
$this->apiCartes->setLargeur('108x101');
$urls = array();
foreach ($this->noms as $nom) {
if (array_key_exists('nom_retenu.code', $nom)) {
$id = $this->supprimerCodeReferentielAvecNn($nom['nom_retenu.code']);
$this->apiCartes->setId("nn:" . $id); // . ',' . implode(',', array_keys($numsNomsASynonymes[$id])));
if (array_key_exists($id, $urls) == false) {
$urls[$id] = $this->apiCartes->getUrlPng();
}
}
}
$this->infosPourTpl['repartition']['urls'] = $urls;
}
private function extraireNumerosNomSynonymes() {
$numNomsASynonyme = array();
foreach ($this->noms as $id => $nom) {
$num_nom_retenu = $this->supprimerCodeReferentielAvecNn($nom['nom_retenu.code']);
// faux
$numNomsASynonyme[$num_nom_retenu][$id] = TRUE;
}
return $numNomsASynonyme;
}
private function extraireInfosNomsPourTplDetermination() {
$taxons = array();
foreach ($this->noms as $idNomCourant => $nom) {
$nn = intval($this->supprimerCodeReferentielAvecNn($nom['nom_retenu.code']));
$nomV = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower($nom['nom_vernaculaire']));
if (preg_match('/^'.strtolower($this->parametres->masqueRecherche).'(?: |$)/', $nomV)) {
// au moins un debute par la requête
if (isset($taxons) && array_key_exists($nn, $taxons[0]) == false) {
$taxons[0][$nn] = $this->renvoyerInfosTaxon($nom['taxon'], $nn);
}
$taxons[0][$nn]['nomVerna'][] = $this->renvoyerInfosNomVerna($nom);
} else {
// contient
if (isset($taxons) && (!isset($taxons[1]) || array_key_exists($nn, $taxons[1]) == false)) {
$taxons[1][$nn] = $this->renvoyerInfosTaxon($nom['taxon'], $nn);
}
$taxons[1][$nn]['nomVerna'][] = $this->renvoyerInfosNomVerna($nom);
}
}
$this->infosPourTpl['noms'] = isset($taxons) ? $taxons : false;
}
private function renvoyerInfosNomVerna($valeurs) {
$nom_verna = array();
$nom_verna['nn'] = $valeurs['id'];
$nom_verna['nom_vernaculaire'] = $valeurs['nom_vernaculaire'];
return $nom_verna;
}
private function renvoyerInfosTaxon($nomSci, $nn) {
$taxon = array();
$taxon['nomSci'] = $nomSci;
$taxon['urlFiche'] = $this->urls->obtenirUrlFiche($nn, $this->parametres->typeNom, $this->parametres->masqueRecherche);
$this->chargerRepartition($nn);
$taxon['repartition_vignette'] = $this->infosPourTpl['repartition']['urls'];
return $taxon;
}
 
private function supprimerCodeReferentielAvecNn($nn) {
return str_replace($this->parametres->referentielCourant.'.nn:', '', $nn);
}
 
//tri alphabétique des noms scientifiques par catégorie (débute par , contient )
public function trier() {
$verna = array();
foreach ($this->infosPourTpl['noms'] as $categorie => $valeurs) {
$verna += $this->classerAlphabetiquement('nomSci', $valeurs);
}
$this->infosPourTpl['noms'] = $verna;
}
private function classerAlphabetiquement($champs, $valeurs) {
$this->trieur->setTableau($valeurs);
$this->trieur->setChampsEtOrdres(array($champs => 'nat'));
return $this->trieur->trier();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $idNom => $nom) {
foreach ($nom['nomVerna'] as $idVerna => $nomVerna) {
$nom['nomVerna'][$idVerna]['nom_vernaculaire'] = $this->surlignerMotsMasqueRecherche($nomVerna['nom_vernaculaire']);
}
$this->infosPourTpl['noms'][$idNom] = $nom;
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
 
}
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
/trunk/modules/resultat/formateurs/nom_vernaculaire/AlphabVernaFormateur.php
New file
0,0 → 1,113
<?php
class AlphabVernaFormateur implements Formateur {
 
const TPL_VUE = 'liste_noms_verna';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $fusioneur = null;
private $manipulateurDeChaine = null;
private $imagesService = null;
 
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
 
public function __construct(ParametresResultats $parametres, Array $resultats,
Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null,
ChaineManipulateur $manipulateurDeChaine = null, Images $imagesService = null) {
 
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
$this->manipulateurDeChaine = is_null($manipulateurDeChaine) ? new ChaineManipulateur() : $manipulateurDeChaine;
$this->imagesService = is_null($imagesService) ? new Images($this->parametres->projetImg) : $imagesService;
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
private function supprimerCodeReftaxAvecNn($nn) {
$codeReftax = Registre::get('parametres.referentiel').'.nn:';
return str_replace($codeReftax, '', $nn);
}
private function renvoyerInfoVerna($nn, $valeurs) {
$infosDuNom = array();
$infosDuNom['nomSci'] = $valeurs['taxon'];
$infosDuNom['nomVerna'] = $valeurs['nom_vernaculaire'];
$infosDuNom['langue'] = $valeurs['code_langue'];
$infosDuNom['urlFiche'] = $this->urls->obtenirUrlFiche($nn, $this->parametres->typeNom, $this->parametres->masqueRecherche);
return $infosDuNom ;
}
 
function supprimerAccents($chaine){
return strtr($chaine,array('à' => 'a','á' => 'a','â' => 'a','ã' => 'a','ä' => 'a',
'ç' => 'c',
'è' => 'e','é' => 'e','ê' => 'e','ë' => 'e',
'ì' => 'i','í' => 'i','î' => 'i','ï' => 'i',
'ñ' => 'n',
'ò' => 'o', 'ó' => 'o' , 'ô' => 'o', 'õ' => 'o', 'ö' => 'o',
'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u',
'ý' => 'y', 'ÿ' => 'y'));
}
public function formater() {
$nomVerna = array();
foreach ($this->noms as $id => $nom) {
$nn = $this->supprimerCodeReftaxAvecNn($nom['nom_retenu.code']);
$nom_min = strtolower($nom['nom_vernaculaire']);
$nom_ss_accent = $this->supprimerAccents($nom_min);
if (preg_match('/^'.strtolower($this->parametres->masqueRecherche).' |^'.strtolower($this->parametres->masqueRecherche).'$/', $nom_ss_accent)) {
$nomVerna[0][$id] = $this->renvoyerInfoVerna($nn, $nom);
} else {
$nomVerna[1][$id] = $this->renvoyerInfoVerna($nn, $nom);
}
}
ksort($nomVerna);
$this->infosPourTpl['noms'] = isset($nomVerna) ? $nomVerna : false;
}
 
public function trier() {
$verna = array();
foreach ($this->infosPourTpl['noms'] as $categorie => $valeurs) {
$verna += $this->classerAlphabetiquement('nomVerna', $valeurs);
}
$this->infosPourTpl['noms'] = $verna;
}
private function classerAlphabetiquement($champs, $valeurs) {
$this->trieur->setTableau($valeurs);
$this->trieur->setChampsEtOrdres(array($champs => 'nat'));
return $this->trieur->trier();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $idNom => $nom) {
$this->infosPourTpl['noms'][$idNom]['nomVerna'] = $this->surlignerMotsMasqueRecherche($nom['nomVerna']);
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
 
}
 
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
/trunk/modules/resultat/formateurs/Formateur.php
New file
0,0 → 1,10
<?php
interface Formateur {
public function __construct(ParametresResultats $parametres, Array $resultats, Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null);
public function getTplInfos();
public function getTplNom();
public function formater();
public function trier();
public function surligner();
}
?>
/trunk/modules/resultat/formateurs/ResultatFormateurFabrique.php
New file
0,0 → 1,16
<?php
class ResultatFormateurFabrique {
 
public static function creer(ParametresResultats $parametres, Array $resultats){
$typeResultat = ucwords($parametres->typeResultat);
$typeNom = ($parametres->typeNom == 'nom_vernaculaire') ? 'Verna' : '';
$Classe = $typeResultat.$typeNom.'Formateur';
$ResultatFormateur = null;
if (class_exists($Classe)) {
return new $Classe($parametres, $resultats);
} else {
throw new Exception("La classe '$Classe' est introuvable.");
}
}
}
?>
/trunk/modules/resultat/formateurs/nom_scientifique/DeterminationFormateur.php
New file
0,0 → 1,258
<?php
class DeterminationFormateur implements Formateur {
 
const TPL_VUE = 'determination';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $fusioneur = null;
private $manipulateurDeChaine = null;
private $imagesService = null;
 
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
 
public function __construct(ParametresResultats $parametres, Array $resultats,
Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null,
ChaineManipulateur $manipulateurDeChaine = null, Images $imagesService = null) {
 
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
$this->manipulateurDeChaine = is_null($manipulateurDeChaine) ? new ChaineManipulateur() : $manipulateurDeChaine;
$this->imagesService = is_null($imagesService) ? new Images($this->parametres->projetImg) : $imagesService;
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
 
public function formater() {
$this->extraireInfosTaxons();
 
$this->obtenirUrlsDessins();
$this->obtenirUrlsPhotos();
$this->chargerRepartition();
 
$this->extraireInfosNomsPourTplDetermination();
$this->infosPourTpl['urlWidget'] = Config::get('base_url_widget_saisie')."?referentiel=".Registre::get('parametres.referentiel');
}
 
private function obtenirUrlsDessins() {
if (Config::get(Registre::get('parametres.referentiel').'.baseDessins') != "") {
$this->imagesService->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseDessins'));
$tax = implode(',', $this->infosPourTpl['taxons']);
$this->imagesService->setNnTaxon($tax);
$costeImg = $this->imagesService->setApi(Eflore::API_EFLORE)->getInfosImagesTaxons();
if (!empty($costeImg)) {
foreach ($costeImg as $infos) {
$num_taxon = $infos['num_taxonomique'];
$images[$num_taxon][] = $infos['binaire.href'];
$this->infosPourTpl['dessins'] = $images;
}
}
}
}
 
private function extraireInfosTaxons() {
foreach ($this->noms as $id => $nom ) {
if (array_key_exists('num_taxonomique', $nom)) {
$this->infosPourTpl['taxons'][$id] = $nom['num_taxonomique'];
}
}
}
 
private function obtenirUrlsPhotos() {
if (Config::get(Registre::get('parametres.referentiel').'.baseImages') != "") {
$this->imagesService->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseImages'));
$ids = $this->extraireIdDesNoms();
$urls = $this->imagesService->setApi(Eflore::API_EFLORE)->getUrlsImagesParIdsNoms($ids);
$this->infosPourTpl['imagesUrls'] = $this->supprimerCodeReferentielDesIds($urls);
}
}
 
private function extraireIdDesNoms() {
$ids = array();
foreach ($this->noms as $id => $nom) {
$idAAjouter = $id;
if (is_numeric($idAAjouter)) {
$ids[] = $idAAjouter;
}
if (array_key_exists('nom_retenu.id', $nom)) {
if (in_array($nom['nom_retenu.id'], $ids) == false) {
$idAAjouter = $nom['nom_retenu.id'];
if (is_numeric($idAAjouter)) {
$ids[] = $idAAjouter;
}
}
}
}
return $ids;
}
 
private function supprimerCodeReferentielDesIds($urls) {
$urlsNettoyees = array();
foreach ($urls as $id => $url) {
$id = $this->supprimerCodeReferentiel($id);
$urlsNettoyees[$id] = $url;
}
return $urlsNettoyees;
}
 
private function supprimerCodeReferentiel($chaine) {
$codeReferentiel = Registre::get('parametres.referentiel').'.';
$chaine = str_replace($codeReferentiel, '', $chaine);
return $chaine;
}
 
// TODO : utiliser le conteneur pour charger tous les objets de cette classe
private function chargerRepartition() {
$referentiel = Registre::get('parametres.referentiel');
if (Config::get("$referentiel.baseRepartition") != '') {
$conteneur = new Conteneur();
$cartesWs = $conteneur->getApiCartes();
$cartesWs->setProjet(Config::get(Registre::get('parametres.referentiel').'.baseRepartition'));
$cartesWs->setLargeur('108x101');
$urls = array();
foreach ($this->noms as $id => $nom) {
if (array_key_exists('num_taxonomique', $nom)) {
$nt = $nom['num_taxonomique'];
$cartesWs->setId("$referentiel.nt:$nt");
if (array_key_exists($id, $urls) == false) {
$urls[$id] = $cartesWs->getUrlPng();
}
}
}
$this->infosPourTpl['repartition']['urls'] = $urls;
}
}
 
private function extraireInfosNomsPourTplDetermination() {
$tri = $this->diviserResultats();
$this->infosPourTpl['nomsSansCorrespondance'] = isset($tri['sansCorres']) ? $tri['sansCorres'] : false;
$this->infosPourTpl['noms'] = isset($tri['retenus']) ? $tri['retenus'] : false;
$this->infosPourTpl['synonymes'] = isset($tri['synonymes'] ) ? $tri['synonymes'] : false;
}
 
/**
* division ordonnée par
* 1 - noms retenus qui commencent par la requete
* 2 - requete contenue dans un synonyme dont le nom retenu ne contient pas la requete
* 3 - requete contenue dans un hybride retenu
* 4 - requete contenue dans un nom retenu mais pas au début
* 5 - requete contenue dans un nom sans correspondance
*
*/
private function diviserResultats() {
$tri = array();
$sansCorres = array();
$synonymes = array();
$retenus = array();
foreach ($this->noms as $cle => $valeurs) {
if ($valeurs['nom_retenu.libelle'] == null) {//sans correspondances
$sansCorres[$cle] = $valeurs['nom_sci_complet'];
} elseif ($valeurs['retenu'] == 'true') { // retenus
if (preg_match('/ x |^x /',$valeurs['nom_sci'] ) ) {
//hybrides
$retenus[2][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci_complet'], $valeurs['rang.libelle']);
} elseif (strripos($valeurs['nom_sci_complet'], $this->parametres->masqueRecherche) === 0) {//preg_match('/^'.strtolower($this->parametres->masqueRecherche).' |^'.strtolower($this->parametres->masqueRecherche).'$/', strtolower($valeurs['nom_sci']) ) ) {
//commence par
$retenus[0][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci_complet'], $valeurs['rang.libelle']);
} else {
//contient
$retenus[3][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci_complet'], $valeurs['rang.libelle']);
}
} else {//synonymes
$idNomRetenu = $valeurs['nom_retenu.id'];
if (in_array($valeurs['nom_retenu.id'], array_keys($this->noms)) == false) {
//synonymes dont le nom retenu n'est pas un résultat de recherche
$retenus[1][$idNomRetenu] = $this->retournerInfosNomRetenu($idNomRetenu,$valeurs['nom_retenu.libelle'], $valeurs['rang.libelle']);
$this->infosPourTpl['taxons'][$idNomRetenu] = $valeurs['num_taxonomique']; //num taxon pour images coste
}
$synonymes[$idNomRetenu][] = $this->retournerInfosSynonyme($cle, $valeurs);
}
}
ksort($retenus);
$tri['retenus'] = $retenus;
$tri['synonymes'] = $synonymes;
$tri['sansCorres'] = $sansCorres;
return $tri;
}
 
private function retournerInfosNomRetenu($cle, $nom_sci, $rang) {
$infos = array();
$infos['nomSciRetenu'] = $nom_sci;
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, strtolower($this->parametres->masqueRecherche), $nom_sci);
$infos['rang'] = $rang;
return $infos;
}
 
private function retournerInfosSynonyme($cle, $valeurs) {
$infos = array();
$infos['nn'] = $cle;
$infos['nomSci'] = $valeurs['nom_sci_complet'];
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, $this->parametres->masqueRecherche, $valeurs['nom_retenu.libelle']);
return $infos;
}
 
public function trier() {
$nomsRetenus = array();
foreach ($this->infosPourTpl['noms'] as $categorie => $valeurs ) { //classement alpha par groupes
$nomsRetenus += $this->classerAlphabetiquement('nomSciRetenu', $valeurs);
}
$this->infosPourTpl['noms'] = $nomsRetenus;
$this->infosPourTpl['nomsSansCorrespondance'] =
$this->classerAlphabetiquement('nomSciRetenu', $this->infosPourTpl['nomsSansCorrespondance'] );
}
 
private function ajouterAuxNomsScoreSimilariteAvec($masque) {
$nom_demande_ss = strtolower($this->manipulateurDeChaine->supprimerAccents($masque));
foreach ($this->infosPourTpl['noms'] as $id => $nom) {
$nom_flou_ss = strtolower($this->manipulateurDeChaine->supprimerAccents($nom['nomSciRetenu']));
$stat = array();
// Prime pour la ressemblance globale :
$score = 500 - levenshtein($nom_flou_ss, $nom_demande_ss);
// On affine
$score = $score + (similar_text($nom_demande_ss, $nom_flou_ss) * 3);
$nom['score'] = $score;
$this->infosPourTpl['noms'][$id] = $nom;
}
}
 
private function classerAlphabetiquement($champs, $valeurs) {
$this->trieur->setTableau($valeurs);
$this->trieur->setChampsEtOrdres(array($champs => 'nat'));
return $this->trieur->trier();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $idNom => $nom) {
$this->infosPourTpl['noms'][$idNom]['nomSciRetenuSurligne'] = $this->surlignerMotsMasqueRecherche($nom['nomSciRetenu']);
if (isset($this->infosPourTpl['synonymes'][$idNom])) {
foreach ($this->infosPourTpl['synonymes'][$idNom] as $idSyn => $synonyme) {
$this->infosPourTpl['synonymes'][$idNom][$idSyn]['nomSci'] = $this->surlignerMotsMasqueRecherche($synonyme['nomSci']);
}
}
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
}
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
Property changes:
Added: svnkit:entry:sha1-checksum
+b308b575b63824443e3ba51a065e27a97843a2d9
\ No newline at end of property
/trunk/modules/resultat/formateurs/nom_scientifique/RetenuFormateur.php
New file
0,0 → 1,88
<?php
class RetenuFormateur implements Formateur {
 
const TPL_VUE = 'liste_noms';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $fusioneur = null;
 
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
 
public function __construct(ParametresResultats $parametres, Array $resultats, Surligneur $surligneur = null,
Trieur $trieur = null, AppUrls $urls = null, TableauManipulateur $tableau = null) {
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
$this->fusioneur = (is_null($tableau)) ? new TableauManipulateur() : $tableau;
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
 
public function formater() {
foreach ($this->noms as $id => $nom) {
$infosDuNom = array();
$infosDuNom['nomSci'] = $nom['nom_sci_complet'];
$infosDuNom['retenu'] = $nom['retenu'];
$nom_retenu = $nom['retenu'] == 'true' ? $nom['nom_sci'] : '';
$infosDuNom['urlFiche'] = $this->urls->obtenirUrlFiche($id, $this->parametres->typeNom, $this->parametres->masqueRecherche);
 
$this->infosPourTpl['noms'][$id] = $infosDuNom;
}
}
 
public function trier() {
$nomsRetenus = array();
$nomsSynonymes = array();
 
foreach ($this->infosPourTpl['noms'] as $id => $nom) {
if ($nom['retenu'] == 'true') {
$nomsRetenus[$id] = $nom;
} else {
$nomsSynonymes[$id] = $nom;
}
}
 
$this->trieur->setTableau($nomsRetenus);
$this->trieur->setChampsEtOrdres(array('nomSci' => SORT_ASC));
$nomsRetenus = $this->trieur->trier();
 
$this->trieur->setTableau($nomsSynonymes);
$this->trieur->setChampsEtOrdres(array('nomSci' => SORT_ASC));
$nomsSynonymes = $this->trieur->trier();
 
$this->fusioneur->setTableau($nomsRetenus);
$this->fusioneur->etendreAvec($nomsSynonymes);
$this->infosPourTpl['noms'] = $this->fusioneur->getTableau();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $id => $nom) {
$this->infosPourTpl['noms'][$id]['nomSci'] = $this->surlignerMotsMasqueRecherche($nom['nomSci']);
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
}
 
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
/trunk/modules/resultat/formateurs/nom_scientifique/DecompoFormateur.php
New file
0,0 → 1,72
<?php
class DecompoFormateur implements Formateur {
 
const TPL_VUE = 'decomposition';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
 
public function __construct(ParametresResultats $parametres, Array $resultats, Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null) {
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
 
public function formater() {
$this->infosPourTpl['masqueRecherche'] = rawurlencode($this->parametres->masqueRecherche);
$this->infosPourTpl['baseUrlIco'] = $this->urls->obtenirUrlBaseDossier();
foreach ($this->noms as $id => $nom) {
$infosDuNom = array();
$infosDuNom['nomSci'] = $nom['nom_sci'];
$infosDuNom['retenu'] = $nom['retenu'];
$infosDuNom['auteur'] = is_null($nom['auteur']) ? '' : $nom['auteur'];
$infosDuNom['annee'] = is_null($nom['annee']) ? '' : $nom['annee'];
$infosDuNom['biblio'] = is_null($nom['biblio_origine']) ? '' : $nom['biblio_origine'];
$infosDuNom['addendum'] = is_null($nom['nom_addendum']) ? '' : $nom['nom_addendum'];
$infosDuNom['nn'] = $id;
$nom_retenu = $nom['retenu'] == 'true' ? $nom['nom_sci'] : '';
$infosDuNom['urlFiche'] = $this->urls->obtenirUrlFiche($id, $this->parametres->typeNom, $this->parametres->masqueRecherche);
 
$this->infosPourTpl['noms'][$id] = $infosDuNom;
}
}
 
public function trier() {
$this->trieur->setTableau($this->infosPourTpl['noms']);
$this->trieur->setChampsEtOrdres(array('nomSci' => SORT_ASC));
$this->infosPourTpl['noms'] = $this->trieur->trier();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $id => $nom) {
$this->infosPourTpl['noms'][$id]['nomSci'] = $this->surlignerMotsMasqueRecherche($nom['nomSci']);
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
}
 
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
/trunk/modules/resultat/formateurs/nom_scientifique/AlphabFormateur.php
New file
0,0 → 1,65
<?php
class AlphabFormateur implements Formateur {
 
const TPL_VUE = 'liste_noms';
 
private $parametres = null;
private $surligneur = null;
private $trieur = null;
private $urls = null;
private $motsASurligner = array();
private $noms = array();
private $infosPourTpl = array();
 
public function __construct(ParametresResultats $parametres, Array $resultats, Surligneur $surligneur = null, Trieur $trieur = null, AppUrls $urls = null) {
$this->parametres = $parametres;
$this->noms = $resultats['resultat'];
$this->surligneur = (is_null($surligneur)) ? new Surligneur() : $surligneur;
$this->trieur = (is_null($trieur)) ? new Trieur() : $trieur;
$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
}
 
public function getTplInfos() {
return $this->infosPourTpl;
}
 
public function getTplNom() {
return self::TPL_VUE;
}
 
public function formater() {
foreach ($this->noms as $id => $nom) {
$infosDuNom = array();
$infosDuNom['nomSci'] = $nom['nom_sci_complet'];
$infosDuNom['retenu'] = $nom['retenu'];
$nom_retenu = $nom['retenu'] == 'true' ? $nom['nom_sci'] : '';
$infosDuNom['urlFiche'] = $this->urls->obtenirUrlFiche($id, $this->parametres->typeNom, $this->parametres->masqueRecherche);
 
$this->infosPourTpl['noms'][$id] = $infosDuNom;
}
}
 
public function trier() {
$this->trieur->setTableau($this->infosPourTpl['noms']);
$this->trieur->setChampsEtOrdres(array('nomSci' => SORT_ASC));
$this->infosPourTpl['noms'] = $this->trieur->trier();
}
 
public function surligner() {
$this->definirMotsASurligner();
foreach ($this->infosPourTpl['noms'] as $id => $nom) {
$this->infosPourTpl['noms'][$id]['nomSci'] = $this->surlignerMotsMasqueRecherche($nom['nomSci']);
}
}
 
private function definirMotsASurligner() {
$this->motsASurligner = explode(' ', $this->parametres->masqueRecherche);
}
 
private function surlignerMotsMasqueRecherche($nom) {
$this->surligneur->setTexte($nom);
$nom = $this->surligneur->surlignerMots($this->motsASurligner);
return $nom;
}
}
?>
/trunk/modules/resultat/Resultat.php
New file
0,0 → 1,265
<?php
// declare(encoding='UTF-8');
/**
* Classe mère du module Liste.
*
* @category PHP 5.2
* @package eflore-consultation
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
* @copyright 2011 Tela-Botanica
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
class Resultat extends aControleur {
 
private $parametres = null;
private $resultats = null;
private $donneesTpl = array();
private $i18n = array();
private $parametresAvancesGeneriques = array('gen','fam','nn','nt','sp','ssp','type','sto','sti','stc');
 
public function initialiser() {
spl_autoload_register(array($this, 'chargerClassesResultat'));
$this->parametres = new ParametresResultats();
$this->capturerParametres();
$this->capturerParametresAvances();
//if (Registre::get('parametres.referentiel') == "bdtfxr") Registre::set('parametres.referentiel', 'bdtfx') ;
$this->parametres->referentielCourant = Registre::get('parametres.referentiel') ;
$this->parametres->projetImg = Config::get($this->parametres->referentielCourant.'.baseImages');
$this->resultats = Registre::get('resultats');
$this->i18n = I18n::get('Recherche-form-avancee');
}
 
private function chargerClassesResultat($classe) {
$base = dirname(__FILE__).DS;
$cheminFormateurs = $base.'formateurs'.DS;
$cheminFormateursNs = $cheminFormateurs.'nom_scientifique'.DS;
$cheminFormateursNv = $cheminFormateurs.'nom_vernaculaire'.DS;
$dossiers = array($base, $cheminFormateurs, $cheminFormateursNs, $cheminFormateursNv);
foreach ($dossiers as $chemin) {
$fichierATester = $chemin.$classe.'.php';
if (file_exists($fichierATester)) {
include_once $fichierATester;
return null;
}
}
}
 
private function capturerParametres() {
$this->parametres->masqueRecherche = "";
if (isset($_GET['resultat'])) {
$this->parametres->typeResultat = $_GET['resultat'];
}
if (isset($_GET['nom'])) {
$this->parametres->masqueRecherche = trim($_GET['nom']);
}
//recherche avancee type
if (isset($_GET['fam'])) {
$this->parametres->masqueRecherche .= trim($_GET['fam']);
}
if (isset($_GET['gen'])) {
$this->parametres->masqueRecherche .= trim($_GET['gen']);
}
if (isset($_GET['sp'])) {
$this->parametres->masqueRecherche .= trim($_GET['sp']);
}
if (isset($_GET['ssp'])) {
$this->parametres->masqueRecherche .= trim($_GET['ssp']);
}
if (isset($_GET['and'])) {
$this->parametres->masqueRecherche .= trim($_GET['and']);
}
if (isset($_GET['anf'])) {
$this->parametres->masqueRecherche .= trim($_GET['anf']);
}
if (isset($_GET['au'])) {
$this->parametres->masqueRecherche .= trim($_GET['au']);
}
if (isset($_GET['bib'])) {
$this->parametres->masqueRecherche .= trim($_GET['bib']);
}
 
// Si spécifié, seuls les résultats du niveau spécifié sont affichés.
// Passer "*" pour annuler le filtre par rang (le paramètre est mis à "null").
// Par défaut, seules les espèces sont affichées (paramètre par défaut).
if (isset($_GET['rang'])) {
$this->parametres->rang = ($_GET['rang'] == '*' ? null : $_GET['rang']);
}
 
if (isset($_GET['type_nom'])) {
$this->parametres->typeNom = $_GET['type_nom'];
}
if (isset($_GET['niveau'])) {
Registre::set('parametres.niveau', $_GET['niveau']);
}
}
private function capturerParametresAvances() {
$this->capturerParametresAvancesGeneriques();
$this->capturerParametresAvancesDependantsLangage();
$this->capturerParametresAvancesPresenceSpecifiques();
$this->capturerParametresAvancesRang();
}
 
private function capturerParametresAvancesRang() {
// rang à afficher
$this->param['rang'] = $this->parametres->rang;
if ($this->param['rang'] === null) {
$this->param['rang'] = '*';
}
}
 
private function capturerParametresAvancesGeneriques() {
foreach($this->parametresAvancesGeneriques as $param) {
if (isset($_GET[$param]) && $_GET[$param] != '') {
$this->param[$param] = urldecode($_GET[$param]);
}
}
}
private function capturerParametresAvancesDependantsLangage() {
if (isset($_GET['au']) && $_GET['au'] != ''
&& $_GET['au'] != urlencode($this->i18n['valeur-form-auteur'])) {
$this->param['au'] = urldecode($_GET['au']);
}
if (isset($_GET['bib']) && $_GET['bib'] != ''
&& $_GET['bib'] != urlencode($this->i18n['valeur-form-bib'])) {
$this->param['bib'] = urldecode($_GET['bib']);
}
if (isset($_GET['and']) && $_GET['and'] != ''
&& $_GET['and'] != urlencode($this->i18n['valeur-form-date'])) {
$this->param['and'] = urldecode($_GET['and']);
}
if (isset($_GET['anf']) && $_GET['anf'] != ''
&& $_GET['anf'] != urlencode($this->i18n['valeur-form-date'])) {
$this->param['anf'] = urldecode($_GET['anf']);
}
}
private function capturerParametresAvancesPresenceSpecifiques() {
$champs_presence = $this->obtenirChampsPresence();
foreach($champs_presence as $champ) {
$param = $champ['param'];
if (isset($_GET[$param]) && $_GET[$param] != '') {
$this->param[$param] = urldecode($_GET[$param]);
}
}
}
private function obtenirChampsPresence() {
$tableau_champs_presence = array();
$referentiel = Registre::get('parametres.referentiel');
$champs_presence = Config::get($referentiel.'.champsPresence');
$champs_presence_spl = explode('|', $champs_presence);
foreach($champs_presence_spl as $champ) {
$label_param_champ = explode(':', $champ);
if(count($label_param_champ) >= 2) {
$tableau_champs_presence[] = array('param' => $label_param_champ[1],
'label' => $label_param_champ[0]);
}
}
return $tableau_champs_presence;
}
 
public function executerActionParDefaut() {
$this->executerResultat();
}
 
public function executerResultat() {
$this->chargerOnglets();
$this->chargerNbreDeTaxons();
$this->chargerNomsFormates();
$this->setSortie(self::RENDU_CORPS, $this->getVue('resultat', $this->donneesTpl));
}
 
private function chargerOnglets() {
$donnees = array();
$donnees['typeResultat'] = $this->parametres->typeResultat;
$donnees['typeNom'] = $this->parametres->typeNom;
$donnees['ongletsNs'] = array('determination', 'retenu', 'decompo');
$donnees['ongletsNv'] = array('determination', 'alphab');
if (@$_GET['action'] == 'rechercheAvancee') {
$donnees['urls']['alphab'] = $this->urls->obtenirUrlResultatAvanceOnglets('alphab', $this->param);
$donnees['urls']['retenu'] = $this->urls->obtenirUrlResultatAvanceOnglets('retenu', $this->param);
$donnees['urls']['determination'] = $this->urls->obtenirUrlResultatAvanceOnglets('determination',$this->param);
$donnees['urls']['decompo'] = $this->urls->obtenirUrlResultatAvanceOnglets('decompo',$this->param);
} else {
$donnees['urls']['alphab'] = $this->urls->obtenirUrlResultat('alphab', $this->param);
$donnees['urls']['retenu'] = $this->urls->obtenirUrlResultat('retenu', $this->param);
$donnees['urls']['determination'] = $this->urls->obtenirUrlResultat('determination', $this->param);
$donnees['urls']['decompo'] = $this->urls->obtenirUrlResultat('decompo', $this->param);
}
// Inversion du critère de filtrage de rang : espèces seulement VS tout (pas d'autre choix pour l'instant)
//echo "PARAMS: <pre>" . print_r($this->param, true) . "</pre><br/>";
$paramsAvecRangInverse = $this->param;
if (array_key_exists('rang', $paramsAvecRangInverse)) {
if ($paramsAvecRangInverse['rang'] == '*') {
$paramsAvecRangInverse['rang'] = 290;
} else {
unset ($paramsAvecRangInverse['rang']);
}
}
//echo "PARAMS INV: <pre>" . print_r($paramsAvecRangInverse, true) . "</pre><br/>";
$this->donneesTpl['urlInverse'] = $this->urls->obtenirUrlResultat($donnees['typeResultat'], $paramsAvecRangInverse);
//echo "URL INV: " . $this->donneesTpl['urlInverse'] . "<br/>";
 
$donnees['i18n']['nv'] = I18n::get('Resultat-onglets-nv');
$donnees['i18n']['ns'] = I18n::get('Resultat-onglets-ns');
$this->donneesTpl['ongletsHtml'] = $this->getVue('onglets', $donnees);
}
 
private function chargerNbreDeTaxons() {
$this->donneesTpl['nbreTaxons'] = $this->resultats['entete']['total'];
}
 
// Filtre selon le rang à afficher (espèce, genre... tout)
// et renvoie le nombre de taxons réellement affichés
private function filtrer() {
$nbTaxAff = 0;
if ($this->parametres->rang != null) {
foreach ($this->resultats['resultat'] as $c => $v) {
$numRang = substr($v['rang.code'], strrpos($v['rang.code'], ':') +1);
if ($numRang != $this->parametres->rang) {
unset($this->resultats['resultat'][$c]);
} else {
$nbTaxAff++;
}
}
} else {
$nbTaxAff = $this->resultats['entete']['total'];
}
return $nbTaxAff;
}
 
private function chargerNomsFormates() {
if (Config::get('benchmark_chrono')) Chronometre::chrono("Avt mise en forme des noms");
 
// Filtre selon $this->parametres['rang'] pour afficher seulement un rang, ou bien tous
// Valable uniquement pour la recherche par nom scientifique
//echo "<pre>".print_r($this->parametres, true)."</pre>";
if ($this->parametres->typeNom == 'nom_scientifique') {
$this->donneesTpl['nombreTaxonsAffiches'] = $this->filtrer();
$this->donneesTpl['rang'] = $this->parametres->rang;
} else {
$this->donneesTpl['nombreTaxonsAffiches'] = $this->donneesTpl['nbreTaxons'];
}
$this->donneesTpl['typeNom'] = $this->parametres->typeNom;
 
$formateur = ResultatFormateurFabrique::creer($this->parametres, $this->resultats);
if (Config::get('benchmark_chrono')) Chronometre::chrono("Avt formatage des noms");
$formateur->formater();
if (Config::get('benchmark_chrono')) Chronometre::chrono("Avt triage des noms");
$formateur->trier();
if (Config::get('benchmark_chrono')) Chronometre::chrono("Avt surlignage des noms");
$formateur->surligner();
if (Config::get('benchmark_chrono')) Chronometre::chrono("Avt création de la vue");
$this->donneesTpl['nomsHtml'] = $this->getVue($formateur->getTplNom(), $formateur->getTplInfos());
if (Config::get('benchmark_chrono')) Chronometre::chrono("Après mise en forme des noms");
}
}
?>
/trunk/modules/recherche/Recherche.php
New file
0,0 → 1,335
<?php
class Recherche extends aControleur {
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
protected $nom = null;
protected $type_nom = 'nom_scientifique';
protected $type_resultat = '';
protected $submit = '';
protected $acces_fiche = false;
private $recherche_avancee;
private $param;
private $i18n = array();
private $parametresAvancesGeneriques = array('gen','fam','nn','nt','sp','ssp','type','sto','sti','stc');
public function initialiser() {
$this->capturerParametres();
$this->capturerParametresAvances();
$this->i18n = I18n::get('Recherche-form-avancee');
}
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
$this->executerAccueil();
}
public function executerAccueil($donneesMoteur = array()) {
$meta = new MetaDonnees();
$meta->setProjet(Registre::get('parametres.referentiel'));
$metadonnees = $meta->getMetaDonnees();
$donneesMoteur['metadonnees_referentiel'] = $metadonnees[0];
$niveau = new Niveau();
$donnees['form_niveau'] = $niveau->afficherNiveau();
$recherchesimple = new RechercheSimple();
$donnees['form_nom'] = $recherchesimple->executerFormulaireNom($donneesMoteur);
if (Registre::get('parametres.niveau') != 1) {
$recherche_avancee = new RechercheAvancee();
$donnees['form_recherche_av'] = $recherche_avancee->executerFormulaireRechercheAv($donneesMoteur);
}
$donnees['description'] = "";
 
// le descriptif du référentiel est affiché lorsque seul le moteur est affiché (donc ni résultats, ni fiche)
if(Registre::get('parametres.module') == 'recherche' &&
Registre::get('parametres.action') == 'action-par-defaut' &&
!Registre::get('resultats')) {
$referentiel = Registre::get('parametres.referentiel');
$wiki = new Wikini();
$description = $wiki->getDescriptionReferentielFormate($referentiel);
$donnees['description'] = $description;
}
$this->afficherAccueil($donnees);
}
private function afficherAccueil($donnees) {
$donnees['i18n'] = I18n::get('Recherche-accueil');
$this->setSortie(self::RENDU_CORPS, $this->getVue('recherche_accueil', $donnees), true);
}
 
//+---------------------------------------------recherche avancee-------------------------------------+
public function executerRechercheAvancee() {
$this->param = $this->nettoyerParametresDefautRechercheAvancee($this->param);
$donnees['param'] = $this->param;
$presence = $this->rechercherCriteresDemandes();
if (empty($presence) && !empty($this->param)) {
$donnees['message_av']['attention'] = 'info_res_vide';
}
$this->executerAccueil($donnees);
if (Registre::get('resultats')) {
$_GET['resultat'] = $this->type_resultat;
$this->executerAction('Resultat', 'executerResultat');
}
}
 
private function nettoyerParametresDefautRechercheAvancee($params) {
$params_nettoyes = array();
foreach ($params as $cle => $param) {
if(!preg_match("#^\(.*\)$#", $param)) {
$params_nettoyes[$cle] = $param;
}
}
return $params_nettoyes;
}
public function rechercherCriteresDemandes() {
$noms = new Noms(Registre::get('parametres.referentiel'));
$res = $noms->getRechercheAvancee($this->param);
if ($res != false || $res['entete']['total'] != 0) {
if ($res['entete']['total'] == 1 ) {
$ids = array_keys($res['resultat']);
$nom = $res['resultat'][$ids[0]]['nom_sci'];
$url = $this->urls->obtenirUrlFiche($ids[0], 'nom_scientifique', $nom);
$this->redirigerVers($url);
} else {
$res['type'] = $this->type_nom;
Registre::set('resultats', $res);
}
} else {
$res = '';
}
return $res;
}
//+---------------------------------------------recherche simple-------------------------------------+
/*
grep-friendly: ICI->executerRechercheSimple()
En effet, cette méthode n'est jamais invoquée explicitement.
Le processus est le suivant:
* URL = index.php?type_nom=...&referentiel=..&module=recherche&action=rechercheSimple
* AppControleur::initialiser()
* `-> AppControleur::$parametres['action'] = $_GET['action']
* `-> AppControleur::executerModule()
* `-> effecture $module->$action()
* qui nous appelle ici
*/
public function executerRechercheSimple() {
$donnees['type_nom'] = $this->type_nom;
$donnees['nom'] = $this->nom;
if (strlen($donnees['nom']) < 3) {
$donnees['message']['attention'] = 'info_nb_lettres';
} else {
$presence = $this->rechercherNom();
if ($presence == '') { // s'il n'y a pas de nom
$donnees['message']['attention'] = 'info_sp_abs';
} elseif ($presence == 'sans_correspondance') {
$res = Registre::get('resultats');
$id = array_keys($res['resultat']);
$donnees['message']['nom_ss_corresp']['id'] = $id[0];
$nom = array_shift($res['resultat']);
$donnees['message']['nom_ss_corresp']['nom'] = $nom['nom_sci'];
} elseif ($presence != 'ok') { // s'il y a des noms approchés
if (!Registre::get('resultats')) { // s'il n'y a aucun nom exact
$donnees['message']['attention'] = 'info_sp_abs';
}
$donnees['message']['nom_approche'] = $presence;
}
}
 
$this->executerAccueil($donnees);
if (Registre::get('resultats')) {
$_GET['resultat'] = $this->type_resultat;
$this->executerAction('Resultat', 'executerResultat');
}
}
// regarde si il y a des résultats correspondant au nom recherché sinon recherche un nom approché
// $noms classe métier nom ou nom
private function rechercherNom() {
$noms = ($this->type_nom == 'nom_vernaculaire')
? new NomsVernaculaires(Config::get(Registre::get('parametres.referentiel').'.referentielVerna'))
: new Noms(Registre::get('parametres.referentiel'));
$approche = '';
$res = $noms->getRechercheEtendue($this->nom, $this->type_resultat);
$form = I18n::get('Recherche-form-nom');
 
if ($res == false || $res['entete']['total'] === 0) { // recherche nom approché
$approche = $this->rechercherNomApproche($noms);
} elseif ($res['entete']['total'] == 1 || $this->acces_fiche) { // renvoie à la fiche
$approche = $this->traiterAccesFiche($res);
} else { // affiche les résultats
$res['type'] = $this->type_nom;
Registre::set('resultats', $res);
$approche = 'ok';
if ($res['entete']['total'] < 3) { // si moins de 16 noms affiche en plus un nom approché
$approche = $this->rechercherNomApproche($noms);
}
}
// suppression des nomps en doublons + du nom déjà dans le moteur de recherche
// TODO: comprendre d'ou viennent les noms en doublons. Peut-être une histoire de noms similaires avec un nom d'auteur
// différent, qui une fois supprimé se retrouvent à être les même ?
if(is_array($approche)) {
$approche_sans_doublons = array();
foreach($approche as $element) {
if(!in_array($element, $approche_sans_doublons) && $element['nom'] != $this->nom) {
$approche_sans_doublons[] = $element;
}
}
$approche = $approche_sans_doublons;
}
return $approche;
}
private function traiterAccesFiche($res) {
$ids = array_keys($res['resultat']);
if ($this->type_nom == 'nom_vernaculaire') {
$id = explode(':',$res['resultat'][$ids[0]]['nom_retenu.code']);
$id = $id[1];
} else {
if ($res['resultat'][$ids[0]]['retenu'] == 'absent') { // dans le cas d'un nom sans correspondance
$res['type'] = $this->type_nom;
Registre::set('resultats', $res);
$approche = 'sans_correspondance';
return $approche;
} else {
$id = $ids[0];
}
}
$url = $this->urls->obtenirUrlFiche($id, $this->type_nom, $this->nom);
$this->redirigerVers($url);
}
private function rechercherNomApproche($noms) {
$approche = '';
$res = $noms->getRechercheFloue($this->nom);
if (!($res == false || $res['entete']['total'] === 0)) {
for ($i = 0; $i < 3; $i++) {
$nom_proche = array_shift($res['resultat']);
$approche[$i]['nom'] = ($this->type_nom == 'nom_vernaculaire') ? $nom_proche['nom'] : $nom_proche['nom_sci'];
$approche[$i]['url_nom_approche'] = $this->urls->obtenirUrlRechercheSimple($approche[$i]['nom'], $this->type_nom);
}
}
return $approche;
}
//+-----------------------------------------------méthodes utiles---------------------------------+
private function capturerParametres() {
if (isset($_REQUEST['nom'])) {
$this->nom = $this->convertirEncodageEntree(urldecode($_REQUEST['nom']));
}
if (isset($_GET['type_nom'])) {
$this->type_nom = $this->convertirEncodageEntree(urldecode($_GET['type_nom']));
}
if (isset($_GET['submit'])) {
$this->submit = $this->convertirEncodageEntree(urldecode($_GET['submit']));
}
if(isset($_GET['acces_fiche'])) {
$this->acces_fiche = true;
}
if (isset($_GET['niveau'])) {
Registre::set('parametres.niveau', $this->convertirEncodageEntree($_GET['niveau']));
}
if (isset($_GET['resultat'])) {
$this->type_resultat = $this->convertirEncodageEntree(urldecode($_GET['resultat']));
} else {
$onglet_resultat = $this->recupererTableauConfig('affich_resultats');
$this->type_resultat = $onglet_resultat[Registre::get('parametres.niveau').'_'.$this->type_nom];
}
}
private function capturerParametresAvances() {
$this->capturerParametresAvancesGeneriques();
$this->capturerParametresAvancesDependantsLangage();
$this->capturerParametresAvancesPresenceSpecifiques();
}
private function capturerParametresAvancesGeneriques() {
foreach($this->parametresAvancesGeneriques as $param) {
if (isset($_GET[$param]) && $_GET[$param] != '') {
$this->param[$param] = $this->convertirEncodageEntree(urldecode($_GET[$param]));
}
}
}
private function capturerParametresAvancesDependantsLangage() {
if (isset($_GET['au']) && $_GET['au'] != ''
&& $_GET['au'] != $this->convertirEncodageEntree(urlencode($this->i18n['valeur-form-auteur']))) {
$this->param['au'] = $this->convertirEncodageEntree(urldecode($_GET['au']));
}
if (isset($_GET['bib']) && $_GET['bib'] != ''
&& $_GET['bib'] != $this->convertirEncodageEntree(urlencode($this->i18n['valeur-form-bib']))) {
$this->param['bib'] = $this->convertirEncodageEntree(urldecode($_GET['bib']));
}
if (isset($_GET['and']) && $_GET['and'] != ''
&& $_GET['and'] != $this->convertirEncodageEntree(urlencode($this->i18n['valeur-form-date']))) {
$this->param['and'] = $this->convertirEncodageEntree(urldecode($_GET['and']));
}
if (isset($_GET['anf']) && $_GET['anf'] != ''
&& $_GET['anf'] != urlencode($this->i18n['valeur-form-date'])) {
$this->param['anf'] = $this->convertirEncodageEntree(urldecode($_GET['anf']));
}
}
private function capturerParametresAvancesPresenceSpecifiques() {
$champs_presence = $this->obtenirChampsPresence();
foreach($champs_presence as $champ) {
$param = $champ['param'];
if (isset($_GET[$param]) && $_GET[$param] != '') {
$this->param[$param] = $this->convertirEncodageEntree(urldecode($_GET[$param]));
}
}
}
private function obtenirChampsPresence() {
$tableau_champs_presence = array();
$referentiel = Registre::get('parametres.referentiel');
$champs_presence_spl = explode('|', Config::get($referentiel.'.champsPresence'));
foreach($champs_presence_spl as $champ) {
$label_param_champ = explode(':', $champ);
if(count($label_param_champ) >= 2) {
$tableau_champs_presence[] = array('param' => $label_param_champ[1],
'label' => $label_param_champ[0]);
}
}
return $tableau_champs_presence;
}
protected function recupererTableauConfig($param) {
$tableau = array();
$tableauPartiel = explode(',', Config::get($param));
$tableauPartiel = array_map('trim', $tableauPartiel);
foreach ($tableauPartiel as $champ) {
if (strpos($champ, '=') === false) {
$tableau[] = $champ;
} else {
list($cle, $val) = explode('=', $champ);
$tableau[$cle] = $val;
}
}
return $tableau;
}
 
 
/**
* Convertion des valeurs de requête dans l'encodage de l'application (voir fichier config.ini : appli_encodage),
* A cause d'un bug en cours d'investigation, celle ci utilise des paramètres différents de la fonction de conversion
* D'encodage de sortie
* Cette convertion a lieu seulement si les formats sont différents.
*/
private function convertirEncodageEntree($contenu) {
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$contenu = mb_convert_encoding($contenu, Config::get('appli_encodage'), Config::get('sortie_encodage'));
}
return $contenu;
}
}
?>
/trunk/modules/recherche/squelettes/recherche_accueil.tpl.html
New file
0,0 → 1,31
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
 
<div id="bloc-recherche" class="cover importance1" style="background-image: url();">
<div class="layout-wrapper cover-content">
<h1 class="title"><?=$i18n['titre-nom'];?></h1>
<div class="subtitle"><?=$form_nom;?>
<div id="conteneur_activation_definition">
<a href="#">&nbsp;</a>
</div>
<!-- niveau expert : recherche avancée -->
<?= isset($form_recherche_av) ? $form_recherche_av : '' ;?></div>
</div>
</div>
</div>
<div class="layout-col-gauche">
<div class="layout-wrapper">
<aside class="layout-colonne">
</aside>
<div class="layout-contenu">
<div class="description-referentiel">
<span class="description-referentiel-texte">
<?=$description;?>
</span>
</div>
</div>
</div>
</div>
</main>
</div>