Changeset 125295 in spip-zone


Ignore:
Timestamp:
Jun 24, 2020, 12:41:46 PM (3 weeks ago)
Author:
Eric Lupinacci
Message:

Une collection subdivisions qui renvoie tout ce qu'on veut.

Location:
_plugins_/isocode/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/isocode/trunk

    • Property subgit:lock:26a1ba482b8a6de7872d2370a87d6b9abe43205a deleted
    • Property subgit:lock:8eb373088384ede86f0e2b825df96371f1f4c6eb set to 2020-06-24T14:41:53.607
  • _plugins_/isocode/trunk/ezrest/isocode.php

    r125283 r125295  
    2525);
    2626
     27$GLOBALS['isocode']['subdivisions']['champs'] = array(
     28        'code_3166_2' => 'iso_subdivision',
     29        'country'     => 'iso_pays',
     30        'type'        => 'categorie',
     31        'parent'      => 'iso_parent',
     32        'label'       => 'iso_titre',
     33);
     34
    2735// -----------------------------------------------------------------------
    2836// -------------------------- COLLECTION PAYS ----------------------------
     
    5159        $from = array('spip_iso3166countries');
    5260        // -- Tous le champs sauf les labels par langue et la date de mise à jour.
    53         $description_table = sql_showtable('spip_iso3166countries');
     61        $description_table = sql_showtable($from[0]);
    5462        $champs = array_keys($description_table['field']);
    5563        $champs = array_diff($champs, array('label_fr', 'label_en', 'maj'));
     
    114122        return $est_valide;
    115123}
     124
     125
     126// -----------------------------------------------------------------------
     127// ---------------------- COLLECTION SUBDIVISIONS ------------------------
     128// -----------------------------------------------------------------------
     129
     130/**
     131 * Récupère la liste des subdivisions de la table spip_iso3166subdivisions éventuellement filtrés par les critères
     132 * additionnels positionnés dans la requête.
     133 *
     134 * @param array $conditions    Conditions à appliquer au select
     135 * @param array $filtres       Tableau des critères de filtrage additionnels à appliquer au select.
     136 * @param array $configuration Configuration de la collection utile pour savoir quelle fonction appeler pour
     137 *                             construire chaque filtre.
     138 *
     139 * @return array Tableau des subdivisions et par défaut des codes alternatifs et de la liste des pays.
     140 */
     141function subdivisions_collectionner($conditions, $filtres, $configuration) {
     142
     143        // Initialisation de la collection
     144        $subdivisions = array();
     145
     146        // Récupérer la liste des subdivisions (filtrée ou pas par pays ou par type de subdivision).
     147        $from = 'spip_iso3166subdivisions';
     148        // -- Tous le champs sauf les labels par langue et la date de mise à jour.
     149        $description_table = sql_showtable($from);
     150        $champs = array_keys($description_table['field']);
     151        $champs = array_diff($champs, array('maj'));
     152        // -- Traduire les champs de Isocode en champs pour Subdivisions
     153        $select = array();
     154        foreach ($champs as $_champ) {
     155                $select[] = "${_champ} as {$GLOBALS['isocode']['subdivisions']['champs'][$_champ]}";
     156        }
     157
     158        // -- Initialisation du where: aucune condition par défaut.
     159        $where = array();
     160        // -- Si il y a des critères additionnels on complète le where en conséquence.
     161        if ($conditions) {
     162                $where = array_merge($where, $conditions);
     163        }
     164        // -- Rangement de la liste dans l'index subdivisions
     165        $subdivisions['subdivisions'] = sql_allfetsel($select, $from, $where);
     166
     167        // La liste est enrichie par défaut:
     168        // -- des codes alternatifs disponibles dans iso3166alternates
     169        // -- de la liste des pays concernés par les codes renvoyés
     170        // Ces données supplémentaires peuvent être exclues en utilisant le filtre 'exclure'
     171        //
     172        // -- Ajout des codes alternatifs si non exclus explicitement
     173        if (empty($filtres['exclure'])
     174                or (
     175                        !empty($filtres['exclure'])
     176                        and (strpos('alternates', $filtres['exclure']) === false)
     177                )
     178        ) {
     179                // on construit la condition sur la table de liens à partir des codes ISO des subdivisions
     180                $where = array();
     181                $codes_subdivision = array_column($subdivisions['subdivisions'], 'iso_subdivision');
     182                $where[] = sql_in('code_3166_2', $codes_subdivision);
     183
     184                $alternates = sql_allfetsel('*', 'spip_iso3166alternates', $where);
     185                if ($alternates) {
     186                        $alternates = array_column($alternates, null, 'code_3166_2');
     187                }
     188                $subdivisions['codes_alternatifs'] = $alternates;
     189        }
     190
     191        // -- Ajout de la liste des pays concernés par les subdivisions sauf si exclu
     192        if (empty($filtres['exclure'])
     193                or (
     194                        !empty($filtres['exclure'])
     195                        and (strpos('pays', $filtres['exclure']) === false)
     196                )
     197        ) {
     198                $pays = array();
     199                foreach($subdivisions['subdivisions'] as $_subdivision) {
     200                        if (!in_array($_subdivision['iso_pays'], $pays)) {
     201                                $pays[] = $_subdivision['iso_pays'];
     202                        }
     203                }
     204                $subdivisions['pays'] = $pays;
     205        }
     206
     207        return $subdivisions;
     208}
     209
     210/**
     211 * Evite que le filtre exclure ne soit considéré comme une condition SQL.
     212 * Il sera traité dans la fonction collectionner pour supprimer des données dans le contenu de la requête.
     213 *
     214 * @param string $valeur Valeur du critère `exclure`.
     215 *
     216 * @return string Toujours la chaine vide.
     217 */
     218function subdivisions_conditionner_exclure($valeur) {
     219
     220        return '';
     221}
  • _plugins_/isocode/trunk/isocode_pipelines.php

    r118610 r125295  
    3232                'cache'     => array(
    3333                        'type'  => 'ezrest',
    34                         'duree' => 3600 * 24 * 30
     34                        'duree' => 1 //3600 * 24 * 30
    3535                ),
    3636                'filtres'   => array(
    3737                        array(
    3838                                'critere'         => 'pays',
    39                                 'est_obligatoire' => true,
     39                                'est_obligatoire' => false,
    4040                                'champ_nom'       => 'country',
    4141                                'champ_table'     => 'iso3166subdivisions'
     
    4646                                'champ_nom'       => 'type',
    4747                                'champ_table'     => 'iso3166subdivisions'
     48                        ),
     49                        array(
     50                                'critere'         => 'exclure', // Ce n'est pas un filtre conditionnel mais une option de contenu
     51                                'est_obligatoire' => false,
    4852                        ),
    4953                )
Note: See TracChangeset for help on using the changeset viewer.