source: spip-zone/_core_/branches/spip-3.0/plugins/forum/inc/forum_insert.php @ 104360

Last change on this file since 104360 was 104360, checked in by spip.franck@…, 3 years ago

code.spip est maintenant en https, donc j'ajoute le "s" à http

File size: 5.6 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
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;
14include_spip('inc/forum');
15include_spip('inc/filtres');
16include_spip('inc/actions');
17
18// Ce fichier est inclus par dist/formulaires/forum.php
19
20// https://code.spip.net/@mots_du_forum
21function 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// https://code.spip.net/@tracer_erreur_forum
30function 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 * https://code.spip.net/@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 */
55function 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
67
68        include_spip('inc/filtres');
69        include_spip('inc/modifier');
70        $champs = objet_info('forum','champs_editables');
71        $c = collecter_requests($champs, array());
72       
73        $c['statut'] = 'off';
74        $c['objet'] = $objet;
75        $c['id_objet'] = $id_objet;
76        $c['auteur'] = sinon($GLOBALS['visiteur_session']['nom'],
77                $GLOBALS['visiteur_session']['session_nom']);
78        $c['email_auteur'] = sinon($GLOBALS['visiteur_session']['email'],
79                $GLOBALS['visiteur_session']['session_email']);
80
81        $c = pipeline('pre_edition',array(
82                'args'=>array(
83                                'table' => 'spip_forum',
84                                'id_objet' => $id_forum,
85                                'action'=>'instituer'
86                ),
87                'data'=>forum_insert_statut($c, $force_statut)
88        ));
89
90        $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
91
92        if (!$id_reponse)
93                spip_log("Echec insertion forum sur $objet $id_objet (+$id_forum)", 'forum.'._LOG_ERREUR);
94        else
95                spip_log("forum insere' $id_reponse sur $objet $id_objet (+$id_forum)", 'forum');
96
97        return $id_reponse;
98
99}
100
101// https://code.spip.net/@forum_insert_base
102function forum_insert_base($c, $id_forum, $objet, $id_objet, $statut, $ajouter_mot = false)
103{
104
105        if (!in_array($statut,array('privrac','privadm'))){
106                // si le statut est vide, c'est qu'on ne veut pas de ce presume spam !
107                if (!$statut OR !$objet OR !$id_objet){
108                        $args = func_get_args();
109                        spip_log("Erreur sur forum_insert_base ".var_export($args,1),'forum.'. _LOG_ERREUR);
110                        return false;
111                }
112        }
113
114        // Entrer le message dans la base
115        $id_reponse = sql_insertq('spip_forum', array(
116                'date_heure'=> date('Y-m-d H:i:s'),
117                'ip' => $GLOBALS['ip'],
118                'id_auteur' => $GLOBALS['visiteur_session']['id_auteur']
119        ));
120
121        if ($id_reponse){
122                if ($id_forum>0) {
123                        $id_thread = sql_getfetsel("id_thread", "spip_forum", "id_forum =".intval($id_forum));
124                }
125                else
126                        $id_thread = $id_reponse; # id_thread oblige INSERT puis UPDATE.
127
128                // Entrer les cles
129                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));
130
131                // Entrer les mots-cles associes
132                if ($ajouter_mot) mots_du_forum($ajouter_mot, $id_reponse);
133
134                //
135                // Entree du contenu et invalidation des caches
136                //
137                include_spip('action/editer_forum');
138                revision_forum($id_reponse, $c);
139
140                // Ajouter un document
141                if (isset($_FILES['ajouter_document'])
142                AND $_FILES['ajouter_document']['tmp_name']) {
143                        $files[] = array('tmp_name'=>$_FILES['ajouter_document']['tmp_name'],'name'=>$_FILES['ajouter_document']['name']);
144                        $ajouter_documents = charger_fonction('ajouter_documents','action');
145                        $ajouter_documents(
146                                'new',
147                                $files,
148                                'forum',
149                                $id_reponse,
150                                'document');
151                        // supprimer le temporaire et ses meta donnees
152                        spip_unlink($_FILES['ajouter_document']['tmp_name']);
153                        spip_unlink(preg_replace(',\.bin$,',
154                                '.txt', $_FILES['ajouter_document']['tmp_name']));
155                }
156
157                // Notification
158                $quoi = (strncmp($statut,'priv',4)==0?'forumprive':'forumposte');
159                if ($notifications = charger_fonction('notifications', 'inc'))
160                        $notifications($quoi, $id_reponse);
161        }
162
163        return $id_reponse;
164}
165
166
167// https://code.spip.net/@forum_insert_statut
168function forum_insert_statut($champs, $forcer_statut=NULL)
169{
170        include_spip('inc/forum');
171        $statut = controler_forum($champs['objet'], $champs['id_objet']);
172
173        if ($forcer_statut !== NULL)
174                $champs['statut'] = $forcer_statut;
175        else
176                $champs['statut'] = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' : 'publie');
177
178        return $champs;
179}
180
181?>
Note: See TracBrowser for help on using the repository browser.