<?php
if (!defined('_ECRIRE_INC_VERSION')) return;

function formulaires_editer_groupe_charger_dist($id_article=0, $redirect=''){
	
	$erreurs = array();
	include_spip('inc/autoriser');
	if (! autoriser("creer","article")) {
		$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
		return $erreurs;
	}
	
	// Pour récupérer les champs renseignés en cas d'erreur
	
	$id_rubrique = intval(_request('id_rubrique'));
	$titre = _request('titre');
	$texte = _request('texte');
	$soustitre = _request('soustitre');
	$surtitre = _request('surtitre');
	$descriptif = _request('descriptif');

	$valeurs = array();
	$valeurs['titre'] = $titre;
	$valeurs['texte'] = $texte;
	$valeurs['soustitre'] = $soustitre;
	$valeurs['rubrique_selected'] = $id_rubrique;
	$valeurs['descriptif'] = $descriptif;
	$valeurs['surtitre'] = $surtitre;
	$valeurs['statut'] = $statut;

	if (intval($id_article)) {
		if (! autoriser("modifier","article", $id_article)) {
			$erreurs['message_erreur'] = "Vous n'êtes pas autorisé à modifier cet article.";
			return $erreurs;
		}

		$valeurs = sql_fetsel('*', 'spip_articles', 'id_article='.intval($id_article));

		$where = array(
			'id_objet='.intval($id_article),
			'objet="article"',
		);
		$res = sql_allfetsel('id_auteur','spip_auteurs_liens',$where);

		$valeurs['T_id_auteurs'] = array_column($res,'id_auteur');
		$valeurs['rubrique_selected'] = sql_getfetsel('id_rubrique','spip_articles','id_article='. $id_article);
	}
	else {
		$valeurs['T_id_auteurs'] = array();
		$valeurs['id_article']   = -1 * intval(session_get('id_auteur'));
	}

	// Sans ville (surtitre), le groupe est ponctuel
	if(empty($valeurs['surtitre'])){
		$valeurs['ponctuel'] = "on";
	}
	else{
		$valeurs['ponctuel'] = "";
	}
	$valeurs['_bigup_rechercher_fichiers'] = true;
	return $valeurs;
}

function formulaires_editer_groupe_verifier_dist($id_article=0, $redirect=''){
	$erreurs = array();

	include_spip('inc/autoriser');
	if (! autoriser("creer","article")) {
		$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
		return $erreurs;
	}
	if (intval($id_article)) {
		if (! autoriser("modifier","article", $id_article)) {
			$erreurs['message_erreur'] = "Vous n'êtes pas autorisé à modifier cet article.";
			return $erreurs;
		}
	}

	
	if (_request('ponctuel')!="on"){
		// il faut au minimum titre (nom), surtitre (ville) et id_rubrique (pays) pour créer un article pour les groupes réguliers
		if (_request('titre') == '' OR _request('surtitre') == '' OR _request('id_rubrique') == ''){
			$erreurs['message_erreur'] = "Il faut obligatoirement un pays, une ville et un nom pour créer un groupe régulier.";
			return $erreurs;
		}
	}
	else{
		// il faut au minimum titre (nom) et id_rubrique (pays) pour créer un article pour les groupes
		if (_request('titre') == '' OR _request('id_rubrique') == ''){
			$erreurs['message_erreur'] = "Il faut obligatoirement un pays et un nom pour créer un groupe.";
			return $erreurs;
		}
	}
	
	// la rubrique choisie doit être une sous-rubrique du secteur défini en config
	$id_rubrique = intval(_request('id_rubrique'));
	$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.$id_rubrique);
	if ($id_secteur != lire_config('balint/id_rub_groupes')) {
		$erreurs['message_erreur'] = "La rubrique choisie comme pays ne correspond au secteur défini pour les groupes dans les options de configuration.";
		return $erreurs;
	}

	// On évite les erreurs dues à des caractères spéciaux dans le surtitre (ville)
	if (preg_match('/[?!:]/', _request('surtitre'))){
		$erreurs['message_erreur'] = "La ville ne doit pas comprendre de signes de ponctuation comme ? ! ou :";
		return $erreurs;
	}

	$bigform = charger_fonction('bigform_verifier','inc');
	$options = ['mime' => 'image_web','taille_max'=>'2000','largeur_max'=>'2048','hauteur_max'=>'2048'];
	$bigform($options,$erreurs);

	return $erreurs;
}

