Changeset 113790 in spip-zone


Ignore:
Timestamp:
Feb 7, 2019, 12:30:49 PM (10 days ago)
Author:
eric@…
Message:

Ajouter quelques vérifications.

File:
1 edited

Legend:

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

    r110602 r113790  
    1919 * Chargement des données :
    2020 *
     21 * @uses regne_lister()
    2122 * @uses regne_existe()
    2223 *
     
    2526 *      - `type_recherche`         : (saisie) type de la recherche par nom scientifique (`scientificname`)
    2627 *                                   ou nom commun (`commonname`).
     28 *              - `correspondance`         : (saisie) indique si on doit rechercher le texte exact ou pas.
    2729 *              - `recherche`              : (saisie) texte de la recherche.
    28  *              - `correspondance`         : (saisie) indique si on doit rechercher le texte exact ou pas.
    2930 *              - `regne`                  : (saisie) règne d'appartenance de l'espèce pour limiter le scope de recherche.
    3031 *              - `_types_recherche`       : (affichage) recherche par nom scientifique ou par nom commun.
     
    9899 *
    99100 * @uses itis_search_tsn()
    100  * @uses itis_get_information()
    101101 * @uses itis_get_record()
    102102 *
     
    121121                $recherche_commence_par = ($correspondance == 'debut');
    122122
    123                 // Si la recherche est de type nom common on ne peut rien vérifier sur le texte.
     123                // Si la recherche est de type nom commun on ne peut rien vérifier sur le texte.
    124124                // Si la recherche est de type nom scientifique, on vérifie que le texte de recherche :
    125125                // - contient au moins deux mots
     
    180180                                }
    181181
    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_taxon']))) {
    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_taxon']);
    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_taxon']);
    213                                                                         if (strcasecmp($recherche, $_taxon['nom_commun']) === 0) {
    214                                                                                 $valeurs['_taxon_defaut'] = $taxon['tsn'];
     182                                // Etant donné qu'on a filtré le tableau issu de l'appel au service ITIS on vérifie à nouveau que
     183                                // ce tableau n'est pas vide.
     184                                if ($taxons) {
     185                                        // Si le nombre de taxons récupérés est trop important on renvoie une erreur.
     186                                        // TODO : est-on sur qu'il y a forcément un taxon ?
     187                                        if (count($taxons) <= _TAXONOMIE_RECHERCHE_MAX_ESPECES) {
     188                                                // Construire le tableau des taxons trouvés en supprimant:
     189                                                // - les taxons qui n'appartiennent pas au règne concerné
     190                                                // - ou qui n'ont pas un rang compatible (uniquement pour la recherche par nom commun)
     191                                                // - ou qui ne sont pas des appellations valides
     192                                                // - ou qui sont déjà créés.
     193                                                $valeurs['_taxons'] = array();
     194                                                $valeurs['_taxon_defaut'] = 0;
     195                                                include_spip('inc/taxonomie');
     196                                                foreach ($taxons as $_taxon) {
     197                                                        if (!sql_countsel('spip_taxons', array('tsn=' . intval($_taxon['tsn'])))) {
     198                                                                $taxon = itis_get_record($_taxon['tsn']);
     199                                                                if (($taxon['usage_valide'])
     200                                                                and (strcasecmp($taxon['regne'], $regne) === 0)
     201                                                                and (rang_est_espece($taxon['rang_taxon']))) {
     202                                                                        if ($type_recherche == 'scientificname') {
     203                                                                                $valeurs['_taxons'][$taxon['tsn']] = '<span class="nom_scientifique_inline">'
     204                                                                                        . $_taxon['nom_scientifique']
     205                                                                                        . '</span>'
     206                                                                                        . ' - '
     207                                                                                        . _T('taxonomie:rang_' . $taxon['rang_taxon']);
     208                                                                                if (strcasecmp($recherche, $_taxon['nom_scientifique']) === 0) {
     209                                                                                        $valeurs['_taxon_defaut'] = $taxon['tsn'];
     210                                                                                }
     211                                                                        } else {
     212                                                                                // Vérifier que ce rang est compatible avec une espèce ou un rang inférieur.
     213                                                                                $valeurs['_taxons'][$taxon['tsn']] = $_taxon['nom_commun']
     214                                                                                        . " [{$_taxon['langage']}]"
     215                                                                                        . ' - '
     216                                                                                        . _T('taxonomie:rang_' . $taxon['rang_taxon']);
     217                                                                                if (strcasecmp($recherche, $_taxon['nom_commun']) === 0) {
     218                                                                                        $valeurs['_taxon_defaut'] = $taxon['tsn'];
     219                                                                                }
    215220                                                                        }
    216221                                                                }
    217222                                                        }
    218223                                                }
    219                                         }
    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);
     224
     225                                                if ($valeurs['_taxons']) {
     226                                                        // Si aucun taxon par défaut, on prend le premier taxon de la liste.
     227                                                        if (!$valeurs['_taxon_defaut']) {
     228                                                                reset($valeurs['_taxons']);
     229                                                                $valeurs['_taxon_defaut'] = key($valeurs['_taxons']);
     230                                                        }
     231                                                        // On fournit ces informations au formulaire pour l'étape 2.
     232                                                        foreach ($valeurs as $_champ => $_valeur) {
     233                                                                set_request($_champ, $_valeur);
     234                                                        }
     235                                                } else {
     236                                                        $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon');
    230237                                                }
    231238                                        } else {
    232                                                 $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon');
     239                                                $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_max_reponses', array('nb' => count($taxons)));
    233240                                        }
    234241                                } else {
    235                                         $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_max_reponses', array('nb' => count($taxons)));
     242                                        $erreurs['message_erreur'] = _T('taxonomie:erreur_recherche_aucun_taxon');
    236243                                }
    237244                        } else {
     
    255262 *
    256263 * @uses itis_get_record()
     264 * @uses itis_get_information()
     265 * @uses rang_est_espece()
    257266 *
    258267 * @return array
     
    294303                // On classe la liste des ascendants du plus proche au plus éloigné.
    295304                include_spip('inc/taxonomie');
     305                $parents = array();
    296306                krsort($ascendants);
    297307                foreach ($ascendants as $_ascendant) {
     
    300310                        // On détermine si l'ascendant est un taxon d'espèce ou inférieur,
    301311                        // ou si c'est un taxon de rang supérieur à l'espèce.
    302                         $parent['est_espece'] = rang_est_espece($_ascendant['rang_taxon']) ? true : false;
     312                        $parent['est_espece'] = rang_est_espece($_ascendant['rang_taxon']);
    303313                        // On indique si le parent existe déjà ou pas en base
    304314                        $parent['deja_cree'] = false;
     
    327337 * et le formulaire renvoie sur la page d'édition du taxon.
    328338 *
    329  * @uses wikipedia_get_page()
    330  * @uses convertisseur_texte_spip()
    331  * @uses taxon_merger_traductions()
     339 * @uses itis_get_record()
    332340 *
    333341 * @return array
Note: See TracChangeset for help on using the changeset viewer.