<?php

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

function cibloc_fa_nom(
	$nom = ''
) {
	if (empty($nom)) {
		return '';
	}
	// interdire les caracteres dangereux
	// limiter aux a-zA-Z0-9 et aux tirets
	$tscs = str_replace('-', '', $nom);
	if (ctype_alnum($tscs)) {
		return $nom;
	}

	return '';
}

function cibloc_fa_echelle($cisquel_fa_echelle = '') {
	// limiter aux entiers
	if (intval($cisquel_fa_echelle) > 0) {
		return min(5, $cisquel_fa_echelle);
	}

	return '';
}

function cibloc_demo_nom($nom = '') {
	if (empty($nom)) {
		return '';
	}
	// interdire les caracteres dangereux
	// limiter aux a-zA-Z0-9, aux underscore et aux tirets
	$tscs = str_replace(['_', '-'], '', $nom);
	if (ctype_alnum($tscs)) {
		return $nom;
	}

	return '';
}

function cibloc_couleur_icone($element = '') {
	$return = '';
	include_spip('inc/cibloc_commun');
	$cibloc_meta = cibloc_tableau_des_couleurs_des_icones();

	if ($element and isset($cibloc_meta[$element])) {
		// nom de la couleur de l'élément
		$nom_couleur = $cibloc_meta[$element];
		// code hexa de la couleur
		$return = cibloc_couleur_hexa($nom_couleur);
	}

	return $return;
}

function cibloc_couleur_divers($element = '') {
	$return = '';
	include_spip('inc/cibloc_commun');
	$cibloc_meta = cibloc_tableau_des_divers();

	if ($element and isset($cibloc_meta[$element])) {
		// nom de la couleur de l'élément
		$nom_couleur = $cibloc_meta[$element];
		// code hexa de la couleur
		$return = cibloc_couleur_hexa($nom_couleur);
	}

	return $return;
}

function cibloc_attribut_divers($element = '') {
	$return = '';
	include_spip('inc/cibloc_commun');
	$cibloc_meta = cibloc_tableau_des_divers();

	if ($element and isset($cibloc_meta[$element])) {
		// valeur de l'élément
		$return = $cibloc_meta[$element];
	}

	return $return;
}

function cibloc_couleur_bouton($element = '') {
	$return = '';
	include_spip('inc/cibloc_commun');
	$cibloc_configuration_des_boutons = cibloc_configuration_des_boutons();

	$champ = 'couleur_bouton';
	if ($element and isset($cibloc_configuration_des_boutons[$element][$champ])) {
		// nom de la couleur de l'élément
		$nom_couleur = $cibloc_configuration_des_boutons[$element][$champ];
		// code hexa de la couleur
		$return = cibloc_couleur_hexa($nom_couleur);
	}

	return $return;
}

function cibloc_couleur_bouton_survol($element = '') {
	$return = '';
	include_spip('inc/cibloc_commun');
	$cibloc_configuration_des_boutons = cibloc_configuration_des_boutons();

	$champ = 'couleur_bouton_survol';
	if ($element and isset($cibloc_configuration_des_boutons[$element][$champ])) {
		// nom de la couleur de l'élément
		$nom_couleur = $cibloc_configuration_des_boutons[$element][$champ];
		// code hexa de la couleur
		$return = cibloc_couleur_hexa($nom_couleur);
	}

	return $return;
}

function cibloc_config_bloc_champ($type_et_id = '', $champ = '') {
	$return = '';
	include_spip('inc/cibloc_commun');

	if ($type_et_id and $champ) {
		$tableau = cibloc_configuration_des_blocs();
		if (isset($tableau[$type_et_id][$champ])) {
			$return = $tableau[$type_et_id][$champ];
			if (strpos($champ, 'couleur') !== false) {
				// code hexa de la couleur
				$return = cibloc_couleur_hexa($return);
			}
		}
	}

	return $return;
}

