<?php

/**
 * Plugin CIBLOC
 * @copyright 2018 MTECT
 * @author Christophe IMBERTI (cf. CPI art L121-1)
 * @license GNU/GPLv3
 */

if (!defined(
	'_ECRIRE_INC_VERSION'
)) {
	return;
}

include_spip('inc/headers');
include_spip('inc/filtres');
include_spip('inc/cibloc_commun');

function action_cibloc_export_config($arg = null) {

	if (autoriser('configurer')) {

		if ($arg === null) {
			$securiser_action = charger_fonction('securiser_action', 'inc');
			$arg = $securiser_action();
		}

		cibloc_export_fichier($arg);

		// forcer l'envoi du buffer par tous les moyens !
		while (@ob_get_level()) {
			@ob_flush();
			@flush();
			@ob_end_flush();
		}
	} else {
		spip_log('action_cibloc_export_fichier interdit', _LOG_INFO_IMPORTANTE);
	}

}

function cibloc_export_fichier($arg = null) {

	if ($arg) {
		$valeurs_et_tables = [
			'bloc' => 'spip_cibloc_objets',
			'multi' => 'spip_cibloc_objets',
			'ensemble' => 'spip_cibloc_objets',
			'bouton' => 'spip_cibloc_objets',
			'icones_liste' => 'spip_cibloc_config',
			'icones_couleur' => 'spip_cibloc_config',
			'divers' => 'spip_cibloc_config',
			'couleur' => 'spip_cistyle_config',
			'palette' => 'spip_cistyle_config',
			'style' => 'spip_cistyle_config',
		];

		$valeurs_possibles = array_keys($valeurs_et_tables);

		$fin = substr($arg, -9);
		if ($fin == '-type_php') {
			$type = 'php';
		} else {
			$type = 'txt';
		}

		$debut_arg = substr($arg, 0, -9);

		if ($debut_arg) {
			$tableau = explode('-', $debut_arg);

			if (in_array('couleur', $tableau)) {
				$tableau[] = 'palette';
			}

			if ($type == 'php') {
				$content_type = 'text/x-php';
				$fichier_nom = '_config_cibloc.php';

				$fichier = '<?php'
						. PHP_EOL . '/*'
						. PHP_EOL . '* Ce fichier ' . $fichier_nom . ' doit être situé dans le dossier /config/ de SPIP'
						. PHP_EOL . '*/';

				foreach ($tableau as $valeur) {
					if (in_array($valeur, $valeurs_possibles)) {
						$table = $valeurs_et_tables[$valeur];
						if ($table == 'spip_cibloc_objets') {
							$champ = 'type';
						} else {
							$champ = 'nom';
						}
						$rows = sql_allfetsel('*', $table, $champ . "='" . $valeur . "'");
						// enlever la source
						foreach ($rows as $cle2 => $valeur2) {
							if (isset($valeur2['source']) and $valeur2['source']) {
								$valeur2['source'] = '';
								$rows[$cle2] = $valeur2;
							}
						}
						$fichier .= PHP_EOL . "define('_CIBLOC_" . strtoupper($valeur) . "', '" . base64_encode(
							serialize($rows)
						) . "');";
					}
				}
				$fichier .= PHP_EOL . '?>';

				header('Content-type: ' . $content_type);
				header("Content-Disposition: attachment; filename=\"$fichier_nom\";");
				header('Expires: 0');
				header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
				header('Cache-Control: no-store, no-cache, must-revalidate');
				header('Pragma: no-cache');
				echo $fichier;

			} else {
				$content_type = 'text/plain';
				$fichier_nom = 'cibloc_config.txt';
				$suffixe = 'czo1OiJzdH|lsZSI7czo2OiJ2YWxldXIiO3M6NDQ0OiJhOjEx';
				$separateur = ';';

				$fichier = $suffixe;

				foreach ($tableau as $valeur) {
					if (in_array($valeur, $valeurs_possibles)) {
						$table = $valeurs_et_tables[$valeur];
						if ($table == 'spip_cibloc_objets') {
							$champ = 'type';
						} else {
							$champ = 'nom';
						}
						$rows = sql_allfetsel('*', $table, $champ . "='" . $valeur . "'");
						$fichier .= $separateur . $valeur . '|' . base64_encode(serialize($rows));
					}
				}

				header('Content-type: ' . $content_type);
				header("Content-Disposition: attachment; filename=\"$fichier_nom\";");
				header('Expires: 0');
				header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
				header('Cache-Control: no-store, no-cache, must-revalidate');
				header('Pragma: no-cache');
				echo $fichier;
			}
		}
	}
}
