[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / forum / action / instituer_forum.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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")) {
14 return;
15 }
16
17 // https://code.spip.net/@action_instituer_forum_dist
18 function action_instituer_forum_dist($arg = null) {
19
20 if (is_null($arg)) {
21 $securiser_action = charger_fonction('securiser_action', 'inc');
22 $arg = $securiser_action();
23 }
24
25 list($id_forum, $statut) = preg_split('/\W/', $arg);
26 $id_forum = intval($id_forum);
27 $row = sql_fetsel("*", "spip_forum", "id_forum=$id_forum");
28 if (!$row) {
29 return;
30 }
31
32 instituer_un_forum($statut, $row);
33 }
34
35 function instituer_un_forum($statut, $row) {
36
37 $id_forum = $row['id_forum'];
38 $old = $row['statut'];
39 // rien a faire si pas de changement de statut
40 if ($old == $statut) {
41 return;
42 }
43
44 // changer le statut de toute l'arborescence dependant de ce message
45 $id_messages = array($id_forum);
46 while ($id_messages) {
47 sql_updateq("spip_forum", array("statut" => $statut), sql_in("id_forum", $id_messages) . " AND statut = '$old'");
48
49 $id_messages = array_map('reset', sql_allfetsel("id_forum", "spip_forum", sql_in("id_parent", $id_messages)));
50 }
51
52 // Notifier de la publication du message, s'il etait 'prop'
53 if ($old == 'prop' and $statut == 'publie') {
54 if ($notifications = charger_fonction('notifications', 'inc')) {
55 $notifications('forumvalide', $id_forum);
56 }
57 }
58
59 // mettre a jour la date du thread
60 // si publie, ou que tout le thread est prive,
61 // mettre la date du thread a 'maintenant' (date de publi du message)
62 // sinon prendre la date_heure du dernier message public
63 // c'est imparfait dans le cas ou les crayons ont ete utilises pour modifier ce message entre temps
64 // car la date_thread aurait cette derniere date alors que pas le message
65 // mais c'est au mieux de ce que l'on peut faire quand on depublie un SPAM ou supprime un message
66 if ($statut == 'publie' or $old == 'publie') {
67 if ($statut == 'publie'
68 or !($date_thread = sql_getfetsel("date_heure", "spip_forum",
69 "statut='publie' AND id_thread=" . $row['id_thread'], "", "date_heure DESC", "0,1"))
70 ) {
71 $date_thread = date('Y-m-d H:i:s');
72 }
73 sql_updateq("spip_forum", array("date_thread" => $date_thread), "id_thread=" . $row['id_thread']);
74 }
75
76 // invalider les pages comportant ce forum
77 include_spip('inc/invalideur');
78 suivre_invalideur("id='forum/$id_forum'");
79 suivre_invalideur("id='" . $row['objet'] . "/" . $row['id_objet'] . "'");
80
81 // Reindexation du thread (par exemple)
82 pipeline('post_edition',
83 array(
84 'args' => array(
85 'table' => 'spip_forum',
86 'table_objet' => 'forums',
87 'spip_table_objet' => 'spip_forum',
88 'type' => 'forum',
89 'id_objet' => $id_forum,
90 'action' => 'instituer',
91 'statut_ancien' => $old,
92 ),
93 'data' => array('statut' => $statut)
94 )
95 );
96 }