[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / forum / formulaires / forum_prive.php
index 56948f7..fc8a97d 100644 (file)
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
+if (!defined("_ECRIRE_INC_VERSION")) {
+       return;
+}
 
 include_spip('inc/forum');
 
-function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
+/**
+ * Identification du formulaire poste : ne pas tenir compte du retour
+ *
+ * @param $objet
+ * @param $id_objet
+ * @param $id_forum
+ * @param $forcer_previsu
+ * @param $statut
+ * @return array
+ */
+function formulaires_forum_prive_identifier_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut) {
+       return array($objet, $id_objet, $id_forum, $forcer_previsu, $statut);
+}
+
+function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') {
 
-       if (!function_exists($f='forum_recuperer_titre'))
+       if (!function_exists($f = 'forum_recuperer_titre')) {
                $f = 'forum_recuperer_titre_dist';
+       }
        // si objet, il faut un titre, sinon on est dans un statut privrac/privadm qui permet un forum sans objet
-       if ($objet AND $id_objet AND !$titre = $f($objet,$id_objet,$id_forum,false))
+       if ($objet and $id_objet and !$titre = $f($objet, $id_objet, $id_forum, false)) {
                return false;
+       }
 
        $primary = id_table_objet($objet);
        $table = table_objet($objet);
@@ -37,34 +55,41 @@ function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $aff
        $ids['objet'] = $objet;
        $ids['id_forum'] = ($x = intval($id_forum)) ? $x : '';
 
-       // ne pas mettre '', sinon le squelette n'affichera rien.
-       $previsu = ' ';
+       // par défaut, on force la prévisualisation du message avant de le poster
+       if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) {
+               $forcer_previsu = 'non';
+       } else {
+               $forcer_previsu = 'oui';
+       }
 
        // pour les hidden
        $script_hidden = "";
-       foreach ($ids as $id => $v)
+       foreach ($ids as $id => $v) {
                $script_hidden .= "<input type='hidden' name='$id' value='$v' />";
-               
+       }
+
        $config = array();
-       foreach(array('afficher_barre','forum_titre','forums_texte','forums_urlref') as $k)
+       foreach (array('afficher_barre', 'forum_titre', 'forums_texte', 'forums_urlref') as $k) {
                $config[$k] = ' ';
+       }
 
        return array(
                'nom_site' => '',
                'table' => $table,
                'texte' => '',
                'config' => $config,
-               'titre' => $titre,
+               'titre' => isset($titre) ? $titre : '',
                '_hidden' => $script_hidden, # pour les variables hidden
                'url_site' => "http://",
+               'forcer_previsu' => $forcer_previsu,
                'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond
-               '_sign'=>implode('_',$ids),
+               '_sign' => implode('_', $ids),
                '_autosave_id' => $ids,
        );
 }
 
 
-function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
+function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') {
        include_spip('inc/acces');
        include_spip('inc/texte');
        include_spip('inc/forum');
@@ -74,76 +99,89 @@ function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $af
        $erreurs = array();
 
        $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));
+       if (strlen($texte = _request('texte')) < $min_length
+               and !_request('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));
+       } else {
+               if (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
+                               ));
+               }
        }
-       else if (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 (strlen($titre=_request('titre')) < 3
-       AND $GLOBALS['meta']['forums_titre'] == 'oui')
+
+       if (strlen($titre = _request('titre')) < 3
+               and $GLOBALS['meta']['forums_titre'] == 'oui'
+       ) {
                $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres');
+       }
 
        if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) {
                $erreurs['erreur_message'] = _T('forum:forum_message_trop_long');
        }
 
-       if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
-               if ($afficher_previsu != 'non') {
-                       $previsu = inclure_forum_prive_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'));
-                       $erreurs['previsu'] = $previsu;
-               }
+       if ($url = _request('url_site') and !tester_url_absolue($url)) {
+               $erreurs['url_site'] = _T('info_url_site_pas_conforme');
+       }
+
+       if (!count($erreurs) and !_request('envoyer_message') and !_request('confirmer_previsu_forum')) {
+               $previsu = inclure_forum_prive_previsu($texte, $titre, _request('url_site'), _request('nom_site'),
+                       _request('ajouter_mot'));
+               $erreurs['previsu'] = $previsu;
+               $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique
        }
 
        return $erreurs;
 }
 
 
-function inclure_forum_prive_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc=""){
+function inclure_forum_prive_previsu($texte, $titre, $url_site, $nom_site, $ajouter_mot, $doc = "") {
        $bouton = _T('forum:forum_message_definitif');
        include_spip('public/assembler');
        include_spip('public/composer');
        // supprimer les <form> de la previsualisation
        // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
        return preg_replace("@<(/?)form\b@ism",
-                           '<\1div',
-               inclure_balise_dynamique(array('formulaires/inc-forum_prive_previsu',
-                     0,
-                     array(
-                       'titre' => safehtml(typo($titre)),
-                       'texte' => safehtml(propre($texte)),
-                       'notes' => safehtml(calculer_notes()),
-                       'url_site' => vider_url($url_site),
-                       'nom_site' => safehtml(typo($nom_site)),
-                       'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
-                       'ajouter_document' => $doc,
-                       'erreur' => $erreur,
-                       'bouton' => $bouton
+               '<\1div',
+               inclure_balise_dynamique(array(
+                       'formulaires/inc-forum_prive_previsu',
+                       0,
+                       array(
+                               'titre' => safehtml(typo($titre)),
+                               'texte' => safehtml(propre($texte)),
+                               'notes' => safehtml(calculer_notes()),
+                               'url_site' => vider_url($url_site),
+                               'nom_site' => safehtml(typo($nom_site)),
+                               'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
+                               'ajouter_document' => $doc,
+                               #'erreur' => $erreur, // kesako ? non définie ?
+                               'bouton' => $bouton
                        )
-                                              ),
-                                        false));
+               ),
+                       false)
+       );
 }
 
 
-function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
+function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') {
 
        $forum_insert = charger_fonction('forum_insert', 'inc');
-       $id_reponse = $forum_insert($objet, $id_objet, $id_forum,$statut);
-       if ($id_reponse){
+       $id_reponse = $forum_insert($objet, $id_objet, $id_forum, $statut);
+       if ($id_reponse) {
                // En cas de retour sur (par exemple) {#SELF}, on ajoute quand
                // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite
-               if ($retour){
-                       if (!strpos($retour, '#'))
-                               $retour .= '#forum'.$id_reponse;
-               }
-               else {
+               if ($retour) {
+                       if (!strpos($retour, '#')) {
+                               $retour .= '#forum' . $id_reponse;
+                       }
+               else {
                        // le retour par defaut 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
@@ -151,21 +189,17 @@ function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $aff
                        // pas plus mal.
                        if (function_exists('generer_url_forum')) {
                                $retour = generer_url_forum($id_reponse);
-                       }
-                       else {
-                               $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum='.$id_reponse);
-                               spip_log('id_thread='.$thread['id_thread'], 'forum');
+                       } else {
+                               $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse);
+                               spip_log('id_thread=' . $thread['id_thread'], 'forum');
                                $retour = generer_url_entite($thread['id_thread'], 'forum');
                        }
                }
 
-               $res = array('redirect'=>$retour,'id_forum'=>$id_forum);
+               $res = array('redirect' => $retour, 'id_forum' => $id_forum);
+       } else {
+               $res = array('message_erreur' => _T('forum:erreur_enregistrement_message'));
        }
-       else
-               $res = array('message_erreur'=>_T('forum:erreur_enregistrement_message'));
 
        return $res;
 }
-
-
-?>