Changeset 92833 in spip-zone


Ignore:
Timestamp:
Nov 11, 2015, 11:57:18 AM (4 years ago)
Author:
eric@…
Message:

Mise au point de l'interface d'ITIS et de sa gestion des langues.

Location:
_plugins_/taxonomie/trunk
Files:
5 edited
2 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r92818 r92833  
    1313        // C
    1414        'cfg_titre_parametrages' => 'Configuration du plugin Taxonomie',
    15         'citation_itis' => 'Informations taxonomiques fournies par la base de données Integrated Taxonomic Information System, @url_site@. Voir aussi la page ITIS du taxon @url_taxon@.',
    16         'citation_cinfo' => 'Commission internationale des noms français des oiseaux (CINFO), @url@.',
    17         'citation_wikipedia' => 'Le descriptif est inspiré de Wikipedia, @url@.',
     15        'credit_itis' => 'Informations taxonomiques fournies par la base de données Integrated Taxonomic Information System, @url_site@. Voir aussi la page ITIS du taxon @url_taxon@.',
     16        'credit_cinfo' => 'Commission internationale des noms français des oiseaux (CINFO), @url@.',
     17        'credit_wikipedia' => 'Le descriptif est inspiré de Wikipedia, @url@.',
    1818
    1919        // D
  • _plugins_/taxonomie/trunk/prive/objets/contenu/taxon.html

    r92818 r92833  
    3333<//B_ascendance>
    3434
    35 [(#SET{sources, [(#ID_TAXON|taxonomie_informer_sources{#SOURCES})]})]
     35[(#SET{sources, [(#ID_TAXON|taxonomie_crediter{#SOURCES})]})]
    3636<B_sources>
    3737<div class="champ contenu_ps">
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r92818 r92833  
    88if (!defined("_ECRIRE_INC_VERSION")) return;
    99
    10 if (!defined('_TAXONOMIE_ITIS_URL_BASE_REQUETE'))
     10if (!defined('_TAXONOMIE_ITIS_ENDPOINT_BASE_URL'))
    1111        /**
    1212         * Préfixe des URL du service web de ITIS.
    1313         * Le service fournit des données au format XML ou JSON
    1414         */
    15         define('_TAXONOMIE_ITIS_URL_BASE_REQUETE', 'http://www.itis.gov/ITISWebService/');
    16 
    17 if (!defined('_TAXONOMIE_ITIS_URL_BASE_TAXON'))
     15        define('_TAXONOMIE_ITIS_ENDPOINT_BASE_URL', 'http://www.itis.gov/ITISWebService/');
     16
     17if (!defined('_TAXONOMIE_ITIS_TAXON_BASE_URL'))
    1818        /**
    1919         * URL à fournir dans la citation du service ITIS.
    2020         */
    21         define('_TAXONOMIE_ITIS_URL_BASE_TAXON', 'http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=');
    22 
    23 if (!defined('_TAXONOMIE_ITIS_URL_SITE'))
     21        define('_TAXONOMIE_ITIS_TAXON_BASE_URL', 'http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=');
     22
     23if (!defined('_TAXONOMIE_ITIS_SITE_URL'))
    2424        /**
    2525         * URL à fournir dans la citation du service ITIS.
    2626         */
    27         define('_TAXONOMIE_ITIS_URL_SITE', 'http://www.itis.gov');
    28 
    29 if (!defined('_TAXONOMIE_ITIS_LANGUE_DEFAUT'))
    30         /**
    31          * Langue par défaut pour les api utilisant des noms communs
    32          */
    33         define('_TAXONOMIE_ITIS_LANGUE_DEFAUT', 'en');
     27        define('_TAXONOMIE_ITIS_SITE_URL', 'http://www.itis.gov');
    3428
    3529if (!defined('_TAXONOMIE_ITIS_REGEXP_RANKNAME'))
     
    4640 */
    4741$GLOBALS['itis_language'] = array(
    48         'fr' => 'french',
    49         'en' => 'english',
     42        'french' => 'fr',
     43        'english' => 'en',
     44        'spanish' => 'es'
    5045);
    5146$GLOBALS['itis_webservice'] = array(
     
    150145);
    151146
     147// -----------------------------------------------------------------------
     148// ------------ API du web service ITIS - Actions principales ------------
     149// -----------------------------------------------------------------------
    152150
    153151/**
     
    163161 *
    164162 * @return int
    165  *              Identifiant unique (tsn) dans la base ITIS ou 0 si la recherche échoue
     163 *              Identifiant unique tsn dans la base ITIS ou 0 si la recherche échoue
    166164 */
    167165function itis_search_tsn($api, $recherche) {
     
    297295 *      - 'rankname' : le rang taxonomique du taxon
    298296 *      - 'author' : le ou les auteurs du taxon
    299  *              - 'coremetadata' : les métadonnées (???)
     297 *      - 'coremetadata' : les métadonnées (à vérifier)
    300298 *              - 'experts' : les experts du taxon
    301299 *              - 'commonnames' : le ou les noms communs
    302300 *              - 'othersources' : les sources d'information sur le taxon
    303301 *              - 'hierarchyfull' : la hiérarchie complète jusqu'au taxon
    304  *              - 'hierarchydown' : la hiérarchie ???
     302 *              - 'hierarchydown' : la hiérarchie (à vérifier)
    305303 * @param int           $tsn
    306304 *              Identifiant unique du taxon dans la base ITIS (tsn)
     
    344342 * @api
    345343 *
    346  * @param $language_code
     344 * @param $language
    347345 *
    348346 *
     
    350348 *      Liste des langues vernaculaires exprimées en anglais.
    351349 */
    352 function itis_list_vernaculars($language_code) {
    353         global $itis_webservice;
     350function itis_list_vernaculars($language) {
     351        global $itis_webservice, $itis_language;
    354352        $vernaculars =array();
    355353
    356354        // Construire l'URL de l'api sollicitée
    357         $url = itis_api2url('xml', 'vernacular', 'vernacularlanguage', itis_code2language($language_code));
     355        $url = itis_api2url('xml', 'vernacular', 'vernacularlanguage', $language);
    358356
    359357        // Acquisition des données spécifiées par l'url
     
    370368        if (spip_xml_match_nodes(",^{$api['list']},", $arbre, $matches) > 0) {
    371369                $names = reset($matches);
    372                 $tag_language = '[' . $language_code . ']';
     370                $tag_language = '[' . $itis_language[$language] . ']';
    373371                foreach ($names as $_name) {
    374372                        $vernaculars[$_name['tsn'][0]] .= $tag_language . $_name[$api['index']][0];
     
    379377}
    380378
     379
     380// -----------------------------------------------------------------------------------------------
     381// ------------ API du web service ITIS - Fonctions de lecture des fichiers de taxons ------------
     382// -----------------------------------------------------------------------------------------------
    381383
    382384/**
     
    423425                        $lines = file($file);
    424426                        if ($lines) {
    425                                 $tsn = 0;
    426427                                $groups = array();
    427428                                for ($i=1;$i<=array_search($upto, $group_ids);$i++) {
     
    481482 * de tous ces noms indexés par leur TSN.
    482483 *
    483  * @param string        $language_code
     484 * @api
     485 *
     486 * @param string        $language
    484487 * @param int           $sha_file
    485488 *
    486489 * @return array
    487490 */
    488 function itis_read_vernaculars($language_code, &$sha_file) {
     491function itis_read_vernaculars($language, &$sha_file) {
     492        global $itis_language;
    489493        $vernaculars =array();
    490494        $sha_file = false;
    491495
    492496        // Ouvrir le fichier de nom communs correspondant au code de langue spécifié
    493         $file = find_in_path("services/itis/vernaculars_${language_code}.csv");
     497        $file = find_in_path("services/itis/vernaculars_${language}.csv");
    494498        if (file_exists($file)
    495499        AND ($sha_file = sha1_file($file))) {
     
    500504                if ($lines) {
    501505                        // Créer le tableau de sortie à partir du tableau issu du csv (tsn, nom commun)
    502                         $tag_language = '[' . $language_code . ']';
     506                        $tag_language = '[' . $itis_language[$language] . ']';
    503507                        foreach ($lines as $_line) {
    504508                                $name = explode(',', trim($_line));
     
    511515}
    512516
    513 /**
    514  * @param $id_taxon
     517
     518// ---------------------------------------------------------------------
     519// ------------ API du web service ITIS - Fonctions annexes ------------
     520// ---------------------------------------------------------------------
     521
     522/**
     523 * Renvoie la langue telle que le service ITIS la désigne à partir du code de langue
     524 * de SPIP.
     525 *
     526 * @api
     527 *
     528 * @param string    $language_code
     529 *      Code de langue de SPIP. La variable globale $itis_language définit le transcodage langue ITIS
     530 *      vers code SPIP.
     531 *
    515532 * @return string
    516  */
    517 function itis_citation($id_taxon) {
     533 *      Langue au sens d'ITIS ou chaine vide sinon.
     534 */
     535function itis_spipcode2language($language_code) {
     536        global $itis_language;
     537
     538        if (!$language = array_search($language_code,  $itis_language)) {
     539                $language = '';
     540        }
     541
     542        return $language;
     543}
     544
     545
     546/**
     547 * Construit la phrase de crédits précisant que les données fournies proviennent de la base de données
     548 * d'ITIS.
     549 *
     550 * @api
     551 *
     552 * @param int   $id_taxon
     553 *      Id du taxon nécessaire pour construire l'url de la page ITIS fournissant une information complète sur
     554 *      le taxon.
     555 *
     556 * @return string
     557 *      Phrase de crédit.
     558 */
     559function itis_credit($id_taxon) {
    518560        // On recherche le tsn du taxon afin de construire l'url vers sa page sur ITIS
    519561        $taxon = sql_fetsel('tsn, nom_scientifique', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
    520562
    521563        // On crée l'url du taxon sur le site ITIS
    522         $url_taxon = _TAXONOMIE_ITIS_URL_BASE_TAXON . $taxon['tsn'];
     564        $url_taxon = _TAXONOMIE_ITIS_TAXON_BASE_URL . $taxon['tsn'];
    523565        $link_taxon = '<a href="' . $url_taxon . '" rel="noreferrer"><em>' . ucfirst($taxon['nom_scientifique']) . '</em></a>';
    524         $link_site = '<a href="' . _TAXONOMIE_ITIS_URL_SITE . '" rel="noreferrer">' . _TAXONOMIE_ITIS_URL_SITE . '</a>';
     566        $link_site = '<a href="' . _TAXONOMIE_ITIS_SITE_URL . '" rel="noreferrer">' . _TAXONOMIE_ITIS_SITE_URL . '</a>';
    525567
    526568        // On établit la citation
    527         $citation = _T('taxonomie:citation_itis', array('url_site' => $link_site, 'url_taxon' => $link_taxon));
    528 
    529         return $citation;
    530 }
    531 
    532 
    533 /**
     569        $credit = _T('taxonomie:credit_itis', array('url_site' => $link_site, 'url_taxon' => $link_taxon));
     570
     571        return $credit;
     572}
     573
     574
     575/**
     576 * Calcule le sha de chaque fichier ITIS fournissant des données, à savoir, ceux des règnes et ceux des noms
     577 * communs par langue.
     578 *
     579 * @api
     580 *
    534581 * @return array
     582 *      Tableau à deux index principaux:
     583 *      - 'taxons'      : tableau associatif indexé par règne
     584 *      - 'traductions' : tableau associatif par code de langue SPIP
    535585 */
    536586function itis_review_sha() {
     
    549599        }
    550600
    551         foreach (array_keys($itis_language) as $_language_code) {
    552                 $file = find_in_path("services/itis/vernaculars_${_language_code}.csv");
     601        foreach (array_keys($itis_language) as $_language) {
     602                $file = find_in_path("services/itis/vernaculars_${_language}.csv");
    553603                if (file_exists($file)
    554604                AND ($sha_file = sha1_file($file))) {
    555                         $shas['traductions'][$_language_code] = $sha_file;
     605                        $shas['traductions'][$itis_language[$_language]] = $sha_file;
    556606                }
    557607        }
     
    560610}
    561611
     612
     613// ----------------------------------------------------------------
     614// ------------ Fonctions internes utilisées par l'API ------------
     615// ----------------------------------------------------------------
    562616
    563617/**
     
    573627
    574628        // Construire l'URL de l'api sollicitée
    575         $url = _TAXONOMIE_ITIS_URL_BASE_REQUETE
     629        $url = _TAXONOMIE_ITIS_ENDPOINT_BASE_URL
    576630                 . ($format=='json' ? 'jsonservice/' : 'services/ITISService/')
    577631                 . $itis_webservice[$area][$api]['function'] . '?'
     
    580634        return $url;
    581635}
    582 
    583 /**
    584  * @param $language_code
    585  *
    586  * @return string
    587  */
    588 function itis_code2language($language_code) {
    589         global $itis_language;
    590 
    591         $language = $itis_language[_TAXONOMIE_ITIS_LANGUE_DEFAUT];
    592         if (array_key_exists($language_code,  $itis_language)) {
    593                 $language = $itis_language[$language_code];
    594         }
    595 
    596         return $language;
    597 }
    598636?>
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r92772 r92833  
    88if (!defined("_ECRIRE_INC_VERSION")) return;
    99
    10 if (!defined('_TAXONOMIE_WIKIPEDIA_URL_BASE_REQUETE'))
     10if (!defined('_TAXONOMIE_WIKIPEDIA_ENDPOINT_BASE_URL'))
    1111        /**
    1212         * Préfixe des URL du service web de WIKIPEDIA.
    1313         * Le service fournit des données au format XML ou JSON
    1414         */
    15         define('_TAXONOMIE_WIKIPEDIA_URL_BASE_REQUETE', 'http://%langue%.wikipedia.org/w/api.php?');
     15        define('_TAXONOMIE_WIKIPEDIA_ENDPOINT_BASE_URL', 'http://%langue%.wikipedia.org/w/api.php?');
    1616if (!defined('_TAXONOMIE_WIKIPEDIA_URL_CITATION'))
    1717        /**
     
    7272 * @return string
    7373 */
    74 function wikipedia_citation($id_taxon) {
     74function wikipedia_credit($id_taxon) {
    7575        // On recherche le tsn du taxon afin de construire l'url vers sa page sur ITIS
    7676        $taxon = sql_fetsel('tsn, nom_scientifique', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
     
    9898
    9999        // Construire l'URL de l'api sollicitée
    100         $url = str_replace('%langue%', $langue, _TAXONOMIE_WIKIPEDIA_URL_BASE_REQUETE)
     100        $url = str_replace('%langue%', $langue, _TAXONOMIE_WIKIPEDIA_ENDPOINT_BASE_URL)
    101101                . 'action=' . $action
    102102                . '&meta=siteinfo|wikibase'
  • _plugins_/taxonomie/trunk/taxonomie_fonctions.php

    r92772 r92833  
    2222 *              Rang taxonomique minimal jusqu'où charger le règne. Ce rang est fourni en anglais, en minuscules et
    2323 *              correspond à : phylum, class, order, family, genus.
    24  * @param array         $langues
    25  *              Tableau des codes (au sens SPIP) des langues à charger pour les noms communs des taxons. Le français
    26  *      par défaut.
    27  *
    28  * @return bool|string
     24 * @param array         $codes_langue
     25 *              Tableau des codes (au sens SPIP) des langues à charger pour les noms communs des taxons.
     26 *
     27 * @return bool
    2928 *              Retour true/false
    3029 */
    31 function taxonomie_charger_regne($regne, $rang, $langues=array('fr')) {
     30function taxonomie_charger_regne($regne, $rang, $codes_langue=array()) {
    3231        $retour = false;
    3332        $taxons_edites = array();
     
    5251                $meta_regne['compteur'] = count($taxons);
    5352        $traductions = array();
    54                 foreach ($langues as $_cle => $_langue) {
    55                         $noms = itis_read_vernaculars($_langue, $sha_langue);
    56                         if ($noms) {
    57                                 $meta_regne['traductions']['itis'][$_langue]['sha'] = $sha_langue;
    58                                 $nb_traductions = 0;
    59                                 foreach ($noms as $_tsn => $_nom) {
    60                                         if (array_key_exists($_tsn, $taxons)) {
    61                         // On ajoute les traductions qui sont de la forme [xx]texte
    62                         // On sauvegarde le tsn concerné afin de clore les traductions
    63                         // avec les balises multi et d'optimiser ainsi les traitements
    64                         // sachant qu'il y a très peu de traductions comparées aux taxons
    65                                                 $taxons[$_tsn]['nom_commun'] .= $_nom;
    66                                                 $nb_traductions += 1;
    67                         $traductions[$_tsn] = $_tsn;
     53                foreach ($codes_langue as $_code_langue) {
     54                        $langue = itis_spipcode2language($_code_langue);
     55                        if ($langue) {
     56                                $noms = itis_read_vernaculars($langue, $sha_langue);
     57                                if ($noms) {
     58                                        $meta_regne['traductions']['itis'][$_code_langue]['sha'] = $sha_langue;
     59                                        $nb_traductions = 0;
     60                                        foreach ($noms as $_tsn => $_nom) {
     61                                                if (array_key_exists($_tsn, $taxons)) {
     62                                // On ajoute les traductions qui sont de la forme [xx]texte
     63                                // On sauvegarde le tsn concerné afin de clore les traductions
     64                                // avec les balises multi et d'optimiser ainsi les traitements
     65                                // sachant qu'il y a très peu de traductions comparées aux taxons
     66                                                        $taxons[$_tsn]['nom_commun'] .= $_nom;
     67                                                        $nb_traductions += 1;
     68                                $traductions[$_tsn] = $_tsn;
     69                                                }
    6870                                        }
     71                                        $meta_regne['traductions']['itis'][$_code_langue]['compteur'] = $nb_traductions;
    6972                                }
    70                                 $meta_regne['traductions']['itis'][$_langue]['compteur'] = $nb_traductions;
    7173                        }
    7274                }
     
    261263 * @return array
    262264 */
    263 function taxonomie_informer_sources($id_taxon, $sources_specifiques=null) {
     265function taxonomie_crediter($id_taxon, $sources_specifiques=null) {
    264266        $sources = array();
    265267
     
    279281        foreach ($liste_sources as $_source => $_champs) {
    280282                include_spip("services/${_source}/${_source}_api");
    281                 if (function_exists($citer = "${_source}_citation")) {
     283                if (function_exists($citer = "${_source}_credit")) {
    282284                        $sources[$_source] = array(
    283285                                'texte' => $citer($id_taxon),
Note: See TracChangeset for help on using the changeset viewer.