Blame | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************/include_ecrire('inc_meta.php3');include_ecrire('inc_forum.php3');include_ecrire('inc_filtres.php3');include_ecrire("inc_abstract_sql.php3");include_local(_FILE_CONNECT);// Ce fichier inclus par inc-public a un comportement special// Voir commentaires dans celui-ci et dans inc-formulaire_forumfunction prevenir_auteurs($auteur, $email_auteur, $id_forum, $id_article, $texte, $titre, $statut) {global $nom_site_forum, $url_site;include_ecrire('inc_texte.php3');include_ecrire('inc_filtres.php3');include_ecrire('inc_mail.php3');// Gestionnaire d'URLsif (@file_exists("inc-urls.php3"))include_local("inc-urls.php3");elseinclude_local("inc-urls-".$GLOBALS['type_urls'].".php3");if ($statut == 'prop') # forum modere$url = "ecrire/controle_forum.php3?debut_id_forum=$id_forum";else if (function_exists('generer_url_forum'))$url = generer_url_forum($id_forum);else {spip_log('inc-urls personnalise : ajoutez generer_url_forum() !');$url = generer_url_article($id_article);}$adresse_site = lire_meta("adresse_site");$url = $adresse_site .'/' . ereg_replace('^/', '', $url);$sujet = "[" .entites_html(textebrut(typo(lire_meta("nom_site")))) ."] ["._T('forum_forum')."] $titre";$parauteur = (strlen($auteur) <= 2) ? '' :(" " ._T('forum_par_auteur', array('auteur' => $auteur)) .($email_auteur ? "" : (' <' . $email_auteur . '>')));$corps = _T('form_forum_message_auto') ."\n\n" ._T('forum_poste_par', array('parauteur' => $parauteur))."\n". _T('forum_ne_repondez_pas'). "\n". $url. "\n\n\n".$titre."\n\n".textebrut(propre($texte)). "\n\n$nom_site_forum\n$url_site\n";$old_lang = $GLOBALS['spip_lang'];$result = spip_query("SELECT auteurs.email, auteurs.lang FROM spip_auteurs AS auteurs,spip_auteurs_articles AS lienWHERE lien.id_article='$id_article'AND auteurs.id_auteur=lien.id_auteur");while (list($email, $salangue) = spip_fetch_array($result)) {$email = trim($email);if (strlen($email) < 3) continue;$GLOBALS['spip_lang'] = ($salangue ? $salangue : $old_lang);envoyer_mail($email, $sujet, $corps) ;}$GLOBALS['spip_lang'] = $old_lang;}function controler_forum($id_article, $retour) {global $auteur_session;// Reglage forums d'articleif ($id_article) {$q = spip_query("SELECT accepter_forum FROM spip_articlesWHERE id_article=$id_article");if ($r = spip_fetch_array($q))$forums_publics = $r['accepter_forum'];}// Valeur par defautif (!$forums_publics)$forums_publics = substr(lire_meta("forums_publics"),0,3);if ($forums_publics == "abo") {if ($auteur_session) {$statut = $auteur_session['statut'];if (!$statut OR $statut == '5poubelle') {ask_php_auth(_T('forum_acces_refuse'),_T('forum_cliquer_retour',array('retour_forum' => $retour)));exit;}} else {ask_php_auth(_T('forum_non_inscrit'),_T('forum_cliquer_retour',array('retour_forum' => $retour)));exit;}}return $forums_publics;}function mots_du_forum($ajouter_mot, $id_message){foreach ($ajouter_mot as $id_mot)if ($id_mot = intval($id_mot))spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)VALUES ($id_mot, $id_message)");}function enregistre_forum() {global $REMOTE_ADDR, $auteur_session,$afficher_texte, $ajouter_mot, $alea, $hash,$auteur, $confirmer_forum, $email_auteur, $id_auteur,$nom_site_forum, $retour_forum, $texte, $titre, $url_site;$retour_forum = rawurldecode($retour_forum);# retour a calculer (cf. inc-formulaire_forum)if ($retour_forum == '!') {$retour_forum = new Link();$retour_forum = $retour_forum->getUrl(); # en cas d'echec du post$calculer_retour = true;}// Recuperer les donnees postees du formulaire ou stocker '0'foreach (array('id_article', 'id_breve', 'id_syndic','id_rubrique', 'id_forum') as $id)if (isset($_POST['forum_'.$id]))$$id = intval($_POST['forum_'.$id]);else$$id = 0;// initialisation de l'eventuel visiteur connecteif (!$id_auteur)$id_auteur = intval($auteur_session['id_auteur']);$statut = controler_forum($id_article, $retour_forum);// Ne pas autoriser de changement de nom si forum sur abonnementif ($statut == 'abo') {$auteur = $auteur_session['nom'];$email_auteur = $auteur_session['email'];}// trop court ?if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) +strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {ask_php_auth(_T('forum_message_trop_long'),_T('forum_cliquer_retour',array('retour_forum' => $retour_forum)));exit;}// Verifier hash securite pour les forums avec previsuif ($GLOBALS['afficher_texte'] <> 'non') {include_ecrire("inc_admin.php3");if (!verifier_action_auteur("ajout_forum $id_rubrique"." $id_forum $id_article $id_breve"." $id_syndic $alea", $hash)) {spip_log('erreur hash forum');die (_T('forum_titre_erreur')); # echec du POST}// verifier fichier lock$alea = preg_replace('/[^0-9]/', '', $alea);if (!file_exists($hash = _DIR_SESSIONS."forum_$alea.lck"))return $retour_forum; # echec silencieux du POSTunlink($hash);}// Entrer le message dans la base$id_message = spip_abstract_insert('spip_forum', '(date_heure)', '(NOW())');if ($id_forum)list($id_thread) = spip_fetch_array(spip_query("SELECT id_thread FROM spip_forum WHERE id_forum = $id_forum"));else$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.$statut = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' :'publie');spip_query("UPDATE spip_forumSET id_parent = $id_forum,id_rubrique = $id_rubrique,id_article = $id_article,id_breve = $id_breve,id_syndic = $id_syndic,id_auteur = $id_auteur,id_thread = $id_thread,date_heure = NOW(),titre = '".addslashes(corriger_caracteres($titre))."',texte = '".addslashes(corriger_caracteres($texte))."',nom_site = '".addslashes(corriger_caracteres($nom_site_forum))."',url_site = '".addslashes(corriger_caracteres($url_site))."',auteur = '".addslashes(corriger_caracteres($auteur))."',email_auteur = '".addslashes(corriger_caracteres($email_auteur))."',ip = '$REMOTE_ADDR',statut = '$statut'WHERE id_forum = $id_message");// Le cas echeant, calculer le retourif ($calculer_retour) {// Gestionnaire d'URLsif (@file_exists("inc-urls.php3"))include_local("inc-urls.php3");elseinclude_local("inc-urls-".$GLOBALS['type_urls'].".php3");// le retour automatique 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.$retour_forum = generer_url_forum($id_message, true);}// Entrer les mots-cles associesif (is_array($ajouter_mot)) mots_du_forum($ajouter_mot, $id_message);// Prevenir les auteurs de l'articleif (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non"))prevenir_auteurs($auteur, $email_auteur, $id_message, $id_article, $texte, $titre, $statut);// Poser un cookie pour ne pas retaper le nom / emailspip_setcookie('spip_forum_user',serialize(array('nom' => $auteur, 'email' => $email_auteur)));if ($statut == 'publie') {//// INVALIDATION DES CACHES LIES AUX FORUMS//include_ecrire('inc_invalideur.php3');suivre_invalideur ("id='id_forum/" .calcul_index_forum($id_article,$id_breve,$id_rubrique,$id_syndic) . "'");}return $retour_forum;}?>