Ejemplo n.º 1
0
/**
 * Un parametre permet de forcer le statut (exemple: plugin antispam)
 *
 * http://code.spip.net/@inc_forum_insert_dist
 *
 * @param $objet
 * @param $id_objet
 * @param $id_forum
 *   en reponse a
 * @param null $force_statut
 * @return bool
 */
function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = null)
{
    if (!in_array($force_statut, array('privrac', 'privadm'))) {
        if (!strlen($objet) or !intval($id_objet)) {
            spip_log("Erreur insertion forum sur objet='{$objet}', id_objet={$id_objet}", 'forum.' . _LOG_ERREUR);
            return 0;
        }
    }
    spip_log("insertion de forum {$force_statut} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    include_spip('inc/filtres');
    include_spip('inc/modifier');
    include_spip('inc/session');
    $champs = objet_info('forum', 'champs_editables');
    $c = collecter_requests($champs, array());
    $c['statut'] = 'off';
    $c['objet'] = $objet;
    $c['id_objet'] = $id_objet;
    $c['auteur'] = sinon(session_get('nom'), session_get('session_nom'));
    $c['email_auteur'] = sinon(session_get('email'), session_get('session_email'));
    $c = pipeline('pre_edition', array('args' => array('table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer'), 'data' => forum_insert_statut($c, $force_statut)));
    $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
    if (!$id_reponse) {
        spip_log("Echec insertion forum sur {$objet} {$id_objet} (+{$id_forum})", 'forum.' . _LOG_ERREUR);
    } else {
        spip_log("forum insere' {$id_reponse} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    }
    return $id_reponse;
}
Ejemplo n.º 2
0
function inc_forum_insert_dist($force_statut = NULL) {
	$id_article = intval(_request('id_article'));
	$id_breve = intval(_request('id_breve'));
	$id_forum = intval(_request('id_forum'))>0?intval(_request('id_forum')):0;
	$id_rubrique = intval(_request('id_rubrique'));
	$id_syndic = intval(_request('id_syndic'));

	$reqret = rawurldecode(_request('retour_forum'));
	$retour = ($reqret !== '!') ? $reqret : forum_insert_nopost($id_forum, $id_article, $id_breve, $id_syndic, $id_rubrique);

	$c = array('statut'=>'off');
	foreach(array('id_article','id_breve','id_rubrique','id_syndic') as $k)
		if ($$k)
			$c[$k] = $$k;
	foreach (array(
		'titre', 'texte', 'nom_site', 'url_site'
	) as $champ)
		$c[$champ] = _request($champ);

	$c['auteur'] = sinon($GLOBALS['visiteur_session']['nom'],
		$GLOBALS['visiteur_session']['session_nom']);
	$c['email_auteur'] = sinon($GLOBALS['visiteur_session']['email'],
		$GLOBALS['visiteur_session']['session_email']);
		
	$c = pipeline('pre_edition',array(
		'args'=>array(
				'table' => 'spip_forum',
				'id_objet' => $id_forum,
				'action'=>'instituer'
		),
		'data'=>forum_insert_statut($c, $retour, $force_statut)
	));

	$id_message = forum_insert_base($c, $id_forum, $id_article, $id_breve, $id_syndic, $id_rubrique, $c['statut'], $retour);

	if (!$id_message) return array($retour,0); // echec

	// En cas de retour sur (par exemple) {#SELF}, on ajoute quand
	// meme #forum12 a la fin de l'url, sauf si un #ancre est explicite
	if ($reqret !== '!')
	  return array(strpos($retour, '#') ?
			$retour
			: $retour.'#forum'.$id_message,$id_message);

	// le retour par defaut envoie sur le thread, ce qui permet
	// de traiter elegamment le cas des forums moderes a priori.
	// Cela assure aussi qu'on retrouve son message dans le thread
	// dans le cas des forums moderes a posteriori, ce qui n'est
	// pas plus mal.
	$url = function_exists('generer_url_forum')
		? generer_url_forum($id_message)
		: generer_url_entite($id_message, 'forum');
	
	return array($url,$id_message);
}