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.
 
 

208 lines
6.1 KiB

<?php
/**
* Utilisations de pipelines par Territoires
*
* @package SPIP\TERRITOIRES\PIPELINES
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Ajout de contenu sur certaines pages, notamment des formulaires de liaisons entre objets.
* Territoires ajoute les éventuels caractéristiques complémentaires et le formulaire d'association.
*
* @pipeline affiche_milieu
*
* @param array $flux Données du pipeline
*
* @return array Données du pipeline modifiées pour refléter le traitement.
*/
function territoires_affiche_milieu($flux) {
if (isset($flux['args']['exec'])) {
$texte = '';
$exec = trouver_objet_exec($flux['args']['exec']);
if (
$exec
and ($exec['edition'] !== true) // page visu
and ($id_table = $exec['id_table_objet'])
and ($objet = $exec['type'])
and isset($flux['args'][$id_table])
and ($id_objet = intval($flux['args'][$id_table]))
) {
// Insertion des extras de type 'info' chargés pour ce type de territoire
if ($objet === 'territoire') {
// -- acquisition de l'objet
include_spip('action/editer_objet');
$territoire = objet_lire('territoire', $id_objet);
// -- tester si les extras 'info' sont chargées pour le type de territoire
include_spip('inc/territoire');
$extra_peuple = territoire_extra_est_peuple($territoire['type'], $territoire['iso_pays'], 'info');
if ($extra_peuple) {
$texte .= recuperer_fond(
'prive/objets/liste/territoires_extras',
array(
'iso_territoire' => $territoire['iso_territoire'],
'type_extra' => 'info',
'titre' => _T('territoires:titre_liste_extras_info')
)
);
}
}
// Insertion du formulaire d'association
if (
($table = $exec['table_objet_sql'])
and include_spip('inc/config')
and (in_array($table, lire_config('territoires/association_objets', array())))
) {
$texte .= recuperer_fond(
'prive/objets/editer/liens',
array(
'table_source' => 'territoires',
'objet' => $objet,
'id_objet' => $id_objet,
'editable' => autoriser('associerterritoires', $objet, $id_objet) ? 'oui' : 'non'
)
);
}
// Insertion dans la fiche objet.
if ($texte) {
if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
} else {
$flux['data'] .= $texte;
}
}
}
}
return $flux;
}
/**
* Ajout de contenu dans la colonne « gauche » des pages de l’espace privé, notamment « la fiche objet »
* Territoires ajoute le bloc des codes alternatifs.
*
* @pipeline affiche_gauche
*
* @param array $flux Données du pipeline
*
* @return array Données du pipeline modifiées pour refléter le traitement.
*/
function territoires_affiche_gauche($flux) {
if (isset($flux['args']['exec'])) {
$texte = '';
$exec = trouver_objet_exec($flux['args']['exec']);
if (
$exec
and ($exec['edition'] !== true) // page visu
and ($id_table = $exec['id_table_objet'])
and ($objet = $exec['type'])
and ($objet === 'territoire')
and isset($flux['args'][$id_table])
and ($id_objet = intval($flux['args'][$id_table]))
) {
// Insertion des extras de type 'code' chargés pour ce type de territoire
// -- acquisition de l'objet
include_spip('action/editer_objet');
$territoire = objet_lire('territoire', $id_objet);
// -- tester si les extras 'code' sont chargées pour le type de territoire
include_spip('inc/territoire');
$extra_peuple = territoire_extra_est_peuple($territoire['type'], $territoire['iso_pays'], 'code');
if ($extra_peuple) {
$texte .= recuperer_fond(
'prive/objets/liste/territoires_extras',
array(
'iso_territoire' => $territoire['iso_territoire'],
'type_extra' => 'code',
'titre' => _T('territoires:titre_liste_extras_code'),
'pagination' => 'page'
)
);
}
}
// Insertion dans la fiche objet.
if ($texte) {
if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
} else {
$flux['data'] .= $texte;
}
}
}
return $flux;
}
/**
* Enlever l'id_territoire de la liste des critères conditionnels pour la table `spip_territoires`
* car cela peut renvoyer une liste vide si l'env contient déjà l'id du territoire.
*
* @param array $flux Données du pipeline
*
* @return array Données du pipeline modifiées pour refléter le traitement.
*/
function territoires_exclure_id_conditionnel($flux) {
if ($flux['args']['table'] == 'spip_territoires') {
$flux['data'] = array_merge($flux['data'], array('id_territoire'));
}
return $flux;
}
/**
* Complète l'action `modifier` d'un territoire avant modification:
* - en positionnant l'indicateur d'édition à `oui`afin que les modifications manuelles soient préservées
* lors d'un prochain rechargement.
*
* @pipeline pre_edition
*
* @param array $flux Données du pipeline fournie en entrée (chaque pipeline possède une structure de donnée propre).
*
* @return array Données du pipeline modifiées pour refléter le traitement.
*
**/
function territoires_pre_edition($flux) {
$table = $flux['args']['table'];
$id = intval($flux['args']['id_objet']);
$action = $flux['args']['action'];
// Traitements particuliers de l'objet territoire quand celui-ci est modifié manuellement
if (($table == 'spip_territoires') and $id) {
// Modification d'un des champs éditables du territoire
if ($action == 'modifier') {
// -- On positionne l'indicateur d'édition à oui, ce qui permettra d'éviter lors
// d'un rechargement de perdre les modifications manuelles des champs éditables.
$flux['data']['edite'] = 'oui';
}
}
return $flux;
}
/**
* Optimiser la base de données
* Supprime les liens orphelins de l'objet vers quelqu'un et de quelqu'un vers l'objet.
*
* @pipeline optimiser_base_disparus
*
* @param array $flux Données du pipeline
*
* @return array Données du pipeline modifiées pour refléter le traitement.
*/
function territoires_optimiser_base_disparus($flux) {
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(array('territoire'=>'*'), '*');
return $flux;
}