<?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/cibloc_commun');
include_spip('inc/cibloc_choix_couleur');
include_spip('inc/cibloc_cache');

function formulaires_cibloc_config_ensemble_charger_dist($type_et_id = '', $new = '') {

	if (!autoriser('configurer configuration')
			or (!$type_et_id and $new != 'oui')) {
		return false;
	}

	$libelle_inserer = _T('cibloc:config_ensemble_titre');

	if ($type_et_id and $new != 'oui') {
		// valeurs actuelles
		$valeurs = cibloc_config_ensemble($type_et_id);

		// il faut le nom 'texte' pour que la barre d'outils s'affiche
		// mais le nom du champ pour le stockage est 'preremplir'
		if (isset($valeurs['preremplir'])) {
			$valeurs['texte'] = $valeurs['preremplir'];
		}

		if (cibloc_imposer_parametrage('ensemble')) {
			$libelle_inserer = _T('cibloc:voir_config_ensemble_titre');
		}
		if (isset($valeurs['source']) and $valeurs['source'] == 'creation') {
			$libelle_inserer = _T('cibloc:config_ensemble_titre');
		}

	} elseif ($new == 'oui') {
		$valeurs['ajout'] = 'oui';
		$valeurs['id'] = '';
		$valeurs['nom'] = _T('cibloc:nouvel_ensemble');
		$valeurs['statut'] = 'desactive';
		$valeurs['rang'] = '0';
		$valeurs['texte'] = '';
	}

	$valeurs['libelle_inserer'] = $libelle_inserer;

	return $valeurs;
}

function formulaires_cibloc_config_ensemble_verifier_dist($type_et_id = '', $new = '') {
	$erreurs = [];

	if (!$type_et_id and $new == 'oui') {
		$request_id = _request('id');
		if (empty($request_id)) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif (!ctype_alnum($request_id)) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif (strlen($request_id) > 30) {
			$erreurs['id'] = _T('cibloc:trop_long');
		} else {
			$tableau = cibloc_configuration_des_ensembles();
			if (isset($tableau['ensemble_' . $request_id])) {
				$erreurs['id'] = _T('cibloc:valeur_existe');
			}
		}

		// supprimer les accents
		include_spip('inc/charsets');
		$request_nom = _request('nom');
		if (empty($request_nom)) {
			$erreurs['nom'] = _T('cibloc:nom_incorrect');
		} else {
			$tsa = translitteration($request_nom);
			// interdire les caracteres dangereux sauf ...
			$tableau = ['_', '-', ' ', '%', '(', ')', '.', ',', "'", '/'];
			$tscs = str_replace($tableau, '', $tsa);
			if (!ctype_alnum($tscs)) {
				$erreurs['nom'] = _T('cibloc:nom_incorrect');
			}
		}
	}

	// rang
	if (_request('rang') and (!ctype_digit(_request('rang')) or intval(_request('rang')) > 9999)) {
		$erreurs['rang'] = _T('cibloc:valeur_incorrecte');
	}

	// actif
	if (!in_array(_request('statut'), ['active', 'masque'])) {
		$erreurs['statut'] = _T('cibloc:valeur_incorrecte');
	}

	// texte
	$request_texte = _request('texte');
	if (!empty($request_texte) and !cibloc_verifier_preremplir($request_texte, $type_et_id)) {
		if (strpos($request_texte, '"') !== false) {
			$erreurs['texte'] = _T('cibloc:guillemet_interdit');
		} else {
			$erreurs['texte'] = _T('cibloc:preremplir_incorrect');
		}
	}

	return $erreurs;
}

function formulaires_cibloc_config_ensemble_traiter_dist($type_et_id = '', $new = '') {
	$res = [];
	$valeurs_futures = [];
	$ok = false;
	$purger_definition_cache = false;
	$purger_cache_js = false;

	if ($type_et_id) {
		$valeurs_actuelles = cibloc_config_ensemble($type_et_id);
		$id = str_replace('ensemble_', '', $type_et_id);
		$valeurs_futures['nom'] = $valeurs_actuelles['nom'];

		// il faut le nom 'texte' pour que la barre d'outils s'affiche
		// mais le nom du champ pour le stockage est 'preremplir'
		if ($valeur_saisie = _request('texte')) {
			if ($valeur_saisie != $valeurs_actuelles['preremplir']) {
				$valeurs_futures['preremplir'] = $valeur_saisie;
				$ok = true;
			}
		}
		if ($valeur_saisie = _request('statut')) {
			if ($valeur_saisie != $valeurs_actuelles['statut']) {
				$valeurs_futures['statut'] = $valeur_saisie;
				$ok = true;
				$purger_definition_cache = true;
				$purger_cache_js = true;
			}
		}
		$valeur_saisie = intval(_request('rang'));
		if ($valeur_saisie != $valeurs_actuelles['rang']) {
			$valeurs_futures['rang'] = $valeur_saisie;
			$ok = true;
			$purger_definition_cache = true;
			$purger_cache_js = true;
		}
	} elseif ($new == 'oui') {
		$id = strtolower(_request('id'));
		$valeurs_futures['nom'] = _request('nom');
		$valeurs_futures['statut'] = _request('statut');
		$valeurs_futures['preremplir'] = _request('texte');
		$valeurs_futures['rang'] = intval(_request('rang'));
		$ok = true;
		$purger_definition_cache = true;
		$purger_cache_js = true;
	}

	if ($ok) {
		$row = sql_fetsel('*', 'spip_cibloc_objets', "type='ensemble' AND id='" . $id . "'");
		if ($row) {
			sql_updateq('spip_cibloc_objets', $valeurs_futures, "type='ensemble' AND id='" . $id . "'");
		} else {
			$purger_definition_cache = true;
			$purger_cache_js = true;
			$valeurs_futures['type'] = 'ensemble';
			$valeurs_futures['id'] = $id;
			if ($type_et_id) {
				$valeurs_futures['source'] = 'maj';
			} elseif ($new == 'oui') {
				$valeurs_futures['source'] = 'creation';
			}
			sql_insertq('spip_cibloc_objets', $valeurs_futures);
		}

		if ($purger_definition_cache) {
			cibloc_purger_definition_cache();
		}
		if ($purger_cache_js) {
			cibloc_purger_cache_js();
		}
		include_spip('inc/invalideur');
		suivre_invalideur('1');
		cibloc_purger_cache_css();
	}

	$res['message_ok'] = '';
	$res['redirect'] = generer_url_ecrire('cibloc_config_ensembles');

	return $res;
}

function cibloc_config_ensemble($type_et_id = '') {
	$return = [];
	$valeurs_defaut = [
		'statut' => 'active',
		'bordure' => 'non',
		'alignement' => 'left',
		/*
			'padding_top'=>'1.0',
			'padding_bottom'=>'1.0',
			'padding_right'=>'1.0',
			'padding_left'=>'1.0',
 */
		'rang' => 0,
	];

	if ($type_et_id) {
		$tableau = cibloc_configuration_des_ensembles();
		if (isset($tableau[$type_et_id])) {
			$return = $tableau[$type_et_id];

			foreach ($valeurs_defaut as $cle => $valeur) {
				if (!isset($return[$cle])) {
					$return[$cle] = $valeur;
				}
			}
		}
	}

	return $return;
}
