<?php
/*
 * Plugin Comments
 * (c) 2010 Collectif
 * Distribue sous licence GPL
 *
 */

/* pour que le pipeline ne rale pas ! */
function comments_autoriser(){}

/**
 *
 * Inserer des styles
 *
 * @param string $flux
 * @return string
 */
function comments_insert_head_css($flux){
	if ($f = find_in_path("css/comments.css"))
		$flux .= '<link rel="stylesheet" href="'.direction_css($f).'" type="text/css" media="all" />';
	return $flux;
}

/***
 * (c)James 2006, Licence GNU/GPL
 * |me compare un id_auteur, par exemple,
 * d'une boucle FORUMS avec les auteurs d'un objet
 * et renvoie la valeur booleenne true (vrai) si on trouve
 *  une correspondance
 * utilisation:
 * <div id="forum#ID_FORUM"[(#ID_OBJET|me{#OBJET,#ID_AUTEUR})class="me"]>
 *
 * @param int $id_objet
 * @param string $objet
 * @param int $id_auteur
 * @param string $sioui
 * @param string $sinon
 * @return bool
 */
function filtre_me_dist($id_objet, $objet, $id_auteur, $sioui = ' ', $sinon = '') {
	static $auteurs = array();
	if (!isset($auteurs[$objet][$id_objet])) {
		$r = sql_allfetsel("id_auteur", "spip_auteurs_liens", "objet=" . sql_quote($objet) . " AND id_objet=" . intval($id_objet));
		$auteurs[$objet][$id_objet] = array_column($r, "id_auteur");
	}
	return (in_array($id_auteur, $auteurs[$objet][$id_objet]) ? $sioui : $sinon);
}

/**
 * Generer les boutons d'admin des forum selon les droits du visiteur
 * en SPIP >= 2.1 uniquement
 *
 * @param object $p
 * @return object
 */
function balise_BOUTONS_ADMIN_FORUM_dist($p) {
	if (($_id = interprete_argument_balise(1,$p))===NULL)
		$_id = champ_sql('id_forum', $p);

		$p->code = "
'<'.'?php
	if (isset(\$GLOBALS[\'visiteur_session\'][\'statut\'])
	  AND \$GLOBALS[\'visiteur_session\'][\'statut\']==\'0minirezo\'
		AND (\$id = '.intval($_id).')
		AND	include_spip(\'inc/autoriser\')
		AND autoriser(\'moderer\',\'forum\',\$id)) {
			include_spip(\'inc/actions\');include_spip(\'inc/filtres\');
			echo \"<div class=\'boutons spip-admin actions modererforum\'>\"
			. bouton_action(_T(\'forum:icone_supprimer_message\'),generer_action_auteur(\'instituer_forum\',\$id.\'-off\',ancre_url(self(),\'forum\')),\'poubelle\')
			. bouton_action(_T(\'forum:icone_bruler_message\'),generer_action_auteur(\'instituer_forum\',\$id.\'-spam\',ancre_url(self(),\'forum\')),\'spam\')
			. \"</div>\";
		}
?'.'>'";

	$p->interdire_scripts = false;
	return $p;
}

/**
 * Charger la saisie du formulaire forum : declarer le champ 'notification' en plus
 * (seulement utilise si plugin notifications dispo)
 *
 * @param array $flux
 * @return array
 */
function comments_formulaire_charger($flux){
	if ($flux['args']['form']=='forum' and $flux['data']){
		$flux['data']['notification']=1;
	}
	return $flux;
}

/**
 * Verifier la saisie dans le formulaire forum :
 * login obligatoire
 * email optionnellement obligatoire
 *
 * @param array $flux
 * @return array
 */
function comments_formulaire_verifier($flux){

	if ($flux['args']['form']=='forum'){
		// vérifier le champ nom et email si la conf le demande
		if (!isset($GLOBALS['visiteur_session']['statut'])){
			include_spip('inc/config');
			if (lire_config('comments/nom_obli',1)
				AND !_request('session_nom')
				AND (!isset($GLOBALS['visiteur_session']['session_nom']) OR !strlen($GLOBALS['visiteur_session']['session_nom']))
			){
					$flux['data']['session_nom'] = _T('info_obligatoire');
					unset($flux['data']['previsu']);
			}
			if (lire_config('comments/email_obli','')
				AND !_request('session_email')
				AND (!isset($GLOBALS['visiteur_session']['session_email']) OR !strlen($GLOBALS['visiteur_session']['session_email']))
			){
				$flux['data']['session_email'] = _T('info_obligatoire');
				unset($flux['data']['previsu']);
			}
		}
	}
	return $flux;
}

/**
 * Traiter le formulaire de forum :
 *
 * - ne pas rediriger en fin de traitement si pas d'url demandee explicitement
 *   et si on est pas sur la ?page=forum
 *
 * - preparer un message en cas de moderation
 *
 * @param array $flux
 * @return array
 */
function comments_formulaire_traiter($flux){
	if ($flux['args']['form']=='forum'
		){
		// args :
		// $objet,$id_objet, $id_forum,$ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour
		// si pas d'url de retour explicite
		$redirect = $flux['data']['redirect'];
		if (!isset($flux['args']['args'][6]) OR !$flux['args']['args'][6]){
			// si on est pas sur la page forum, on ne redirige pas
			// mais il faudra traiter l'ancre
			if (!($p=_request('page')) OR $p!=='forum'){
				unset($flux['data']['redirect']);
				// mais on le remet editable !
				$flux['data']['editable']=true;
				// vider la saisie :
				set_request('texte');
				set_request('titre');
				set_request('url_site');
				set_request('ajouter_groupe');
				set_request('ajouter_mot');
				set_request('id_forum');
				set_request('notification');
			}
		}

		$id_forum = $flux['data']['id_forum'];
		include_spip('base/abstract_sql');
		$statut = sql_getfetsel('statut','spip_forum','id_forum='.intval($id_forum));
		if ($statut=='publie'){
			// le message est OK, il suffit de mettre une ancre !
			$flux['data']['message_ok'] =
			  _T('comments:reponse_comment_ok');
			if (!isset($flux['data']['redirect'])){
				$flux['data']['message_ok'] .=
						"<script type='text/javascript'>function move_comment$id_forum(){
jQuery('#formulaire_forum .reponse_formulaire').detach().appendTo(jQuery('#forum$id_forum').parent()).addClass('success');
jQuery('#forum$id_forum').parent().positionner();
//window.location.hash='forum$id_forum';
}
jQuery(function(){jQuery('.comments-posts').ajaxReload({callback:move_comment$id_forum})});</script>";

			}
		}
		else {
			// dire que le message a ete modere
			$flux['data']['message_ok'] = _T('comments:reponse_comment_modere');
		}

	}
	return $flux;

}
?>