Subversion Repositories Sites.tela-botanica.org

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
?>