/** * 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; }
function forum_insert_base($c, $id_forum, $id_article, $id_breve, $id_syndic, $id_rubrique, $statut, $retour) { $afficher_texte = (_request('afficher_texte') <> 'non'); $ajouter_mot = _request('ajouter_mot'); // si le statut est vide, c'est qu'on ne veut pas de ce presume spam ! if (!$statut) return false; // Si forum avec previsu sans bon hash de securite, echec silencieux if ($afficher_texte AND forum_insert_noprevisu()) { return false; } if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) { ask_php_auth(_T('forum_message_trop_long'), _T('forum_cliquer_retour', array('retour_forum' => $retour))); } // Entrer le message dans la base $id_message = sql_insertq('spip_forum', array( 'date_heure'=> date('Y-m-d H:i:s'), 'ip' => $GLOBALS['ip'], 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] )); if ($id_forum>0) { $id_thread = sql_getfetsel("id_thread", "spip_forum", "id_forum = $id_forum"); } else $id_thread = $id_message; # id_thread oblige INSERT puis UPDATE. // id_rubrique est parfois passee pour les articles, on n'en veut pas if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic)) $id_rubrique = 0; // Entrer les cles de jointures et assimilees sql_updateq('spip_forum', array('id_parent' => $id_forum, 'id_rubrique' => $id_rubrique, 'id_article' => $id_article, 'id_breve' => $id_breve, 'id_syndic' => $id_syndic, 'id_thread' => $id_thread, 'statut' => $statut), "id_forum = $id_message"); // Entrer les mots-cles associes if ($ajouter_mot) mots_du_forum($ajouter_mot, $id_message); // // Entree du contenu et invalidation des caches // include_spip('inc/modifier'); revision_forum($id_message, $c); // Ajouter un document if (isset($_FILES['ajouter_document']) AND $_FILES['ajouter_document']['tmp_name']) { $ajouter_documents = charger_fonction('ajouter_documents', 'inc'); $ajouter_documents( $_FILES['ajouter_document']['tmp_name'], $_FILES['ajouter_document']['name'], 'forum', $id_message, 'document', 0, $documents_actifs); // supprimer le temporaire et ses meta donnees spip_unlink($_FILES['ajouter_document']['tmp_name']); spip_unlink(preg_replace(',\.bin$,', '.txt', $_FILES['ajouter_document']['tmp_name'])); } // Notification if ($notifications = charger_fonction('notifications', 'inc')) $notifications('forumposte', $id_message); return $id_message; }