<?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.
 * Le plugin ajoute les éventuels données statistiques complémentaires.
 *
 * @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_stats_affiche_milieu(array $flux) : array {
	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 = (int) ($flux['args'][$id_table]))
		) {
			// Insertion des extras de type 'stat' chargés pour ce type de territoire
			include_spip('inc/config');
			if ($objet === 'territoire') {
				// -- acquisition de l'objet
				include_spip('action/editer_objet');
				$territoire = objet_lire('territoire', $id_objet);
				// -- Attention pour le type pays il ne faut pas passer le champ iso_pays à l'unité de peuplement
				$pays = lire_config("territoires/{$territoire['type']}/populated_by_country", false)
					? $territoire['iso_pays']
					: '';
				// -- tester si les extras 'info' sont chargées pour le type de territoire
				include_spip('inc/territoires_unite_peuplement');
				$extra_peuple = unite_peuplement_extra_est_charge($territoire['type'], $pays, 'stat');
				if ($extra_peuple) {
					$texte .= recuperer_fond(
						'prive/objets/liste/territoires_extras',
						[
							'iso_territoire' => $territoire['iso_territoire'],
							'type_extra'     => 'stat',
							'titre'          => _T('territoires_stats:titre_liste_extras_stat')
						]
					);
				}
			}

			// Insertion dans la fiche objet.
			if ($texte) {
				if ($p = strpos($flux['data'], '<!--affiche_extra-->')) {
					$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
				} elseif ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
					$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
				} else {
					$flux['data'] .= $texte;
				}
			}
		}
	}

	return $flux;
}

/**
 * Complément à la fonction de dépeuplement des territoires.
 *
 * Le plugin supprime les feeds associées à l'unité de peuplement concernée.
 *
 * @pipeline post_depeupler_territoire
 *
 * @param array $flux Données du pipeline
 *
 * @return array Données du pipeline telles que reçues.
 */
function territoires_stats_post_depeupler_territoire(array $flux) : array {
	// Vider les extras de type 'stat' pour l'unité de traitement concernée
	if (
		!empty($flux['args']['type'])
		and isset($flux['args']['pays'])
	) {
		$type = $flux['args']['type'];
		$pays = $flux['args']['pays'];

		// On vérifie que des données statistiques exitent pour l'unite de peuplement
		include_spip('inc/territoires_unite_peuplement');
		$extra_peuple = unite_peuplement_extra_est_charge($type, $pays, 'stat');
		if ($extra_peuple) {
			// Identification de la meta et de la variable de consigne
			include_spip('inc/unite_peuplement');
			$id_consigne = unite_peuplement_consigne_identifier('territoires', $type, $pays);
			if (
				include_spip('inc/config')
				and ($consigne = lire_config($id_consigne, []))
			) {
				// On récupère la liste des feeds constitutifs des jeux de données
				$feeds = $consigne['sta'];

				// On supprime les extras de ces jeux de données
				$where = sql_in('feed_id', $feeds);
				sql_delete('spip_territoires_extras', $where);
			}

		}

	}

	return $flux;
}