source: spip-zone/_core_/plugins/forum/inc/forum_insert.php

Last change on this file was 113294, checked in by spip.franck@…, 5 months ago

Il parait que le futur c'est maintenant :-D

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