Changeset 100274 in spip-zone for _plugins_/isocode


Ignore:
Timestamp:
Oct 30, 2016, 5:58:41 PM (4 years ago)
Author:
eric@…
Message:

Ajout d'informations géographiques à chaque élément de la table ISO-3166 des pays.
Ces informations proviennent de Geonames.

Location:
_plugins_/isocode/trunk
Files:
1 added
3 edited

Legend:

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

    r100264 r100274  
    151151                array('field' => &$table_scripts, 'key' => &$table_scripts_key);
    152152
    153         // --------------------------------------------------------------
    154         // Table des indicatifs des pays ISO-3166 : spip_iso3166countries
     153        // -------------------------------------------------------------------------------------
     154        // Table des indicatifs des pays ISO-3166 et autres informations : spip_iso3166countries
    155155        $table_countries = array(
    156                 'code_alpha2' => "char(2) DEFAULT '' NOT NULL",                  // The two-letter identifier
    157                 'code_alpha3' => "char(3) DEFAULT '' NOT NULL",                  // The three-letter identifier
    158                 'code_num'    => "char(3) DEFAULT '' NOT NULL",                  // Numeric identifier
    159                 'label_en'    => "varchar(255) DEFAULT '' NOT NULL",             // English name
    160                 'label_fr'    => "varchar(255) DEFAULT '' NOT NULL",             // french name
    161                 'maj'         => 'timestamp'
     156                'code_alpha2'    => "char(2) DEFAULT '' NOT NULL",       // The two-letter identifier
     157                'code_alpha3'    => "char(3) DEFAULT '' NOT NULL",       // The three-letter identifier
     158                'code_num'       => "char(3) DEFAULT '' NOT NULL",       // Numeric identifier
     159                'label_en'       => "varchar(255) DEFAULT '' NOT NULL",  // English name
     160                'label_fr'       => "varchar(255) DEFAULT '' NOT NULL",  // french name
     161                '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
     164                'continent_code' => "char(2) DEFAULT '' NOT NULL",       // Continent code
     165                'tld'            => "char(3) DEFAULT '' NOT NULL",       // Tld - Top-Level Domain
     166                'code_4217_3'    => "char(3) DEFAULT '' NOT NULL",       // Currency code ISO-4217
     167                'currency_en'    => "varchar(255) DEFAULT '' NOT NULL",  // Currency English name
     168                'phone_id'       => "varchar(16) DEFAULT '' NOT NULL",   // Phone id
     169                'maj'            => 'timestamp'
    162170        );
    163171
  • _plugins_/isocode/trunk/lang/isocode_fr.php

    r100264 r100274  
    1010
    1111// E
    12         'erreur_charger_table' => 'Une erreur s\'est produite lors du chargement des tables @tables@.',
    13         'erreur_vider_table' => 'Une erreur s\'est produite lors du vidage des tables @tables@.',
     12        'erreur_charger_table' => 'Une erreur s\'est produite lors du chargement de la ou des tables @tables@.',
     13        'erreur_vider_table' => 'Une erreur s\'est produite lors du vidage de la ou des tables @tables@.',
    1414        'explication_action_table' => 'Si la table est déjà chargée en base de données elle sera vidée avant le chargement.',
    1515
     
    3737
    3838// N
    39         'notice_charger_table' => 'Aucune mise à jour n\'est nécessaire sur les tables @tables@.',
     39        'notice_charger_table' => 'Aucune mise à jour n\'est nécessaire sur la ou les tables @tables@.',
    4040        'notice_liste_aucune_table' => 'Aucune table de codes ISO n\'a encore été chargée en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
    4141
  • _plugins_/isocode/trunk/services/iso/iso_api.php

    r99066 r100274  
    118118                        'Numeric'      => 'code_num',
    119119                ),
     120                'addon_fields'   => array(
     121                        'geonames' => array(
     122                                'Capital'        => 'capital',
     123                                'Area(in sq km)' => 'area',
     124                                'Population'     => 'population',
     125                                'Continent'      => 'code_continent',
     126                                'tld'            => 'tld',
     127                                'CurrencyCode'   => 'code_4217_3',
     128                                'CurrencyName'   => 'currency_en',
     129                                'Phone'          => 'phone_id'
     130                        )
     131                ),
    120132                'populating'   => 'file_csv',
    121133                'delimiter'    => ';',
     
    123135        ),
    124136);
     137
    125138
    126139// ----------------------------------------------------------------------------
     
    243256        return $records;
    244257}
     258
     259
     260function iso3166countries_complete_by_table($records) {
     261
     262        // Initialisation des champs additionnels
     263        $add_columns = array();
     264        $geo_to_spip = $GLOBALS['isocode']['iso']['tables']['iso3166countries']['addon_fields']['geonames'];
     265
     266        // Lecture du fichier CSV geonames-countryInfo.txt pour récupérer les informations additionnelles.
     267        // Le délimiteur est une tabulation.
     268        $file = find_in_path("services/iso/iso3166countries-geonames-info.txt");
     269        $delimiter = "\t";
     270        $lines = file($file);
     271        if ($lines) {
     272                $headers = array();
     273                foreach ($lines as $_number => $_line) {
     274                        $values = explode($delimiter, trim($_line, "\r\n"));
     275                        if ($_number == 0) {
     276                                // Stockage des noms de colonnes car la première ligne contient toujours le header et de
     277                                // l'index correspondant au code ISO-3166 alpha2 du pays qui se nomme ISO dans le fichier CSV.
     278                                $headers = $values;
     279                                $index_iso3166_alpha2 = array_search('ISO', $headers);
     280                        } else {
     281                                // On extrait de chaque ligne les informations additionnelles ainsi que le code alpha2 du pays
     282                                // qui servira d'index du tableau constitué.
     283                                // On ne sélectionne que les colonnes correspondant à des champs additionnels.
     284                                $fields = array();
     285                                foreach ($headers as $_cle => $_header) {
     286                                        if (array_key_exists($_header, $geo_to_spip)) {
     287                                                $fields[$geo_to_spip[trim($_header)]] = isset($values[$_cle]) ? trim($values[$_cle]) : '';
     288                                        }
     289                                }
     290                                if (isset($values[$index_iso3166_alpha2])) {
     291                                        $add_columns[$values[$index_iso3166_alpha2]] = $fields;
     292                                }
     293                        }
     294                }
     295        }
     296
     297
     298        // On complète maintenant le tableau des enregistrements avec la colonne additionnelle hierarchy et la colonne
     299        // dérivée parent qui ne contient que le code alpha-3 de la famille parente si elle existe.
     300        foreach ($records as $_cle => $_record) {
     301                $code = $_record['code_alpha2'];
     302                if (isset($add_columns[$code])) {
     303                        $records[$_cle] = array_merge($records[$_cle], $add_columns[$code]);
     304                }
     305        }
     306
     307        return $records;
     308}
Note: See TracChangeset for help on using the changeset viewer.