<?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_lire_cache');
include_spip('inc/cibloc_ajout_auto');

function cibloc_verifier_install() {
	$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_insert_head_css($flux) {
	$css = direction_css(find_in_path('_css/font-awesome.min.css'), lang_dir());
	$flux .= '<link rel="stylesheet" href="' . $css . '" type="text/css" />';
	if (cibloc_verifier_install()) {
		$css = direction_css(produire_fond_statique('_css/cibloc22.css'), lang_dir());
		$flux .= '<link rel="stylesheet" href="' . $css . '" type="text/css" />';
	}
	return $flux;
}

function cibloc_insert_head($flux) {
	$js = produire_fond_statique('_js/cibloc.js');
	$flux .= "<script type='text/javascript' src='" . $js . "'></script>";
	return $flux;
}

function cibloc_header_prive($flux) {

	$css = direction_css(find_in_path('_css/cibloc_modal.css'), lang_dir());
	$flux .= '<link rel="stylesheet" href="' . $css . '" type="text/css" />';

	$css = direction_css(find_in_path('_css/font-awesome.min.css'), lang_dir());
	$flux .= '<link rel="stylesheet" href="' . $css . '" type="text/css" />';
	if (cibloc_verifier_install()) {
		$css = direction_css(produire_fond_statique('_css/cibloc22.css'), lang_dir());
		$flux .= '<link rel="stylesheet" href="' . $css . '" type="text/css" />';
	}
	$js = produire_fond_statique('_js/cibloc.js');
	$flux .= "<script type='text/javascript' src='" . $js . "'></script>";
	return $flux;
}

function cibloc_pre_propre($texte) {
	$cherche = [];
	$remplace = [];
	$msg_erreur = '';
	$offset = 0;

	if (cibloc_verifier_install()) {

		if ($texte
				and (strpos($texte, '[bloc') !== false or strpos($texte, '[multi_') !== false or strpos(
					$texte,
					'[colonne_'
				) !== false or strpos(
					$texte,
					'[bouton'
				) !== false or strpos(
					$texte,
					'[texte_'
				) !== false
					 or strpos($texte, '[/bloc') !== false or strpos($texte, '[/multi_') !== false or strpos(
					 	$texte,
					 	'[/colonne_'
					 ) !== false or strpos(
					 	$texte,
					 	'[/bouton'
					 ) !== false or strpos(
					 	$texte,
					 	'[/texte_'
					 ) !== false)) {

			// Recherche des erreurs : bloc ouvert non ferme, bloc ferme non ouvert, bloc dans un bloc, etc.
			$types = [
				'bloc',
				'multi',
				'colonne',
				'bouton',
				'texte',
			];
			foreach ($types as $type) {
				if (!$msg_erreur) {
					$erreurs = cibloc_verifier_article($texte, $type);
					if ($erreurs and is_array($erreurs)) {
						foreach ($erreurs as $erreur) {
							// une seule erreur a la fois sinon c'est peu comprehensible
							if (!$msg_erreur) {
								if (isset($erreur[2])) {
									$msg_erreur .= '<br>- ' . $erreur[2];
								}
								if (isset($erreur[0]) and isset($erreur[1])) {
									$texte = substr_replace(
										$texte,
										'<span style="color:red;font-weight:bold;">' . $erreur[1] . '</span>',
										$erreur[0] + $offset,
										strlen($erreur[1])
									);
								}
							}
						}
					}
				}
			}

			if ($msg_erreur) {
				$texte = '<div style="color:red;font-weight:bold;margin:2rem 0;">Cette page contient une erreur :' . $msg_erreur . '</div>' . $texte;
			} else {
				// lire le cache
				cibloc_lire_cache_definition();

				// appliquer la fonction si elle existe
				$fonc = 'cibloc_definition_cherche';
				if (function_exists($fonc)) {
					$cherche = $fonc();
				} else {
					spip_log("fonction $fonc absente", _LOG_ERREUR);
				}

				// appliquer la fonction si elle existe
				$fonc = 'cibloc_definition_remplace';
				if (function_exists($fonc)) {
					$remplace = $fonc();
				} else {
					spip_log("fonction $fonc absente", _LOG_ERREUR);
				}
			}
		}
	}

	if ($cherche and $remplace) {
		$texte = str_replace($cherche, $remplace, $texte);
		return $texte;
	}
	return $texte;

}

function cibloc_porte_plume_barre_pre_charger($barres) {
	if (cibloc_verifier_install()) {
		$barre = &$barres['edition'];

		$url_choisir_bloc = parametre_url(generer_url_ecrire('cibloc_popin2-choisir_bloc'), 'var_zajax', 'contenu');
		$url_choisir_icone = parametre_url(generer_url_ecrire('cibloc_popin2-choisir_icone'), 'var_zajax', 'contenu');
		$url_choisir_bouton = parametre_url(generer_url_ecrire('cibloc_popin2-choisir_bouton'), 'var_zajax', 'contenu');

		$barre->ajouterApres('quote', [
			'id' => 'bloc',
			'name' => _T('cibloc:choisir_bloc'),
			'className' => 'outil_bloc',
			// IMPORTANT : utiliser beforeInsert
			'beforeInsert' => "function(h){ return jQuery.modalboxload('" . $url_choisir_bloc . "',{trapFocus: false});}",
			'display' => true,
		]);

		$barre->ajouterApres('bloc', [
			'id' => 'icone',
			'name' => _T('cibloc:choisir_icone'),
			'className' => 'outil_icone',
			// IMPORTANT : utiliser beforeInsert
			'beforeInsert' => "function(h){ return jQuery.modalboxload('" . $url_choisir_icone . "',{trapFocus: false});}",
			'display' => true,
		]);

		$barre->ajouterApres('icone', [
			'id' => 'bouton',
			'name' => _T('cibloc:choisir_bouton'),
			'className' => 'outil_bouton',
			// IMPORTANT : utiliser beforeInsert
			'beforeInsert' => "function(h){ return jQuery.modalboxload('" . $url_choisir_bouton . "',{trapFocus: false});}",
			'display' => true,
		]);
	}
	return $barres;
}

function cibloc_porte_plume_lien_classe_vers_icone($flux) {
	$cibloc_classe_vers_icone = [
		'outil_bloc' => ['bloc.png', '0'],
		'outil_icone' => ['icone.png', '0'],
		'outil_bouton' => ['bouton.png', '0'],
	];

        foreach ($cibloc_classe_vers_icone as $outil => $tableau) {
                foreach ($tableau as $key => $value) {
                    $flux[$outil][$key] = $value;
                }
        }
        
	return $flux;
}

/*
 * Ajout automatique des blocs ressources et des blocs texte
 */
function cibloc_pre_liens($texte) {
	if (cibloc_verifier_install()) {

		// lire le cache
		cibloc_lire_cache_definition();

		if (defined('_CIBLOC_BLOC_RESSOURCES_AUTOMATIQUE') and _CIBLOC_BLOC_RESSOURCES_AUTOMATIQUE == 'oui') {
			$texte = cibloc_ajout_automatique_bloc_ressources($texte);
		}
		if (defined('_CIBLOC_BLOC_TEXTE_AUTOMATIQUE') and _CIBLOC_BLOC_TEXTE_AUTOMATIQUE == 'oui') {
			$texte = cibloc_ajout_automatique_bloc_texte($texte);
		}
	}

	return $texte;
}

/*
 * nettoyer_raccourcis_typo doit prendre en compte les blocs
 */
function cibloc_nettoyer_raccourcis_typo($texte) {
	if (cibloc_verifier_install()) {
		if ($texte
			and (strpos($texte, '[bloc_') !== false or strpos($texte, '[multi_') !== false or strpos(
				$texte,
				'[colonne_'
			) !== false or strpos(
				$texte,
				'[bouton_'
			) !== false)) {

			// lire le cache
			cibloc_lire_cache_definition();

			// appliquer la fonction si elle existe
			$fonc = 'cibloc_definition_cherche';
			if (function_exists($fonc)) {
				$cherche = $fonc();
			} else {
				spip_log("fonction $fonc absente", _LOG_ERREUR);
			}

			if ($cherche) {
				$texte = str_replace($cherche, '', $texte);
			}
		}
	}
	return $texte;
}
