85b8473f9277e88d48396d5be26afa0c815f21b1
[ptitvelo/web/www.git] / www / plugins-dist / forum / inc / forum_insert.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2013 *
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")) return;
14 include_spip('inc/forum');
15 include_spip('inc/filtres');
16 include_spip('inc/actions');
17
18 // Ce fichier est inclus par dist/formulaires/forum.php
19
20 // http://doc.spip.org/@mots_du_forum
21 function mots_du_forum($ajouter_mot, $id_message)
22 {
23 include_spip('action/editer_mot');
24 mot_associer($ajouter_mot, array('forum'=>$id_message));
25 }
26
27
28
29 // http://doc.spip.org/@tracer_erreur_forum
30 function tracer_erreur_forum($type='') {
31 spip_log("erreur forum ($type): ".print_r($_POST, true));
32
33 define('_TRACER_ERREUR_FORUM', false);
34 if (_TRACER_ERREUR_FORUM) {
35 $envoyer_mail = charger_fonction('envoyer_mail','inc');
36 $envoyer_mail($GLOBALS['meta']['email_webmaster'], "erreur forum ($type)",
37 "erreur sur le forum ($type) :\n\n".
38 '$_POST = '.print_r($_POST, true)."\n\n".
39 '$_SERVER = '.print_r($_SERVER, true));
40 }
41 }
42
43 /**
44 * Un parametre permet de forcer le statut (exemple: plugin antispam)
45 *
46 * http://doc.spip.org/@inc_forum_insert_dist
47 *
48 * @param $objet
49 * @param $id_objet
50 * @param $id_forum
51 * en reponse a
52 * @param null $force_statut
53 * @return bool
54 */
55 function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = NULL) {
56
57 if (!in_array($force_statut,array('privrac','privadm'))){
58 if (!strlen($objet)
59 OR !intval($id_objet)){
60 spip_log("Erreur insertion forum sur objet='$objet', id_objet=$id_objet",'forum.'. _LOG_ERREUR);
61 return 0;
62 }
63 }
64 spip_log("insertion de forum $force_statut sur $objet $id_objet (+$id_forum)", 'forum');
65
66 $c = array('statut'=>'off');
67 $c['objet'] = $objet;
68 $c['id_objet'] = $id_objet;
69
70 include_spip('inc/filtres');
71 include_spip('inc/modifier');
72 $champs = objet_info('forum','champs_editables');
73 $c = collecter_requests($champs, array());
74
75 $c['auteur'] = sinon($GLOBALS['visiteur_session']['nom'],
76 $GLOBALS['visiteur_session']['session_nom']);
77 $c['email_auteur'] = sinon($GLOBALS['visiteur_session']['email'],
78 $GLOBALS['visiteur_session']['session_email']);
79
80 $c = pipeline('pre_edition',array(
81 'args'=>array(
82 'table' => 'spip_forum',
83 'id_objet' => $id_forum,
84 'action'=>'instituer'
85 ),
86 'data'=>forum_insert_statut($c, $force_statut)
87 ));
88
89 $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
90
91 if (!$id_reponse)
92 spip_log("Echec insertion forum sur $objet $id_objet (+$id_forum)", 'forum.'._LOG_ERREUR);
93 else
94 spip_log("forum insere' $id_reponse sur $objet $id_objet (+$id_forum)", 'forum');
95
96 return $id_reponse;
97
98 }
99
100 // http://doc.spip.org/@forum_insert_base
101 function forum_insert_base($c, $id_forum, $objet, $id_objet, $statut, $ajouter_mot = false)
102 {
103
104 if (!in_array($statut,array('privrac','privadm'))){
105 // si le statut est vide, c'est qu'on ne veut pas de ce presume spam !
106 if (!$statut OR !$objet OR !$id_objet){
107 $args = func_get_args();
108 spip_log("Erreur sur forum_insert_base ".var_export($args,1),'forum.'. _LOG_ERREUR);
109 return false;
110 }
111 }
112
113 // Entrer le message dans la base
114 $id_reponse = sql_insertq('spip_forum', array(
115 'date_heure'=> date('Y-m-d H:i:s'),
116 'ip' => $GLOBALS['ip'],
117 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur']
118 ));
119
120 if ($id_reponse){
121 if ($id_forum>0) {
122 $id_thread = sql_getfetsel("id_thread", "spip_forum", "id_forum =".intval($id_forum));
123 }
124 else
125 $id_thread = $id_reponse; # id_thread oblige INSERT puis UPDATE.
126
127 // Entrer les cles
128 sql_updateq('spip_forum', array('id_parent' => $id_forum, 'objet' => $objet, 'id_objet' => $id_objet, 'id_thread' => $id_thread, 'statut' => $statut), "id_forum=".intval($id_reponse));
129
130 // Entrer les mots-cles associes
131 if ($ajouter_mot) mots_du_forum($ajouter_mot, $id_reponse);
132
133 //
134 // Entree du contenu et invalidation des caches
135 //
136 include_spip('action/editer_forum');
137 revision_forum($id_reponse, $c);
138
139 // Ajouter un document
140 if (isset($_FILES['ajouter_document'])
141 AND $_FILES['ajouter_document']['tmp_name']) {
142 $files[] = array('tmp_name'=>$_FILES['ajouter_document']['tmp_name'],'name'=>$_FILES['ajouter_document']['name']);
143 $ajouter_documents = charger_fonction('ajouter_documents','action');
144 $ajouter_documents(
145 'new',
146 $files,
147 'forum',
148 $id_reponse,
149 'document');
150 // supprimer le temporaire et ses meta donnees
151 spip_unlink($_FILES['ajouter_document']['tmp_name']);
152 spip_unlink(preg_replace(',\.bin$,',
153 '.txt', $_FILES['ajouter_document']['tmp_name']));
154 }
155
156 // Notification
157 $quoi = (strncmp($statut,'priv',4)==0?'forumprive':'forumposte');
158 if ($notifications = charger_fonction('notifications', 'inc'))
159 $notifications($quoi, $id_reponse);
160 }
161
162 return $id_reponse;
163 }
164
165
166 // http://doc.spip.org/@forum_insert_statut
167 function forum_insert_statut($champs, $forcer_statut=NULL)
168 {
169 include_spip('inc/forum');
170 $statut = controler_forum($champs['objet'], $champs['id_objet']);
171
172 if ($forcer_statut !== NULL)
173 $champs['statut'] = $forcer_statut;
174 else
175 $champs['statut'] = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' : 'publie');
176
177 return $champs;
178 }
179
180 ?>