Changeset 108904 in spip-zone


Ignore:
Timestamp:
Feb 11, 2018, 8:24:13 PM (21 months ago)
Author:
eric@…
Message:

Mise au point de la récupération du descriptif avec Wikipedia.

Location:
_plugins_/taxonomie/trunk
Files:
4 added
6 edited

Legend:

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

    r108385 r108904  
    2222
    2323        // Liste des langues possibles gérées par le plugin
     24        include_spip('inc/config');
    2425        $langues_possibles = lire_config('taxonomie/langues_possibles');
    25         foreach ( $langues_possibles as $_code_langue) {
     26        foreach ($langues_possibles as $_code_langue) {
    2627                $valeurs['_langues'][$_code_langue] = traduire_nom_langue($_code_langue);
    2728        }
  • _plugins_/taxonomie/trunk/formulaires/decrire_taxon.html

    r108777 r108904  
    11<div class="formulaire_spip formulaire_charger formulaire_#FORM">
    2         <h3 class="titrem"><:taxonomie:titre_form_decrire_taxon:></h3>
     2        <h3 class="titrem"><:taxonomie:info_etape{etape=#ENV{_etape}, etapes=#ENV{_etapes}}:></h3>
    33
    4         [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
    54        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    65
     
    98                #ACTION_FORMULAIRE{#ENV{action}}
    109                <div class="editer-groupe">
    11                         [(#SAISIE{textarea, _descriptif,
    12                                 label=<:taxon:label_wikipedia_descriptif:>,
    13                                 disable=oui
    14                         })]
    15 
    16                         [(#SAISIE{radio, choix_descriptif,
    17                                 explication=<:taxonomie:explication_wikipedia_lien>,
    18                                 label=<:taxonomie:label_wikipedia_lien:>,
    19                                 datas=#ENV{_liens},
    20                                 defaut=#ENV{_lien_defaut}
     10                        [(#SAISIE{radio, langue,
     11                                explication=<:taxonomie:explication_wikipedia_langue:>,
     12                                label=<:taxonomie:label_wikipedia_langue:>,
     13                                datas=#ENV{_langues},
     14                                defaut=#ENV{_langue_defaut}
    2115                        })]
    2216                </div>
    2317
    24                 <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
     18                <p class="boutons">
     19                        <input type="submit" class="submit" value="<:taxonomie:bouton_continuer:>" />
     20                </p>
    2521        </div>
    2622        </form>
  • _plugins_/taxonomie/trunk/formulaires/decrire_taxon.php

    r108777 r108904  
    1212 * Le formulaire propose ce descriptif mais aussi une liste d'autres pages qui matchent avec le taxon.
    1313 *
    14  * @uses taxonomie_regne_existe()
    15  * @uses taxonomie_regne_lister_rangs()
     14 * @uses wikipedia_get_page()
     15 * @uses convertisseur_texte_spip()
    1616 *
    1717 * @return array
     
    3030        $valeurs = array();
    3131
     32        // Initialisation des paramètres du formulaire.
     33        $valeurs['langue'] = _request('langue');
     34
     35        // Liste des langues utilisées
     36        include_spip('inc/config');
     37        $langues_utilisees = lire_config('taxonomie/langues_utilisees');
     38        foreach ($langues_utilisees as $_code_langue) {
     39                $valeurs['_langues'][$_code_langue] = traduire_nom_langue($_code_langue);
     40        }
     41
     42        // Langue par défaut: soit la langue en cours si elle existe dans la liste des langues utilisées, soit la
     43        // première de cette même liste.
     44        $langue_spip = !empty($GLOBALS['lang']) ? $GLOBALS['lang'] : $GLOBALS['spip_lang'];
     45        if (array_key_exists($langue_spip, $valeurs['_langues'])) {
     46                $valeurs['_langue_defaut'] = $langue_spip;
     47        } else {
     48                reset($valeurs['_langues']);
     49                $valeurs['_langue_defaut'] = key($valeurs['_langues']);
     50        }
     51
    3252        // Récupération des informations de base du taxon
    33         $select = array('tsn', 'nom_scientifique', 'edite', 'descriptif');
     53        $select = array('tsn', 'nom_scientifique');
    3454        $from = array('id_taxon=' . sql_quote($id_taxon));
    3555        $taxon = sql_fetsel($select, 'spip_taxons', $from);
    3656
    37         // Récupération d'une page wikipédia matchant avec le nom scientifique du taxon.
    38         // L'API renvoie aussi d'autres pages qui peuvent potentiellement être plus pertinentes ou pas.
    39         include_spip('services/wikipedia/wikipedia_api');
    40         $langue = wikipedia_find_language('fr');
    41         $recherche = array('name' => $taxon['nom_scientifique'], 'tsn' => $taxon['tsn']);
    42         $information = wikipedia_get_page($recherche, $langue);
     57        // Si on a déjà choisi une langue, on peut accéder à Wikipedia avec le nom scientifique et retourner
     58        // les pages trouvées (étape 2).
     59        if ($valeurs['langue']) {
     60                // Récupération d'une page wikipedia matchant avec le nom scientifique du taxon.
     61                // L'API renvoie aussi d'autres pages qui peuvent potentiellement être plus pertinentes.
     62                include_spip('services/wikipedia/wikipedia_api');
     63                $recherche = array('name' => $taxon['nom_scientifique'], 'tsn' => $taxon['tsn']);
     64                $information = wikipedia_get_page($recherche, $valeurs['langue']);
    4365
    44         // On convertit le descriptif afin de visualiser un texte plus clair.
    45         $valeurs['_descriptif'] = '';
    46         if ($information['text']) {
    47                 // Si le plugin Convertisseur est actif, conversion du texte mediawiki vers SPIP.
    48                 // Mise en format multi systématique.
    49                 include_spip('inc/filtres');
    50                 $convertir = chercher_filtre('convertisseur_texte_spip');
    51                 $valeurs['_descriptif'] = $convertir ? $convertir($information['text'], 'MediaWiki_SPIP') : $information['text'];
     66                // On convertit le descriptif afin de visualiser un texte plus clair.
     67                $valeurs['_descriptif'] = '';
     68                if (!empty($information['text'])) {
     69                        // Si le plugin Convertisseur est actif, conversion du texte mediawiki vers SPIP.
     70                        // Mise en format multi systématique.
     71                        include_spip('inc/filtres');
     72                        $convertir = chercher_filtre('convertisseur_texte_spip');
     73                        $valeurs['_descriptif'] = $convertir ? $convertir($information['text'], 'MediaWiki_SPIP') : $information['text'];
     74                }
     75
     76                // On prépare la liste des choix possibles si le texte récupéré n'est pas le bon.
     77                $valeurs['_liens'] = array();
     78                if ($information['links']) {
     79                        $valeurs['_liens'][$taxon['nom_scientifique']] = _T('taxonomie:label_wikipedia_alternative_defaut');
     80                        foreach ($information['links'] as $_liens) {
     81                                $valeurs['_liens'][$_liens['title']] = _T('taxonomie:label_wikipedia_alternative', array('alternative' => $_liens['title']));
     82                        }
     83                }
     84                $valeurs['_lien_defaut'] = $taxon['nom_scientifique'];
    5285        }
    5386
    54         // On prépare la liste des choix possibles si le texte récupéré n'est pas le bon.
    55         $valeurs['_liens'] = array();
    56         if ($information['links']) {
    57                 $valeurs['_liens'][$taxon['nom_scientifique']] = _T('taxonomie:label_descriptif_ok');
    58                 foreach ($information['links'] as $_liens) {
    59                         $valeurs['_liens'][$_liens['title']] = _T('taxonomie:label_alternative', array('alternative' => $_liens['title']));
    60                 }
    61         }
    62         $valeurs['_lien_defaut'] = $taxon['nom_scientifique'];
     87        // Préciser le nombre d'étapes du formulaire
     88        $valeurs['_etapes'] = 2;
    6389
    6490        return $valeurs;
    6591}
    6692
    67 /**
    68  * Vérification des saisies : il est indispensable de choisir une action (`vider` ou `charger`) et
    69  * un règne.
    70  * Un rang minimal est toujours sélectionné. La saisie des langues des noms communs est optionnelle.
    71  *
    72  * @return array
    73  *              Tableau des erreurs sur l'action et/ou le règne ou tableau vide si aucune erreur.
    74  */
    75 function formulaires_decrire_taxon_verifier() {
    76         $erreurs = array();
    77 
    78         $obligatoires = array();
    79         foreach ($obligatoires as $_obligatoire) {
    80                 if (!_request($_obligatoire))
    81                         $erreurs[$_obligatoire] = _T('info_obligatoire');
    82         }
    83 
    84         return $erreurs;
    85 }
    8693
    8794/**
     
    97104 *              d'erreur. L'indicateur editable est toujours à vrai.
    98105 */
    99 function formulaires_decrire_taxon_traiter() {
     106function formulaires_decrire_taxon_traiter($id_taxon) {
    100107        $retour = array();
     108
     109        // Initialisation des saisies.
     110        $langue = _request('langue');
     111        $choix_descriptif = _request('choix_descriptif');
     112
     113        // Récupération des informations de base du taxon
     114        $select = array('tsn', 'nom_scientifique', 'edite', 'descriptif', 'sources');
     115        $from = array('id_taxon=' . sql_quote($id_taxon));
     116        $taxon = sql_fetsel($select, 'spip_taxons', $from);
     117
     118        // Récupération de la page wikipedia choisie:
     119        include_spip('services/wikipedia/wikipedia_api');
     120        if ($choix_descriptif == $taxon['nom_scientifique']) {
     121                // Le descriptif déjà fourni par défaut est le bon. On ne met pas à jour le cache.
     122                $recherche = array('name' => $taxon['nom_scientifique'], 'tsn' => $taxon['tsn']);
     123                $information = wikipedia_get_page($recherche, $langue);
     124        } else {
     125                // On a choisit une autre page que celle par défaut : on recharge le cache avec la nouvelle recherche.
     126                $recherche = array('name' => $choix_descriptif, 'tsn' => $taxon['tsn']);
     127                $information = wikipedia_get_page($recherche, $langue, null, array('reload' => true));
     128        }
     129
     130        // On convertit le descriptif afin de proposer un texte plus clair.
     131        if (!empty($information['text'])) {
     132                // Si le plugin Convertisseur est actif, conversion du texte mediawiki vers SPIP.
     133                // Mise en format multi systématique et limitation de la chaine à 20000 caractères.
     134                // TODO : revoir le calcul des 20000
     135                include_spip('inc/filtres');
     136                $convertir = chercher_filtre('convertisseur_texte_spip');
     137                $texte_converti = $convertir ? $convertir($information['text'], 'MediaWiki_SPIP') : $information['text'];
     138                $texte_converti = '<multi>'
     139                                                  . '[' . $langue . ']'
     140                                                  . substr($texte_converti, 0, 20000)
     141                                                  . '</multi>';
     142                // Mise à jour pour le taxon du descriptif et des champs connexes en base de données
     143                $maj = array();
     144                // - le texte du descriptif est inséré dans la langue choisie en mergeant avec l'existant
     145                //   si besoin. On limite la taille du descriptif pour éviter un problème lors de l'update
     146                include_spip('inc/taxonomer');
     147                $maj['descriptif'] = taxon_merger_traductions($texte_converti, $taxon['descriptif']);
     148                // - l'indicateur d'édition est positionné à oui
     149                $maj['edite'] = 'oui';
     150                // - la source wikipédia est ajoutée (ou écrasée si elle existe déjà)
     151                $maj['sources'] = array('wikipedia' => array('champs' => array('descriptif')));
     152                if ($sources = unserialize($taxon['sources'])) {
     153                        $maj['sources'] = array_merge($maj['sources'], $sources);
     154                }
     155                $maj['sources'] = serialize($maj['sources']);
     156                // - Mise à jour
     157                sql_updateq('spip_taxons', $maj, 'id_taxon=' . sql_quote($id_taxon));
     158
     159                // Redirection vers la page d'édition du taxon
     160                $retour['redirect'] = parametre_url(generer_url_ecrire('taxon_edit'), 'id_taxon', $id_taxon);
     161        } else {
     162                $retour['message_erreur'] = _T('taxonomie:erreur_wikipedia_descriptif');
     163        }
    101164
    102165        $retour['editable'] = true;
  • _plugins_/taxonomie/trunk/inc/taxonomie_cacher.php

    r108487 r108904  
    2828if (!defined('_TAXONOMIE_CACHE_FORCER')) {
    2929        /**
    30          * Indicateur permettant de focer le recalcul du cache systématiquement.
     30         * Indicateur permettant de forcer le recalcul du cache systématiquement.
    3131         * A n'utiliser que temporairement en mode debug par exemple.
    3232         *
     
    6060
    6161        // Ecriture du fichier cache
    62         $fichier_cache = cache_taxonomie_nommer($service, $tsn, $action, $options);
     62        $fichier_cache = cache_taxonomie_nommer($service, $action, $tsn, $options);
    6363        ecrire_fichier($fichier_cache, $cache);
    6464
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r108576 r108904  
    66
    77        // B
     8        'bouton_continuer' => 'Passer à l\'étape 2',
     9        'bouton_retourner' => 'Retourner à l\'étape 1',
    810        'bouton_taxonomie' => 'Taxons',
    911        'bouton_wikipedia_descriptif' => 'Remplir le descriptif avec Wikipedia',
     
    1921        'erreur_vider_regne' => 'Erreur lors du vidage du règne @regne@ en base de données.',
    2022        'erreur_charger_regne' => 'Erreur lors du chargement du règne @regne@ en base de données.',
     23        'erreur_wikipedia_descriptif' => 'Aucun descriptif n\'a pas être récupéré de Wikipedia.',
    2124        'explication_action_regne' => 'Si le règne est déjà présent en base de données, tous les taxons qui le composent seront supprimés avant le chargement.',
    2225        '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.',
     
    2427        Néanmoins, en fonction de votre besoin vous pouvez limiter l\'utilisation de ces langues mais une langue est au moins requise.',
    2528        'explication_type_rang' => 'Le chargement de tous les taxons incluant les rangs intercalaires peut augmenter significativement le temps de traitement.',
     29        'explication_wikipedia_langue' => 'Si vous utilisez plusieurs langues pour traduire vos taxons, choisissez la langue à utiliser pour récupérer le descriptif.',
     30        'explication_wikipedia_descriptif' => 'Vérifier si ce descriptif est bien celui qui décrit le mieux le taxon. Si non, choisissez une page alternative parmi celle éventuellement proposée dans la liste ci-dessous.',
     31        'explication_wikipedia_lien' => 'Choisissez la page Wikipedia que vous souhaitez intégrer comme descriptif du taxon.',
    2632
    2733        // I
    2834        'info_boite_taxonomie_gestion' => 'Cette page permet aux webmestres de consulter, charger, mettre à jour ou vider les règnes animal, végétal et fongique gérés par le plugin.',
    2935        'info_boite_taxonomie_navigation' => 'Cette page permet aux utilisateurs de consulter la liste des taxons chargés en base de données et de naviguer de taxon en taxon.',
     36        'info_etape' => 'Etape @etape@ / @etapes@',
    3037        'info_indicateur_hybride' => 'Ce taxon est un hydribe',
    3138        'info_regne_charge' => 'déjà chargé',
     
    4249        'label_type_rang' => 'Types de rangs à charger jusqu\'au genre',
    4350        'label_regne' => 'Règne sur lequel appliquer l\'action',
     51        'label_langue_descriptif' => 'Langue du descriptif',
    4452        'label_langues_regne' => 'Langues des noms communs',
    4553        'label_langues_utilisees' => 'Langues à utiliser',
     
    4755        'label_type_rang_principal' => 'rangs principaux',
    4856        'label_type_rang_secondaire' => 'rangs principaux et secondaires',
     57        'label_wikipedia_alternative_defaut' => 'Utiliser le descriptif proposé par défaut',
     58        'label_wikipedia_alternative' => 'Utiliser la page « @alternative@ »',
     59        'label_wikipedia_descriptif' => 'Descriptif Wikipedia fourni par défaut',
     60        'label_wikipedia_langue' => 'Langue à utiliser par Wikipedia',
     61        'label_wikipedia_lien' => 'Page Wikipedia à utiliser',
    4962
    5063        // N
     
    98111        'titre_liste_regnes' => 'Liste des règnes chargés en base de données',
    99112        'titre_liste_fils_taxon' => 'Liste des descendants directs du taxon',
     113        'titre_page_decrire_wikipedia' => 'Descriptif Wikipedia du taxon @taxon@',
    100114        'titre_page_taxonomie' => 'Taxonomie',
    101115);
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r108777 r108904  
    6767 * @param string $spip_language
    6868 *        Code de langue SPIP dans lequel on souhaite récupérer la page Wikipedia.
     69 * @param int    $section
     70 *        Section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0 ou `null` pour tout la page.
    6971 * @param array  $options
    7072 *        Tableau d'options qui peut contenir les index suivants :
    71  *        - `section` : section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0 ou `null`
    72  *                      pour tout la page.
    73  *        - `url`     : url complète de la recherche à utiliser directement.
     73 *        - `reload`  : force le recalcul du cache.
    7474 *        Cet argument est optionnel.
    7575 *
     
    7979 *        doit être remanié manuellement.
    8080 */
    81 function wikipedia_get_page($search, $spip_language, $options = array()) {
     81function wikipedia_get_page($search, $spip_language, $section = null, $options = array()) {
    8282
    8383        // Initialisation du tableau de sortie et du tableau d'options
     
    9292                // Construction des options permettant de nommer le fichier cache.
    9393                include_spip('inc/taxonomie_cacher');
    94                 $options_cache = array('language' => $language);
    95                 if (!empty($options['section'])) {
    96                         $options_cache['section'] = $options['section'];
     94                $options_cache = array('language' => $spip_language);
     95                if ($section !== null) {
     96                        $options_cache['section'] = $section;
    9797                }
    9898
    99                 if (!empty($options['url'])
     99                if (!empty($options['reload'])
    100100                or !$file_cache = cache_taxonomie_existe('wikipedia', '', $search['tsn'], $options_cache)
    101101                or !filemtime($file_cache)
     
    105105                        $title = strtolower(trim($search['name']));
    106106
    107                         if (empty($options['url'])) {
    108                                 // Construire l'URL de la function de recherche par nom vernaculaire.
    109                                 // L'encodage de la recherche est effectuée dans la fonction.
    110                                 // Quelque que soit la demande on effectue une recherche complète afin d'avoir l'ensemble des
    111                                 // informations en cache.
    112                                 $url = wikipedia_build_url($title, $language, $options);
    113                         } else {
    114                                 $url = $options['url'];
    115                         }
     107                        // Calcul de l'url de la requête: on supprime
     108                        $url = wikipedia_build_url($title, $language, $section);
    116109
    117110                        // Acquisition des données spécifiées par l'url
     
    160153 * @api
    161154 *
    162  * @param string $language_code
     155 * @param string $spip_language
    163156 *        Code de langue de SPIP. Prend les valeurs `fr`, `en`, `es`, etc.
    164157 *        La variable globale `$wikipedia_language` définit le transcodage langue Wikipedia vers code SPIP.
     
    167160 *        Langue au sens de Wikipedia - `fr`, `en`, `es` - ou chaine vide sinon.
    168161 */
    169 function wikipedia_find_language($language_code) {
    170 
    171         if (!$language = array_search($language_code, $GLOBALS['wikipedia_language'])) {
     162function wikipedia_find_language($spip_language) {
     163
     164        if (!$language = array_search($spip_language, $GLOBALS['wikipedia_language'])) {
    172165                $language = 'fr';
    173166        }
Note: See TracChangeset for help on using the changeset viewer.