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.

234 lines
6.3 KiB

9 months ago
9 months ago
  1. <?php
  2. /**
  3. * Fichier gérant l'installation et désinstallation du plugin Territoires
  4. *
  5. * @package SPIP\TERRITOIRES\INSTALLATION
  6. */
  7. if (!defined('_ECRIRE_INC_VERSION')) {
  8. return;
  9. }
  10. /**
  11. * Fonction d'installation et de mise à jour du plugin Territoires.
  12. *
  13. * @param string $nom_meta_base_version Nom de la meta informant de la version du schéma de données du plugin
  14. * installé dans SPIP
  15. * @param string $version_cible Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
  16. * @return void
  17. **/
  18. function territoires_upgrade($nom_meta_base_version, $version_cible) {
  19. $maj = array();
  20. // Initialisation de la configuration
  21. // -- Configuration statique du plugin Territoires
  22. $config_statique = array(
  23. 'types' => array('zone', 'country', 'subdivision', 'infrasubdivision'),
  24. 'zone' => array(
  25. 'champs' => array(
  26. 'base' => array(
  27. 'code_num' => 'iso_territoire',
  28. 'category' => 'categorie',
  29. 'parent' => 'iso_parent',
  30. 'depth' => 'profondeur_type',
  31. 'label' => 'iso_titre',
  32. ),
  33. 'index' => 'zones',
  34. ),
  35. 'extras' => array(
  36. 'code' => array(
  37. 'champs' => array(
  38. 'extra' => '#code_geoip',
  39. 'valeur' => 'code',
  40. ),
  41. 'index' => 'continents',
  42. 'cle_iso' => 'code_num',
  43. ),
  44. ),
  45. ),
  46. 'country' => array(
  47. 'champs' => array(
  48. 'base' => array(
  49. 'code_alpha2' => 'iso_territoire',
  50. 'category' => 'categorie',
  51. 'code_continent' => 'iso_continent',
  52. 'label' => 'iso_titre',
  53. ),
  54. 'extras' => array(
  55. 'code' => array(
  56. 'code_alpha3' => 'code_iso3166_a3',
  57. 'code_num' => 'code_iso3166_num',
  58. ),
  59. 'info' => array(
  60. 'capital' => 'capital',
  61. 'area' => 'area',
  62. 'population' => 'population',
  63. 'tld' => 'tld',
  64. 'code_4217_3' => 'code_4217_3',
  65. 'phone_id' => 'phone_id'
  66. ),
  67. ),
  68. 'index' => 'pays',
  69. ),
  70. ),
  71. 'subdivision' => array(
  72. 'champs' => array(
  73. 'base' => array(
  74. 'code_3166_2' => 'iso_territoire',
  75. 'type' => 'categorie',
  76. 'country' => 'iso_pays',
  77. 'parent' => 'iso_parent',
  78. 'depth' => 'profondeur_type',
  79. 'label' => 'iso_titre',
  80. ),
  81. 'index' => 'subdivisions',
  82. ),
  83. 'extras' => array(
  84. 'code' => array(
  85. 'champs' => array(
  86. 'extra' => 'type_alter',
  87. 'valeur' => 'code_alter',
  88. ),
  89. 'index' => 'codes_alternatifs',
  90. 'cle_iso' => 'code_iso',
  91. ),
  92. ),
  93. ),
  94. 'infrasubdivision' => array(
  95. 'champs' => array(
  96. 'base' => array(
  97. 'code' => 'iso_territoire',
  98. 'type' => 'categorie',
  99. 'country' => 'iso_pays',
  100. 'parent' => 'iso_parent',
  101. 'depth' => 'profondeur_type',
  102. 'label' => 'iso_titre',
  103. ),
  104. 'index' => 'infrasubdivisions',
  105. ),
  106. 'extras' => array(
  107. 'code' => array(
  108. 'champs' => array(
  109. 'extra' => 'type_alter',
  110. 'valeur' => 'code_alter',
  111. ),
  112. 'index' => 'codes_alternatifs',
  113. 'cle_iso' => 'code_iso',
  114. ),
  115. ),
  116. ),
  117. );
  118. // -- Configuration dynamique du plugin Territoires
  119. $config_modifiable = array(
  120. 'association_objets' => array(),
  121. );
  122. $maj['create'] = array(
  123. array(
  124. 'maj_tables',
  125. array('spip_territoires', 'spip_territoires_extras', 'spip_territoires_liens')
  126. ),
  127. array(
  128. 'ecrire_config',
  129. 'territoires',
  130. array_merge($config_statique, $config_modifiable)
  131. )
  132. );
  133. // Ajout des extras pour les zones (code geoIP des continents).
  134. $maj['2'] = array(
  135. array(
  136. 'adapter_config_statique',
  137. $config_statique
  138. )
  139. );
  140. // Ajout de la colonne profondeur_type et de la configuration associée pour son importation de Nomenclatures.
  141. $maj['3'] = array(
  142. array(
  143. 'sql_alter',
  144. 'TABLE spip_territoires ADD COLUMN profondeur_type int DEFAULT 0 NOT NULL AFTER iso_parent'
  145. ),
  146. array(
  147. 'adapter_config_statique',
  148. $config_statique
  149. )
  150. );
  151. // Ajout de la liste des types de territoire
  152. $maj['4'] = array(
  153. array(
  154. 'adapter_config_statique',
  155. $config_statique
  156. )
  157. );
  158. // Création des tables et de la configuration du plugin
  159. include_spip('base/upgrade');
  160. maj_plugin($nom_meta_base_version, $version_cible, $maj);
  161. // Peuplement minimal du plugin en synchrone:
  162. // - les zones du monde
  163. // - les pays
  164. // - les subdivisions françaises
  165. include_spip('inc/territoire');
  166. $options['extras'] = array('code', 'info');
  167. territoire_peupler('zone', '', $options);
  168. territoire_peupler('country', '', $options);
  169. territoire_peupler('subdivision', 'FR', $options);
  170. // Peuplement du plugin en asynchrone:
  171. // - les infrasubdivisions françaises
  172. territoire_peupler_asynchrone('infrasubdivision', 'FR', $options);
  173. }
  174. /**
  175. * Fonction de désinstallation du plugin Territoires.
  176. *
  177. * @param string $nom_meta_base_version Nom de la meta informant de la version du schéma de données du plugin
  178. * installé dans SPIP
  179. * @return void
  180. **/
  181. function territoires_vider_tables($nom_meta_base_version) {
  182. sql_drop_table('spip_territoires');
  183. sql_drop_table('spip_territoires_extras');
  184. sql_drop_table('spip_territoires_liens');
  185. # Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens)
  186. sql_delete('spip_documents_liens', sql_in('objet', array('territoire')));
  187. sql_delete('spip_mots_liens', sql_in('objet', array('territoire')));
  188. sql_delete('spip_auteurs_liens', sql_in('objet', array('territoire')));
  189. // Nettoyer les versionnages
  190. sql_delete('spip_versions', sql_in('objet', array('territoire')));
  191. sql_delete('spip_versions_fragments', sql_in('objet', array('territoire')));
  192. sql_delete('spip_forum', sql_in('objet', array('territoire')));
  193. // Effacer les meta du plugin
  194. effacer_meta('territoires');
  195. effacer_meta('territoires_peuplement');
  196. effacer_meta($nom_meta_base_version);
  197. }
  198. /**
  199. * Fonction de mise à jour de la config statique du plugin.
  200. *
  201. * @param array $config_statique Nouvelle configuration statique
  202. *
  203. * @return void
  204. **/
  205. function adapter_config_statique($config_statique) {
  206. // Configuration actuelle pour conserver la config modifiable
  207. include_spip('inc/config');
  208. $config = lire_config('territoires');
  209. // On insère la nouvelle config statique
  210. foreach ($config_statique as $_cle => $_config) {
  211. $config[$_cle] = $_config;
  212. }
  213. // Mise à jour en meta
  214. ecrire_config('territoires', $config);
  215. }