/** * 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; }
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); }