<?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_bloc_charger_dist($type_et_id = '', $new = '') {

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

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

		if (in_array($type_et_id, ['bloc_accordeon', 'bloc_accordeon2'])) {
			$valeurs['afficher_couleur_bouton'] = 'oui';
		} else {
			$valeurs['afficher_couleur_bouton'] = 'non';
		}
	} elseif ($new == 'oui') {
		// valeurs par defaut
		$valeurs = cibloc_bloc_attributs_valeur_par_defaut();

		$valeurs['ajout'] = 'oui';
		$valeurs['id'] = '';
		$valeurs['nom'] = _T('cibloc:nouveau_bloc');
		$valeurs['statut'] = 'masque';
	}

	return $valeurs;
}

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

	if (!$type_et_id and $new == 'oui') {
		include_spip('inc/charsets');

		// accents
		$request_id = _request('id');
		if (empty($request_id)) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif ($request_id != translitteration($request_id)) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif (!ctype_alnum($request_id)) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif (strtolower($request_id) != $request_id) {
			$erreurs['id'] = _T('cibloc:valeur_incorrecte');
		} elseif (strlen($request_id) > 30) {
			$erreurs['id'] = _T('cibloc:trop_long');
		} else {
			$tableau = cibloc_configuration_des_blocs();
			if (isset($tableau['bloc_' . $request_id])) {
				$erreurs['id'] = _T('cibloc:valeur_existe');
			}
		}

		// supprimer les accents
		$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');
			}
		}
	}

	// tableau des couleurs
	$tableau_nom_des_couleurs = cibloc_tableau_nom_des_couleurs();

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

	// couleur
	if (_request('couleur') != 'transparent' and !in_array(_request('couleur'), $tableau_nom_des_couleurs)) {
		$erreurs['couleur'] = _T('cibloc:valeur_incorrecte');
	}

	// bordure
	if (!in_array(_request('bordure'), ['non', 'oui', 'ombre'])) {
		$erreurs['bordure'] = _T('cibloc:valeur_incorrecte');
	}

	// couleur_bordure
	if (_request('couleur_bordure') != 'transparent' and !in_array(
		_request('couleur_bordure'),
		$tableau_nom_des_couleurs
	)) {
		$erreurs['couleur_bordure'] = _T('cibloc:valeur_incorrecte');
	}

	// couleur_bouton
	if (in_array($type_et_id, ['bloc_accordeon', 'bloc_accordeon2'])) {
		if (_request('couleur_bouton') != 'transparent' and !in_array(
			_request('couleur_bouton'),
			$tableau_nom_des_couleurs
		)) {
			$erreurs['couleur_bouton'] = _T('cibloc:valeur_incorrecte');
		}
	}

	// alignement
	if (!in_array(_request('alignement'), ['left', 'center', 'right'])) {
		$erreurs['alignement'] = _T('cibloc:valeur_incorrecte');
	}

	// padding
	if (!is_numeric(_request('padding_top'))) {
		$erreurs['padding_top'] = _T('cibloc:valeur_incorrecte');
	}
	if (!is_numeric(_request('padding_bottom'))) {
		$erreurs['padding_bottom'] = _T('cibloc:valeur_incorrecte');
	}
	if (!is_numeric(_request('padding_right'))) {
		$erreurs['padding_right'] = _T('cibloc:valeur_incorrecte');
	}
	if (!is_numeric(_request('padding_left'))) {
		$erreurs['padding_left'] = _T('cibloc:valeur_incorrecte');
	}

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

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

	return $erreurs;
}

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

	$tableau_nom_champs = [
		'couleur',
		'bordure',
		'couleur_bordure',
		'alignement',
		'padding_top',
		'padding_bottom',
		'padding_right',
		'padding_left',
		'rang',
		'preremplir',
		'statut'];

	// couleur_bouton
	if (in_array($type_et_id, ['bloc_accordeon', 'bloc_accordeon2'])) {
		$tableau_nom_champs[] = 'couleur_bouton';
	}

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

		// changement de statut
		if (_request('statut') != $valeurs_actuelles['statut']) {
			$purger_definition_cache = true;
			$purger_cache_js = true;
		}

		foreach ($tableau_nom_champs as $nom_champ) {
			$valeur_saisie = _request($nom_champ);

			if ($nom_champ == 'rang') {
				$valeur_saisie = intval($valeur_saisie);
				if ($valeur_saisie != $valeurs_actuelles[$nom_champ]) {
					$valeurs_futures[$nom_champ] = $valeur_saisie;
					$ok = true;
					$purger_definition_cache = true;
					$purger_cache_js = true;
				}
			} elseif ($valeur_saisie != $valeurs_actuelles[$nom_champ]) {
				$valeurs_futures[$nom_champ] = $valeur_saisie;
				$ok = true;
			}
		}
	} elseif ($new == 'oui') {
		$id = strtolower(_request('id'));
		$valeurs_futures['nom'] = _request('nom');
		foreach ($tableau_nom_champs as $nom_champ) {
			if ($nom_champ == 'rang') {
				$valeurs_futures[$nom_champ] = intval(_request($nom_champ));
			} else {
				$valeurs_futures[$nom_champ] = _request($nom_champ);
			}
		}
		$ok = true;
		$purger_definition_cache = true;
		$purger_cache_js = true;
	}

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

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

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

	return $res;
}

