4 |
david |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
/***************************************************************************\
|
|
|
4 |
* SPIP, Systeme de publication pour l'internet *
|
|
|
5 |
* *
|
|
|
6 |
* Copyright (c) 2001-2005 *
|
|
|
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 |
|
|
|
14 |
include_ecrire('inc_meta.php3');
|
|
|
15 |
include_ecrire('inc_forum.php3');
|
|
|
16 |
include_ecrire('inc_filtres.php3');
|
|
|
17 |
include_ecrire("inc_abstract_sql.php3");
|
|
|
18 |
include_local(_FILE_CONNECT);
|
|
|
19 |
|
|
|
20 |
// Ce fichier inclus par inc-public a un comportement special
|
|
|
21 |
// Voir commentaires dans celui-ci et dans inc-formulaire_forum
|
|
|
22 |
|
|
|
23 |
function prevenir_auteurs($auteur, $email_auteur, $id_forum, $id_article, $texte, $titre, $statut) {
|
|
|
24 |
global $nom_site_forum, $url_site;
|
|
|
25 |
include_ecrire('inc_texte.php3');
|
|
|
26 |
include_ecrire('inc_filtres.php3');
|
|
|
27 |
include_ecrire('inc_mail.php3');
|
|
|
28 |
// Gestionnaire d'URLs
|
|
|
29 |
if (@file_exists("inc-urls.php3"))
|
|
|
30 |
include_local("inc-urls.php3");
|
|
|
31 |
else
|
|
|
32 |
include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
|
|
|
33 |
|
|
|
34 |
if ($statut == 'prop') # forum modere
|
|
|
35 |
$url = "ecrire/controle_forum.php3?debut_id_forum=$id_forum";
|
|
|
36 |
else if (function_exists('generer_url_forum'))
|
|
|
37 |
$url = generer_url_forum($id_forum);
|
|
|
38 |
else {
|
|
|
39 |
spip_log('inc-urls personnalise : ajoutez generer_url_forum() !');
|
|
|
40 |
$url = generer_url_article($id_article);
|
|
|
41 |
}
|
|
|
42 |
|
|
|
43 |
$adresse_site = lire_meta("adresse_site");
|
|
|
44 |
$url = $adresse_site .'/' . ereg_replace('^/', '', $url);
|
|
|
45 |
|
|
|
46 |
$sujet = "[" .
|
|
|
47 |
entites_html(textebrut(typo(lire_meta("nom_site")))) .
|
|
|
48 |
"] ["._T('forum_forum')."] $titre";
|
|
|
49 |
|
|
|
50 |
$parauteur = (strlen($auteur) <= 2) ? '' :
|
|
|
51 |
(" " ._T('forum_par_auteur', array('auteur' => $auteur)) .
|
|
|
52 |
($email_auteur ? "" : (' <' . $email_auteur . '>')));
|
|
|
53 |
|
|
|
54 |
$corps = _T('form_forum_message_auto') .
|
|
|
55 |
"\n\n" .
|
|
|
56 |
_T('forum_poste_par', array('parauteur' => $parauteur)).
|
|
|
57 |
"\n"
|
|
|
58 |
. _T('forum_ne_repondez_pas')
|
|
|
59 |
. "\n"
|
|
|
60 |
. $url
|
|
|
61 |
. "\n\n\n".$titre."\n\n".textebrut(propre($texte))
|
|
|
62 |
. "\n\n$nom_site_forum\n$url_site\n";
|
|
|
63 |
|
|
|
64 |
$old_lang = $GLOBALS['spip_lang'];
|
|
|
65 |
|
|
|
66 |
$result = spip_query("SELECT auteurs.email, auteurs.lang FROM spip_auteurs AS auteurs,
|
|
|
67 |
spip_auteurs_articles AS lien
|
|
|
68 |
WHERE lien.id_article='$id_article'
|
|
|
69 |
AND auteurs.id_auteur=lien.id_auteur");
|
|
|
70 |
while (list($email, $salangue) = spip_fetch_array($result)) {
|
|
|
71 |
$email = trim($email);
|
|
|
72 |
if (strlen($email) < 3) continue;
|
|
|
73 |
$GLOBALS['spip_lang'] = ($salangue ? $salangue : $old_lang);
|
|
|
74 |
envoyer_mail($email, $sujet, $corps) ;
|
|
|
75 |
}
|
|
|
76 |
$GLOBALS['spip_lang'] = $old_lang;
|
|
|
77 |
}
|
|
|
78 |
|
|
|
79 |
|
|
|
80 |
function controler_forum($id_article, $retour) {
|
|
|
81 |
global $auteur_session;
|
|
|
82 |
|
|
|
83 |
// Reglage forums d'article
|
|
|
84 |
if ($id_article) {
|
|
|
85 |
$q = spip_query("SELECT accepter_forum FROM spip_articles
|
|
|
86 |
WHERE id_article=$id_article");
|
|
|
87 |
if ($r = spip_fetch_array($q))
|
|
|
88 |
$forums_publics = $r['accepter_forum'];
|
|
|
89 |
}
|
|
|
90 |
|
|
|
91 |
// Valeur par defaut
|
|
|
92 |
if (!$forums_publics)
|
|
|
93 |
$forums_publics = substr(lire_meta("forums_publics"),0,3);
|
|
|
94 |
|
|
|
95 |
if ($forums_publics == "abo") {
|
|
|
96 |
if ($auteur_session) {
|
|
|
97 |
$statut = $auteur_session['statut'];
|
|
|
98 |
if (!$statut OR $statut == '5poubelle') {
|
|
|
99 |
ask_php_auth(_T('forum_acces_refuse'),
|
|
|
100 |
_T('forum_cliquer_retour',
|
|
|
101 |
array('retour_forum' => $retour)));
|
|
|
102 |
exit;
|
|
|
103 |
}
|
|
|
104 |
} else {
|
|
|
105 |
ask_php_auth(_T('forum_non_inscrit'),
|
|
|
106 |
_T('forum_cliquer_retour',
|
|
|
107 |
array('retour_forum' => $retour)));
|
|
|
108 |
exit;
|
|
|
109 |
}
|
|
|
110 |
}
|
|
|
111 |
|
|
|
112 |
return $forums_publics;
|
|
|
113 |
}
|
|
|
114 |
|
|
|
115 |
function mots_du_forum($ajouter_mot, $id_message)
|
|
|
116 |
{
|
|
|
117 |
foreach ($ajouter_mot as $id_mot)
|
|
|
118 |
if ($id_mot = intval($id_mot))
|
|
|
119 |
spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)
|
|
|
120 |
VALUES ($id_mot, $id_message)");
|
|
|
121 |
}
|
|
|
122 |
|
|
|
123 |
function enregistre_forum() {
|
|
|
124 |
global $REMOTE_ADDR, $auteur_session,
|
|
|
125 |
$afficher_texte, $ajouter_mot, $alea, $hash,
|
|
|
126 |
$auteur, $confirmer_forum, $email_auteur, $id_auteur,
|
|
|
127 |
$nom_site_forum, $retour_forum, $texte, $titre, $url_site;
|
|
|
128 |
|
|
|
129 |
$retour_forum = rawurldecode($retour_forum);
|
|
|
130 |
|
|
|
131 |
# retour a calculer (cf. inc-formulaire_forum)
|
|
|
132 |
if ($retour_forum == '!') {
|
|
|
133 |
$retour_forum = new Link();
|
|
|
134 |
$retour_forum = $retour_forum->getUrl(); # en cas d'echec du post
|
|
|
135 |
$calculer_retour = true;
|
|
|
136 |
}
|
|
|
137 |
|
|
|
138 |
// Recuperer les donnees postees du formulaire ou stocker '0'
|
|
|
139 |
foreach (array('id_article', 'id_breve', 'id_syndic',
|
|
|
140 |
'id_rubrique', 'id_forum') as $id)
|
|
|
141 |
if (isset($_POST['forum_'.$id]))
|
|
|
142 |
$$id = intval($_POST['forum_'.$id]);
|
|
|
143 |
else
|
|
|
144 |
$$id = 0;
|
|
|
145 |
|
|
|
146 |
// initialisation de l'eventuel visiteur connecte
|
|
|
147 |
if (!$id_auteur)
|
|
|
148 |
$id_auteur = intval($auteur_session['id_auteur']);
|
|
|
149 |
|
|
|
150 |
$statut = controler_forum($id_article, $retour_forum);
|
|
|
151 |
|
|
|
152 |
// Ne pas autoriser de changement de nom si forum sur abonnement
|
|
|
153 |
if ($statut == 'abo') {
|
|
|
154 |
$auteur = $auteur_session['nom'];
|
|
|
155 |
$email_auteur = $auteur_session['email'];
|
|
|
156 |
}
|
|
|
157 |
|
|
|
158 |
// trop court ?
|
|
|
159 |
if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) +
|
|
|
160 |
strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
|
|
|
161 |
ask_php_auth(_T('forum_message_trop_long'),
|
|
|
162 |
_T('forum_cliquer_retour',
|
|
|
163 |
array('retour_forum' => $retour_forum)));
|
|
|
164 |
exit;
|
|
|
165 |
}
|
|
|
166 |
|
|
|
167 |
// Verifier hash securite pour les forums avec previsu
|
|
|
168 |
if ($GLOBALS['afficher_texte'] <> 'non') {
|
|
|
169 |
include_ecrire("inc_admin.php3");
|
|
|
170 |
if (!verifier_action_auteur("ajout_forum $id_rubrique".
|
|
|
171 |
" $id_forum $id_article $id_breve".
|
|
|
172 |
" $id_syndic $alea", $hash)) {
|
|
|
173 |
spip_log('erreur hash forum');
|
|
|
174 |
die (_T('forum_titre_erreur')); # echec du POST
|
|
|
175 |
}
|
|
|
176 |
|
|
|
177 |
// verifier fichier lock
|
|
|
178 |
$alea = preg_replace('/[^0-9]/', '', $alea);
|
|
|
179 |
if (!file_exists($hash = _DIR_SESSIONS."forum_$alea.lck"))
|
|
|
180 |
return $retour_forum; # echec silencieux du POST
|
|
|
181 |
unlink($hash);
|
|
|
182 |
}
|
|
|
183 |
|
|
|
184 |
// Entrer le message dans la base
|
|
|
185 |
$id_message = spip_abstract_insert('spip_forum', '(date_heure)', '(NOW())');
|
|
|
186 |
|
|
|
187 |
if ($id_forum)
|
|
|
188 |
list($id_thread) = spip_fetch_array(spip_query(
|
|
|
189 |
"SELECT id_thread FROM spip_forum WHERE id_forum = $id_forum"));
|
|
|
190 |
else
|
|
|
191 |
$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
|
|
|
192 |
|
|
|
193 |
$statut = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' :
|
|
|
194 |
'publie');
|
|
|
195 |
|
|
|
196 |
spip_query("UPDATE spip_forum
|
|
|
197 |
SET id_parent = $id_forum,
|
|
|
198 |
id_rubrique = $id_rubrique,
|
|
|
199 |
id_article = $id_article,
|
|
|
200 |
id_breve = $id_breve,
|
|
|
201 |
id_syndic = $id_syndic,
|
|
|
202 |
id_auteur = $id_auteur,
|
|
|
203 |
id_thread = $id_thread,
|
|
|
204 |
date_heure = NOW(),
|
|
|
205 |
titre = '".addslashes(corriger_caracteres($titre))."',
|
|
|
206 |
texte = '".addslashes(corriger_caracteres($texte))."',
|
|
|
207 |
nom_site = '".addslashes(corriger_caracteres($nom_site_forum))."',
|
|
|
208 |
url_site = '".addslashes(corriger_caracteres($url_site))."',
|
|
|
209 |
auteur = '".addslashes(corriger_caracteres($auteur))."',
|
|
|
210 |
email_auteur = '".addslashes(corriger_caracteres($email_auteur))."',
|
|
|
211 |
ip = '$REMOTE_ADDR',
|
|
|
212 |
statut = '$statut'
|
|
|
213 |
WHERE id_forum = $id_message
|
|
|
214 |
");
|
|
|
215 |
|
|
|
216 |
// Le cas echeant, calculer le retour
|
|
|
217 |
if ($calculer_retour) {
|
|
|
218 |
// Gestionnaire d'URLs
|
|
|
219 |
if (@file_exists("inc-urls.php3"))
|
|
|
220 |
include_local("inc-urls.php3");
|
|
|
221 |
else
|
|
|
222 |
include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
|
|
|
223 |
|
|
|
224 |
// le retour automatique envoie sur le thread, ce qui permet
|
|
|
225 |
// de traiter elegamment le cas des forums moderes a priori.
|
|
|
226 |
// Cela assure aussi qu'on retrouve son message dans le thread
|
|
|
227 |
// dans le cas des forums moderes a posteriori, ce qui n'est
|
|
|
228 |
// pas plus mal.
|
|
|
229 |
$retour_forum = generer_url_forum($id_message, true);
|
|
|
230 |
}
|
|
|
231 |
|
|
|
232 |
// Entrer les mots-cles associes
|
|
|
233 |
if (is_array($ajouter_mot)) mots_du_forum($ajouter_mot, $id_message);
|
|
|
234 |
|
|
|
235 |
// Prevenir les auteurs de l'article
|
|
|
236 |
if (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non"))
|
|
|
237 |
prevenir_auteurs($auteur, $email_auteur, $id_message, $id_article, $texte, $titre, $statut);
|
|
|
238 |
|
|
|
239 |
// Poser un cookie pour ne pas retaper le nom / email
|
|
|
240 |
|
|
|
241 |
spip_setcookie('spip_forum_user',
|
|
|
242 |
serialize(array('nom' => $auteur, 'email' => $email_auteur)));
|
|
|
243 |
|
|
|
244 |
if ($statut == 'publie') {
|
|
|
245 |
//
|
|
|
246 |
// INVALIDATION DES CACHES LIES AUX FORUMS
|
|
|
247 |
//
|
|
|
248 |
include_ecrire('inc_invalideur.php3');
|
|
|
249 |
suivre_invalideur ("id='id_forum/" .
|
|
|
250 |
calcul_index_forum($id_article,
|
|
|
251 |
$id_breve,
|
|
|
252 |
$id_rubrique,
|
|
|
253 |
$id_syndic) . "'");
|
|
|
254 |
}
|
|
|
255 |
|
|
|
256 |
return $retour_forum;
|
|
|
257 |
}
|
|
|
258 |
|
|
|
259 |
?>
|