function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
	$new = $id_article;
	if (!intval($id_article)) {

		$id_rubrique = intval(_request('id_rubrique'));
		include_spip('action/editer_article');
		$set = array(
			'statut' => 'publie'
		);
		$id_article = article_inserer($id_rubrique,$set);
	}

	// enregistrement de l'image
	if (!intval($new)) {
		$where = array(
			'objet="article"',
			'id_objet='.intval(session_get('id_auteur')) * -1
		);
		sql_updateq('spip_documents_liens',array('id_objet' => intval($id_article)), $where);
	}
	$surtitre=_request('surtitre');
	$titre=_request('titre');
	$soustitre=_request('soustitre');
	$texte=_request('texte');
	$descriptif=_request('descriptif');

	if (_request('ponctuel')=="on"){
		$surtitre="";
		$soustitre="";
		$descriptif="";
	}

	// maj de l'article
	$set = array(
		'titre'				=> $titre,
		'texte'				=> $texte,
		'soustitre'    		=> $soustitre,
		// On affiche le plus récent en premier => on garde la date de mise à jour
		'date'				=> date("Y-m-d H:i:s"),
		'descriptif'   		=> $descriptif,
		'surtitre'	   		=> $surtitre
//		'champ_1'  			=> _request('champ_1'),
//		'champ_2' 			=> _request('champ_2'),
//		'chapo'        		=> _request('chapo'),
	);
	sql_updateq('spip_articles',$set,'id_article='.intval($id_article));
	
	// maj rubrique si besoin
	$id_rubrique = intval(_request('id_rubrique'));
	$id_rub = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article='.$id_article);
	if ($id_rub != $id_rubrique) {
		include_spip('action/editer_article');
		article_instituer($id_article, array('id_parent' => $id_rubrique));
	}

	// maj association article -> auteurs
	include_spip('action/editer_liens');
	$where = array(
		'id_objet='.intval($id_article),
		'objet="article"',
	);
	$ids_auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', $where);
	$ids_auteurs = array_column($ids_auteurs, 'id_auteur');
	$Tauteurs    = _request('Tauteurs') ?? [];
	if (count($Tauteurs)) {
		$associer    = array_diff($Tauteurs, $ids_auteurs);
		$dissocier   = array_diff($ids_auteurs, $Tauteurs);

		objet_associer( array('auteur' => $associer),array('article' => intval($id_article) ));
		objet_dissocier( array('auteur' => $dissocier) , array('article' =>intval($id_article) ));
	}

	// maj des mots fermes
	$T_id_groupe = sql_allfetsel('id_groupe','spip_groupes_mots','grigri!="tags"');
	$T_id_groupe = array_column($T_id_groupe,'id_groupe');

	foreach ($T_id_groupe as $id_groupe) {
		$from = array(
			'spip_mots as M',
			'spip_mots_liens as L'
		);
		$where = array(
			'L.id_objet='.intval($id_article),
			'L.objet="article"',
			'L.id_mot=M.id_mot',
			'M.id_groupe='.$id_groupe
		);

		$ids_mots  = sql_allfetsel('M.id_mot AS id_mot', $from, $where);
		$ids_mots  = array_column($ids_mots, 'id_mot');
		$coches    = _request('id_groupe_'.$id_groupe) ?? [];
		if (count($coches)) {
			$associer  = array_diff($coches, $ids_mots);
			$dissocier = array_diff($ids_mots, $coches);

			objet_associer(array('mot' => $associer),array('article' => intval($id_article)));
			objet_dissocier(array('mot' => $dissocier), array('article' => intval($id_article)));
		}
	}

	include_spip('action/editer_objet');
	// GIS
	$lat_def = lire_config('gis/lat');
	$lon_def = lire_config('gis/lon');
	$lat     = _request('lat');
	$lon     = _request('lon');
	// 1. recup id_gis si present
	$from = array(
		'spip_gis as G',
		'spip_gis_liens as L',
		'spip_articles as A'
	);
	$where = array(
		'L.id_objet='.intval($id_article),
		'L.objet="article"',
		'L.id_gis=G.id_gis'
	);
	$id_gis = sql_getfetsel('G.id_gis', $from, $where);
	$set = array(
		'titre' => _request('titre'),
		'lat'   => $lat,
		'lon'   => $lon,
		'zoom'  => 15
	);

	if (!$id_gis) {
		$id_gis = sql_insertq('spip_gis',$set);
		$set = array(
			'id_gis'   => $id_gis,
			'id_objet' => intval($id_article),
			'objet'    => 'article'
		);
		sql_insertq('spip_gis_liens',$set);
	} else {
		if ($lat !== $lat_def and $lon !== $lon_def) {
			objet_modifier('gis', $id_gis, $set);
		}
	}
	
	// SEO title et description: créer ou mettre à jour, y compris si les valeurs postées sont vides (= vidage du champ)
	$id_article = intval($id_article);
	$seo_titre = _request('seo_titre');
	$set = array('id_objet' => $id_article, 'objet' => 'article', 'meta_name' => 'title', 'meta_content' => $seo_titre);
	$where = array("id_objet = $id_article", "objet = 'article'", "meta_name = 'title'");
	$res = sql_getfetsel('meta_content', 'spip_seo', $where);
	if ((!$res AND $seo_titre != '') 
		OR ($res != $seo_titre)) {
		sql_replace('spip_seo', $set, $where);
	}
	$seo_descriptif = _request('seo_descriptif');
	$set = array('id_objet' => $id_article, 'objet' => 'article', 'meta_name' => 'description', 'meta_content' => $seo_descriptif);
	$where = array("id_objet = $id_article", "objet = 'article'", "meta_name = 'description'");
	$res = sql_getfetsel('meta_content', 'spip_seo', $where);
	if ((!$res AND $seo_descriptif != '') 
		OR ($res != $seo_descriptif)) {
		sql_replace('spip_seo', $set, $where);
	}

	include_spip('inc/invalideur');
	suivre_invalideur("id='id_article/1'");

	$retour = array();
	$retour['message_ok'] = "Le groupe est bien enregistré.";

	// Si c'est un groupe ponctuel, on redirige vers le pays, sinon vers la ville
	if (_request('ponctuel')=="on"){
		$retour['redirect'] = "spip.php?page=groupes&id_rubrique=$id_rubrique";
	}
	else{
		$retour['redirect'] = "spip.php?page=groupes&id_article=$id_article";
	}

	$bigform = charger_fonction('bigform_traiter','inc');
	$bigform($id_article, 'article');


	return $retour;
}