function cibloc_css_blocs($arg = '') {
	$return = '';
	$exceptions = [
		'bloc_accordeon',
		'bloc_accordeon2',
		'bloc_accordeon3',
		'bloc_image',
		'bloc_imagebas',
		'bloc_trait',
		'bloc_espace',
	];

	include_spip('inc/cibloc_commun');
	$tableau = cibloc_configuration_des_blocs();

	foreach ($tableau as $cle => $valeur) {
		if (!in_array($cle, $exceptions) and (!isset($valeur['statut']) or $valeur['statut'] != 'desactive')) {
			$return .= cibloc_css_bloc($cle) . PHP_EOL;
		}
	}

	return $return;
}

function cibloc_css_bloc($type_et_id = '') {
	$return = '';

	if ($type_et_id) {
		include_spip('inc/cibloc_commun');
		$tableau = cibloc_configuration_des_blocs();
		$important = cibloc_css_attribut_important();

		if (isset($tableau[$type_et_id])) {

			// 1ere definition
			$return = '.ci' . $type_et_id . ' {';

			$balise_intertitre = cibloc_balise_intertitre();

			$champ = 'couleur';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ] != 'transparent') {
				$return .= 'background-color: ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
			}

			$champ = 'couleur_bordure';
			if (isset($tableau[$type_et_id][$champ])) {
				if (isset($tableau[$type_et_id]['bordure'])) {
					if ($tableau[$type_et_id]['bordure'] == 'oui') {
						$return .= 'border: 1px solid ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
					} elseif ($tableau[$type_et_id]['bordure'] == 'ombre') {
						$return .= 'border: 1px solid ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
						$return .= 'box-shadow: 3px 3px 5px ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
					}
				}
			}

			$valeurs_par_defaut = cibloc_bloc_attributs_valeur_par_defaut();
			foreach ($valeurs_par_defaut as $champ => $valeur_par_defaut) {
				if (substr($champ, 0, 7) == 'padding') {
					if (isset($tableau[$type_et_id][$champ])) {
						$return .= str_replace('_', '-', $champ) . ': ' . $tableau[$type_et_id][$champ] . 'rem' . $important . ';';
					} else {
						$return .= str_replace('_', '-', $champ) . ': ' . $valeur_par_defaut . 'rem' . $important . ';';
					}
				}
			}

			$return .= ' }';

			// 2eme definition
			$champ = 'couleur';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ] != 'transparent') {
				$color = cibloc_couleur_texte_pour_constraster(cibloc_couleur_hexa($tableau[$type_et_id][$champ]));
				if ($color) {
					$return .= '.ci' . $type_et_id . ', .ci' . $type_et_id . ' ' . $balise_intertitre . ' {'
							. ' color: ' . $color
							. $important . '; }';
				}
			}

			// 3eme definition
			$champ = 'alignement';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ]) {
				$return .= '.ci' . $type_et_id . ', .ci' . $type_et_id . ' ' . $balise_intertitre . ', .ci' . $type_et_id . ' p {'
						. ' text-align: ' . $tableau[$type_et_id][$champ]
						. $important . '; }';
			}
		}
	}

	return $return;
}

function cibloc_css_multi($type_et_id = '') {
	$return = '';

	if ($type_et_id) {
		include_spip('inc/cibloc_commun');
		$tableau = cibloc_configuration_des_multis();
		$important = cibloc_css_attribut_important();
		$balise_intertitre = cibloc_balise_intertitre();

		if (isset($tableau[$type_et_id])) {

			// 1ere definition
			$return = '.ci' . $type_et_id . ' {';

			$champ = 'couleur';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ] != 'transparent') {
				$return .= 'background-color: ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
			}

			$champ = 'couleur_bordure';
			if (isset($tableau[$type_et_id][$champ])) {
				if (isset($tableau[$type_et_id]['bordure'])) {
					if ($tableau[$type_et_id]['bordure'] == 'oui') {
						$return .= 'border: 1px solid ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
					} elseif ($tableau[$type_et_id]['bordure'] == 'ombre') {
						$return .= 'border: 1px solid ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
						$return .= 'box-shadow: 3px 3px 5px ' . cibloc_couleur_hexa($tableau[$type_et_id][$champ]) . $important . ';';
					}
				}
			}

			$valeurs_par_defaut = cibloc_multi_attributs_valeur_par_defaut();
			foreach ($valeurs_par_defaut as $champ => $valeur_par_defaut) {
				if (substr($champ, 0, 7) == 'padding') {
					if (isset($tableau[$type_et_id][$champ])) {
						$return .= str_replace('_', '-', $champ) . ': ' . $tableau[$type_et_id][$champ] . 'rem' . $important . ';';
					} else {
						$return .= str_replace('_', '-', $champ) . ': ' . $valeur_par_defaut . 'rem' . $important . ';';
					}
				}
			}

			$return .= ' }';

			// 2eme definition
			$champ = 'couleur';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ] != 'transparent') {
				$return .= '.ci' . $type_et_id . ', .ci' . $type_et_id . ' ' . $balise_intertitre . ' {'
						. ' color: ' . cibloc_couleur_texte_pour_constraster(cibloc_couleur_hexa($tableau[$type_et_id][$champ]))
						. $important . '; }';
			}

			// 3eme definition
			$champ = 'alignement';
			if (isset($tableau[$type_et_id][$champ]) and $tableau[$type_et_id][$champ]) {
				$return .= '.ci' . $type_et_id . ', .ci' . $type_et_id . ' ' . $balise_intertitre . ', .ci' . $type_et_id . ' p {'
						. ' text-align: ' . $tableau[$type_et_id][$champ]
						. $important . '; }';
			}
		}
	}

	return $return;
}

