source: spip-zone/_plugins_/taxonomie/trunk/action/taxonomie_get_wikipedia.php @ 93223

Last change on this file since 93223 was 93223, checked in by eric@…, 4 years ago

Mise au point de la fonction de merge des traductions et cohérence des appels.
Ajout de tests unitaires pour cette fonction.

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1<?php
2/**
3 * Ce fichier contient l'action `taxonomie_get_wikipedia` qui permet d'appeler l'api Wikipedia pour remplir
4 * un champ de taxon.
5 *
6 * @package SPIP\TAXONOMIE\SERVICES\WIKIPEDIA
7 */
8
9if (!defined('_ECRIRE_INC_VERSION')) return;
10
11/**
12 * Cette action permet à un utilisateur d'insérer dans le champ d'un taxon (principalement le descriptif)
13 * le texte d'une section de page Wikipedia.
14 *
15 * Cette action est réservée aux utilisateurs ayant le droit de modifier un taxon.
16 * Elle nécessite plusieurs arguments, à savoir, l'id du taxon, son nom scientifique, le code de langue SPIP,
17 * le champ de taxon concerné par l'insertion et la section de page Wikipedia à insérer ou `*`
18 * si toute la page est requise.
19 *
20 * @uses wikipedia_spipcode2language()
21 * @uses wikipedia_get()
22 * @uses taxon_merger_traductions()
23 *
24 * @return void
25 */
26function action_taxonomie_get_wikipedia_dist(){
27
28        // Securisation et autorisation car c'est une action auteur:
29        // -> argument attendu est l'alias du serveur
30        $securiser_action = charger_fonction('securiser_action', 'inc');
31        $arguments = $securiser_action();
32
33        // Verification des autorisations
34        if (!autoriser('modifier', 'taxon')) {
35                include_spip('inc/minipres');
36                echo minipres();
37                exit();
38        }
39
40        // Insertion pour le taxon donné du texte Wikipedia récupéré.
41        // Le texte Wikipédia est inséré dans le champ précisé.
42        // Si le champ n'est pas vide, son contenu est écrasé.
43        if ($arguments) {
44                // Détermination des arguments de l'action
45                list($id_taxon, $nom_scientifique, $spip_langue, $champ, $section) = explode(':', $arguments);
46                $section = ($section == '*') ? null : $section;
47                if (intval($id_taxon)) {
48                        // Récupération des informations tsn, source et edite du taxon
49                        $taxon = sql_fetsel(array('tsn', 'sources', 'edite', $champ), 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
50
51                        // Appel du service query de Wikipedia
52                        include_spip('services/wikipedia/wikipedia_api');
53                        $langue = wikipedia_spipcode2language($spip_langue); // TODO : attention à gérer la langue en amont
54                        $information = wikipedia_get($taxon['tsn'], $nom_scientifique, $langue, $section);
55                        if ($information['texte']) {
56                                // Si le plugin Convertisseur est actif, conversion du texte mediawiki vers SPIP.
57                                // Mise en format multi systématique.
58                                include_spip('inc/filtres');
59                                $convertir = chercher_filtre('convertisseur_texte_spip');
60                                $texte_converti = '<multi>'
61                                        . '[' . $spip_langue .']'
62                                        . ($convertir ? $convertir($information['texte'], 'MediaWiki_SPIP') : $information['texte'])
63                                        . '</multi>';
64
65                                // Mise à jour pour le taxon du descriptif et des champs connexes en base de données
66                                $maj = array();
67                                // - le texte du descriptif est inséré dans la langue choisie en mergeant avec l'existant
68                                //   si besoin
69                                include_spip('inc/taxonomer');
70                                $maj[$champ] = taxon_merger_traductions($texte_converti, $taxon[$champ]);
71                                // - l'indicateur d'édition est positionné à oui
72                                if ($taxon['edite']) {
73                                        $maj['edite'] = 'oui';
74                                }
75                                // - la source wikipédia est ajoutée (ou écrasée si elle existe déjà)
76                                $maj['sources'] = array('wikipedia' => array('champs' => array($champ)));
77                                if ($sources = unserialize($taxon['sources'])) {
78                                        $maj['sources'] = array_merge($maj['sources'], $sources);
79                                }
80                                $maj['sources'] = serialize($maj['sources']);
81                                // - Mise à jour
82                                sql_updateq('spip_taxons', $maj, 'id_taxon='. sql_quote($id_taxon));
83                        }
84                }
85        }
86}
87
88?>
Note: See TracBrowser for help on using the repository browser.