/** * Verifier la presence du jeton de secu post previsu * http://code.spip.net/@forum_insert_noprevisu * * @return bool */ function forum_insert_noprevisu() { // simuler une action venant de l'espace public // pour se conformer au cas general. set_request('action', 'ajout_forum'); // Creer une session s'il n'y en a pas (cas du postage sans cookie) $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $file = _DIR_TMP . "forum_" . preg_replace('/[^0-9]/', '', $arg) . ".lck"; if (!file_exists($file)) { # ne pas tracer cette erreur, peut etre due a un double POST # tracer_erreur_forum('session absente'); return true; } unlink($file); // antispam : si le champ au nom aleatoire verif_$hash n'est pas 'ok' // on meurt if (_request('verif_' . _request('hash')) != 'ok') { tracer_erreur_forum('champ verif manquant'); return true; } return false; }
/** * Traiter la saisie de #FORMULAIRE_FORUM * tout est delegue a inc_forum_insert() * * @param string $objet * @param int $id_objet * @param int $id_forum * @param int|array $ajouter_mot * mots ajoutes coches par defaut * @param $ajouter_groupe * groupes ajoutables * @param $afficher_previsu * previsu oui ou non * @param $retour * url de retour * @return array|bool */ function formulaires_forum_traiter_dist($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour) { $forum_insert = charger_fonction('forum_insert', 'inc'); // Antispam basique : // si l'input invisible a ete renseigne, ca ne peut etre qu'un bot if (strlen(_request(_request('cle_ajouter_document')))) { tracer_erreur_forum('champ interdit (nobot) rempli'); return array('message_erreur' => _T('forum:erreur_enregistrement_message')); } if (defined('_FORUM_AUTORISER_POST_ID_FORUM') and _FORUM_AUTORISER_POST_ID_FORUM and _request('id_forum')) { $id_forum = _request('id_forum'); } $id_reponse = $forum_insert($objet, $id_objet, $id_forum); if ($id_reponse) { // 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 ($retour) { if (!strpos($retour, '#')) { $retour .= '#forum' . $id_reponse; } } else { // 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. if (function_exists('generer_url_forum')) { $retour = generer_url_forum($id_reponse); } else { $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse); spip_log('id_thread=' . $thread['id_thread'], 'forum'); $retour = generer_url_entite($thread['id_thread'], 'forum'); } } $res = array('redirect' => $retour, 'id_forum' => $id_reponse); } else { $res = array('message_erreur' => _T('forum:erreur_enregistrement_message')); } return $res; }
function forum_insert_statut($champs, $retour, $forcer_statut=NULL) { $statut = controler_forum($champs['id_article']); // Ne pas autoriser d'envoi hacke si forum sur abonnement if ($statut == 'abo') { controler_forum_abo($retour); // demandera une auth http } if ($forcer_statut !== NULL) $champs['statut'] = $forcer_statut; else $champs['statut'] = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' : 'publie'); // Antispam basique : si 'nobot' a ete renseigne, ca ne peut etre qu'un bot if (strlen(_request('nobot'))) { tracer_erreur_forum('champ interdit (nobot) rempli'); $champs['statut']=false; } return $champs; }