|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Gestion du formulaire de chargement ou de vidage des territoires.
|
|
|
|
*
|
|
|
|
* @package SPIP\TERRITOIRES\UI
|
|
|
|
*/
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Chargement des données : le formulaire propose les actions possibles sur les territoires,
|
|
|
|
* à savoir, charger ou vider.
|
|
|
|
*
|
|
|
|
* @uses territoires_acquerir()
|
|
|
|
* @uses territoire_est_peuple()
|
|
|
|
*
|
|
|
|
* @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.
|
|
|
|
* - `_actions_peuplement`: (affichage) alias et libellés des actions possibles, `peupler` et `depeupler`
|
|
|
|
* - `_actions_disable` : (affichage) liste des actions désactivées (`depeupler` si aucun pays n`est chargé)
|
|
|
|
* - `_action_defaut` : (affichage) action sélectionnée par défaut, `peupler`
|
|
|
|
* - `_types` : (affichage) types region et pays.
|
|
|
|
* - `_pays` : (affichage) pays avec leur code et leur nom ISO dont les subdivisions sont disponibles.
|
|
|
|
*/
|
|
|
|
function formulaires_peupler_territoires_charger() {
|
|
|
|
|
|
|
|
// Initialisation des valeurs à transmettre au formulaire
|
|
|
|
$valeurs = array();
|
|
|
|
|
|
|
|
// Lister les actions sur les tables
|
|
|
|
$valeurs['_actions_territoire'] = array(
|
|
|
|
'peupler' => _T('territoires:option_peupler_action'),
|
|
|
|
'depeupler' => _T('territoires:option_depeupler_action')
|
|
|
|
);
|
|
|
|
|
|
|
|
// Initialiser la liste des types de territoire disponibles (régions, pays)
|
|
|
|
include_spip('inc/territoire');
|
|
|
|
$un_territoire_charge = false;
|
|
|
|
$valeurs['_types'] = array(
|
|
|
|
'zone' => _T('territoires:option_zone_territoire'),
|
|
|
|
'country' => _T('territoires:option_country_territoire'),
|
|
|
|
);
|
|
|
|
// -- indiquer les territoires déjà chargés
|
|
|
|
foreach ($valeurs['_types'] as $_type => $_label) {
|
|
|
|
if (territoire_est_peuple($_type)) {
|
|
|
|
$valeurs['_types'][$_type] .= ' - <em>[' . _T('territoires:info_territoire_peuple') . ']</em>';
|
|
|
|
$un_territoire_charge = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Acquérir la liste des pays dont les subdivisions sont disponibles
|
|
|
|
include_spip('inc/territoires_utils');
|
|
|
|
$options = array(
|
|
|
|
'exclure' => 'alternates,subdivisions',
|
|
|
|
'index' => 'pays'
|
|
|
|
);
|
|
|
|
$valeurs['_pays'] = territoires_acquerir('subdivision', array(), $options);
|
|
|
|
// -- indiquer les territoires déjà chargés
|
|
|
|
foreach ($valeurs['_pays'] as $_code => $_pays) {
|
|
|
|
if (territoire_est_peuple('subdivision', $_code)) {
|
|
|
|
$valeurs['_pays'][$_code] .= ' - <em>[' . _T('territoires:info_territoire_peuple') . ']</em>';
|
|
|
|
$un_territoire_charge = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Acquérir la liste des pays dont les infra subdivisions sont disponibles et dont les subdivisions sont déjà
|
|
|
|
// chargées.
|
|
|
|
$options = array(
|
|
|
|
'exclure' => 'alternates,infrasubdivisions',
|
|
|
|
'index' => 'pays'
|
|
|
|
);
|
|
|
|
$infrasubdivisions = territoires_acquerir('infrasubdivision', array(), $options);
|
|
|
|
// -- indiquer les territoires déjà chargés
|
|
|
|
foreach ($infrasubdivisions as $_code => $_pays) {
|
|
|
|
if (territoire_est_peuple('subdivision', $_code)) {
|
|
|
|
$valeurs['_pays_infra'][$_code] = $_pays;
|
|
|
|
$un_territoire_charge = true;
|
|
|
|
if (territoire_est_peuple('infrasubdivision', $_code)) {
|
|
|
|
$valeurs['_pays_infra'][$_code] .= ' - <em>[' . _T('territoires:info_territoire_peuple') . ']</em>';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Ne pas sélectionner un type ou un pays par défaut
|
|
|
|
set_request('types', array());
|
|
|
|
set_request('pays', array());
|
|
|
|
set_request('pays_infra', array());
|
|
|
|
|
|
|
|
// Désactiver l'action vider si aucun pays encore chargé
|
|
|
|
if (!$un_territoire_charge) {
|
|
|
|
$valeurs['_actions_disable'] = array('depeupler' => 'oui');
|
|
|
|
$valeurs['_action_defaut'] = 'peupler';
|
|
|
|
}
|
|
|
|
|
|
|
|
return $valeurs;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Vérification des saisies : il est indispensable de choisir une action (`depeupler` ou `peupler`) et
|
|
|
|
* au moins un territoire.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* Tableau des erreurs sur l'action et/ou le pays ou tableau vide si aucune erreur.
|
|
|
|
*/
|
|
|
|
function formulaires_peupler_territoires_verifier() {
|
|
|
|
$erreurs = array();
|
|
|
|
|
|
|
|
if (!_request('action_territoire')) {
|
|
|
|
$erreurs['action_territoire'] = _T('info_obligatoire');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!_request('pays') and !_request('pays_infra') and !_request('types')) {
|
|
|
|
$erreurs['types'] = _T('info_obligatoire');
|
|
|
|
$erreurs['pays'] = ' ';
|
|
|
|
$erreurs['pays_infra'] = ' ';
|
|
|
|
}
|
|
|
|
|
|
|
|
return $erreurs;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Exécution du formulaire : les territoires choisis sont soit vidés, soit chargés.
|
|
|
|
*
|
|
|
|
* @uses territoire_est_peuple()
|
|
|
|
* @uses territoire_peupler()
|
|
|
|
* @uses territoire_depeupler()
|
|
|
|
* @uses formulaires_peupler_territoires_notifier()
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* Tableau retourné par le formulaire contenant toujours un message de bonne exécution ou
|
|
|
|
* d'erreur. L'indicateur editable est toujours à vrai.
|
|
|
|
*/
|
|
|
|
function formulaires_peupler_territoires_traiter() {
|
|
|
|
|
|
|
|
// Initialisation des messages de retour
|
|
|
|
$retour = array(
|
|
|
|
'message_ok' => '',
|
|
|
|
'message_erreur' => ''
|
|
|
|
);
|
|
|
|
|
|
|
|
// Acquisition des saisies: comme elles sont obligatoires, il existe toujours une action et un territoire
|
|
|
|
// à savoir soit un type région ou pays, soit un pays pour une subdivision.
|
|
|
|
include_spip('inc/territoire');
|
|
|
|
$action = _request('action_territoire');
|
|
|
|
$types = _request('types');
|
|
|
|
$pays = _request('pays');
|
|
|
|
if ($pays) {
|
|
|
|
$types[] = 'subdivision';
|
|
|
|
}
|
|
|
|
$pays_infra = _request('pays_infra');
|
|
|
|
if ($pays_infra) {
|
|
|
|
$types[] = 'infrasubdivision';
|
|
|
|
}
|
|
|
|
|
|
|
|
// Détermination des options de l'action
|
|
|
|
$options = array();
|
|
|
|
$forcer = _request('forcer');
|
|
|
|
if (
|
|
|
|
$forcer
|
|
|
|
or ($action === 'depeupler')
|
|
|
|
) {
|
|
|
|
$options['force'] = true;
|
|
|
|
}
|
|
|
|
foreach (array('code', 'info') as $_type_extra) {
|
|
|
|
if (_request("extra_${_type_extra}")) {
|
|
|
|
$options['extras'][] = $_type_extra;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// On peuple chaque type (ou type,pays pour les subdivisions).
|
|
|
|
// (La fonction de chargement lance un vidage préalable si le pays demandé est déjà chargée)
|
|
|
|
$actionner = "territoire_${action}";
|
|
|
|
$statut = array();
|
|
|
|
foreach ($types as $_type) {
|
|
|
|
// Traitement du type en prenant en compte le cas particulier des subdivisions et infra subdivisions.
|
|
|
|
if ($_type === 'subdivision') {
|
|
|
|
foreach ($pays as $_pays) {
|
|
|
|
$statut[] = $actionner($_type, $_pays, $options);
|
|
|
|
}
|
|
|
|
} elseif ($_type === 'infrasubdivision') {
|
|
|
|
foreach ($pays_infra as $_pays) {
|
|
|
|
if ($action === 'peupler') {
|
|
|
|
$actionner .= '_asynchrone';
|
|
|
|
}
|
|
|
|
$statut[] = $actionner($_type, $_pays, $options);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$statut[] = $actionner($_type, '', $options);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Formater le message correspondant au traitement du type
|
|
|
|
$retour = formulaires_peupler_territoires_notifier($_type, $retour, $action, $statut);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Formulaire toujours éditable
|
|
|
|
$retour['editable'] = true;
|
|
|
|
|
|
|
|
return $retour;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Formate les messages de succès et d'erreur résultant des actions de chargement ou de vidage
|
|
|
|
* des territoires.
|
|
|
|
*
|
|
|
|
* @param string $type Type de territoire.
|
|
|
|
* @param array $messages Tableau des messages ok et nok à compléter.
|
|
|
|
* @param string $action Action venant d'être appliquée à certains pays. Peut prendre les valeurs `peupler` et
|
|
|
|
* `depeupler`.
|
|
|
|
* @param array $statuts Tableau résultant de l'action sur le type choisi. Peut-êre un tableau de statut pour les
|
|
|
|
* subdivisions (plusieurs pays).
|
|
|
|
* - `ok` : `true` si l'action ou la lancement du job a complètement réussi, `false` sinon (au moins une erreur).
|
|
|
|
* - `sha` : indique une sha identique donc pas chargement effectué.
|
|
|
|
* - `arg` : indique que le couple (type, pays) eest invalide (pas possible avec le formulaire).
|
|
|
|
* - `type` : type de territoire.
|
|
|
|
* - `pays` : code ISO alpha2 du pays si le type est subdivision.
|
|
|
|
* - `sync` : indique si le peuplement est synchrone ou asynchrone
|
|
|
|
* - `job` : id du job si asynchrone
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* Tableau des messages à afficher sur le formulaire:
|
|
|
|
* - `message_ok` : message sur les types ayant été traités avec succès ou vide sinon.
|
|
|
|
* - `message_erreur` : message sur les types en erreur ou vide sinon.
|
|
|
|
*/
|
|
|
|
function formulaires_peupler_territoires_notifier($type, $messages, $action, $statuts) {
|
|
|
|
|
|
|
|
$variables = array(
|
|
|
|
'ok' => array(),
|
|
|
|
'nok' => array(),
|
|
|
|
'sha' => array(),
|
|
|
|
);
|
|
|
|
$statut_global = array(
|
|
|
|
'ok' => false,
|
|
|
|
'nok' => false,
|
|
|
|
'sha' => false,
|
|
|
|
'sync' => true,
|
|
|
|
);
|
|
|
|
|
|
|
|
// On compile la liste des pays traités et un indicateur global pour chaque cas d'erreur.
|
|
|
|
include_spip('inc/territoires_utils');
|
|
|
|
foreach ($statuts as $_statut) {
|
|
|
|
// Traitement des succès
|
|
|
|
if (!empty($_statut['sha'])) {
|
|
|
|
if (type_est_subdivision($type)) {
|
|
|
|
$variables['sha'][] = $_statut['pays'];
|
|
|
|
}
|
|
|
|
$statut_global['sha'] = true;
|
|
|
|
} elseif (!$_statut['ok']) {
|
|
|
|
if (type_est_subdivision($type)) {
|
|
|
|
$variables['nok'][] = $_statut['pays'];
|
|
|
|
}
|
|
|
|
$statut_global['nok'] = true;
|
|
|
|
} else {
|
|
|
|
if (type_est_subdivision($type)) {
|
|
|
|
$variables['ok'][] = $_statut['pays'];
|
|
|
|
}
|
|
|
|
$statut_global['ok'] = true;
|
|
|
|
if (!$_statut['sync']) {
|
|
|
|
$statut_global['sync'] = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Traitement des succès
|
|
|
|
if ($statut_global['ok']) {
|
|
|
|
$messages['message_ok'] .= _T("territoires:msg_${action}_${type}_succes", array('pays' => implode(', ', $variables['ok'])));
|
|
|
|
if (!$statut_global['sync']) {
|
|
|
|
$messages['message_ok'] .= '<br />' . _T("territoires:msg_succes_asynchrone");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Traitement des erreurs
|
|
|
|
if ($statut_global['nok']) {
|
|
|
|
$messages['message_erreur'] .= _T("territoires:msg_${action}_${type}_erreur", array('pays' => implode(', ', $variables['nok'])));
|
|
|
|
}
|
|
|
|
if ($statut_global['sha']) {
|
|
|
|
$messages['message_erreur'] .= $messages['message_erreur'] ? '<br />' : '';
|
|
|
|
$messages['message_erreur'] .= _T("territoires:msg_${action}_${type}_notice", array('pays' => implode(', ', $variables['sha'])));
|
|
|
|
}
|
|
|
|
|
|
|
|
return $messages;
|
|
|
|
}
|