[SPIP] ~v3.0.17-->v3.0.19
[ptitvelo/web/www.git] / www / plugins-dist / forum / formulaires / forum.php
index 0cc20e6..405073b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2013                                                *\r
+ *  Copyright (c) 2001-2014                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
@@ -14,6 +14,22 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 \r
 include_spip('inc/forum');\r
 \r
+\r
+/**\r
+ * Identification du formulaire poste : ne pas tenir compte de la previsu et du retour\r
+ * @param $objet\r
+ * @param $id_objet\r
+ * @param $id_forum\r
+ * @param $ajouter_mot\r
+ * @param $ajouter_groupe\r
+ * @param $afficher_previsu\r
+ * @param $retour\r
+ * @return array\r
+ */\r
+function formulaires_forum_identifier_dist($objet, $id_objet, $id_forum,$ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour){\r
+       return array($objet, $id_objet, $id_forum,$ajouter_mot, $ajouter_groupe);\r
+}\r
+\r
 /**\r
  * Charger l'env du squelette de #FORMULAIRE_FORUM\r
  * @param string $objet\r
@@ -54,7 +70,7 @@ function formulaires_forum_charger_dist($objet, $id_objet, $id_forum,
 \r
        // exiger l'authentification des posteurs pour les forums sur abo\r
        if ($accepter_forum=="abo"){\r
-               if (!$GLOBALS["visiteur_session"]['statut']){\r
+               if (!isset($GLOBALS["visiteur_session"]['statut']) OR !$GLOBALS["visiteur_session"]['statut']){\r
                        return array(\r
                                'action' => '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache\r
                                'editable' => false,\r
@@ -146,7 +162,7 @@ function formulaires_forum_charger_dist($objet, $id_objet, $id_forum,
  * Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment\r
  * si $afficher_previsu = 'non')\r
  *\r
- * http://doc.spip.org/@forum_fichier_tmp\r
+ * http://code.spip.net/@forum_fichier_tmp\r
  *\r
  * @param $arg\r
  * @return int\r
@@ -195,6 +211,7 @@ function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum,
        include_spip('base/abstract_sql');\r
 \r
        $erreurs = array();\r
+       $doc = array();\r
 \r
        // desactiver id_rubrique si un id_article ou autre existe dans le contexte\r
        // if ($id_article OR $id_breve OR $id_forum OR $id_syndic)\r
@@ -203,33 +220,34 @@ function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum,
        // stocker un eventuel document dans un espace temporaire\r
        // portant la cle du formulaire ; et ses metadonnees avec\r
 \r
-       if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))\r
-               session_set('tmp_forum_document',\r
-                       sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));\r
-       $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];\r
-       $doc = &$_FILES['ajouter_document'];\r
        if (isset($_FILES['ajouter_document'])\r
-               AND $_FILES['ajouter_document']['tmp_name']\r
-       ){\r
-               // securite :\r
-               // verifier si on possede la cle (ie on est autorise a poster)\r
-               // (sinon tant pis) ; cf. charger.php pour la definition de la cle\r
-               if (_request('cle_ajouter_document')!=calculer_cle_action($a = "ajouter-document-$objet-$id_objet")){\r
+               AND $_FILES['ajouter_document']['tmp_name']){\r
+\r
+               $acceptes = forum_documents_acceptes();\r
+               if (\r
+                       // si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement\r
+                       !count($acceptes)\r
+                       // securite :\r
+                       // verifier si on possede la cle (ie on est autorise a poster)\r
+                       // (sinon tant pis) ; cf. charger.php pour la definition de la cle\r
+                 OR _request('cle_ajouter_document')!=calculer_cle_action($a = "ajouter-document-$objet-$id_objet")\r
+               ){\r
                        $erreurs['document_forum'] = _T('forum:documents_interdits_forum');\r
                        unset($_FILES['ajouter_document']);\r
                }\r
                else {\r
+                       if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))\r
+                               session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));\r
+\r
+                       $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];\r
+                       $doc = &$_FILES['ajouter_document'];\r
+\r
                        include_spip('inc/joindre_document');\r
                        include_spip('action/ajouter_documents');\r
                        list($extension, $doc['name']) = fixer_extension_document($doc);\r
-                       $acceptes = forum_documents_acceptes();\r
 \r
                        if (!in_array($extension, $acceptes)){\r
-                               # normalement on n'arrive pas ici : pas d'upload si aucun format\r
-                               if (!$formats = join(', ', $acceptes)){\r
-                                       $formats = '-'; //_L('aucun');\r
-                               }\r
-                               $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));\r
+                               $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes)));\r
                        }\r
                        else {\r
                                include_spip('inc/getdocument');\r
@@ -245,19 +263,22 @@ function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum,
                        if (isset($erreurs['document_forum'])){\r
                                spip_unlink($tmp . '.bin');\r
                                unset ($_FILES['ajouter_document']);\r
-                       }\r
-                       else {\r
+                       } else {\r
                                $doc['tmp_name'] = $tmp . '.bin';\r
                                ecrire_fichier($tmp . '.txt', serialize($doc));\r
                        }\r
                }\r
-       } // restaurer le document uploade au tour precedent\r
-       elseif (file_exists($tmp . '.bin')){\r
+       }\r
+       // restaurer/supprimer le document eventuellement uploade au tour precedent\r
+       elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document'])\r
+         AND $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']\r
+         AND file_exists($tmp . '.bin')){\r
                if (_request('supprimer_document_ajoute')){\r
                        spip_unlink($tmp . '.bin');\r
                        spip_unlink($tmp . '.txt');\r
                }\r
                elseif (lire_fichier($tmp . '.txt', $meta)){\r
+                       $doc = &$_FILES['ajouter_document'];\r
                        $doc = @unserialize($meta);\r
                }\r
        }\r
@@ -343,7 +364,7 @@ function forum_documents_acceptes(){
 /**\r
  * Preparer la previsu d'un message de forum\r
  *\r
- * http://doc.spip.org/@inclure_previsu\r
+ * http://code.spip.net/@inclure_previsu\r
  *\r
  * @param string $texte\r
  * @param string $titre\r