Changeset 118151 in spip-zone


Ignore:
Timestamp:
Oct 15, 2019, 12:45:06 PM (6 months ago)
Author:
eric@…
Message:

Ajout du fichier source des subdivisions pour quelques pays dont la france.
Adaptation du code et de la config en conséquence.

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

Legend:

Unmodified
Added
Removed
  • _plugins_/isocode/trunk/inc/isocode_sourcer.php

    r118139 r118151  
    4545        $enregistrements = array();
    4646        $completer_enregistrement = "${table}_completer_enregistrement";
     47        $fusionner_enregistrement = "${table}_fusionner_enregistrement";
    4748        $completer_table = "${table}_completer_table";
    4849        $source_identique = true;
     
    6162        // Cela permet de s'assurer que chaque élément du tableau de sortie aura la même structure
    6263        // quelque soit les données lues dans la source.
    63         $enregistrement_defaut = initialiser_enregistrement($table, $config['basic_fields']);
     64        $config_unused = isset($config['unused_fields']) ? $config['unused_fields'] : array();
     65        $enregistrement_defaut = initialiser_enregistrement($table, $config['basic_fields'], $config_unused);
    6466
    6567        // Récupération du contenu du fichier ou de la page HTML source et du sha associé. Pour les fichiers CSV
     
    107109                                        ksort($cle_primaire);
    108110                                        $cle_primaire = implode(',', $cle_primaire);
    109                                         if (!in_array($cle_primaire, $liste_cles_primaires)) {
     111                                        $index_enregistrement = array_search($cle_primaire, $liste_cles_primaires);
     112                                        if ($index_enregistrement === false) {
    110113                                                // On rajoute cette clé dans la liste
    111114                                                $liste_cles_primaires[] = $cle_primaire;
     
    134137                                                // Ajout de l'enregistrement finalisé dans la liste.
    135138                                                $enregistrements[] = $enregistrement;
     139                                        } elseif (function_exists($fusionner_enregistrement)) {
     140                                                $enregistrements = $fusionner_enregistrement(
     141                                                        $enregistrements,
     142                                                        $index_enregistrement,
     143                                                        $enregistrement,
     144                                                        $config
     145                                                );
    136146                                        } else {
    137147                                                spip_log("L'élément de clé primaire <${cle_primaire}> de la table <${table}> est en doublon", 'isocode' . _LOG_ERREUR);
     
    178188 * @param string $table
    179189 *      Nom de la table concernée par la lecture sans le préfixe `spip_`.
    180  * @param array  $config_champs
     190 * @param array  $config_source
    181191 *      Configuration de la correspondance entre le nom de la donnée dans la source
    182192 *      et celui du champ dans la table.
     
    184194 * @return array
    185195 */
    186 function initialiser_enregistrement($table, $config_champs) {
     196function initialiser_enregistrement($table, $config_source, $config_unused = array()) {
    187197
    188198        $enregistrement = array();
     
    194204
    195205        if (!empty($description['field'])) {
    196                 foreach ($config_champs as $_champ) {
     206                foreach ($config_source as $_champ) {
    197207                        if (isset($description['field'][$_champ])) {
    198208                                // On normalise la description du champ en supprimant les espaces inutiles
     
    227237                                        break;
    228238                                }
     239                        } elseif (isset($config_unused[$_champ])) {
     240                                // Le champ appartient à la source mais n'est pas stocké en base. On l'initialise avec la valeur fournie
     241                                // par la configuration.
     242                                $enregistrement[$_champ] = $config_unused[$_champ];
    229243                        } else {
    230244                                // On a un problème de configuration: on le trace et on arrête la boucle.
  • _plugins_/isocode/trunk/services/iso/iso_api.php

    r118146 r118151  
    168168        'iso3166subdivisions' => array(
    169169                'basic_fields' => array(
    170                         'Ccy'        => 'code_3166_2',
    171                         'CcyNbr'     => 'country',
    172                         'CcyNm'      => 'type',
    173                         'CcyMnrUnts' => 'parent',
     170                        '3166-2 code'          => 'code_3166_2',
     171                        'Country'              => 'country',
     172                        'Subdivision category' => 'type',
     173                        'Parent subdivision'   => 'parent',
     174                        'Language code'        => 'language',
     175                        'Subdivision name'     => 'label',
     176                ),
     177                'unused_fields' => array(
     178                        'language'        => '',
    174179                ),
    175180                'addon_fields' => array(
    176181                        'insee'    => array(
    177                                 'parent'         => 'code_specific',
     182                                'ccnr'         => 'code_specific',
    178183                        )
    179184                ),
    180185                'populating'   => 'file_csv',
    181                 'delimiter'    => ';',
     186                'delimiter'    => "\t",
    182187                'extension'    => '.txt',
    183188        ),
     
    438443
    439444
     445function iso3166subdivisions_completer_enregistrement($enregistrement, $config) {
     446
     447        // La finalisation de l'enregistrement consiste à élaborer la version multilangue du champ label
     448        // en considérant le champ language qui contient le codet alpha2 de la langue.
     449        // Cette fonction est appelée pour le premier enregistrement ayant la clé primaire concernée, les autres
     450        // enregistrements avec cette même clé sont traités dans la fonction fusionner_enregistrement().
     451        // De fait, le champ label ne contient que le texte sans multi.
     452        $enregistrement['label'] = "<multi>[{$enregistrement['language']}]"
     453                . $enregistrement['label']
     454                .'</multi>';
     455
     456        // On supprime maintenant le champ language qui ne sert plus à rien
     457        unset($enregistrement['language']);
     458
     459        return $enregistrement;
     460}
     461
     462
     463function iso3166subdivisions_fusionner_enregistrement($enregistrements, $index_enregistrement, $enregistrement, $config) {
     464
     465        // Cette fonction est appelée alors qu'il existe au moins un premier enregistrement ayant la clé primaire concernée.
     466        // De fait, il suffit de compléter le champ label avec la traduction dans la langue de l'enregistrement coourant.
     467        $label = $enregistrements[$index_enregistrement]['label'];
     468        $enregistrements[$index_enregistrement]['label'] = '<multi>'
     469                . extraire_balise($label, 'multi')
     470                . "[{$enregistrement['language']}]"
     471                . $enregistrement['label']
     472                . '</multi>';
     473
     474        return $enregistrements;
     475}
     476
    440477function iso4217currencies_completer_table($enregistrements, $config) {
    441478
Note: See TracChangeset for help on using the changeset viewer.