Changeset 109224 in spip-zone


Ignore:
Timestamp:
Mar 1, 2018, 7:25:58 PM (21 months ago)
Author:
eric@…
Message:

Mise au point de l'étape 2 du formulaire de création d'une espèce et de deux fonctions de l'API ITIS.

Location:
_plugins_/taxonomie/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/formulaires/creer_espece.html

    r109164 r109224  
    1717                        [(#SAISIE{input, recherche,
    1818                                explication=<:taxonomie:explication_recherche_taxon:>,
    19                                 label=<:taxonomie:label_recherche_taxon:>
     19                                label=<:taxonomie:label_recherche_taxon:>,
     20                                obligatoire=oui
    2021                        })]
    2122
  • _plugins_/taxonomie/trunk/formulaires/creer_espece.php

    r109219 r109224  
    55 * @package    SPIP\TAXONOMIE\ESPECE
    66 */
    7 
    8 if (!defined("_ECRIRE_INC_VERSION")) {
     7if (!defined('_ECRIRE_INC_VERSION')) {
    98        return;
    109};
     
    6665        $valeurs['_taxons'] = _request('_taxons');
    6766        $valeurs['_taxon_defaut'] = _request('_taxon_defaut');
     67        $valeurs['_resume'] = _request('_resume');
    6868
    6969        // Préciser le nombre d'étapes du formulaire
     
    127127                        $taxons = itis_search_tsn($type_recherche, $recherche, $recherche_stricte);
    128128                        if ($taxons) {
    129                                 // On construit le tableau des taxons trouvés en supprimant les taxons qui n'appartiennent pas
     129                                // Construire le résumé des saisies de l'étape 1
     130                                $valeurs['_resume'] = '<p>' . _T('taxonomie:info_espece_recherche_intro') . '</p>';
     131                                $item_quoi = 'taxonomie:info_espece_recherche_'
     132                                        . $type_recherche
     133                                        . ($recherche_stricte ? '_exact' : '');
     134                                $recherche_decoree = "<strong>$recherche</strong>";
     135                                $recherche_decoree = $type_recherche == 'scientificname'
     136                                        ? '<span class="nom_scientifique">' . $recherche_decoree . '</span>'
     137                                        : $recherche_decoree;
     138                                $valeurs['_resume'] .= '<ul class="spip">'
     139                                        . '<li>'
     140                                        . _T(
     141                                            $item_quoi,
     142                                                array('recherche' => $recherche_decoree)
     143                                        )
     144                                        . '</li>'
     145                                        . '<li>'
     146                                        . _T(
     147                                            'taxonomie:info_espece_recherche_regne',
     148                                                array('regne' => '<span class="nom_scientifique">' . $regne . '</span>')
     149                                        )
     150                                        . '</li>'
     151                                        .'</ul>'
     152                                        .'<p>' . _T('taxonomie:info_espece_recherche_fin') . '</p>';
     153
     154                                // Construire le tableau des taxons trouvés en supprimant les taxons qui n'appartiennent pas
    130155                                // au règne concerné.
     156                                $valeurs['_taxon_defaut'] = 0;
    131157                                foreach ($taxons as $_taxon) {
    132158                                        if (strcasecmp($_taxon['regne'], $regne) === 0) {
    133                                                 $valeurs['_taxons'][$_taxon['tsn']] = $_taxon['nom_scientifique'];
     159                                                // On recherche le rang de chaque taxon pour l'afficher avec le nom scientifique mais
     160                                                // aussi pour vérifier que ce rang est compatible avec une espèce si on cherche par nom commun.
     161//                                              $record = itis_get_record($_taxon['tsn']);
     162                                                $rang = itis_get_information('rankname', $_taxon['tsn']);
     163                                                if ($type_recherche == 'scientificname') {
     164                                                        $valeurs['_taxons'][$_taxon['tsn']] = '<span class="nom_scientifique">'
     165                                                                . $_taxon['nom_scientifique']
     166                                                                . '</span>'
     167                                                                . ' - '
     168                                                                . _T('taxonomie:rang_' . $rang);
     169                                                        if (strcasecmp($recherche, $_taxon['nom_scientifique']) === 0) {
     170                                                                $valeurs['_taxon_defaut'] = $_taxon['tsn'];
     171                                                        }
     172
     173                                                }
    134174                                        }
    135175                                }
    136                                 reset($valeurs['_taxons']);
    137                                 $valeurs['_taxon_defaut'] = key($valeurs['_taxons']);
     176                                if (!$valeurs['_taxon_defaut']) {
     177                                        reset($valeurs['_taxons']);
     178                                        $valeurs['_taxon_defaut'] = key($valeurs['_taxons']);
     179                                }
    138180
    139181                                // On fournit ces informations au formulaire pour l'étape 2.
     
    142184                                }
    143185                        } else {
    144                                 $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon',
    145                                         array('texte' => $recherche, 'regne' => '<span class="nom_scientifique">' . $regne . '</span>'));
     186                                $erreurs['message_erreur'] = _T(
     187                                    'taxonomie:erreur_recherche_aucun_taxon',
     188                                        array('texte' => $recherche, 'regne' => '<span class="nom_scientifique">' . $regne . '</span>')
     189                                );
    146190                        }
    147191                } else {
  • _plugins_/taxonomie/trunk/formulaires/creer_espece_2.html

    r109219 r109224  
    44        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    55
     6        [<div>(#ENV*{_resume})</div>]
     7
    68        <form method="post" action="#ENV{action}">
    79        <div>
    810                #ACTION_FORMULAIRE{#ENV{action}}
    911                <div class="editer-groupe">
    10                         [(#SAISIE{input, type_recherche_choisi,
    11                                 defaut=#ENV{_types_recherche/#ENV{type_recherche}},
    12                                 disable=oui,
    13                                 label=<:taxonomie:label_type_recherche:>
    14                         })]
    15 
    16                         [(#SAISIE{input, recherche_choisie,
    17                                 defaut=#ENV{recherche},
    18                                 disable=oui,
    19                                 label=<:taxonomie:label_recherche_taxon:>
    20                         })]
    21 
    22                         [(#SAISIE{input, recherche_stricte_choisie,
    23                                 defaut=#ENV{_types_recherche/#ENV{recherche_stricte}},
    24                                 disable=oui,
    25                                 label=<:taxonomie:label_recherche_stricte:>
    26                         })]
    27 
    28                         [(#SAISIE{input, regne_choisi,
    29                                 defaut=#ENV{regne},
    30                                 disable=oui,
    31                                 label=<:taxonomie:label_regne_recherche:>,
    32                                 class=nom_scientifique
    33                         })]
    34 
    3512                        [(#SAISIE{radio, taxon,
    3613                                label=<:taxonomie:label_taxon_trouve:>,
     
    3815                                datas=#ENV{_taxons},
    3916                                defaut=#ENV{_taxon_defaut},
    40                                 class=nom_scientifique
    4117                        })]
    4218                </div>
     
    5026        </form>
    5127</div>
    52 [(#ENV**|unserialize|bel_env)]
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r109219 r109224  
    2222        'erreur_recherche_nom_scientifique' => 'Le nom scientifique d\'une espèce ou d\'un taxon de rang inférieur est toujours constitué d\'au moins deux mots.',
    2323        'erreur_recherche_aucun_taxon' => 'La recherche de «&nbsp;@texte@&nbsp;» est infructueuse pour le règne «&nbsp;@regne@&nbsp;».',
    24         'explication_taxon_trouve' => 'Choisissez le taxon qui correspond à votre recherche. Chaque taxon est désigné par son nom scientifique et son rang.',
     24        'explication_taxon_trouve' => 'Chaque taxon est désigné par son nom scientifique et son rang.',
    2525        'explication_type_recherche' => 'Vous pouvez choisir de rechercher une espèce par son nom scientifique ou son nom commun. ITIS fournissant peu de noms communs il est conseillé d\'utiliser le nom scientifique.',
    2626        'explication_recherche_taxon' => 'Le taxon recherché doit correspondre à une espèce ou à un taxon de rang inférieur.',
     
    5757        'info_regne_compteur_taxons' => '@nb@ taxons chargés du règne au genre (@type_rang@)',
    5858        'info_regne_compteur_traductions' => '@nb@ noms communs en [@langue@]',
     59        'info_espece_recherche_intro' => 'Vous avez choisi de rechercher une espèce :',
     60        'info_espece_recherche_scientificname_exact' => 'dont le nom scientifique est exactement «&nbsp;@recherche@&nbsp;»;',
     61        'info_espece_recherche_scientificname' => 'dont le nom scientifique contient «&nbsp;@recherche@&nbsp;»;',
     62        'info_espece_recherche_commonname_exact' => 'dont le nom commun est exactement «&nbsp;@recherche@&nbsp;»;',
     63        'info_espece_recherche_commonname' => 'dont le nom common contient «&nbsp;@recherche@&nbsp;»;',
     64        'info_espece_recherche_regne' => 'et appartenant au règne «&nbsp;@regne@&nbsp;».',
     65        'info_espece_recherche_fin' => 'Choisissez ci-dessous le taxon qui correspond à votre recherche.',
    5966
    6067        // L
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r109135 r109224  
    308308                        }
    309309
     310                        // Passer en minuscules le rang et le règne exprimé en anglais.
     311                        $record['rang'] = strtolower($record['rang']);
     312                        $record['regne'] = strtolower($record['regne']);
     313
    310314                        // On réorganise le sous-tableau des noms communs
    311315                        $noms = array();
     
    365369 *        Identifiant unique du taxon dans la base ITIS (TSN)
    366370 *
    367  * @return string|array
     371 * @return string|int|array
    368372 *        Chaine ou tableau caractéristique du type d'information demandé.
    369373 */
    370374function itis_get_information($action, $tsn) {
    371375
    372         // Construire l'URL de l'api sollicitée
    373         $url = itis_build_url('json', 'get', $action, strval($tsn));
    374 
    375         // Acquisition des données spécifiées par l'url
    376         $requeter = charger_fonction('taxonomie_requeter', 'inc');
    377         $data = $requeter($url);
    378 
    379         // On vérifie que le tableau est complet sinon on retourne un tableau vide
    380         $api = $GLOBALS['itis_webservice']['get'][$action];
    381         include_spip('inc/filtres');
    382         $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
    383         list($type, $index) = $api['index'];
    384 
    385         if ($type == 'string') {
    386                 $information = '';
    387                 if (!empty($data[$index])) {
    388                         $information = $data[$index];
    389                 }
    390         } else {
    391                 $information = array();
    392                 if ($data) {
    393                         $first_value = reset($data);
    394                         if ($first_value) {
    395                                 if (!$index) {
    396                                         $information = $data;
    397                                         $format = "format_$action";
    398                                         if (function_exists($format)) {
    399                                                 $information = $format($information);
    400                                         }
    401                                 } else {
    402                                         $destination = reset($index);
    403                                         $key = key($index);
    404                                         foreach ($data as $_data) {
    405                                                 $information[strtolower($_data[$destination])][] = $_data[$key];
     376        include_spip('inc/taxonomie_cacher');
     377        $options_cache = array();
     378
     379        if (!$file_cache = cache_taxonomie_existe('itis', $action, $tsn, $options_cache)
     380        or !filemtime($file_cache)
     381        or (time() - filemtime($file_cache) > _TAXONOMIE_ITIS_CACHE_TIMEOUT)
     382        or (_TAXONOMIE_CACHE_FORCER)) {
     383                // Construire l'URL de l'api sollicitée
     384                $url = itis_build_url('json', 'get', $action, strval($tsn));
     385
     386                // Acquisition des données spécifiées par l'url
     387                $requeter = charger_fonction('taxonomie_requeter', 'inc');
     388                $data = $requeter($url);
     389
     390                // On vérifie que le tableau est complet sinon on retourne un tableau vide
     391                $api = $GLOBALS['itis_webservice']['get'][$action];
     392                include_spip('inc/filtres');
     393                $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
     394                list($type, $index) = $api['index'];
     395
     396                if ($type == 'string') {
     397                        $information = '';
     398                        if (!empty($data[$index])) {
     399                                $information = $data[$index];
     400                                if (in_array($action, array('rankname', 'kingdomname'))) {
     401                                        $information = strtolower($information);
     402                                } elseif ($action == 'parent') {
     403                                        $information = intval($information);
     404                                }
     405                        }
     406                } else {
     407                        $information = array();
     408                        if ($data) {
     409                                $first_value = reset($data);
     410                                if ($first_value) {
     411                                        if (!$index) {
     412                                                $information = $data;
     413                                                $format = "format_$action";
     414                                                if (function_exists($format)) {
     415                                                        $information = $format($information);
     416                                                }
     417                                        } else {
     418                                                $destination = reset($index);
     419                                                $key = key($index);
     420                                                foreach ($data as $_data) {
     421                                                        $information[strtolower($_data[$destination])][] = $_data[$key];
     422                                                }
    406423                                        }
    407424                                }
    408425                        }
    409426                }
     427
     428                // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
     429                cache_taxonomie_ecrire(serialize($information), 'itis', $action, $tsn, $options_cache);
     430        } else {
     431                // Lecture et désérialisation du cache
     432                lire_fichier($file_cache, $contenu);
     433                $information = unserialize($contenu);
    410434        }
    411435
Note: See TracChangeset for help on using the changeset viewer.