function cibloc_config_bloc($type_et_id = '') {
	$return = [];
	$valeurs_defaut = cibloc_bloc_attributs_valeur_par_defaut();

	if ($type_et_id) {
		$tableau = cibloc_configuration_des_blocs();
		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;
}

function cibloc_choisir_alignement($nom_element = '', $valeur_element = '') {
	$return = '';
	$selected = '';
	$disabled = '';
	if (cibloc_imposer_parametrage('bloc')) {
		$disabled = 'disabled="disabled"';
	}
	if (!$valeur_element) {
		$valeur_element = 'left';
	}

	// tableau des valeurs
	$tableau_valeurs = ['left', 'center', 'right'];
	// Parcours du tableau
	$return .= '<select name="' . $nom_element . '" ' . $disabled . '>';
	foreach ($tableau_valeurs as $valeur) {

		if ($valeur == $valeur_element) {
			$selected = ' selected="selected"';
		} else {
			$selected = '';
		}

		// Affichage de la ligne
		$return .= "\t" . '<option value="' . $valeur . '"' . $selected . '>' . $valeur . '</option>' . "\n";
	}
	$return .= '</select>' . "\n";

	return $return;
}

function cibloc_choisir_bordure($nom_element = '', $valeur_element = '') {
	$return = '';
	$selected = '';
	$disabled = '';
	if (cibloc_imposer_parametrage('bloc')) {
		$disabled = 'disabled="disabled"';
	}
	if (!$valeur_element) {
		$valeur_element = 'non';
	}

	// tableau des valeurs
	$tableau_valeurs = ['non' => 'aucune', 'oui' => 'bordure', 'ombre' => 'bordure avec ombre'];
	// Parcours du tableau
	$return .= '<select name="' . $nom_element . '" ' . $disabled . '>';
	foreach ($tableau_valeurs as $cle => $valeur) {

		if ($cle == $valeur_element) {
			$selected = ' selected="selected"';
		} else {
			$selected = '';
		}

		// Affichage de la ligne
		$return .= "\t" . '<option value="' . $cle . '"' . $selected . '>' . $valeur . '</option>' . "\n";
	}
	$return .= '</select>' . "\n";

	return $return;
}

function cibloc_verifier_float($texte) {
	$return = false;
	$texte = trim($texte);

	$size = floatval($texte);

	if ($size != 0) {
		$return = true;
	} elseif ($size == 0 and substr($texte, 0, 1) == '0') {
		$return = true;
	}

	return $return;
}
