예제 #1
0
function forum_insert_statut($champs, $forcer_statut = null)
{
    include_spip('inc/forum');
    $statut = controler_forum($champs['objet'], $champs['id_objet']);
    if ($forcer_statut !== null) {
        $champs['statut'] = $forcer_statut;
    } else {
        $champs['statut'] = $statut == 'non' ? 'off' : ($statut == 'pri' ? 'prop' : 'publie');
    }
    return $champs;
}
예제 #2
0
/**
 * Chercher l'objet/id_objet et la configuration du forum
 *
 * http://code.spip.net/@balise_FORMULAIRE_FORUM_stat
 *
 * @param array $args
 * @param array $context_compil
 * @return array|bool
 */
function balise_FORMULAIRE_FORUM_stat($args, $context_compil)
{
    // un arg peut contenir l'url sur lequel faire le retour
    // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})]
    // recuperer les donnees du forum auquel on repond.
    // deux autres a la suite pour forcer objet et id_objet
    // [(#FORMULAIRE_FORUM{#SELF, article, 8})]
    //
    // $args = (obtenir) + (ids) + (url, objet, id_objet)
    $ido = array_shift($args);
    $id_forum = intval(array_shift($args));
    $ajouter_mot = array_shift($args);
    $ajouter_groupe = array_shift($args);
    $afficher_texte = array_shift($args);
    $r = balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil);
    if (!$r) {
        return false;
    }
    list($objet, $id_objet, $retour) = $r;
    // on verifie ici si on a le droit de poster sur ce forum
    // doublonne le test dans le formulaire, mais permet d'utiliser la balise
    // pour conditionner l'affichage d'un titre le precedant
    // (ie compatibilite)
    $accepter_forum = controler_forum($objet, $id_objet);
    if ($accepter_forum == 'non') {
        return false;
    }
    return array($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_texte, $retour);
}
예제 #3
0
파일: forum.php 프로젝트: genma/spip_ynh
/**
 * Verifier la saisie de #FORMULAIRE_FORUM
 * @param string $objet
 * @param int $id_objet
 * @param int $id_forum
 * @param int|array $ajouter_mot
 *   mots ajout�s coch�s 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_verifier_dist($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour)
{
    include_spip('inc/acces');
    include_spip('inc/texte');
    include_spip('inc/session');
    include_spip('base/abstract_sql');
    $erreurs = array();
    $doc = array();
    // desactiver id_rubrique si un id_article ou autre existe dans le contexte
    // if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
    //	$id_rubrique = 0;
    // stocker un eventuel document dans un espace temporaire
    // portant la cle du formulaire ; et ses metadonnees avec
    if (isset($_FILES['ajouter_document']) and $_FILES['ajouter_document']['tmp_name']) {
        $acceptes = forum_documents_acceptes();
        if (!count($acceptes) or _request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-{$objet}-{$id_objet}")) {
            $erreurs['document_forum'] = _T('forum:documents_interdits_forum');
            unset($_FILES['ajouter_document']);
        } else {
            if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) {
                session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));
            }
            $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
            $doc =& $_FILES['ajouter_document'];
            include_spip('inc/joindre_document');
            include_spip('action/ajouter_documents');
            list($extension, $doc['name']) = fixer_extension_document($doc);
            if (!in_array($extension, $acceptes)) {
                $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes)));
            } else {
                include_spip('inc/getdocument');
                if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) {
                    $erreurs['document_forum'] = _T('copie_document_impossible');
                }
                #		else if (...)
                #		verifier le type_document autorise
                #		retailler eventuellement les photos
            }
            // si ok on stocke les meta donnees, sinon on efface
            if (isset($erreurs['document_forum'])) {
                spip_unlink($tmp . '.bin');
                unset($_FILES['ajouter_document']);
            } else {
                $doc['tmp_name'] = $tmp . '.bin';
                ecrire_fichier($tmp . '.txt', serialize($doc));
            }
        }
    } elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) and $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] and file_exists($tmp . '.bin')) {
        if (_request('supprimer_document_ajoute')) {
            spip_unlink($tmp . '.bin');
            spip_unlink($tmp . '.txt');
        } elseif (lire_fichier($tmp . '.txt', $meta)) {
            $doc =& $_FILES['ajouter_document'];
            $doc = @unserialize($meta);
        }
    }
    $min_length = defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10;
    if (strlen($texte = _request('texte')) < $min_length and !$ajouter_mot and $GLOBALS['meta']['forums_texte'] == 'oui') {
        $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', array('min' => $min_length));
    } elseif (defined('_FORUM_LONGUEUR_MAXI') and _FORUM_LONGUEUR_MAXI > 0 and strlen($texte) > _FORUM_LONGUEUR_MAXI) {
        $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', array('compte' => strlen($texte), 'max' => _FORUM_LONGUEUR_MAXI));
    }
    if (array_reduce($_POST, 'reduce_strlen', 20 * 1024) < 0) {
        $erreurs['erreur_message'] = _T('forum:forum_message_trop_long');
    } else {
        // Ne pas autoriser d'envoi hacke si forum sur abonnement
        if (controler_forum($objet, $id_objet) == 'abo' and !test_espace_prive()) {
            if (!isset($GLOBALS['visiteur_session']) or !isset($GLOBALS['visiteur_session']['statut'])) {
                $erreurs['erreur_message'] = _T('forum_non_inscrit');
            } elseif ($GLOBALS['visiteur_session']['statut'] == '5poubelle') {
                $erreurs['erreur_message'] = _T('forum:forum_acces_refuse');
            }
        }
    }
    if (strlen($titre = _request('titre')) < 3 and $GLOBALS['meta']['forums_titre'] == 'oui') {
        $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres');
    }
    if (!count($erreurs) and !_request('confirmer_previsu_forum')) {
        if ($afficher_previsu != 'non') {
            $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc, $objet, $id_objet, $id_forum);
            $erreurs['previsu'] = $previsu;
        }
    }
    //  Si forum avec previsu sans bon hash de securite, echec
    if (!count($erreurs)) {
        if (!test_espace_prive() and $afficher_previsu != 'non' and forum_insert_noprevisu()) {
            $erreurs['erreur_message'] = _T('forum:forum_acces_refuse');
        }
    }
    return $erreurs;
}
예제 #4
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;
}