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