Пример #1
0
/**
 * 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;
}
Пример #2
0
/**
 * 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;
}
Пример #3
0
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;
}