Changeset 92858 in spip-zone


Ignore:
Timestamp:
Nov 12, 2015, 3:40:56 PM (4 years ago)
Author:
eric@…
Message:

Mise au point des caches de wikipedia.
Mise au point de l'affichage d'un taxon.
Passage de l'action list_vernaculars en json (à suivre pour d'autres).

Location:
_plugins_/taxonomie/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/action/inserer_wikipedia.php

    r92841 r92858  
    3737        if ($arguments) {
    3838                // Détermination des arguments de l'action
    39                 list($id_taxon, $nom_scientifique, $code_langue, $champ, $section) = explode(':', $arguments);
     39                list($id_taxon, $nom_scientifique, $spip_langue, $champ, $section) = explode(':', $arguments);
    4040                $section = ($section == '*') ? null : $section;
    4141                if (intval($id_taxon)) {
    4242                        // Récupération des informations tsn, source et edite du taxon
    43                         $taxon = sql_fetsel('tsn, sources, edite', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
     43                        $taxon = sql_fetsel(array('tsn', 'sources', 'edite', $champ), 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
    4444
    4545                        // Appel du service query de Wikipedia
    46                         include_spip('inc/services/wikipedia_api');
    47                         $langue = wikipedia_spipcode2language($code_langue); // TODO : attention à gérer la langue en amont
    48                         $texte = wikipedia_get($taxon['tsn'], $nom_scientifique, $langue, $section);
    49                         if ($texte) {
     46                        include_spip('services/wikipedia/wikipedia_api');
     47                        $langue = wikipedia_spipcode2language($spip_langue); // TODO : attention à gérer la langue en amont
     48                        $information = wikipedia_get($taxon['tsn'], $nom_scientifique, $langue, $section);
     49                        if ($information['texte']) {
    5050                                // Conversion du texte mediawiki vers SPIP
    5151                                include_spip('convertisseur_fonctions');
    52                                 $texte_converti = convertisseur_texte_spip($texte, 'MediaWiki_SPIP');
     52                                $texte_converti = '<multi>'
     53                                        . '[' . $spip_langue .']'
     54                                        . convertisseur_texte_spip($information['texte'], 'MediaWiki_SPIP')
     55                                        . '</multi>';
    5356
    5457                                // Mise à jour pour le taxon du descriptif et des champs connexes en base de données
    5558                                $maj = array();
    5659                                // - le texte du descriptif est inséré dans la langue choisie
    57                                 $maj[$champ] = $texte_converti;
     60                                include_spip('inc/taxonomer');
     61                                $maj[$champ] = merger_multi($taxon[$champ], $texte_converti, true);
    5862                                // - l'indicateur d'édition est positionné à oui
    5963                                if ($taxon['edite']) {
     
    6165                                }
    6266                                // - la source wikipédia est ajoutée
    63                                 $maj['sources'] = array('wikipedia' => array('champs' => $champ));
     67                                $maj['sources'] = array('wikipedia' => array('champs' => array($champ)));
    6468                                if ($sources = unserialize($taxon['sources'])) {
    6569                                        $maj['sources'] = array_merge($maj['sources'], $sources);
  • _plugins_/taxonomie/trunk/demo/taxonomie.html

    r92841 r92858  
    3535    <h2>Action : list_vernaculars</h2>
    3636<?php
    37     $tsns = itis_list_vernaculars('es');
    38     var_dump($tsns);
     37    $tsns = itis_list_vernaculars('spanish');
     38    var_dump(count($tsns), $tsns);
     39    $tsns = itis_list_vernaculars('french');
     40    var_dump(count($tsns), $tsns);
     41    $tsns = itis_list_vernaculars('english');
     42    var_dump(count($tsns), $tsns);
    3943?>
    4044
  • _plugins_/taxonomie/trunk/formulaires/editer_taxon.html

    r86103 r92858  
    1313
    1414                        [(#SAISIE{textarea, descriptif,
    15                                 label=<:taxon:champ_descriptif_label:>})]
     15                                label=<:taxon:champ_descriptif_label:>,
     16                class=inserer_barre_edition})]
    1617                </ul>
    1718                [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
  • _plugins_/taxonomie/trunk/inc/taxonomer.php

    r92840 r92858  
    148148
    149149        // On extrait les noms par langue
    150         if (preg_match(_EXTRAIRE_MULTI, $nom_source, $match))
     150        if (preg_match(_EXTRAIRE_MULTI, $nom_source, $match)) {
    151151                $source = extraire_trads($match[1]);
    152         if (preg_match(_EXTRAIRE_MULTI, $nom_destination, $match))
     152        }
     153        if (preg_match(_EXTRAIRE_MULTI, $nom_destination, $match)) {
    153154                $destination = extraire_trads($match[1]);
     155        }
    154156
    155157        // On complète la destination avec les noms de la source dont la langue n'est pas
     
    168170
    169171        return $nom_merge;
     172}
     173
     174function traduire_champ_taxon($champ) {
     175        $traduction = '';
     176        if ($champ) {
     177                $traduction = _T("taxon:champ_${champ}_label");
     178        }
     179        return $traduction;
    170180}
    171181
     
    187197function ecrire_cache_taxonomie($cache, $service, $tsn, $code_langue='', $action='') {
    188198        // Création du dossier cache si besoin
    189         sous_repertoire(_DIR_VAR, trim(_TAXONOMIE_CACHE_DIR, '/'));
     199        sous_repertoire(_DIR_VAR, trim(_TAXONOMIE_CACHE_NOMDIR, '/'));
    190200
    191201        // Ecriture du fichier cache
     
    210220                . ($action ? '_' . $action : '')
    211221                . '_' . $tsn
    212                 . ($code_langue ? '_' . $code_langue : '');
     222                . ($code_langue ? '_' . $code_langue : '')
     223                . '.txt';
    213224
    214225        return $fichier_cache;
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r92841 r92858  
    1313        // C
    1414        'cfg_titre_parametrages' => 'Configuration du plugin Taxonomie',
    15         'credit_itis' => 'Informations taxonomiques fournies par la base de données Integrated Taxonomic Information System, @url_site@. Voir aussi la page du taxon @url_taxon@.',
     15        'credit_itis' => 'Integrated Taxonomic Information System, @url_site@ (informations taxonomiques de base). Voir aussi la page du taxon @url_taxon@.',
    1616        'credit_cinfo' => 'Commission internationale des noms français des oiseaux (CINFO), @url@.',
    17         'credit_wikipedia' => 'Le descriptif est inspiré de Wikipedia. Voir aussi la page du taxon @url_taxon@.',
     17        'credit_wikipedia' => 'Wikipedia (@champs@). Voir aussi la page du taxon @url_taxon@.',
    1818
    1919        // D
  • _plugins_/taxonomie/trunk/prive/squelettes/inclure/inc-taxonomie-services.html

    r92841 r92858  
    22[(#PLUGIN{CONVERTISSEUR}|oui)
    33    [(#GET{open}|unique)]
    4     [(#URL_ACTION_AUTEUR{inserer_wikipedia,#ID_TAXON:#LANG:#NOM_SCIENTIFIQUE:descriptif,#URL_ECRIRE{taxon_edit, id_taxon=#ID_TAXON}}
     4    [(#URL_ACTION_AUTEUR{inserer_wikipedia,#ID_TAXON:#NOM:#LANG:descriptif,#URL_ECRIRE{taxon_edit, id_taxon=#ID_TAXON}}
    55        |icone_horizontale{<:taxonomie:action_wikipedia_descriptif:>,wikipedia-24})]
    66]
  • _plugins_/taxonomie/trunk/prive/style_prive_plugin_taxonomie.html

    r87316 r92858  
    3838}
    3939/* Décaler chaque rang taxonomique de l'ascendance */
     40.taxon .fiche_objet #wysiwyg .contenu_ascendance ul { padding-top: 0.5em; }
    4041.taxon .fiche_objet #wysiwyg .contenu_ascendance .kingdom { padding-left: 10px; }
    4142.taxon .fiche_objet #wysiwyg .contenu_ascendance .phylum { padding-left: 20px; }
     
    4445.taxon .fiche_objet #wysiwyg .contenu_ascendance .family { padding-left: 50px; }
    4546.taxon .fiche_objet #wysiwyg .contenu_ascendance .genus { padding-left: 60px; }
    46 /* Décaler chaque sources du titre */
     47/* Mettre en valeur chaque sources du titre */
    4748.taxon .fiche_objet #wysiwyg .contenu_ps { padding-bottom: 1em; }
    48 .taxon .fiche_objet #wysiwyg .contenu_ps .sources { padding-left: 10px; }
     49.taxon .fiche_objet #wysiwyg .contenu_ps .sources { padding-left: 10px; font-size: 0.90em; }
     50.taxon .fiche_objet #wysiwyg .contenu_ps ul { padding-top: 0.5em; }
     51.taxon .fiche_objet #wysiwyg .contenu_ps li.sources { list-style: square; list-style-position: inside; }
    4952
    5053/* Variations des colonnes de la liste des taxons */
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r92841 r92858  
    6767                        'function' => 'getTsnByVernacularLanguage',
    6868                        'argument' => 'language',
    69                         'list' => 'ax23:vernacularTsns',
     69                        'list' => 'vernacularTsns',
    7070                        'index' => 'commonName'
    7171                )
     
    184184        // Récupération du TSN du taxon recherché
    185185        $api = $itis_webservice['search'][$api];
    186         if (isset($data[$api['list']])
    187         AND $data[$api['list']]) {
     186        if (!empty($data[$api['list']])) {
    188187                // La recherche peut renvoyer plusieurs taxons. On considère que le "bon" taxon
    189188                // correspond à celui dont le nom est exactement celui recherché.
     
    343342
    344343/**
    345  * Renvoie la liste des noms communs des taxons dans une langue donnée.
     344 * Renvoie la liste des noms communs définis pour certains taxons dans une langue donnée.
     345 * Peu de taxons sont traduits dans la base ITIS, seules les langues français, anglais et
     346 * espagnol sont réellement utilisables.
    346347 *
    347348 * @api
    348349 *
    349350 * @param $language
    350  *
     351 *      Langue au sens d'ITIS. Vaut 'french', 'english', 'spanish'...
    351352 *
    352353 * @return array
    353  *      Liste des langues vernaculaires exprimées en anglais.
     354 *      Tableau des noms communs associés à leur TSN. Le format du tableau est le suivant:
     355 *      - index     : le TSN du taxon
     356 *      - valeur    : le nom commun préfixé du code de langue de SPIP (ex: '[fr]bactéries')
    354357 */
    355358function itis_list_vernaculars($language) {
     
    358361
    359362        // Construire l'URL de l'api sollicitée
    360         $url = itis_api2url('xml', 'vernacular', 'vernacularlanguage', $language);
     363        $url = itis_api2url('json', 'vernacular', 'vernacularlanguage', $language);
    361364
    362365        // Acquisition des données spécifiées par l'url
     366        include_spip('inc/taxonomer');
     367        $data = url2json_data($url);
     368
    363369        $api = $itis_webservice['vernacular']['vernacularlanguage'];
    364         include_spip('inc/distant');
    365         $flux = recuperer_page($url);
    366 
    367         // Suppression du préfixe ax21: des balises afin de récupérer des index associatif non préfixés
    368         $flux = str_replace('ax21:', '', $flux);
    369 
    370         // Phrasage de la chaine XML obtenue
    371         include_spip('inc/xml');
    372         $arbre = spip_xml_parse($flux);
    373         if (spip_xml_match_nodes(",^{$api['list']},", $arbre, $matches) > 0) {
    374                 $names = reset($matches);
     370        if (!empty($data[$api['list']])) {
    375371                $tag_language = '[' . $itis_language[$language] . ']';
    376                 foreach ($names as $_name) {
    377                         $vernaculars[$_name['tsn'][0]] .= $tag_language . $_name[$api['index']][0];
     372                foreach ($data[$api['list']] as $_name) {
     373                        if ($_name[$api['index']]) {
     374                                $vernaculars[$_name['tsn']] .= $tag_language . $_name[$api['index']];
     375                        }
    378376                }
    379377        }
     
    512510                        $tag_language = '[' . $itis_language[$language] . ']';
    513511                        foreach ($lines as $_line) {
    514                                 $name = explode(',', trim($_line));
    515                                 $vernaculars[intval($name[0])] = $tag_language . trim($name[1], '"');
     512                                list($tsn, $name) = explode(',', trim($_line));
     513                                $vernaculars[intval($tsn)] = $tag_language . trim($name, '"');
    516514                        }
    517515                }
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r92841 r92858  
    9999
    100100                // Mise en cache
    101                 ecrire_fichier($file_cache, serialize($information));
     101                ecrire_cache_taxonomie(serialize($information), 'wikipedia', $tsn, $langue);
    102102        } else {
    103103                // Lecture et désérialisation du cache
     
    161161        $link = '<a href="' . $url . '"><em>' . ucfirst($taxon['nom_scientifique']) . '</em></a>';
    162162
     163        // La liste des champs concernés (a priori le descriptif)
     164        include_spip('inc/taxonomer');
     165        $champs = implode(', ', array_map('traduire_champ_taxon', $informations['champs']));
     166
    163167        // On établit la citation
    164         $credit = _T('taxonomie:credit_wikipedia', array('url_taxon' => $link));
     168        $credit = _T('taxonomie:credit_wikipedia', array('champs' => strtolower($champs),'url_taxon' => $link));
    165169
    166170        return $credit;
Note: See TracChangeset for help on using the changeset viewer.