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 | |
---|
13 | if (!defined("_ECRIRE_INC_VERSION")) { |
---|
14 | return; |
---|
15 | } |
---|
16 | |
---|
17 | include_spip('inc/forum'); |
---|
18 | |
---|
19 | /** |
---|
20 | * Identification du formulaire poste : ne pas tenir compte de la previsu et du retour |
---|
21 | * |
---|
22 | * @param $objet |
---|
23 | * @param $id_objet |
---|
24 | * @param $id_forum |
---|
25 | * @param $ajouter_mot |
---|
26 | * @param $ajouter_groupe |
---|
27 | * @param $afficher_previsu |
---|
28 | * @param $retour |
---|
29 | * @return array |
---|
30 | */ |
---|
31 | function formulaires_forum_identifier_dist( |
---|
32 | $objet, |
---|
33 | $id_objet, |
---|
34 | $id_forum, |
---|
35 | $ajouter_mot, |
---|
36 | $ajouter_groupe, |
---|
37 | $afficher_previsu, |
---|
38 | $retour |
---|
39 | ) { |
---|
40 | return array($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe); |
---|
41 | } |
---|
42 | |
---|
43 | |
---|
44 | /** |
---|
45 | * Charger l'env du squelette de #FORMULAIRE_FORUM |
---|
46 | * |
---|
47 | * @param string $objet |
---|
48 | * @param int $id_objet |
---|
49 | * @param int $id_forum |
---|
50 | * @param int|array $ajouter_mot |
---|
51 | * mots ajoutés cochés par defaut |
---|
52 | * @param $ajouter_groupe |
---|
53 | * groupes ajoutables |
---|
54 | * @param $forcer_previsu |
---|
55 | * forcer la previsualisation du message oui ou non |
---|
56 | * @param $retour |
---|
57 | * url de retour |
---|
58 | * @return array|bool |
---|
59 | */ |
---|
60 | function formulaires_forum_charger_dist( |
---|
61 | $objet, |
---|
62 | $id_objet, |
---|
63 | $id_forum, |
---|
64 | $ajouter_mot, |
---|
65 | $ajouter_groupe, |
---|
66 | $forcer_previsu, |
---|
67 | $retour |
---|
68 | ) { |
---|
69 | |
---|
70 | if (!function_exists($f = 'forum_recuperer_titre')) { |
---|
71 | $f = 'forum_recuperer_titre_dist'; |
---|
72 | } |
---|
73 | if (!$titre = $f($objet, $id_objet, $id_forum)) { |
---|
74 | return false; |
---|
75 | } |
---|
76 | |
---|
77 | // ca s'apparenterait presque a une autorisation... |
---|
78 | // si on n'avait pas a envoyer la valeur $accepter_forum au formulaire |
---|
79 | $accepter_forum = controler_forum($objet, $id_objet); |
---|
80 | if ($accepter_forum == 'non') { |
---|
81 | return false; |
---|
82 | } |
---|
83 | |
---|
84 | $primary = id_table_objet($objet); |
---|
85 | |
---|
86 | // table a laquelle sont associes les mots : |
---|
87 | if ($GLOBALS['meta']["mots_cles_forums"] != "oui") { |
---|
88 | $table = ''; |
---|
89 | } else { |
---|
90 | $table = table_objet($objet); |
---|
91 | } |
---|
92 | |
---|
93 | // exiger l'authentification des posteurs pour les forums sur abo |
---|
94 | if ($accepter_forum == "abo") { |
---|
95 | if (!isset($GLOBALS["visiteur_session"]['statut']) OR !$GLOBALS["visiteur_session"]['statut']) { |
---|
96 | return array( |
---|
97 | 'action' => '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache |
---|
98 | 'editable' => false, |
---|
99 | 'login_forum_abo' => ' ', |
---|
100 | 'inscription' => generer_url_public('identifiants', 'lang=' . $GLOBALS['spip_lang']), |
---|
101 | 'oubli' => generer_url_public('spip_pass', 'lang=' . $GLOBALS['spip_lang'], true), |
---|
102 | ); |
---|
103 | } |
---|
104 | } |
---|
105 | |
---|
106 | |
---|
107 | // Tableau des valeurs servant au calcul d'une signature de securite. |
---|
108 | // Elles seront placees en Input Hidden pour que inc/forum_insert |
---|
109 | // recalcule la meme chose et verifie l'identite des resultats. |
---|
110 | // Donc ne pas changer la valeur de ce tableau entre le calcul de |
---|
111 | // la signature et la fabrication des Hidden |
---|
112 | // Faire attention aussi a 0 != '' |
---|
113 | $ids = array(); |
---|
114 | $ids[$primary] = ($x = intval($id_objet)) ? $x : ''; |
---|
115 | $ids['id_objet'] = ($x = intval($id_objet)) ? $x : ''; |
---|
116 | $ids['objet'] = $objet; |
---|
117 | $ids['id_forum'] = ($x = intval($id_forum)) ? $x : ''; |
---|
118 | |
---|
119 | // par défaut, on force la prévisualisation du message avant de le poster |
---|
120 | if (($forcer_previsu == 'non') OR (empty($forcer_previsu) AND $GLOBALS['meta']["forums_forcer_previsu"] == "non")) { |
---|
121 | $forcer_previsu = 'non'; |
---|
122 | } else { |
---|
123 | $forcer_previsu = 'oui'; |
---|
124 | } |
---|
125 | |
---|
126 | if (_request('formulaire_action')) { |
---|
127 | $arg = forum_fichier_tmp(join('', $ids)); |
---|
128 | |
---|
129 | $securiser_action = charger_fonction('securiser_action', 'inc'); |
---|
130 | // on sait que cette fonction est dans le fichier associe |
---|
131 | $hash = calculer_action_auteur("ajout_forum-$arg"); |
---|
132 | } else { |
---|
133 | $arg = $hash = ''; |
---|
134 | } |
---|
135 | |
---|
136 | // pour les hidden |
---|
137 | $script_hidden = ""; |
---|
138 | foreach ($ids as $id => $v) { |
---|
139 | $script_hidden .= "<input type='hidden' name='$id' value='$v' />"; |
---|
140 | } |
---|
141 | |
---|
142 | $script_hidden .= "<input type='hidden' name='arg' value='$arg' />"; |
---|
143 | $script_hidden .= "<input type='hidden' name='hash' value='$hash' />"; |
---|
144 | $script_hidden .= "<input type='hidden' name='verif_$hash' value='ok' />"; |
---|
145 | |
---|
146 | if ($formats = forum_documents_acceptes()) { |
---|
147 | include_spip('inc/securiser_action'); |
---|
148 | $cle = calculer_cle_action('ajouter-document-' . $objet . '-' . $id_objet); |
---|
149 | } else { |
---|
150 | $cle = null; |
---|
151 | } |
---|
152 | |
---|
153 | // Valeurs par defaut du formulaire |
---|
154 | // si le formulaire a ete sauvegarde, restituer les valeurs de session |
---|
155 | $vals = array( |
---|
156 | 'titre' => $titre, |
---|
157 | 'texte' => '', |
---|
158 | 'nom_site' => '', |
---|
159 | 'url_site' => 'http://' |
---|
160 | ); |
---|
161 | |
---|
162 | return array_merge($vals, array( |
---|
163 | 'modere' => (($accepter_forum != 'pri') ? '' : ' '), |
---|
164 | 'table' => $table, |
---|
165 | 'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre'] != 'non' ? ' ' : '')), |
---|
166 | '_hidden' => $script_hidden, # pour les variables hidden qui seront inserees dans le form et dans le form de previsu |
---|
167 | 'cle_ajouter_document' => $cle, |
---|
168 | 'formats_documents_forum' => trim($GLOBALS['meta']['formats_documents_forum']) == '*' ? _T('forum:extensions_autorisees_toutes') : forum_documents_acceptes(), |
---|
169 | 'ajouter_document' => isset($_FILES['ajouter_document']['name']) ? $_FILES['ajouter_document']['name'] : '', |
---|
170 | 'nobot' => ($cle ? _request($cle) : _request('nobot')), |
---|
171 | 'ajouter_groupe' => $ajouter_groupe, |
---|
172 | 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), |
---|
173 | 'forcer_previsu' => $forcer_previsu, |
---|
174 | 'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond |
---|
175 | '_sign' => implode('_', $ids), |
---|
176 | '_autosave_id' => $ids, |
---|
177 | )); |
---|
178 | } |
---|
179 | |
---|
180 | |
---|
181 | /** |
---|
182 | * Une securite qui nous protege contre : |
---|
183 | * - les doubles validations de forums (derapages humains ou des brouteurs) |
---|
184 | * - les abus visant a mettre des forums malgre nous sur un article (??) |
---|
185 | * On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE |
---|
186 | * afin de ne pas bugguer quand on vide le cache) |
---|
187 | * Le lock est leve au moment de l'insertion en base (inc-messforum) |
---|
188 | * Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment |
---|
189 | * si $forcer_previsu = 'non') |
---|
190 | * |
---|
191 | * http://code.spip.net/@forum_fichier_tmp |
---|
192 | * |
---|
193 | * @param $arg |
---|
194 | * @return int |
---|
195 | */ |
---|
196 | function forum_fichier_tmp($arg) { |
---|
197 | # astuce : mt_rand pour autoriser les hits simultanes |
---|
198 | while (($alea = time()+@mt_rand())+intval($arg) |
---|
199 | AND @file_exists($f = _DIR_TMP . "forum_$alea.lck")) { |
---|
200 | }; |
---|
201 | spip_touch($f); |
---|
202 | |
---|
203 | # et maintenant on purge les locks de forums ouverts depuis > 4 h |
---|
204 | |
---|
205 | if ($dh = @opendir(_DIR_TMP)) { |
---|
206 | while (($file = @readdir($dh)) !== false) { |
---|
207 | if (preg_match('/^forum_([0-9]+)\.lck$/', $file) |
---|
208 | AND (time()-@filemtime(_DIR_TMP . $file) > 4*3600) |
---|
209 | ) { |
---|
210 | spip_unlink(_DIR_TMP . $file); |
---|
211 | } |
---|
212 | } |
---|
213 | } |
---|
214 | |
---|
215 | return $alea; |
---|
216 | } |
---|
217 | |
---|
218 | /** |
---|
219 | * Verifier la saisie de #FORMULAIRE_FORUM |
---|
220 | * |
---|
221 | * @param string $objet |
---|
222 | * @param int $id_objet |
---|
223 | * @param int $id_forum |
---|
224 | * @param int|array $ajouter_mot |
---|
225 | * mots ajoutés cochés par defaut |
---|
226 | * @param $ajouter_groupe |
---|
227 | * groupes ajoutables |
---|
228 | * @param $forcer_previsu |
---|
229 | * forcer la previsualisation du message oui ou non |
---|
230 | * @param $retour |
---|
231 | * url de retour |
---|
232 | * @return array|bool |
---|
233 | */ |
---|
234 | function formulaires_forum_verifier_dist( |
---|
235 | $objet, |
---|
236 | $id_objet, |
---|
237 | $id_forum, |
---|
238 | $ajouter_mot, |
---|
239 | $ajouter_groupe, |
---|
240 | $forcer_previsu, |
---|
241 | $retour |
---|
242 | ) { |
---|
243 | include_spip('inc/acces'); |
---|
244 | include_spip('inc/texte'); |
---|
245 | include_spip('inc/session'); |
---|
246 | include_spip('base/abstract_sql'); |
---|
247 | |
---|
248 | // par défaut, on force la prévisualisation du message avant de le poster |
---|
249 | if (($forcer_previsu == 'non') OR (empty($forcer_previsu) AND $GLOBALS['meta']["forums_forcer_previsu"] == "non")) { |
---|
250 | $forcer_previsu = 'non'; |
---|
251 | } else { |
---|
252 | $forcer_previsu = 'oui'; |
---|
253 | } |
---|
254 | |
---|
255 | $erreurs = array(); |
---|
256 | $doc = array(); |
---|
257 | |
---|
258 | // desactiver id_rubrique si un id_article ou autre existe dans le contexte |
---|
259 | // if ($id_article OR $id_breve OR $id_forum OR $id_syndic) |
---|
260 | // $id_rubrique = 0; |
---|
261 | |
---|
262 | // stocker un eventuel document dans un espace temporaire |
---|
263 | // portant la cle du formulaire ; et ses metadonnees avec |
---|
264 | |
---|
265 | if (isset($_FILES['ajouter_document']) |
---|
266 | AND $_FILES['ajouter_document']['tmp_name'] |
---|
267 | ) { |
---|
268 | |
---|
269 | $acceptes = forum_documents_acceptes(); |
---|
270 | if ( |
---|
271 | // si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement |
---|
272 | !count($acceptes) |
---|
273 | // securite : |
---|
274 | // verifier si on possede la cle (ie on est autorise a poster) |
---|
275 | // (sinon tant pis) ; cf. charger.php pour la definition de la cle |
---|
276 | OR _request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$objet-$id_objet") |
---|
277 | ) { |
---|
278 | $erreurs['document_forum'] = _T('forum:documents_interdits_forum'); |
---|
279 | unset($_FILES['ajouter_document']); |
---|
280 | } else { |
---|
281 | if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) { |
---|
282 | session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand()))); |
---|
283 | } |
---|
284 | |
---|
285 | $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']; |
---|
286 | $doc = &$_FILES['ajouter_document']; |
---|
287 | |
---|
288 | include_spip('inc/joindre_document'); |
---|
289 | include_spip('action/ajouter_documents'); |
---|
290 | list($extension, $doc['name']) = fixer_extension_document($doc); |
---|
291 | |
---|
292 | if (!in_array($extension, $acceptes)) { |
---|
293 | $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes))); |
---|
294 | } else { |
---|
295 | include_spip('inc/getdocument'); |
---|
296 | if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) { |
---|
297 | $erreurs['document_forum'] = _T('copie_document_impossible'); |
---|
298 | } |
---|
299 | |
---|
300 | # else if (...) |
---|
301 | # verifier le type_document autorise |
---|
302 | # retailler eventuellement les photos |
---|
303 | } |
---|
304 | |
---|
305 | // si ok on stocke les meta donnees, sinon on efface |
---|
306 | if (isset($erreurs['document_forum'])) { |
---|
307 | spip_unlink($tmp . '.bin'); |
---|
308 | unset ($_FILES['ajouter_document']); |
---|
309 | } else { |
---|
310 | $doc['tmp_name'] = $tmp . '.bin'; |
---|
311 | ecrire_fichier($tmp . '.txt', serialize($doc)); |
---|
312 | } |
---|
313 | } |
---|
314 | } // restaurer/supprimer le document eventuellement uploade au tour precedent |
---|
315 | elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) |
---|
316 | AND $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] |
---|
317 | AND file_exists($tmp . '.bin') |
---|
318 | ) { |
---|
319 | if (_request('supprimer_document_ajoute')) { |
---|
320 | spip_unlink($tmp . '.bin'); |
---|
321 | spip_unlink($tmp . '.txt'); |
---|
322 | } elseif (lire_fichier($tmp . '.txt', $meta)) { |
---|
323 | $doc = &$_FILES['ajouter_document']; |
---|
324 | $doc = @unserialize($meta); |
---|
325 | } |
---|
326 | } |
---|
327 | |
---|
328 | $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10); |
---|
329 | if (strlen($texte = _request('texte')) < $min_length |
---|
330 | AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui' |
---|
331 | ) { |
---|
332 | $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', |
---|
333 | array('min' => $min_length)); |
---|
334 | } elseif (defined('_FORUM_LONGUEUR_MAXI') |
---|
335 | AND _FORUM_LONGUEUR_MAXI > 0 |
---|
336 | AND strlen($texte) > _FORUM_LONGUEUR_MAXI |
---|
337 | ) { |
---|
338 | $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', |
---|
339 | array( |
---|
340 | 'compte' => strlen($texte), |
---|
341 | 'max' => _FORUM_LONGUEUR_MAXI |
---|
342 | )); |
---|
343 | } |
---|
344 | |
---|
345 | if (array_reduce($_POST, 'reduce_strlen', (20*1024)) < 0) { |
---|
346 | $erreurs['erreur_message'] = _T('forum:forum_message_trop_long'); |
---|
347 | } else { |
---|
348 | // Ne pas autoriser d'envoi hacke si forum sur abonnement |
---|
349 | if (controler_forum($objet, $id_objet) == 'abo' |
---|
350 | AND !test_espace_prive() |
---|
351 | ) { |
---|
352 | if (!isset($GLOBALS['visiteur_session']) |
---|
353 | OR !isset($GLOBALS['visiteur_session']['statut']) |
---|
354 | ) { |
---|
355 | $erreurs['erreur_message'] = _T('forum_non_inscrit'); |
---|
356 | } elseif ($GLOBALS['visiteur_session']['statut'] == '5poubelle') { |
---|
357 | $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); |
---|
358 | } |
---|
359 | } |
---|
360 | } |
---|
361 | |
---|
362 | if (strlen($titre = _request('titre')) < 3 |
---|
363 | AND $GLOBALS['meta']['forums_titre'] == 'oui' |
---|
364 | ) { |
---|
365 | $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres'); |
---|
366 | } |
---|
367 | |
---|
368 | if (!count($erreurs) AND !_request('confirmer_previsu_forum')) { |
---|
369 | if (!_request('envoyer_message') OR $forcer_previsu <> 'non') { |
---|
370 | $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), |
---|
371 | $doc, |
---|
372 | $objet, $id_objet, $id_forum); |
---|
373 | $erreurs['previsu'] = $previsu; |
---|
374 | $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique |
---|
375 | } |
---|
376 | } |
---|
377 | |
---|
378 | // Si forum avec previsu sans bon hash de securite, echec |
---|
379 | if (!count($erreurs)) { |
---|
380 | if (!test_espace_prive() |
---|
381 | AND $forcer_previsu <> 'non' |
---|
382 | AND forum_insert_noprevisu() |
---|
383 | ) { |
---|
384 | $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); |
---|
385 | } |
---|
386 | } |
---|
387 | |
---|
388 | return $erreurs; |
---|
389 | } |
---|
390 | |
---|
391 | |
---|
392 | /** |
---|
393 | * Lister les formats de documents joints acceptes dans les forum |
---|
394 | * |
---|
395 | * @return array |
---|
396 | */ |
---|
397 | function forum_documents_acceptes() { |
---|
398 | $formats = trim($GLOBALS['meta']['formats_documents_forum']); |
---|
399 | if (!$formats) { |
---|
400 | return array(); |
---|
401 | } |
---|
402 | if ($formats !== '*') { |
---|
403 | $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats)); |
---|
404 | } else { |
---|
405 | include_spip('base/typedoc'); |
---|
406 | $formats = array_keys($GLOBALS['tables_mime']); |
---|
407 | } |
---|
408 | sort($formats); |
---|
409 | |
---|
410 | return $formats; |
---|
411 | } |
---|
412 | |
---|
413 | |
---|
414 | /** |
---|
415 | * Preparer la previsu d'un message de forum |
---|
416 | * |
---|
417 | * http://code.spip.net/@inclure_previsu |
---|
418 | * |
---|
419 | * @param string $texte |
---|
420 | * @param string $titre |
---|
421 | * @param string $url_site |
---|
422 | * @param string $nom_site |
---|
423 | * @param array $ajouter_mot |
---|
424 | * @param array $doc |
---|
425 | * @param string $objet |
---|
426 | * @param int $id_objet |
---|
427 | * @param int $id_forum |
---|
428 | * @return string |
---|
429 | */ |
---|
430 | function inclure_previsu( |
---|
431 | $texte, |
---|
432 | $titre, |
---|
433 | $url_site, |
---|
434 | $nom_site, |
---|
435 | $ajouter_mot, |
---|
436 | $doc, |
---|
437 | $objet, |
---|
438 | $id_objet, |
---|
439 | $id_forum |
---|
440 | ) { |
---|
441 | global $table_des_traitements; |
---|
442 | |
---|
443 | $bouton = _T('forum:forum_message_definitif'); |
---|
444 | include_spip('public/assembler'); |
---|
445 | include_spip('public/composer'); |
---|
446 | |
---|
447 | // appliquer les traitements de #TEXTE a la previsu |
---|
448 | // comme on voit c'est complique... y a peut-etre plus simple ? |
---|
449 | // recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises |
---|
450 | include_spip('public/parametrer'); |
---|
451 | $tmptexte = ""; |
---|
452 | $evaltexte = isset($table_des_traitements['TEXTE']['forums']) |
---|
453 | ? $table_des_traitements['TEXTE']['forums'] |
---|
454 | : $table_des_traitements['TEXTE'][0]; |
---|
455 | $evaltexte = '$tmptexte = ' . str_replace('%s', '$texte', $evaltexte) . ';'; |
---|
456 | // evaluer... |
---|
457 | // [fixme] |
---|
458 | // $connect et $Pile ne sont pas definis ici :/ |
---|
459 | // mais font souvent partie des variables appelees par les traitements |
---|
460 | $connect = ""; |
---|
461 | $Pile = array(0 => array()); |
---|
462 | eval($evaltexte); |
---|
463 | |
---|
464 | // supprimer les <form> de la previsualisation |
---|
465 | // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums) |
---|
466 | return preg_replace("@<(/?)form\b@ism", |
---|
467 | '<\1div', |
---|
468 | inclure_balise_dynamique(array( |
---|
469 | 'formulaires/inc-forum_previsu', |
---|
470 | 0, |
---|
471 | array( |
---|
472 | 'titre' => safehtml(typo($titre)), |
---|
473 | 'texte' => $tmptexte, |
---|
474 | 'notes' => safehtml(calculer_notes()), |
---|
475 | 'url_site' => vider_url($url_site), |
---|
476 | 'nom_site' => safehtml(typo($nom_site)), |
---|
477 | 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), |
---|
478 | 'ajouter_document' => $doc, |
---|
479 | #'erreur' => $erreur, // non definie ? |
---|
480 | 'bouton' => $bouton, |
---|
481 | 'objet' => $objet, |
---|
482 | 'id_objet' => $id_objet, |
---|
483 | 'id_forum' => $id_forum |
---|
484 | ) |
---|
485 | ), false)); |
---|
486 | } |
---|
487 | |
---|
488 | |
---|
489 | /** |
---|
490 | * Traiter la saisie de #FORMULAIRE_FORUM |
---|
491 | * tout est delegue a inc_forum_insert() |
---|
492 | * |
---|
493 | * @param string $objet |
---|
494 | * @param int $id_objet |
---|
495 | * @param int $id_forum |
---|
496 | * @param int|array $ajouter_mot |
---|
497 | * mots ajoutes coches par defaut |
---|
498 | * @param $ajouter_groupe |
---|
499 | * groupes ajoutables |
---|
500 | * @param $forcer_previsu |
---|
501 | * forcer la previsualisation du message oui ou non |
---|
502 | * @param $retour |
---|
503 | * url de retour |
---|
504 | * @return array|bool |
---|
505 | */ |
---|
506 | function formulaires_forum_traiter_dist( |
---|
507 | $objet, |
---|
508 | $id_objet, |
---|
509 | $id_forum, |
---|
510 | $ajouter_mot, |
---|
511 | $ajouter_groupe, |
---|
512 | $forcer_previsu, |
---|
513 | $retour |
---|
514 | ) { |
---|
515 | |
---|
516 | $forum_insert = charger_fonction('forum_insert', 'inc'); |
---|
517 | |
---|
518 | // Antispam basique : |
---|
519 | // si l'input invisible a ete renseigne, ca ne peut etre qu'un bot |
---|
520 | if (strlen(_request(_request('cle_ajouter_document')))) { |
---|
521 | tracer_erreur_forum('champ interdit (nobot) rempli'); |
---|
522 | |
---|
523 | return array('message_erreur' => _T('forum:erreur_enregistrement_message')); |
---|
524 | } |
---|
525 | |
---|
526 | if (defined('_FORUM_AUTORISER_POST_ID_FORUM') |
---|
527 | AND _FORUM_AUTORISER_POST_ID_FORUM |
---|
528 | AND _request('id_forum') |
---|
529 | ) { |
---|
530 | $id_forum = _request('id_forum'); |
---|
531 | } |
---|
532 | |
---|
533 | $id_reponse = $forum_insert($objet, $id_objet, $id_forum); |
---|
534 | |
---|
535 | |
---|
536 | if ($id_reponse) { |
---|
537 | // En cas de retour sur (par exemple) {#SELF}, on ajoute quand |
---|
538 | // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite |
---|
539 | if ($retour) { |
---|
540 | if (!strpos($retour, '#')) { |
---|
541 | $retour .= '#forum' . $id_reponse; |
---|
542 | } |
---|
543 | } else { |
---|
544 | // le retour par defaut envoie sur le thread, ce qui permet |
---|
545 | // de traiter elegamment le cas des forums moderes a priori. |
---|
546 | // Cela assure aussi qu'on retrouve son message dans le thread |
---|
547 | // dans le cas des forums moderes a posteriori, ce qui n'est |
---|
548 | // pas plus mal. |
---|
549 | if (function_exists('generer_url_forum')) { |
---|
550 | $retour = generer_url_forum($id_reponse); |
---|
551 | } else { |
---|
552 | $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse); |
---|
553 | spip_log('id_thread=' . $thread['id_thread'], 'forum'); |
---|
554 | $retour = generer_url_entite($thread['id_thread'], 'forum'); |
---|
555 | } |
---|
556 | } |
---|
557 | |
---|
558 | $res = array('redirect' => $retour, 'id_forum' => $id_reponse); |
---|
559 | } else { |
---|
560 | $res = array('message_erreur' => _T('forum:erreur_enregistrement_message')); |
---|
561 | } |
---|
562 | |
---|
563 | return $res; |
---|
564 | } |
---|
565 | |
---|
566 | |
---|
567 | ?> |
---|