Changeset 100371 in spip-zone for _plugins_/isocode


Ignore:
Timestamp:
Nov 5, 2016, 2:33:43 PM (4 years ago)
Author:
eric@…
Message:

Complément à la table iso4217currencies.
Renommage d'un champ de la table iso4217currencies.

Location:
_plugins_/isocode/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/isocode/trunk/base/isocode_declarations.php

    r100330 r100371  
    160160                'label_fr'       => "varchar(255) DEFAULT '' NOT NULL",  // french name
    161161                'capital'        => "varchar(255) DEFAULT '' NOT NULL",  // Capital name
    162                 'area'           => 'int DEFAULT 0 NOT NULL',            // Area in squared km
    163                 'population'     => 'int DEFAULT 0 NOT NULL',            // Inhabitants count
     162                'area'           => "int DEFAULT 0 NOT NULL",            // Area in squared km
     163                'population'     => "int DEFAULT 0 NOT NULL",            // Inhabitants count
    164164                'code_continent' => "char(2) DEFAULT '' NOT NULL",       // Continent code alpha2
    165165                'tld'            => "char(3) DEFAULT '' NOT NULL",       // Tld - Top-Level Domain
     
    185185                'label_fr'    => "varchar(255) DEFAULT '' NOT NULL",  // french name
    186186                'symbol'      => "char(8) DEFAULT '' NOT NULL",       // Currency symbol
    187                 'minor_unit'  => 'int DEFAULT 0 NOT NULL',            // Minor units
     187                'minor_units' => "int DEFAULT 0 NOT NULL",            // Minor units
    188188                'maj'         => 'timestamp'
    189189        );
  • _plugins_/isocode/trunk/formulaires/isocode_gerer_table.php

    r100348 r100371  
    8787function formulaires_isocode_gerer_table_traiter() {
    8888
    89         $retour = array();
    90 
    9189        // Acquisition des saisies: comme elles sont obligatoires, il existe toujours une action et une
    9290        // table.
  • _plugins_/isocode/trunk/services/iso/iso_api.php

    r100367 r100371  
    105105                        ),
    106106                        'loc' => array(
    107                                 'Hierarchy' => 'hierarchy'
     107                                'Hierarchy' => 'hierarchy',
     108                                'parent'    => 'parent'                 // Colonne est calculée à partir de la hiérarchie
    108109                        )
    109110                ),
     
    154155                        'CcyNbr'     => 'code_num',
    155156                        'CcyNm'      => 'label_en',
    156                         'CcyMnrUnts' => 'minor_unit',
     157                        'CcyMnrUnts' => 'minor_units',
    157158                ),
    158159                'addon_fields' => array(
     
    175176function iso639families_completer_enregistrement($enregistrement, $config) {
    176177
    177         // Initialisation des champs additionnels qui sont tous de type chaine dans l'enregistrement
    178         // passé en argument (qui contient déjà les champs de base).
     178        // Initialisation
     179        static $enregistrement_sil_defaut = array();
     180
     181        // Initialisation des champs additionnels dans l'enregistrement passé en argument
     182        // (qui contient déjà les champs de base).
    179183        $config_champs_sil = $config['addon_fields']['sil'];
    180         foreach ($config_champs_sil as $_champ) {
    181                 $enregistrement[$_champ] = '';
    182         }
     184        if (!$enregistrement_sil_defaut) {
     185                include_spip('inc/isocode_sourcer');
     186                $enregistrement_sil_defaut = initialiser_enregistrement('iso639families', $config_champs_sil);
     187        }
     188        $enregistrement = array_merge($enregistrement, $enregistrement_sil_defaut);
    183189
    184190        // On récupère la page de description de la famille sur le site SIL.
     
    238244        $hierarchies = array();
    239245        $config_champs_loc = $config['addon_fields']['loc'];
     246        include_spip('inc/isocode_sourcer');
     247        $enregistrement_loc_defaut = initialiser_enregistrement('iso639families', $config_champs_loc);
    240248
    241249        // On récupère la page de description de la famille sur le site SIL.
     
    271279        // dérivée parent qui ne contient que le code alpha-3 de la famille parente si elle existe.
    272280        foreach ($enregistrements as $_cle => $_enregistrement) {
     281                $enregistrements[$_cle] = array_merge($enregistrements[$_cle], $enregistrement_loc_defaut);
    273282                $code = $_enregistrement['code_639_5'];
    274                 $enregistrements[$_cle]['parent'] = '';
    275283                if (isset($hierarchies[$code])) {
    276284                        $enregistrements[$_cle][$config_champs_loc['Hierarchy']] = $hierarchies[$code];
     
    280288                        if (count($parents) > 1) {
    281289                                array_pop($parents);
    282                                 $enregistrements[$_cle]['parent'] = array_pop($parents);
     290                                $enregistrements[$_cle][$config_champs_loc['parent']] = array_pop($parents);
    283291                        }
    284                 } else {
    285                         $enregistrements[$_cle][$config_champs_loc['Hierarchy']] = '';
    286292                }
    287293        }
     
    296302        $enregistrements_geo = array();
    297303        $config_champs_geo = $config['addon_fields']['geonames'];
     304        include_spip('inc/isocode_sourcer');
     305        $enregistrement_geo_defaut = initialiser_enregistrement('iso3166countries', $config_champs_geo);
    298306
    299307        // Lecture du fichier CSV geonames-countryInfo.txt pour récupérer les informations additionnelles.
     
    305313                $titres = array();
    306314                $index_code_pays = null;
     315                include_spip('inc/isocode_sourcer');
    307316                foreach ($lignes as $_numero => $_ligne) {
    308317                        $valeurs = explode($separateur, trim($_ligne, "\r\n"));
     
    316325                                // qui servira d'index du tableau constitué.
    317326                                // On ne sélectionne que les colonnes correspondant à des champs additionnels.
    318                                 $enregistrement_geo = initialiser_enregistrement('iso3166countries', $config_champs_geo);
     327                                $enregistrement_geo = $enregistrement_geo_defaut;
    319328                                foreach ($titres as $_cle => $_titre) {
    320329                                        $titre = trim($_titre);
     
    345354function iso4217currencies_completer_table($enregistrements, $config) {
    346355
     356        // Initialisation des champs additionnels
     357        $enregistrements_iota = array();
     358        $config_champs_iota = $config['addon_fields']['iota'];
     359        include_spip('inc/isocode_sourcer');
     360        $enregistrement_iota_defaut = initialiser_enregistrement('iso4217currencies', $config_champs_iota);
     361
     362        // On récupère la page de description de la famille sur le site SIL.
     363        include_spip('inc/distant');
     364        $url = _ISOCODE_IOTA_ISO4217_SYMBOL;
     365        $flux = recuperer_url($url, array('transcoder' => true));
     366
     367        include_spip('inc/filtres');
     368        $table = extraire_balise($flux['page'], 'table');
     369        if ($table) {
     370                // On extrait la première table de la page qui contient les données voulues
     371                $lignes = extraire_balises($table, 'tr');
     372                if ($lignes) {
     373                        $cles_iota = array();
     374                        $index_code_devise = null;
     375                        foreach ($lignes as $_numero => $_ligne) {
     376                                $balise_colonne = $_numero == 0 ? 'th' : 'td';
     377                                $colonnes = extraire_balises($_ligne, $balise_colonne);
     378                                $colonnes = array_map('supprimer_tags', $colonnes);
     379                                $colonnes = array_map('trim', $colonnes);
     380                                if ($_numero == 0) {
     381                                        // La première ligne du tableau est celle des titres de colonnes.
     382                                        // On détermine les index de colonnes correspondant aux champs additionnels configurés.
     383                                        foreach ($colonnes as $_cle => $_titre) {
     384                                                if (array_key_exists($_titre, $config_champs_iota)) {
     385                                                        $cles_iota[$_titre] = $_cle;
     386                                                }
     387                                        }
     388                                        // On détermine l'index de la colonne qui porte le code alpha3 ISO-4217 nommé
     389                                        $index_code_devise = array_search('ISO devise', $colonnes);
     390                                } else {
     391                                        // Chaque ligne de la table est composée de plusieurs colonnes, la première étant le code alpha3
     392                                        // de la devise selon l'ISO-4217
     393                                        $enregistrement_iota = $enregistrement_iota_defaut;
     394                                        foreach ($cles_iota as $_titre => $_cle) {
     395                                                if ($colonnes[$_cle]) {
     396                                                        $enregistrement_iota[$config_champs_iota[$_titre]] = $colonnes[$_cle];
     397                                                }
     398                                        }
     399                                        $code = $colonnes[$index_code_devise];
     400                                        $enregistrements_iota[$code] = $enregistrement_iota;
     401                                }
     402                        }
     403                }
     404        }
     405
     406        // On complète maintenant le tableau des enregistrements avec les colonne additionnelles symbole
     407        // et devise en français.
     408        // Etant donné qu'il faut que tous les enregistrements possèdent la même structure, si une devise ne
     409        // possède pas d'informations complémentaires IOTA on lui adjoint des colonnes par défaut.
     410        foreach ($enregistrements as $_cle => $_enregistrement) {
     411                $code = $_enregistrement['code_4217_3'];
     412                if (isset($enregistrements_iota[$code])) {
     413                        $enregistrements[$_cle] = array_merge($enregistrements[$_cle], $enregistrements_iota[$code]);
     414                } else {
     415                        $enregistrements[$_cle] = array_merge($enregistrements[$_cle], $enregistrement_iota_defaut);
     416                }
     417        }
    347418
    348419        return $enregistrements;
Note: See TracChangeset for help on using the changeset viewer.