function cibloc_css_bouton($type_et_id = '') {
	$return = '';

	if ($type_et_id) {
		include_spip('inc/cibloc_commun');
		$tableau = cibloc_configuration_des_boutons();
		$important = cibloc_css_attribut_important();

		if (isset($tableau[$type_et_id])) {
			$id = str_replace('bouton_', '', $type_et_id);
			if (substr($type_et_id, -4) == 'vide') {
				$vide = true;
			} else {
				$vide = false;
			}

			// 1ere definition
			$champ = 'couleur_bouton';
			$return .= '.cibtn-' . $id . ' a, .cibtn-' . $id . ' span {';
			if (isset($tableau[$type_et_id][$champ])) {
				$couleur = cibloc_couleur_hexa($tableau[$type_et_id][$champ]);
				$couleur_texte = cibloc_couleur_texte_pour_constraster($couleur);

				if ($vide) {
					$return .= 'background: none' . $important . ';';
					$return .= 'border: 1px solid ' . $couleur . $important . ';';
					$return .= 'color: ' . $couleur . $important . ';';
				} else {
					$return .= 'background-color: ' . $couleur . $important . ';';
					$return .= 'border-color: ' . $couleur . $important . ';';
					if ($couleur_texte) {
						$return .= 'color: ' . $couleur_texte . $important . ';';
					}
				}
			}
			$return .= ' }';

			// 2eme definition
			$return .= '.cibtn-' . $id . 'i.fa {';
			if (isset($tableau[$type_et_id][$champ])) {
				if ($vide) {
					$return .= 'color: ' . $couleur . $important . ';';
				} else {
					if ($couleur_texte) {
						$return .= 'color: ' . $couleur_texte . $important . ';';
					}
				}
			}
			$return .= ' }';

			// 3eme definition
			$champ = 'couleur_bouton_survol';
			$return .= '.cibtn-' . $id . ' a:hover, .cibtn-' . $id . ' a:focus, .cibtn-' . $id . ' a:active {';
			if (isset($tableau[$type_et_id][$champ])) {
				$couleur_survol = cibloc_couleur_hexa($tableau[$type_et_id][$champ]);
				$couleur_texte_survol = cibloc_couleur_texte_pour_constraster($couleur_survol);

				if ($vide) {
					$return .= 'background: none' . $important . ';';
					$return .= 'border: 1px solid ' . $couleur_survol . $important . ';';
					$return .= 'color: ' . $couleur_survol . $important . ';';
				} else {
					$return .= 'background-color: ' . $couleur_survol . $important . ';';
					$return .= 'border-color: ' . $couleur_survol . $important . ';';
					if ($couleur_texte_survol) {
						$return .= 'color: ' . $couleur_texte_survol . $important . ';';
					} else {
						$return .= 'color: #484848' . $important . ';';
					}
				}
			}
			$return .= ' }';

		}
	}

	return $return;
}

