Changeset 109763 in spip-zone


Ignore:
Timestamp:
Apr 1, 2018, 6:53:22 PM (16 months ago)
Author:
eric@…
Message:

Correction du traitement des erreurs du formulaire creer_espece.
Configuration de l'utilisation des servicesautres que ITIS.
Début de mise en place du service IUCN.

Location:
_plugins_/taxonomie/trunk
Files:
2 added
8 edited

Legend:

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

    r108376 r109763  
    1818                        obligatoire=oui,
    1919                })]
     20
     21                [(#SAISIE{checkbox, services_utilises,
     22                        explication=<:taxonomie:explication_services_utilises:>,
     23                        label=<:taxonomie:label_services_utilises:>,
     24                        data=#ENV{_services}
     25                })]
     26                <div id="iucn_token">
     27                        [(#SAISIE{input, iucn_token,
     28                                explication=<:taxonomie:explication_iucn_token:>,
     29                                label=<:taxonomie:label_iucn_token:>,
     30                                size=64,
     31                                maxlength=64
     32                        })]
     33                </div>
    2034                </div>
    2135
    22                 <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
     36                <p class="boutons">
     37                        <span class="image_loading">&nbsp;</span>
     38                        <input type="submit" class="submit" value="<:bouton_enregistrer:>" />
     39                </p>
    2340        </div>
    2441        </form>
  • _plugins_/taxonomie/trunk/formulaires/configurer_taxonomie.php

    r109447 r109763  
    3131        $valeurs['langues_utilisees'] = lire_config('taxonomie/langues_utilisees');
    3232
     33        // Configuration des services à utiliser et des paramètre de chacun d'eux.
     34        // Le service ITIS est lui toujours actif, on l'exclut de cette liste.
     35        $valeurs['_services'] = array();
     36        if ($fichiers_api = glob(_DIR_PLUGIN_TAXONOMIE . '/services/*/*.php')) {
     37                foreach ($fichiers_api as $_fichier) {
     38                        // On détermine l'alias du service
     39                        $service = str_replace('_api', '', strtolower(basename($_fichier, '.php')));
     40                        if ($service != 'itis') {
     41                                $valeurs['_services'][$service] = _T("taxonomie:label_service_${service}");
     42                        }
     43                }
     44        }
     45        $valeurs['services_utilises'] = lire_config('taxonomie/services_utilises');
     46        // IUCN : nécessite un token d'enregistrement.
     47        $valeurs['iucn_token'] = lire_config('taxonomie/iucn_token');
     48
    3349        return $valeurs;
    3450}
     
    4157 */
    4258function formulaires_configurer_taxonomie_verifier() {
     59
    4360        $erreurs = array();
    4461
     
    4966        }
    5067
     68        // Si le service IUCN est activé, il faut absolument saisir un token récupéré sur le site.
     69        if (_request('services_utilises')
     70        and in_array('iucn', _request('services_utilises'))
     71        and !_request('iucn_token')) {
     72                $erreurs['iucn_token'] = _T('taxonomie:erreur_saisie_iucn_token');
     73        }
     74
    5175        return $erreurs;
    5276}
  • _plugins_/taxonomie/trunk/formulaires/creer_espece.html

    r109246 r109763  
    4646        jQuery(document).ready(function() {
    4747        [(#ENV{type_recherche, scientificname}|=={scientificname}|oui)
    48                 jQuery(".choix_debut").hide('fast');
    4948                jQuery(".choix_fin").hide('fast');
    5049        ]
    5150                jQuery("input[name='type_recherche']").change(function() {
    5251                        if (jQuery("input[name='type_recherche']:checked").val() == 'commonname') {
    53                                 jQuery(".choix_debut").show('fast');
    5452                                jQuery(".choix_fin").show('fast');
    5553                        }
    5654                        else {
    57                                 jQuery(".choix_debut").hide('fast');
    5855                                jQuery(".choix_fin").hide('fast');
    5956                        }
  • _plugins_/taxonomie/trunk/formulaires/creer_espece.php

    r109678 r109763  
    99};
    1010
     11if (!defined('_TAXONOMIE_RECHERCHE_MAX_ESPECES')) {
     12        /**
     13         * Nombre de réponses maximal toléré pour continuer
     14         */
     15        define('_TAXONOMIE_RECHERCHE_MAX_ESPECES', 35);
     16}
    1117
    1218/**
     
    108114        // Si on a déjà choisi une langue, on peut accéder à Wikipedia avec le nom scientifique et retourner
    109115        // les pages trouvées (étape 2).
    110         if ($recherche = trim(_request('recherche'))) {
     116        if ($recherche = ltrim(_request('recherche'))) {
    111117                // On récupère le type de recherche et la correspondance.
    112118                $type_recherche = _request('type_recherche');
    113119                $correspondance = _request('correspondance');
    114120                $recherche_exacte = ($correspondance == 'exact');
     121                $recherche_commence_par = ($correspondance == 'debut');
    115122
    116123                // Si la recherche est de type nom common on ne peut rien vérifier sur le texte.
     
    149156                        }
    150157                        $taxons = itis_search_tsn($action, $recherche, $recherche_exacte);
    151 
    152                         // Construire le tableau des taxons trouvés en supprimant:
    153                         // - les taxons qui n'appartiennent pas au règne concerné
    154                         // - ou qui n'ont pas un rang compatible (uniquement pour la recherche par nom commun)
    155                         // - ou qui ne sont pas des appellations valides
    156                         // - ou qui sont déjà créés.
    157                         $valeurs['_taxons'] = array();
    158                         $valeurs['_taxon_defaut'] = 0;
    159                         include_spip('inc/taxonomie');
    160                         foreach ($taxons as $_taxon) {
    161                                 if (!sql_countsel('spip_taxons', array('tsn=' . intval($_taxon['tsn'])))) {
    162                                         $taxon = itis_get_record($_taxon['tsn']);
    163                                         if (($taxon['usage_valide'])
    164                                         and (strcasecmp($taxon['regne'], $regne) === 0)
    165                                         and (rang_est_espece($taxon['rang']))) {
    166                                                 if ($type_recherche == 'scientificname') {
    167                                                         $valeurs['_taxons'][$taxon['tsn']] = '<span class="nom_scientifique_inline">'
    168                                                                 . $_taxon['nom_scientifique']
    169                                                                 . '</span>'
    170                                                                 . ' - '
    171                                                                 . _T('taxonomie:rang_' . $taxon['rang']);
    172                                                         if (strcasecmp($recherche, $_taxon['nom_scientifique']) === 0) {
    173                                                                 $valeurs['_taxon_defaut'] = $taxon['tsn'];
    174                                                         }
    175                                                 } else {
    176                                                         // Vérifier que ce rang est compatible avec une espèce ou un rang inférieur.
    177                                                         $valeurs['_taxons'][$taxon['tsn']] = $_taxon['nom_commun']
    178                                                                 . " [{$_taxon['langage']}]"
    179                                                                 . ' - '
    180                                                                 . _T('taxonomie:rang_' . $taxon['rang']);
    181                                                         if (strcasecmp($recherche, $_taxon['nom_commun']) === 0) {
    182                                                                 $valeurs['_taxon_defaut'] = $taxon['tsn'];
     158                        if ($taxons) {
     159                                if ($recherche_exacte) {
     160                                        // Si la correspondance est exacte, les informations de chaque taxon sont suffisantes pour limiter
     161                                        // d'emblée le nombre de taxon au seul qui correspond.
     162                                        $taxon_exact = array();
     163                                        foreach ($taxons as $_taxon) {
     164                                                if ((($type_recherche == 'scientificname') and (strcasecmp($_taxon['nom_scientifique'], $recherche) === 0))
     165                                                or (($type_recherche == 'commonname') and (strcasecmp($_taxon['nom_commun'], $recherche) === 0))) {
     166                                                        $taxon_exact = $_taxon;
     167                                                        break;
     168                                                }
     169                                        }
     170                                        $taxons = $taxon_exact ? array($taxon_exact) : array();
     171                                } elseif ($recherche_commence_par and ($type_recherche == 'scientificname')) {
     172                                        // Si la correspondance est 'commence par' et que l'on recherche par nom scientifique, les informations
     173                                        // de chaque taxon sont suffisantes pour limiter d'emblée le nombre de taxons à ceux qui commencent
     174                                        // par la recherche.
     175                                        foreach ($taxons as $_cle => $_taxon) {
     176                                                if (substr_compare($_taxon['nom_scientifique'], $recherche, 0, strlen($recherche), true) !== 0) {
     177                                                        unset($taxons[$_cle]);
     178                                                }
     179                                        }
     180                                }
     181
     182                                // Si le nombre de taxons récupérés est trop important on renvoie une erreur.
     183                                if (count($taxons) <= _TAXONOMIE_RECHERCHE_MAX_ESPECES) {
     184                                        // Construire le tableau des taxons trouvés en supprimant:
     185                                        // - les taxons qui n'appartiennent pas au règne concerné
     186                                        // - ou qui n'ont pas un rang compatible (uniquement pour la recherche par nom commun)
     187                                        // - ou qui ne sont pas des appellations valides
     188                                        // - ou qui sont déjà créés.
     189                                        $valeurs['_taxons'] = array();
     190                                        $valeurs['_taxon_defaut'] = 0;
     191                                        include_spip('inc/taxonomie');
     192                                        foreach ($taxons as $_taxon) {
     193                                                if (!sql_countsel('spip_taxons', array('tsn=' . intval($_taxon['tsn'])))) {
     194                                                        $taxon = itis_get_record($_taxon['tsn']);
     195                                                        if (($taxon['usage_valide'])
     196                                                        and (strcasecmp($taxon['regne'], $regne) === 0)
     197                                                        and (rang_est_espece($taxon['rang']))) {
     198                                                                if ($type_recherche == 'scientificname') {
     199                                                                        $valeurs['_taxons'][$taxon['tsn']] = '<span class="nom_scientifique_inline">'
     200                                                                                . $_taxon['nom_scientifique']
     201                                                                                . '</span>'
     202                                                                                . ' - '
     203                                                                                . _T('taxonomie:rang_' . $taxon['rang']);
     204                                                                        if (strcasecmp($recherche, $_taxon['nom_scientifique']) === 0) {
     205                                                                                $valeurs['_taxon_defaut'] = $taxon['tsn'];
     206                                                                        }
     207                                                                } else {
     208                                                                        // Vérifier que ce rang est compatible avec une espèce ou un rang inférieur.
     209                                                                        $valeurs['_taxons'][$taxon['tsn']] = $_taxon['nom_commun']
     210                                                                                . " [{$_taxon['langage']}]"
     211                                                                                . ' - '
     212                                                                                . _T('taxonomie:rang_' . $taxon['rang']);
     213                                                                        if (strcasecmp($recherche, $_taxon['nom_commun']) === 0) {
     214                                                                                $valeurs['_taxon_defaut'] = $taxon['tsn'];
     215                                                                        }
     216                                                                }
    183217                                                        }
    184218                                                }
    185219                                        }
    186                                 }
    187                         }
    188 
    189                         if ($valeurs['_taxons']) {
    190                                 // Si aucun taxon par défaut, on prend le premier taxon de la liste.
    191                                 if (!$valeurs['_taxon_defaut']) {
    192                                         reset($valeurs['_taxons']);
    193                                         $valeurs['_taxon_defaut'] = key($valeurs['_taxons']);
    194                                 }
    195                                 // On fournit ces informations au formulaire pour l'étape 2.
    196                                 foreach ($valeurs as $_champ => $_valeur) {
    197                                         set_request($_champ, $_valeur);
     220
     221                                        if ($valeurs['_taxons']) {
     222                                                // Si aucun taxon par défaut, on prend le premier taxon de la liste.
     223                                                if (!$valeurs['_taxon_defaut']) {
     224                                                        reset($valeurs['_taxons']);
     225                                                        $valeurs['_taxon_defaut'] = key($valeurs['_taxons']);
     226                                                }
     227                                                // On fournit ces informations au formulaire pour l'étape 2.
     228                                                foreach ($valeurs as $_champ => $_valeur) {
     229                                                        set_request($_champ, $_valeur);
     230                                                }
     231                                        } else {
     232                                                $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon');
     233                                        }
     234                                } else {
     235                                        $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_max_reponses', array('nb' => count($taxons)));
    198236                                }
    199237                        } else {
    200                                 $erreurs['message_erreur'] = _T('taxonomie:erreur_formulaire_creer_espece');
     238                                $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon');
    201239                        }
    202240                } else {
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r109691 r109763  
    1818
    1919        // E
     20        'erreur_recherche_max_reponses' => 'Le nombre de correspondances (@nb@) est trop important pour passer à l\'étape suivante. Veuillez affiner votre recherche.',
     21        'erreur_saisie_iucn_token' => 'Le service IUCN nécessite l\'utilisation d\'un token de 64 caractères. Veuillez vous en procurez un et l\'enregistrer ici.',
    2022        'erreur_vider_regne' => 'Erreur lors du vidage du règne @regne@ en base de données.',
    2123        'erreur_charger_regne' => 'Erreur lors du chargement du règne @regne@ en base de données.',
    2224        'erreur_wikipedia_page' => 'Aucune page dans la langue choisie n\'a pu être récupérée de Wikipedia.',
    2325        '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. Saisissez un second mot ou changez le type de correspondance.',
     26        'erreur_recherche_aucun_taxon_exact' => 'Le service ITIS ne trouve aucun taxon de rang espèce ou inférieur correspondant à cette recherche ou tous les taxons trouvés ont déjà été créés.',
    2427        'erreur_recherche_aucun_taxon' => 'Le service ITIS ne trouve aucun taxon de rang espèce ou inférieur correspondant à cette recherche ou tous les taxons trouvés ont déjà été créés.',
    2528        'erreur_formulaire_creer_espece' => 'Une erreur s\'est produite lors du processus de création. Veuillez relancer le formulaire et réessayer.',
    2629        'erreur_creation_taxon' => 'Une erreur s\'est produite lors de la création du taxon @taxon@ en base de données. Veuillez consulter la liste des taxons et relancer le formulaire si besoin.',
     30        'explication_iucn_token' => 'L\'utilisation du service IUCN nécessite de posséder un token. Vous pouvez en faire la demande à partir de la page <a href="http://apiv3.iucnredlist.org/api/v3/token">Generate a token</a>.',
    2731        'explication_taxon_trouve' => 'Chaque taxon est désigné par son nom, scientifique ou commun, et son rang.',
    2832        'explication_recherche_type' => 'Si vous le connaissez, le nom scientifique permet une recherche d\'emblée plus précise.',
     
    3236        'explication_action_regne' => 'Si le règne est déjà présent dans la base de données taxonomique, tous les taxons du règne au genre qui le composent seront supprimés avant le chargement.',
    3337        'explication_langues_regne' => 'Les taxons sont chargés par défaut avec leur nom scientifique. Cette option permet de compléter certains taxons avec leur nom commun dans la ou les langues précisées.',
     38        'explication_services_utilises' => 'Le plugin utilise par défaut le service taxonomique ITIS pour peupler les informations de bases des taxons. Il est aussi possible d\'utiliser des services complémentaires pour charger automatiquement des données non fournies par ITIS. Choisissez les services que vous souhaitez aussi utiliser.',
    3439        'explication_langues_utilisees' => 'Le plugin supporte quelques langues comme le français, l\'anglais et l\'espagnol. Cela permet de charger voire de saisir manuellement les noms communs et descriptifs dans ces langues.
    3540        Néanmoins, en fonction de votre besoin vous pouvez limiter l\'utilisation de ces langues mais une langue est au moins requise.',
     
    6974        'info_regne_compteur_traductions' => '@nb@ noms communs en [@langue@]',
    7075        'info_espece_recherche_intro' => 'Vous avez choisi de rechercher une espèce :',
     76        'info_espece_recherche_scientificname_debut' => 'dont le nom scientifique commence par «&nbsp;@recherche@&nbsp;»',
    7177        'info_espece_recherche_scientificname_exact' => 'dont le nom scientifique est exactement «&nbsp;@recherche@&nbsp;»',
    7278        'info_espece_recherche_scientificname_contenu' => 'dont le nom scientifique contient «&nbsp;@recherche@&nbsp;»',
     
    8793        'label_colonne_actualisation' => 'Actualisé le',
    8894        'label_colonne_statistiques' => 'Statistiques',
     95        'label_iucn_token' => 'Token personnel d\'accès au service IUCN',
     96        'label_service_iucn' => 'IUCN, Red List (espèces en danger)',
     97        'label_service_wikipedia' => 'WIKIPEDIA (articles sur les taxons)',
     98        'label_service_itis' => 'ITIS (base officielle des taxons)',
    8999        'label_regne' => 'Règne sur lequel appliquer l\'action',
    90100        'label_langue_descriptif' => 'Langue du descriptif',
    91101        'label_langues_regne' => 'Langues des noms communs',
    92102        'label_langues_utilisees' => 'Langues à utiliser',
     103        'label_services_utilises' => 'Services taxonomiques à utiliser',
    93104        'label_taxon_trouve' => 'Taxons correspondant à la recherche',
    94105        'label_wikipedia_alternative_defaut' => 'Utiliser le descriptif proposé par défaut',
     
    162173
    163174        // T
    164         'texte_statut_prop' => 'proposé à la publication',
     175        'texte_statut_prop' => 'pour publication',
    165176        'texte_statut_publie' => 'publié',
    166177        'texte_statut_poubelle' => 'à la poubelle',
  • _plugins_/taxonomie/trunk/prive/squelettes/inclure/inc-taxonomie-raccourci.html

    r109602 r109763  
    11#SET{open,#BOITE_OUVRIR{'',raccourcis}}
     2[(#VAL{wikipedia}|in_array{#CONFIG{taxonomie/services_utilises}}|oui)
    23[(#GET{open}|unique)]
    3 [(#URL_ECRIRE{taxon_decrire}
    4         |parametre_url{id_taxon, #ID_TAXON}
    5         |parametre_url{element, descriptif}
    6         |icone_horizontale{<:taxonomie:bouton_wikipedia_descriptif:>, wikipedia-24})]
    7 [(#URL_ECRIRE{taxon_decrire}
    8         |parametre_url{id_taxon, #ID_TAXON}
    9         |parametre_url{element, texte}
    10         |icone_horizontale{<:taxonomie:bouton_wikipedia_texte:>, wikipedia-24})]
     4        [(#URL_ECRIRE{taxon_decrire}
     5                |parametre_url{id_taxon, #ID_TAXON}
     6                |parametre_url{element, descriptif}
     7                |icone_horizontale{<:taxonomie:bouton_wikipedia_descriptif:>, wikipedia-24})]
     8        [(#URL_ECRIRE{taxon_decrire}
     9                |parametre_url{id_taxon, #ID_TAXON}
     10                |parametre_url{element, texte}
     11                |icone_horizontale{<:taxonomie:bouton_wikipedia_texte:>, wikipedia-24})]
     12]
     13[(#ESPECE|=={oui}|et{#VAL{iucn}|in_array{#CONFIG{taxonomie/services_utilises}}}|oui)
     14[(#GET{open}|unique)]
     15]
    1116[(#GET{open}|unique|?{'',#BOITE_FERMER})]
  • _plugins_/taxonomie/trunk/prive/squelettes/navigation/taxon.html

    r109679 r109763  
    99
    1010<INCLURE{fond=prive/squelettes/inclure/inc-taxonomie-raccourci,
     11        espece,
    1112    env}>
    1213
  • _plugins_/taxonomie/trunk/taxonomie_administrations.php

    r109602 r109763  
    7272 */
    7373function configurer_taxonomie() {
     74
    7475        $config = array(
    7576                'langues_utilisees' => array('fr'),
     77                'services'          => array('wikipedia'),
     78                'iucn_token'        => ''
    7679        );
    7780
Note: See TracChangeset for help on using the changeset viewer.