source: spip-zone/_core_/plugins/forum/formulaires/forum_prive.php @ 79783

Last change on this file since 79783 was 79783, checked in by denisb@…, 6 years ago

feliĉan novan jaron 2014 !

File size: 5.9 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2014                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/forum');
16
17function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
18
19        if (!function_exists($f='forum_recuperer_titre'))
20                $f = 'forum_recuperer_titre_dist';
21        // si objet, il faut un titre, sinon on est dans un statut privrac/privadm qui permet un forum sans objet
22        if ($objet AND $id_objet AND !$titre = $f($objet,$id_objet,$id_forum,false))
23                return false;
24
25        $primary = id_table_objet($objet);
26        $table = table_objet($objet);
27
28        // Tableau des valeurs servant au calcul d'une signature de securite.
29        // Elles seront placees en Input Hidden pour que inc/forum_insert
30        // recalcule la meme chose et verifie l'identite des resultats.
31        // Donc ne pas changer la valeur de ce tableau entre le calcul de
32        // la signature et la fabrication des Hidden
33        // Faire attention aussi a 0 != ''
34        $ids = array();
35        $ids[$primary] = ($x = intval($id_objet)) ? $x : '';
36        $ids['id_objet'] = ($x = intval($id_objet)) ? $x : '';
37        $ids['objet'] = $objet;
38        $ids['id_forum'] = ($x = intval($id_forum)) ? $x : '';
39
40        // ne pas mettre '', sinon le squelette n'affichera rien.
41        $previsu = ' ';
42
43        // pour les hidden
44        $script_hidden = "";
45        foreach ($ids as $id => $v)
46                $script_hidden .= "<input type='hidden' name='$id' value='$v' />";
47               
48        $config = array();
49        foreach(array('afficher_barre','forum_titre','forums_texte','forums_urlref') as $k)
50                $config[$k] = ' ';
51
52        return array(
53                'nom_site' => '',
54                'table' => $table,
55                'texte' => '',
56                'config' => $config,
57                'titre' => isset($titre) ? $titre : '',
58                '_hidden' => $script_hidden, # pour les variables hidden
59                'url_site' => "http://",
60                'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond
61                '_sign'=>implode('_',$ids),
62                '_autosave_id' => $ids,
63        );
64}
65
66
67function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
68        include_spip('inc/acces');
69        include_spip('inc/texte');
70        include_spip('inc/forum');
71        include_spip('inc/session');
72        include_spip('base/abstract_sql');
73
74        $erreurs = array();
75
76        if (strlen($texte = _request('texte')) < 10 AND $GLOBALS['meta']['forums_texte'] == 'oui')
77                $erreurs['texte'] = _T('forum:forum_attention_dix_caracteres');
78        else if (defined('_FORUM_LONGUEUR_MAXI')
79        AND _FORUM_LONGUEUR_MAXI > 0
80        AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
81                $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres',
82                        array(
83                                'compte' => strlen($texte),
84                                'max' => _FORUM_LONGUEUR_MAXI
85                        ));
86
87        if (strlen($titre=_request('titre')) < 3
88        AND $GLOBALS['meta']['forums_titre'] == 'oui')
89                $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres');
90
91        if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) {
92                $erreurs['erreur_message'] = _T('forum:forum_message_trop_long');
93        }
94
95        if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
96                if ($afficher_previsu != 'non') {
97                        $previsu = inclure_forum_prive_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'));
98                        $erreurs['previsu'] = $previsu;
99                }
100        }
101
102        return $erreurs;
103}
104
105
106function inclure_forum_prive_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc=""){
107        $bouton = _T('forum:forum_message_definitif');
108        include_spip('public/assembler');
109        include_spip('public/composer');
110        // supprimer les <form> de la previsualisation
111        // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
112        return preg_replace("@<(/?)form\b@ism",
113                            '<\1div',
114                inclure_balise_dynamique(array('formulaires/inc-forum_prive_previsu',
115                      0,
116                      array(
117                        'titre' => safehtml(typo($titre)),
118                        'texte' => safehtml(propre($texte)),
119                        'notes' => safehtml(calculer_notes()),
120                        'url_site' => vider_url($url_site),
121                        'nom_site' => safehtml(typo($nom_site)),
122                        'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
123                        'ajouter_document' => $doc,
124                        #'erreur' => $erreur, // kesako ? non définie ?
125                        'bouton' => $bouton
126                        )
127                                               ),
128                                         false));
129}
130
131
132function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') {
133
134        $forum_insert = charger_fonction('forum_insert', 'inc');
135        $id_reponse = $forum_insert($objet, $id_objet, $id_forum,$statut);
136        if ($id_reponse){
137                // En cas de retour sur (par exemple) {#SELF}, on ajoute quand
138                // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite
139                if ($retour){
140                        if (!strpos($retour, '#'))
141                                $retour .= '#forum'.$id_reponse;
142                }
143                else {
144                        // le retour par defaut envoie sur le thread, ce qui permet
145                        // de traiter elegamment le cas des forums moderes a priori.
146                        // Cela assure aussi qu'on retrouve son message dans le thread
147                        // dans le cas des forums moderes a posteriori, ce qui n'est
148                        // pas plus mal.
149                        if (function_exists('generer_url_forum')) {
150                                $retour = generer_url_forum($id_reponse);
151                        }
152                        else {
153                                $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum='.$id_reponse);
154                                spip_log('id_thread='.$thread['id_thread'], 'forum');
155                                $retour = generer_url_entite($thread['id_thread'], 'forum');
156                        }
157                }
158
159                $res = array('redirect'=>$retour,'id_forum'=>$id_forum);
160        }
161        else
162                $res = array('message_erreur'=>_T('forum:erreur_enregistrement_message'));
163
164        return $res;
165}
166
167
168?>
Note: See TracBrowser for help on using the repository browser.