function cibloc_couleur_hexa($nom_couleur = '') {
	$return = '';
	include_spip('inc/cibloc_commun');

	$tableau_couleurs = cibloc_tableau_couleurs();
	if ($nom_couleur and isset($tableau_couleurs[$nom_couleur])) {
		// code hexa de la couleur
		$return = $tableau_couleurs[$nom_couleur];
	}

	return $return;
}

function cibloc_couleur_texte_pour_constraster($couleur_fond_hexa = '') {
	$return = '';

	if ($couleur_fond_hexa and preg_match(',^#[a-f0-9]{6}$,i', $couleur_fond_hexa)) {
		list($r, $g, $b) = sscanf($couleur_fond_hexa, '#%02x%02x%02x');
		$valeur = (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
		if ($valeur < 125) {
			$return = '#FFFFFF';
		} elseif ($valeur < 150) {
			$return = '#000000';
		} elseif ($valeur < 160) {
			$return = '#080808';
		} elseif ($valeur < 180) {
			$return = '#181818';
		}
	}

	return $return;
}

function cibloc_element_icone($element) {
	$return = 'icone_defaut';
	if (cibloc_verifier_install3()) {
		include_spip('inc/cibloc_commun');
		$tableau = cibloc_tableau_des_couleurs_des_icones();

		if ($element == 'transparent') {
			// si une couleur d'icone a ete utilisee puis a ensuite ete desactivee
			// on utilise la couleur par defaut
			$return = 'icone_defaut';
		} elseif ($element and ctype_alnum($element) and isset($tableau['icone_' . $element])) {
			// nom de l'élément (avec le préfixe)
			$return = 'icone_' . $element;
		}
	}
	return $return;
}

function cibloc_acces_depuis_site_public($arg = '') {
	$return = 'non';

	if (isset($GLOBALS['visiteur_session']['id_auteur'])
		and $GLOBALS['visiteur_session']['id_auteur']
		and $GLOBALS['visiteur_session']['statut'] != '6forum'
		and (strpos($_SERVER['HTTP_REFERER'], '/ecrire/') === false)
		//        AND (strpos(_request('refer'),'/ecrire/')===false)
		//        AND (!test_espace_prive() OR substr(_request('refer'),0,9)=='spip.php?')
	) {
		$return = 'oui';
	}

	return $return;
}

function cibloc_start($arg = '') {
	if (cibloc_acces_depuis_site_public() == 'oui') {
		return cibloc_start_public();
	}
	return cibloc_start_prive();

}

function cibloc_start_prive() {
	$return = '';
	$cibloc_start_js = '';
	$fond = '_js/cibloc_start2.js';

	if ($fond) {
		$cibloc_start_js = produire_fond_statique($fond);
	}

	if ($cibloc_start_js) {
		$return .= '<script src="' . $cibloc_start_js . '"></script>';
	}

	return $return;
}

function cibloc_start_public() {
	$return = '';
	$cibloc_start_js = '';
	$fond = '_js/cibloc_start2.js';
	$cibloc_public_modal_css = find_in_path('_css/cibloc_public_modal.css');

	if ($fond) {
		$cibloc_start_js = produire_fond_statique($fond);
	}

	if ($cibloc_start_js) {
		$cibloc_start_js = str_replace('../', '', $cibloc_start_js);
		$cibloc_public_modal_css = str_replace('../', '', $cibloc_public_modal_css);
		$return .= '<script src="' . $cibloc_start_js . '"></script>';
		$return .= '<link rel="stylesheet" href="' . $cibloc_public_modal_css . '" type="text/css" />';
	}

	return $return;
}

function cibloc_style_popin($arg = '') {
	$prefixe = '#cibloc_popin_blocs';

	return cistyle_style_tout($prefixe);
}

function cibloc_style_nom($nom = '') {
	$return = '';
	$balise_courante = '';
	$cles_et_valeurs = cistyle_tableau_style();

	if ($nom and isset($cles_et_valeurs[$nom])) {
		$return = $cles_et_valeurs[$nom];
	}

	return $return;
}

function cibloc_style($balise = '', $attribut = '') {
	$return = '';
	if (function_exists('cistyle_style')) {
		$return = cistyle_style($balise, $attribut);
	}
	return $return;
}

function cibloc_autorise_creer_bloc($arg = '') {
	include_spip('inc/cibloc_commun');
	$return = true;
	if (cibloc_imposer_parametrage('bloc')) {
		$return = false;
	}
	return $return;
}

function cibloc_autorise_creer_multi($arg = '') {
	include_spip('inc/cibloc_commun');
	$return = true;
	if (cibloc_imposer_parametrage('multi')) {
		$return = false;
	}
	return $return;
}

function cibloc_config_ou_voir($type = '') {
	include_spip('inc/cibloc_commun');
	$return = '';

	switch ($type) {

		case 'couleur':
			if (cibloc_imposer_parametrage('couleur')) {
				$return = _T('cibloc:voir_config_couleur_titre');
			} else {
				$return = _T('cibloc:config_couleur_titre');
			}
			break;

		case 'blocs':
			if (cibloc_imposer_parametrage('bloc')) {
				$return = _T('cibloc:voir_config_blocs_titre');
			} else {
				$return = _T('cibloc:config_blocs_titre');
			}
			break;

		case 'bloc':
			if (cibloc_imposer_parametrage('bloc')) {
				$return = _T('cibloc:voir_configuration');
			} else {
				$return = _T('cibloc:configurer');
			}
			break;

		case 'multis':
			if (cibloc_imposer_parametrage('multi')) {
				$return = _T('cibloc:voir_config_multis_titre');
			} else {
				$return = _T('cibloc:config_multis_titre');
			}
			break;

		case 'multi':
			if (cibloc_imposer_parametrage('multi')) {
				$return = _T('cibloc:voir_configuration');
			} else {
				$return = _T('cibloc:configurer');
			}
			break;

		case 'ensembles':
			$return = _T('cibloc:config_ensembles_titre');
			break;

		case 'ensemble':
			$return = _T('cibloc:config_ensemble_titre');
			break;

		case 'bouton':
			if (cibloc_imposer_parametrage('bouton')) {
				$return = _T('cibloc:voir_config_boutons_titre');
			} else {
				$return = _T('cibloc:config_boutons_titre');
			}
			break;

		case 'icone_liste':
			if (cibloc_imposer_parametrage('icones_liste')) {
				$return = _T('cibloc:voir_config_icones_liste_titre');
			} else {
				$return = _T('cibloc:config_icones_liste_titre');
			}
			break;

		case 'icone_couleur':
			if (cibloc_imposer_parametrage('icones_couleur')) {
				$return = _T('cibloc:voir_config_icones_couleur_titre');
			} else {
				$return = _T('cibloc:config_icones_couleur_titre');
			}
			break;

		case 'divers':
			if (cibloc_imposer_parametrage('divers')) {
				$return = _T('cibloc:voir_config_divers_titre');
			} else {
				$return = _T('cibloc:config_divers_titre');
			}
			break;

		case 'style':
			if (cibloc_imposer_parametrage('style')) {
				$return = _T('cibloc:voir_config_style_titre');
			} else {
				$return = _T('cibloc:config_style_titre');
			}
			break;
	}

	return $return;
}

function cibloc_balise_intertitre($arg = '') {
	$return = 'h2';

	if (isset($GLOBALS['debut_intertitre'])) {
		if (strpos($GLOBALS['debut_intertitre'], 'h2') !== false) {
			$return = 'h2';
		} elseif (strpos($GLOBALS['debut_intertitre'], 'h3') !== false) {
			$return = 'h3';
		}
	}

	return $return;
}

function cibloc_verifier_install3() {
	$return = true;

	if (!isset($GLOBALS['meta']['cibloc_base_version'])) {
		$return = false;
	} elseif (substr($GLOBALS['meta']['cibloc_base_version'], 0, 2) == '1.') {
		$return = false;
	}

	return $return;
}

function cibloc_css_attribut_important($arg = '') {
	$return = ' !important';

	if (defined('_CIBLOC_CSS_SANS_ATTRIBUT_IMPORTANT') and _CIBLOC_CSS_SANS_ATTRIBUT_IMPORTANT == 'oui') {
		$return = '';
	}

	return $return;
}
