Gestion des zones géographiques du continent à la subdivision
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

225 lines
6.1 KiB

<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Territoires
*
* @package SPIP\TERRITOIRES\INSTALLATION
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin Territoires.
*
* @param string $nom_meta_base_version Nom de la meta informant de la version du schéma de données du plugin
* installé dans SPIP
* @param string $version_cible Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
* @return void
**/
function territoires_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
// Initialisation de la configuration
// -- Configuration statique du plugin Territoires
$config_statique = array(
'zone' => array(
'champs' => array(
'base' => array(
'code_num' => 'iso_territoire',
'category' => 'categorie',
'parent' => 'iso_parent',
'depth' => 'profondeur_type',
'label' => 'iso_titre',
),
'index' => 'zones',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => '#code_geoip',
'valeur' => 'code',
),
'index' => 'continents',
'cle_iso' => 'code_num',
),
),
),
'country' => array(
'champs' => array(
'base' => array(
'code_alpha2' => 'iso_territoire',
'category' => 'categorie',
'code_continent' => 'iso_continent',
'label' => 'iso_titre',
),
'extras' => array(
'code' => array(
'code_alpha3' => 'code_iso3166_a3',
'code_num' => 'code_iso3166_num',
),
'info' => array(
'capital' => 'capital',
'area' => 'area',
'population' => 'population',
'tld' => 'tld',
'code_4217_3' => 'code_4217_3',
'phone_id' => 'phone_id'
),
),
'index' => 'pays',
),
),
'subdivision' => array(
'champs' => array(
'base' => array(
'code_3166_2' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'depth' => 'profondeur_type',
'label' => 'iso_titre',
),
'index' => 'subdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
'infrasubdivision' => array(
'champs' => array(
'base' => array(
'code' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'depth' => 'profondeur_type',
'label' => 'iso_titre',
),
'index' => 'infrasubdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
);
// -- Configuration dynamique du plugin Territoires
$config_modifiable = array(
'association_objets' => array(),
);
$maj['create'] = array(
array(
'maj_tables',
array('spip_territoires', 'spip_territoires_extras', 'spip_territoires_liens')
),
array(
'ecrire_config',
'territoires',
array_merge($config_statique, $config_modifiable)
)
);
// Ajout des extras pour les zones (code geoIP des continents).
$maj['2'] = array(
array(
'adapter_config_statique',
$config_statique
)
);
// Ajout de la colonne profondeur_type et de la configuration associée pour son importation de Nomenclatures.
$maj['3'] = array(
array(
'sql_alter',
'TABLE spip_territoires ADD COLUMN profondeur_type int DEFAULT 0 NOT NULL AFTER iso_parent'
),
array(
'adapter_config_statique',
$config_statique
)
);
// Création des tables et de la configuration du plugin
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
// Peuplement minimal du plugin en synchrone:
// - les zones du monde
// - les pays
// - les subdivisions françaises
include_spip('inc/territoire');
$options['extras'] = array('code', 'info');
territoire_peupler('zone', '', $options);
territoire_peupler('country', '', $options);
territoire_peupler('subdivision', 'FR', $options);
// Peuplement du plugin en asynchrone:
// - les infrasubdivisions françaises
territoire_peupler_asynchrone('infrasubdivision', 'FR', $options);
}
/**
* Fonction de désinstallation du plugin Territoires.
*
* @param string $nom_meta_base_version Nom de la meta informant de la version du schéma de données du plugin
* installé dans SPIP
* @return void
**/
function territoires_vider_tables($nom_meta_base_version) {
sql_drop_table('spip_territoires');
sql_drop_table('spip_territoires_extras');
sql_drop_table('spip_territoires_liens');
# Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens)
sql_delete('spip_documents_liens', sql_in('objet', array('territoire')));
sql_delete('spip_mots_liens', sql_in('objet', array('territoire')));
sql_delete('spip_auteurs_liens', sql_in('objet', array('territoire')));
// Nettoyer les versionnages
sql_delete('spip_versions', sql_in('objet', array('territoire')));
sql_delete('spip_versions_fragments', sql_in('objet', array('territoire')));
sql_delete('spip_forum', sql_in('objet', array('territoire')));
// Effacer les meta du plugin
effacer_meta('territoires');
effacer_meta('territoires_peuplement');
effacer_meta($nom_meta_base_version);
}
/**
* Fonction de mise à jour de la config statique du plugin.
*
* @param array $config_statique Nouvelle configuration statique
*
* @return void
**/
function adapter_config_statique($config_statique) {
// Configuration actuelle pour conserver la config modifiable
include_spip('inc/config');
$config = lire_config('territoires');
// On insère la nouvelle config statique
foreach ($config_statique as $_cle => $_config) {
$config[$_cle] = $_config;
}
// Mise à jour en meta
ecrire_config('territoires', $config);
}