Example #1
0
/**
 * 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;
}
Example #2
0
function formulaires_forum_verifier_dist(
	$titre, $table, $type, $script,
	$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
	$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
{
	include_spip('inc/acces');
	include_spip('inc/texte');
	include_spip('inc/forum');
	include_spip('inc/session');
	include_spip('base/abstract_sql');

	$erreurs = 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($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'];
	if (isset($_FILES['ajouter_document'])
	AND $_FILES['ajouter_document']['tmp_name']) {
		// securite :
		// verifier si on possede la cle (ie on est autorise a poster)
		// (sinon tant pis) ; cf. charger.php pour la definition de la cle
		if (_request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic")) {
			$erreurs['document_forum'] = _T('public:documents_interdits_forum')
				. "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic"
				.", "
				._request('cle_ajouter_document')
			
			;
			unset($_FILES['ajouter_document']);
		} else {
			include_spip('inc/ajouter_documents');
			list($extension,$doc['name']) = fixer_extension_document($doc);
			$acceptes = forum_documents_acceptes();

			if (!in_array($extension, $acceptes)) {
				# normalement on n'arrive pas ici : pas d'upload si aucun format
				if (!$formats = join(', ',$acceptes))
					$formats = '-'; //_L('aucun');
				$erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));
			}
			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));
			}
		}
	}
	// restaurer le document uploade au tour precedent
	else if (file_exists($tmp.'.bin')) {
		if (_request('supprimer_document_ajoute')) {
			spip_unlink($tmp.'.bin');
			spip_unlink($tmp.'.txt');
		} else if (lire_fichier($tmp.'.txt', $meta))
			$doc = @unserialize($meta);
	}

	if (strlen($texte = _request('texte')) < 10
	AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui')
		$erreurs['texte'] = _T('forum_attention_dix_caracteres');
	else if (defined('_FORUM_LONGUEUR_MAXI')
	AND _FORUM_LONGUEUR_MAXI > 0
	AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
		$erreurs['texte'] = _T('forum_attention_trop_caracteres',
			array(
				'compte' => strlen($texte),
				'max' => _FORUM_LONGUEUR_MAXI
			));

	if (strlen($titre=_request('titre')) < 3
	AND $GLOBALS['meta']['forums_titre'] == 'oui')
		$erreurs['titre'] = _T('forum_attention_trois_caracteres');

	if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
		if ($afficher_texte != 'non') {
			$previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc,
				$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic);
			$erreurs['previsu'] = $previsu;
		}
	}

	return $erreurs;
}