Browse Source

Création d'un nouveau type de service infrasubdivision pour permettre de gérer la nomenclature des infra subdivisions des pays.

Ajout des infra subdivisions de la france : communes et arrondisssements (pas de cantons pour l'instant).
svn/root/trunk
Eric Lupinacci 7 months ago
parent
commit
a890a4ae60
  1. 25
      base/isocode_declarations.php
  2. 127
      ezrest/isocode.php
  3. 87
      ezrest/isocode_openapi.schema.yaml
  4. 2
      formulaires/isocode_peupler.php
  5. 15
      inc/isocode.php
  6. 9
      isocode_administrations.php
  7. 32
      isocode_pipelines.php
  8. 98
      lang/isocode_fr.php
  9. 6
      paquet.xml
  10. 14
      prive/squelettes/contenu/isocode_infrasubdivision.html
  11. 6
      prive/squelettes/inclure/inc-navigation_isocode.html
  12. 3
      prive/squelettes/navigation/isocode_infrasubdivision.html
  13. 109
      services/infrasubdivision/infrasubdivision_api.php
  14. 333
      services/infrasubdivision/inseearrond_2019.csv
  15. 37931
      services/infrasubdivision/inseecommune_2019.csv

25
base/isocode_declarations.php

@ -267,13 +267,34 @@ function isocode_declarer_tables_principales($tables_principales) {
$tables_principales['spip_iso3166subdivisions'] =
array('field' => &$table_subdivisions, 'key' => &$table_subdivisions_key);
// -------------------------------------------------------------------------------------
// Table des infra subdivisions géographiques des pays (arborescence) avec un code spécifiques : spip_infrasubdivisions
$table_infra_subdivisions = array(
'service' => "varchar(30) DEFAULT '' NOT NULL", // le nom du service
'code' => "varchar(20) DEFAULT '' NOT NULL", // Specific identifier based on alpha2 country and specific code XX-YYY
'country' => "char(2) DEFAULT '' NOT NULL", // The two-letter identifier (ISO 3166 alpha2)
'type' => "varchar(48) DEFAULT '' NOT NULL", // Specific type by country in english (department, land...)
'parent' => "varchar(20) DEFAULT '' NOT NULL", // The identifier of parent
'label' => "text DEFAULT '' NOT NULL", // Multilangage name
'maj' => 'timestamp DEFAULT current_timestamp ON UPDATE current_timestamp'
);
$table_infra_subdivisions_key = array(
'PRIMARY KEY' => 'service,code',
'KEY type' => 'type',
'KEY country' => 'country',
);
$tables_principales['spip_infrasubdivisions'] =
array('field' => &$table_infra_subdivisions, 'key' => &$table_infra_subdivisions_key);
// -------------------------------------------------------------------------------------
// Table des codes alternatifs à l'ISO 3166-2 (nationaux ou supra-nationaux) : spip_iso3166alternates
// C'est en quelque sorte une table de liens qui fonctionne avec les codes et pas un id.
$table_alternates = array(
"code_iso" => "varchar(6) DEFAULT '' NOT NULL",
"code_iso" => "varchar(20) DEFAULT '' NOT NULL",
"type_alter" => "varchar(16) DEFAULT '' NOT NULL",
"code_alter" => "varchar(10) DEFAULT '' NOT NULL",
"code_alter" => "varchar(20) DEFAULT '' NOT NULL",
);
$table_alternates_key = array(

127
ezrest/isocode.php

@ -287,6 +287,133 @@ function subdivisions_conditionner_pays($valeur) {
}
// -----------------------------------------------------------------------
// ------------------- COLLECTION INFRASUBDIVISIONS ----------------------
// -----------------------------------------------------------------------
/**
* Récupère la liste des subdivisions de la table spip_iso3166subdivisions éventuellement filtrés par les critères
* additionnels positionnés dans la requête.
*
* @param array $conditions Conditions à appliquer au select
* @param array $filtres Tableau des critères de filtrage additionnels à appliquer au select.
* @param array $configuration Configuration de la collection utile pour savoir quelle fonction appeler pour
* construire chaque filtre.
*
* @return array Tableau des subdivisions et par défaut des codes alternatifs et de la liste des pays.
*/
function infrasubdivisions_collectionner($conditions, $filtres, $configuration) {
// Initialisation de la collection
$subdivisions = array();
// Récupérer la liste des subdivisions (filtrée ou pas par pays ou par type de subdivision).
$from = 'spip_infrasubdivisions';
// -- Tous le champs sauf les labels par langue et la date de mise à jour.
$description_table = sql_showtable($from, true);
$champs = array_keys($description_table['field']);
$select = array_diff($champs, array('maj'));
// -- Initialisation du where: aucune condition par défaut.
$where = array();
// -- Si il y a des critères additionnels on complète le where en conséquence.
if ($conditions) {
$where = array_merge($where, $conditions);
}
// -- Rangement de la liste dans l'index subdivisions
$subdivisions['infrasubdivisions'] = sql_allfetsel($select, $from, $where);
// La liste est enrichie par défaut:
// -- des codes alternatifs disponibles dans iso3166alternates
// -- de la liste des pays concernés par les codes renvoyés
// Ces données supplémentaires peuvent être exclues en utilisant le filtre 'exclure'
//
// -- Ajout des codes alternatifs si non exclus explicitement
if (empty($filtres['exclure'])
or (
!empty($filtres['exclure'])
and (strpos($filtres['exclure'], 'alternates') === false)
)
) {
// on construit la condition sur la table de liens à partir des codes ISO des subdivisions
$where = array();
$codes_subdivision = array_column($subdivisions['infrasubdivisions'], 'code');
$where[] = sql_in('code_iso', $codes_subdivision);
$codes = sql_allfetsel('*', 'spip_iso3166alternates', $where);
$subdivisions['codes_alternatifs'] = $codes;
}
// -- Ajout de la liste des pays concernés par les subdivisions sauf si exclu
if (empty($filtres['exclure'])
or (
!empty($filtres['exclure'])
and (strpos($filtres['exclure'], 'pays') === false)
)
) {
// Liste des codes 3166-1 alpha2 et du nom multi
$pays = array();
foreach($subdivisions['infrasubdivisions'] as $_subdivision) {
if (!in_array($_subdivision['country'], $pays)) {
$where = array('code_alpha2=' . sql_quote($_subdivision['country']));
if ($nom = sql_getfetsel('label', 'spip_iso3166countries', $where)) {
$pays[$_subdivision['country']] = $nom;
}
}
}
$subdivisions['pays'] = $pays;
if (
!empty($filtres['exclure'])
and (strpos($filtres['exclure'], 'infrasubdivisions') !== false)
) {
// -- On peut exclure aussi la liste des subdivisions pour n'avoir que les pays possédant une subdivisions
// Pour cela il ne faut pas avoir exclu la liste des pays car sinon le payload peut être vide.
// Cela allège le flux des données.
unset($subdivisions['infrasubdivisions']);
}
}
return $subdivisions;
}
/**
* Evite que le filtre exclure ne soit considéré comme une condition SQL.
* Il sera traité dans la fonction collectionner pour supprimer des données dans le contenu de la requête.
*
* @param string $valeur Valeur du critère `exclure`.
*
* @return string Toujours la chaine vide.
*/
function infrasubdivisions_conditionner_exclure($valeur) {
return '';
}
/**
* Calcule la condition du filtre pays pour lequel il est possible de passer une liste de codes de pays séparés
* par une virgule.
*
* @param string $valeur Valeur du critère `exclure`.
*
* @return string Toujours la chaine vide.
*/
function infrasubdivisions_conditionner_pays($valeur) {
$condition = '';
if ($valeur) {
if (strpos($valeur, ',') === false) {
$condition = 'country=' . sql_quote($valeur);
} else {
$pays = explode(',', $valeur);
$condition = sql_in('country', $pays);
}
}
return $condition;
}
// -----------------------------------------------------------------------
// ------------------------ COLLECTION CONTOURS --------------------------
// -----------------------------------------------------------------------

87
ezrest/isocode_openapi.schema.yaml

@ -31,6 +31,8 @@ tags:
description: Nomenclatures et informations sur les pays du monde
- name: subdivisions
description: Nomenclatures et informations sur les subdivisions territoriales
- name: infrasubdivisions
description: Nomenclatures sur les infra subdivisions territoriales
- name: contours
description: Contours géographiques des territoires
- name: admin
@ -45,7 +47,7 @@ paths:
operationId: getContinents
responses:
'200':
$ref: '#/components/responses/zoneSucces'
$ref: '#/components/responses/continentSucces'
/zones:
get:
tags:
@ -69,13 +71,14 @@ paths:
description: Le code geoIP du continent
required: false
schema:
$ref: '#/components/schemas/CodeAlpha2'
$ref: '#/components/schemas/CodeGeoIP'
- name: zone
in: query
description: Le code UN M49 de la zone
required: false
schema:
$ref: '#/components/schemas/CodeNum3'
example: '002'
responses:
'200':
$ref: '#/components/responses/zoneSucces'
@ -95,6 +98,7 @@ paths:
required: true
schema:
$ref: '#/components/schemas/CodeAlpha2'
example: 'FR'
responses:
'200':
$ref: '#/components/responses/zoneSucces'
@ -126,6 +130,38 @@ paths:
$ref: '#/components/responses/zoneSucces'
'400':
$ref: '#/components/responses/parametreErreur'
/infrasubdivisions:
get:
tags:
- infrasubdivisions
summary: Liste des infra subdivisions territoriales
description: Renvoie la liste des infra subdivisions filtrée ou pas
operationId: getInfraSubdivisions
parameters:
- name: service
in: query
description: L'identifiant du service
required: true
schema:
$ref: '#/components/schemas/Identifiant'
- $ref: '#/components/parameters/paysParametre'
- name: type
in: query
description: Le type de subdivision au sens de l'ISO 3166-2
required: false
schema:
$ref: '#/components/schemas/Identifiant'
- name: exclure
in: query
description: liste des index à exclure de la réponse
required: false
schema:
type: string
responses:
'200':
$ref: '#/components/responses/zoneSucces'
'400':
$ref: '#/components/responses/parametreErreur'
/contours:
get:
tags:
@ -140,10 +176,7 @@ paths:
required: true
schema:
type: string
enum:
- 'zone'
- 'country'
- 'subdivision'
enum: ['zone', 'country', 'subdivision']
- name: service
in: query
description: L'identifiant du service
@ -170,9 +203,7 @@ paths:
required: false
schema:
type: string
enum:
- 'nomenclature'
- 'geometrie'
enum: ['nomenclature', 'geometrie']
responses:
'200':
$ref: '#/components/responses/zoneSucces'
@ -184,6 +215,9 @@ components:
CodeNum3:
type: string
pattern: '^[0-9]{3}$'
CodeGeoIP:
type: string
enum: ['AF', 'NA', 'OC', 'AN', 'AS', 'EU', 'SA']
Identifiant:
type: string
pattern: '^[a-z0-9_]+$'
@ -243,6 +277,24 @@ components:
detail:
type: string
required: ['status', 'type', 'element', 'valeur', 'titre', 'detail']
BlocDonneesContinent:
type: object
properties:
continents:
type: array
items:
type: object
properties:
code:
$ref: '#/components/schemas/CodeAlpha2'
code_M49:
$ref: '#/components/schemas/CodeNum3'
nom:
type: string
example:
code: AS
code_num: '142'
nom: '<multi>[fr]Asie[en]Asia</multi>'
BlocDonneesZone:
type: object
properties:
@ -276,7 +328,7 @@ components:
label:
type: string
example:
'142': {code: AS, code_num: '142', label: '<multi>[fr]Asie[en]Asia</multi>'}
'142': {code: AS, code_num: '142', label: '<multi>[fr]Asie[en]Asia</multi>'}
BlocDonnees:
type: object
parameters:
@ -288,6 +340,21 @@ components:
schema:
$ref: '#/components/schemas/CodeAlpha2'
responses:
continentSucces:
description: la requête a été traitée avec succès
content:
application/json:
schema:
type: object
properties:
donnees:
$ref: '#/components/schemas/BlocDonneesContinent'
erreur:
$ref: '#/components/schemas/BlocErreur'
fournisseur:
$ref: '#/components/schemas/BlocFournisseur'
requete:
$ref: '#/components/schemas/BlocRequete'
zoneSucces:
description: la requête a été traitée avec succès
content:

2
formulaires/isocode_peupler.php

@ -13,6 +13,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* à savoir, charger ou vider et la liste des tables regroupées par service.
* L'action vider s'appelle décharger car il existe dékà une fonction d'administration de vidage des tables.
*
* @param string $type Type de service. Prend les valeurs `nomenclature`, `infra_subdivision` ou `geometrie`.
*
* @return array
* Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un
* champ de saisie, celle-ci sont systématiquement remises à zéro.

15
inc/isocode.php

@ -20,10 +20,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @uses lire_source()
* @uses isocode_decharger_tables()
*
* @param string $type Type de service. Prend les valeurs `nomenclature` ou `geometrie`.
* @param array $services
* Liste des tables (nomenclature) ou des contours (geometrie) à charger.
* Si le tableau est vide l'ensemble des éléments du type choisi seront chargés.
* @param string $type Type de service. Prend les valeurs `nomenclature`, `infrasubdivision` ou `geometrie`.
* @param string $table
* @param string $service
*
* @return array
* Tableau associatif résultat de l'action de vidage:
@ -190,11 +189,11 @@ function isocode_lister_services($type) {
}
}
}
} elseif ($type === 'geometrie') {
} else {
// Contours géométriques : les services sont décrits dans la configuration incluse dans le fichier
// geometrie_api.php
include_spip("services/${type}/${type}_api");
$services[$type] = array_keys($GLOBALS['isocode']['geometrie']);
$services[$type] = array_keys($GLOBALS['isocode'][$type]);
}
}
@ -242,7 +241,7 @@ function isocode_trouver_service($type, $table) {
break;
}
}
} elseif ($type === 'geometrie') {
} else {
// Détermination du ou des services pour le type géométrie
include_spip("services/${type}/${type}_api");
foreach ($services[$type] as $_service) {
@ -295,7 +294,7 @@ function isocode_lister_tables($type, $avec_groupes = false) {
}
}
}
} elseif ($type === 'geometrie') {
} else {
// Un service ne concerne qu'une seule table
include_spip("services/${type}/${type}_api");
foreach ($services as $_service) {

9
isocode_administrations.php

@ -39,6 +39,15 @@ function isocode_upgrade($nom_meta_base_version, $version_cible) {
),
);
$maj['2'] = array(
array(
'maj_tables',
array('spip_infrasubdivisions')
),
array('sql_alter', "TABLE spip_iso3166alternates CHANGE code_iso code_iso varchar(20) DEFAULT '' NOT NULL"),
array('sql_alter', "TABLE spip_iso3166alternates CHANGE code_alter code_alter varchar(20) DEFAULT '' NOT NULL"),
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}

32
isocode_pipelines.php

@ -93,6 +93,38 @@ function isocode_liste_ezcollection($collections) {
)
);
$collections['infrasubdivisions'] = array(
'module' => 'isocode',
'cache' => array(
'type' => 'ezrest',
'duree' => 3600 * 24 * 30
),
'filtres' => array(
array(
'critere' => 'service',
'est_obligatoire' => false,
'champ_nom' => 'service',
'champ_table' => 'infrasubdivisions'
),
array(
'critere' => 'pays',
'est_obligatoire' => false,
'champ_nom' => 'country',
'champ_table' => 'infrasubdivisions'
),
array(
'critere' => 'type',
'est_obligatoire' => false,
'champ_nom' => 'type',
'champ_table' => 'infrasubdivisions'
),
array(
'critere' => 'exclure', // Ce n'est pas un filtre conditionnel mais une option de contenu
'est_obligatoire' => false,
),
),
);
$collections['contours'] = array(
'module' => 'isocode',
'cache' => array(

98
lang/isocode_fr.php

@ -10,14 +10,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'bouton_isocode' => 'Nomenclatures officielles',
// E
'erreur_400_zone_nok_titre' => 'La zone géographique d\'identifiant « @valeur@ » est invalide',
'erreur_400_zone_nok_message' => 'La zone géographique doit être désignée par son identifiant UN M49 (3 chiffres)',
'erreur_400_continent_nok_titre' => 'Le continent d\'identifiant « @valeur@ » est invalide',
'erreur_400_continent_nok_message' => 'Le continent doit être désignée par son identifiant GeoIP (2 lettres)',
'erreur_charger' => 'Erreur de chargement pour « @elements@ ».',
'erreur_decharger' => 'Erreur de vidage pour « @elements@ ».',
'explication_action_nomenclature' => 'Si les tables sont déjà chargées en base de données elle seront vidées avant le chargement.',
'explication_action_geometrie' => 'Si les contours sont déjà chargés en base de données ils seront vidés avant le chargement.',
'erreur_400_zone_nok_titre' => 'La zone géographique d\'identifiant « @valeur@ » est invalide',
'erreur_400_zone_nok_message' => 'La zone géographique doit être désignée par son identifiant UN M49 (3 chiffres)',
'erreur_400_continent_nok_titre' => 'Le continent d\'identifiant « @valeur@ » est invalide',
'erreur_400_continent_nok_message' => 'Le continent doit être désignée par son identifiant GeoIP (2 lettres)',
'erreur_charger' => 'Erreur de chargement pour « @elements@ ».',
'erreur_decharger' => 'Erreur de vidage pour « @elements@ ».',
'explication_action_nomenclature' => 'Si les tables sont déjà chargées en base de données elle seront vidées avant le chargement.',
'explication_action_geometrie' => 'Si les contours sont déjà chargés en base de données ils seront vidés avant le chargement.',
'explication_action_infrasubdivision' => 'Si les infra subdivisions sont déjà chargées en base de données elles seront vidées avant le chargement.',
// G
'geometrie_urssafregfr' => 'Contours des régions françaises, URSSAF',
@ -26,53 +27,60 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'geometrie_ne50mcountries' => 'Contours des pays au 1:50m, Natural Earth',
// I
'info_charge' => 'chargé',
'info_charge' => 'chargé',
'infrasubdivision_inseearrond' => 'Arrondissements français selon l\'INSEE',
'infrasubdivision_inseecommune' => 'Communes et arrondissements municipaux français selon l\'INSEE',
// L
'label_action_charger' => 'Charger',
'label_action' => 'Action à exécuter',
'label_action_decharger' => 'Vider',
'label_colonne_actualisation' => 'Actualisé le',
'label_colonne_libelle' => 'Description',
'label_colonne_service' => 'Service',
'label_colonne_statistiques' => 'Compteur',
'label_colonne_table' => 'Table',
'label_element_geometrie' => 'Contours sur lesquels appliquer l\'action',
'label_element_nomenclature' => 'Tables sur lesquelles appliquer l\'action',
'label_groupe_langue' => 'Langues',
'label_groupe_geographie' => 'Informations géographiques',
'label_action_charger' => 'Charger',
'label_action' => 'Action à exécuter',
'label_action_decharger' => 'Vider',
'label_colonne_actualisation' => 'Actualisé le',
'label_colonne_libelle' => 'Description',
'label_colonne_service' => 'Service',
'label_colonne_statistiques' => 'Compteur',
'label_colonne_table' => 'Table',
'label_element_geometrie' => 'Contours sur lesquels appliquer l\'action',
'label_element_infrasubdivision' => 'Infra subdivisions sur lesquelles appliquer l\'action',
'label_element_nomenclature' => 'Tables sur lesquelles appliquer l\'action',
'label_groupe_langue' => 'Langues',
'label_groupe_geographie' => 'Informations géographiques',
// M
'menu_nomenclature' => 'Nomenclatures',
'menu_geometrie' => 'Contours géométriques',
'menu_infrasubdivision' => 'Infra subdivisions',
'menu_nomenclature' => 'Nomenclatures internationales',
'menu_geometrie' => 'Contours géométriques',
// N
'nomenclature_geoipcontinents' => 'table des codes GeoIP des continents',
'nomenclature_iana5646subtags' => 'table reproduisant le registre IANA des sous-étiquettes de langues (RFC 5646)',
'nomenclature_iso15924scripts' => 'table des indicatifs d\'écritures (ISO 15924)',
'nomenclature_iso3166alternates' => 'table des codes alternatifs des subdivisions',
'nomenclature_iso3166countries' => 'table des indicatifs des pays (ISO 3166-1)',
'nomenclature_iso3166subdivisions' => 'table des indicatifs des subdivisions des pays (ISO 3166-2)',
'nomenclature_m49regions' => 'table des indicatifs des régions du monde selon l\'ONU (UN M.49)',
'nomenclature_iso4217currencies' => 'table des devises (ISO 4217)',
'nomenclature_iso639codes' => 'table principale des codes de langue (ISO 639-1,2 et 3)',
'nomenclature_iso639families' => 'table des familles et groupes de langues (ISO 639-5)',
'nomenclature_iso639macros' => 'table des macrolangues',
'nomenclature_iso639names' => 'table des noms de langues',
'nomenclature_iso639retirements' => 'table des langues supprimées',
'notice_charger' => 'Aucune mise à jour nécessaire pour « @elements@ ».',
'notice_geometrie_aucun_chargement' => 'Aucun contour géométrique n\'a encore été chargé en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
'notice_nomenclature_aucun_chargement' => 'Aucune table de nomenclatures n\'a encore été chargée en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
'nomenclature_geoipcontinents' => 'table des codes GeoIP des continents',
'nomenclature_iana5646subtags' => 'table reproduisant le registre IANA des sous-étiquettes de langues (RFC 5646)',
'nomenclature_iso15924scripts' => 'table des indicatifs d\'écritures (ISO 15924)',
'nomenclature_iso3166alternates' => 'table des codes alternatifs des subdivisions',
'nomenclature_iso3166countries' => 'table des indicatifs des pays (ISO 3166-1)',
'nomenclature_iso3166subdivisions' => 'table des indicatifs des subdivisions des pays (ISO 3166-2)',
'nomenclature_m49regions' => 'table des indicatifs des régions du monde selon l\'ONU (UN M.49)',
'nomenclature_iso4217currencies' => 'table des devises (ISO 4217)',
'nomenclature_iso639codes' => 'table principale des codes de langue (ISO 639-1,2 et 3)',
'nomenclature_iso639families' => 'table des familles et groupes de langues (ISO 639-5)',
'nomenclature_iso639macros' => 'table des macrolangues',
'nomenclature_iso639names' => 'table des noms de langues',
'nomenclature_iso639retirements' => 'table des langues supprimées',
'notice_charger' => 'Aucune mise à jour nécessaire pour « @elements@ ».',
'notice_geometrie_aucun_chargement' => 'Aucun contour géométrique n\'a encore été chargé en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
'notice_infrasubdivision_aucun_chargement' => 'Aucune infra subdivision n\'a encore été chargée en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
'notice_nomenclature_aucun_chargement' => 'Aucune table de nomenclatures n\'a encore été chargée en base de données. Utiliser le formulaire ci-dessous pour y remédier.',
// S
'succes_charger' => 'Chargement ok pour « @elements@ ».',
'succes_decharger' => 'Vidage ok pour « @elements@ ».',
// T
'titre_form_gerer_table' => 'Vider ou charger des tables',
'titre_form_gerer_geometrie' => 'Vider ou charger des ensembles de contours géographiques',
'titre_liste_tables' => 'Liste des nomenclatures officielles chargées en base de données',
'titre_liste_geometries' => 'Liste des contours géométriques chargés en base de données',
'titre_page_geometrie' => 'Gestion des contours géométriques',
'titre_page_nomenclature' => 'Gestion des nomenclatures',
'titre_form_gerer_table' => 'Vider ou charger des tables',
'titre_form_gerer_geometrie' => 'Vider ou charger des ensembles de contours géographiques',
'titre_liste_tables' => 'Liste des nomenclatures officielles chargées en base de données',
'titre_liste_geometries' => 'Liste des contours géométriques chargés en base de données',
'titre_liste_infrasubdivisions' => 'Liste des infra subdivisions chargées en base de données',
'titre_page_geometrie' => 'Gestion des contours géométriques',
'titre_page_infrasubdivision' => 'Gestion des infra subdivisions',
'titre_page_nomenclature' => 'Gestion des nomenclatures',
);

6
paquet.xml

@ -1,11 +1,11 @@
<paquet
prefix="isocode"
categorie="outil"
version="0.6.0"
etat="dev"
version="0.7.0"
etat="test"
compatibilite="[3.1.0;3.2.*]"
logo="isocode_logo-64.png"
schema="1"
schema="2"
>
<nom>Nomenclatures officielles</nom>

14
prive/squelettes/contenu/isocode_infrasubdivision.html

@ -0,0 +1,14 @@
[(#AUTORISER{webmestre}|sinon_interdire_acces)]
<h1 class="grostitre"><:isocode:titre_page_infrasubdivision:></h1>
[(#REM) <!-- Liste des infra subdivisions chargées --> ]
#SET{type_service, infrasubdivision}
<INCLURE{fond=prive/squelettes/liste/chargements,
titre=<:isocode:titre_liste_infrasubdivisions:>,
type_service=#GET{type_service},
sinon=<:isocode:notice_infrasubdivision_aucun_chargement:>,
env, ajax} />
[<div class="noajax">
(#FORMULAIRE_ISOCODE_PEUPLER{#GET{type_service}})
</div>]

6
prive/squelettes/inclure/inc-navigation_isocode.html

@ -6,6 +6,12 @@
<:isocode:menu_nomenclature:>,
[(#ENV{exec}|=={isocode_nomenclature})]})
</li>]
[<li class="item">
(#URL_ECRIRE{isocode_infrasubdivision}
|lien_ou_expose{
<:isocode:menu_infrasubdivision:>,
[(#ENV{exec}|=={isocode_infrasubdivision})]})
</li>]
[<li class="item">
(#URL_ECRIRE{isocode_geometrie}
|lien_ou_expose{

3
prive/squelettes/navigation/isocode_infrasubdivision.html

@ -0,0 +1,3 @@
[(#REM) <!-- Menu des onglets --> ]
<INCLURE{fond=prive/squelettes/inclure/inc-navigation_isocode,
env} />

109
services/infrasubdivision/infrasubdivision_api.php

@ -0,0 +1,109 @@
<?php
/**
* Ce fichier contient l'ensemble des constantes et fonctions implémentant le type de service INFRASUBDIVISION.
* Les services de INFRASUBDIVISION sont des mécanisme internes à Nomenclatures pour
* charger les codes nationaux des infra subdivisions fournis par des services divers.
*
* @package SPIP\ISOCODE\SERVICES\INFRASUBDIVISION
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS['isocode']['infrasubdivision'] = array(
'inseearrond' => array(
'table' => 'infrasubdivisions',
'type' => 'infra_subdivision',
'pays' => 'FR',
'basic_fields' => array(
'arr' => 'code',
'dep' => 'parent',
'nccenr' => 'label_fr',
),
'static_fields' => array(
'service' => '$service',
'type' => 'arrondissement',
'country' => '/pays',
),
'unused_fields' => array(
'label_fr' => '',
),
'label_field' => true,
'populating' => 'file_csv',
'multiple' => true,
'delimiter' => ",",
'extension' => '.csv',
),
'inseecommune' => array(
'table' => 'infrasubdivisions',
'type' => 'infra_subdivision',
'pays' => 'FR',
'basic_fields' => array(
'typecom' => 'type',
'com' => 'code',
'arr' => 'parent',
'nccenr' => 'label_fr',
'can' => 'can',
'comparent' => 'comparent',
),
'static_fields' => array(
'service' => '$service',
'country' => '/pays',
),
'unused_fields' => array(
'can' => '',
'comparent' => '',
'label_fr' => '',
),
'label_field' => true,
'populating' => 'file_csv',
'multiple' => true,
'delimiter' => ",",
'extension' => '.csv',
),
);
// -----------------------------------------------------------------------------------
// ---------- API du type de service INFRASUBDIVISION - Actions principales ----------
// -----------------------------------------------------------------------------------
function inseearrond_completer_element($element, $config) {
// Cette fonction permet d'apporter des corrections au champs déjà compilés : attention on a encore les index source !!!
// - modifier l'identifiant de l'arrondissement
$element['arr'] = 'FR-' . $element['arr'];
// - Modifier l'identifiant du parent qui est une subdivision
$element['dep'] = 'FR-' . $element['dep'];
return $element;
}
function inseecommune_completer_element($element, $config) {
// Cette fonction permet d'apporter des corrections au champs déjà compilés : attention on a encore les index source !!!
// - modifier l'identifiant de l'arrondissement
$element['com'] = 'FR-' . $element['com'];
// - choisir le "bon" parent et modifier son identifiant
if ($element['comparent']) {
$element['arr'] = 'FR-' . $element['comparent'];
} else {
$element['arr'] = 'FR-' . $element['arr'];
}
// - affiner l'identifiant du type de commune
switch ($element['typecom']) {
case 'COMD':
$element['typecom'] = 'delegated_commune';
break;
case 'COMA':
$element['typecom'] = 'associated_commune';
break;
case 'ARM':
$element['typecom'] = 'municipal_arrondissement';
break;
default:
$element['typecom'] = 'commune';
}
return $element;
}

333
services/infrasubdivision/inseearrond_2019.csv

@ -0,0 +1,333 @@
arr,dep,nccenr
011,01,Belley
012,01,Bourg-en-Bresse
013,01,Gex
014,01,Nantua
021,02,Château-Thierry
022,02,Laon
023,02,Saint-Quentin
024,02,Soissons
025,02,Vervins
031,03,Montluçon
032,03,Moulins
033,03,Vichy
041,04,Barcelonnette
042,04,Castellane
043,04,Digne-les-Bains
044,04,Forcalquier
051,05,Briançon
052,05,Gap
061,06,Grasse
062,06,Nice
071,07,Largentière
072,07,Privas
073,07,Tournon-sur-Rhône
081,08,Charleville-Mézières
082,08,Rethel
083,08,Sedan
084,08,Vouziers
091,09,Foix
092,09,Pamiers
093,09,Saint-Girons
101,10,Bar-sur-Aube
102,10,Nogent-sur-Seine
103,10,Troyes
111,11,Carcassonne
112,11,Limoux
113,11,Narbonne
121,12,Millau
122,12,Rodez
123,12,Villefranche-de-Rouergue
131,13,Aix-en-Provence
132,13,Arles
133,13,Marseille
134,13,Istres
141,14,Bayeux
142,14,Caen
143,14,Lisieux
144,14,Vire
151,15,Aurillac
152,15,Mauriac
153,15,Saint-Flour
161,16,Angoulême
162,16,Cognac
163,16,Confolens
171,17,Jonzac
172,17,Rochefort
173,17,Rochelle
174,17,Saintes
175,17,Saint-Jean-d'Angély
181,18,Bourges
182,18,Saint-Amand-Montrond
183,18,Vierzon
191,19,Brive-la-Gaillarde
192,19,Tulle
193,19,Ussel
211,21,Beaune
212,21,Dijon
213,21,Montbard
221,22,Dinan
222,22,Guingamp
223,22,Lannion
224,22,Saint-Brieuc
231,23,Aubusson
232,23,Guéret
241,24,Bergerac
242,24,Nontron
243,24,Périgueux
244,24,Sarlat-la-Canéda
251,25,Besançon
252,25,Montbéliard
253,25,Pontarlier
261,26,Die
262,26,Nyons
263,26,Valence
271,27,Andelys
272,27,Bernay
273,27,Évreux
281,28,Chartres
282,28,Châteaudun
283,28,Dreux
284,28,Nogent-le-Rotrou
291,29,Brest
292,29,Châteaulin
293,29,Morlaix
294,29,Quimper
2A1,2A,Ajaccio
2A4,2A,Sartène
2B2,2B,Bastia
2B3,2B,Corte
2B5,2B,Calvi
301,30,Alès
302,30,Nîmes
303,30,Vigan
311,31,Muret
312,31,Saint-Gaudens
313,31,Toulouse
321,32,Auch
322,32,Condom
323,32,Mirande
331,33,Blaye
332,33,Bordeaux
333,33,Langon
334,33,Lesparre-Médoc
335,33,Libourne
336,33,Arcachon
341,34,Béziers
342,34,Lodève
343,34,Montpellier
351,35,Fougères-Vitré
352,35,Redon
353,35,Rennes
354,35,Saint-Malo
361,36,Blanc
362,36,Châteauroux
363,36,Châtre
364,36,Issoudun
371,37,Chinon
372,37,Tours
373,37,Loches
381,38,Grenoble
382,38,Tour-du-Pin
383,38,Vienne
391,39,Dole
392,39,Lons-le-Saunier
393,39,Saint-Claude
401,40,Dax
402,40,Mont-de-Marsan
411,41,Blois
412,41,Vendôme
413,41,Romorantin-Lanthenay
421,42,Montbrison
422,42,Roanne
423,42,Saint-Étienne
431,43,Brioude
432,43,Puy-en-Velay
433,43,Yssingeaux
442,44,Nantes
443,44,Saint-Nazaire
445,44,Châteaubriant-Ancenis
451,45,Montargis
452,45,Orléans
453,45,Pithiviers
461,46,Cahors
462,46,Figeac
463,46,Gourdon
471,47,Agen
472,47,Marmande
473,47,Villeneuve-sur-Lot
474,47,Nérac
481,48,Florac
482,48,Mende
491,49,Angers
492,49,Cholet
493,49,Saumur
494,49,Segré
501,50,Avranches
502,50,Cherbourg
503,50,Coutances
504,50,Saint-Lô
511,51,Châlons-en-Champagne
512,51,Épernay
513,51,Reims
514,51,Vitry-le-François
521,52,Chaumont
522,52,Langres
523,52,Saint-Dizier
531,53,Château-Gontier
532,53,Laval
533,53,Mayenne
541,54,Briey
542,54,Lunéville
543,54,Nancy
544,54,Toul
551,55,Bar-le-Duc
552,55,Commercy
553,55,Verdun
561,56,Lorient
562,56,Pontivy
563,56,Vannes
573,57,Forbach-Boulay-Moselle
575,57,Sarrebourg-Château-Salins
576,57,Sarreguemines
577,57,Thionville
579,57,Metz
581,58,Château-Chinon (Ville)
582,58,Clamecy
583,58,Nevers
584,58,Cosne-Cours-sur-Loire
591,59,Avesnes-sur-Helpe
592,59,Cambrai
593,59,Douai
594,59,Dunkerque
595,59,Lille
596,59,Valenciennes
601,60,Beauvais
602,60,Clermont
603,60,Compiègne
604,60,Senlis
611,61,Alençon
612,61,Argentan
613,61,Mortagne-au-Perche
621,62,Arras
622,62,Béthune
623,62,Boulogne-sur-Mer
624,62,Montreuil
625,62,Saint-Omer
626,62,Calais
627,62,Lens
631,63,Ambert
632,63,Clermont-Ferrand
633,63,Issoire
634,63,Riom
635,63,Thiers
641,64,Bayonne
642,64,Oloron-Sainte-Marie
643,64,Pau
651,65,Argelès-Gazost
652,65,Bagnères-de-Bigorre
653,65,Tarbes
661,66,Céret
662,66,Perpignan
663,66,Prades
672,67,Haguenau-Wissembourg
673,67,Molsheim
674,67,Saverne
675,67,Sélestat-Erstein
678,67,Strasbourg
681,68,Altkirch
682,68,Colmar-Ribeauvillé
684,68,Mulhouse
686,68,Thann-Guebwiller
691,69,Lyon
692,69,Villefranche-sur-Saône
701,70,Lure
702,70,Vesoul
711,71,Autun
712,71,Chalon-sur-Saône
713,71,Charolles
714,71,Louhans
715,71,Mâcon
721,72,Flèche
722,72,Mamers
723,72,Mans
731,73,Albertville
732,73,Chambéry
733,73,Saint-Jean-de-Maurienne
741,74,Annecy
742,74,Bonneville
743,74,Saint-Julien-en-Genevois
744,74,Thonon-les-Bains
751,75,Paris
761,76,Dieppe
762,76,Havre
763,76,Rouen
771,77,Meaux
772,77,Melun
773,77,Provins
774,77,Fontainebleau
775,77,Torcy
781,78,Mantes-la-Jolie
782,78,Rambouillet
783,78,Saint-Germain-en-Laye
784,78,Versailles
791,79,Bressuire
792,79,Niort
793,79,Parthenay
801,80,Abbeville
802,80,Amiens
803,80,Montdidier
804,80,Péronne
811,81,Albi
812,81,Castres
821,82,Castelsarrasin
822,82,Montauban
831,83,Draguignan
832,83,Toulon
833,83,Brignoles
841,84,Apt
842,84,Avignon
843,84,Carpentras
851,85,Fontenay-le-Comte
852,85,Roche-sur-Yon
853,85,Sables-d'Olonne
861,86,Châtellerault
862,86,Montmorillon
863,86,Poitiers
871,87,Bellac
872,87,Limoges
873,87,Rochechouart
881,88,Épinal
882,88,Neufchâteau
883,88,Saint-Dié-des-Vosges
891,89,Auxerre
892,89,Avallon
893,89,Sens
901,90,Belfort
911,91,Étampes
912,91,Évry
913,91,Palaiseau
921,92,Antony
922,92,Nanterre
923,92,Boulogne-Billancourt
931,93,Bobigny
932,93,Raincy
933,93,Saint-Denis
941,94,Créteil
942,94,Nogent-sur-Marne
943,94,Haÿ-les-Roses
951,95,Argenteuil
952,95,Sarcelles
953,95,Pontoise
9711,971,Basse-Terre
9712,971,Pointe-à-Pitre
9721,972,Fort-de-France
9722,972,Trinité
9723,972,Marin
9724,972,Saint-Pierre
9731,973,Cayenne
9732,973,Saint-Laurent-du-Maroni
9741,974,Saint-Denis
9742,974,Saint-Pierre
9743,974,Saint-Benoît
9744,974,Saint-Paul

37931
services/infrasubdivision/inseecommune_2019.csv
File diff suppressed because it is too large
View File

Loading…
Cancel
Save