[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / forum / action / instituer_lot_forum.php
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
13 if (!defined("_ECRIRE_INC_VERSION")) {
14 return;
15 }
16
17 // https://code.spip.net/@action_instituer_forum_dist
18 function action_instituer_lot_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 // verifier les droits
26 if (autoriser('instituer', 'forum', 0)) {
27
28 /**
29 * Cas 1 : les arguments sont explicites
30 * statut-ip/email/id_auteur/auteur
31 *
32 */
33 if (preg_match(",^(\w+)-,", $arg, $match)
34 and in_array($statut = $match[1], array('publie', 'off', 'spam'))
35 ) {
36 $arg = substr($arg, strlen($statut) + 1);
37
38 $arg = explode('/', $arg);
39 $ip = array_shift($arg);
40 $email_auteur = array_shift($arg);
41 $id_auteur = intval(array_shift($arg));
42 $auteur = implode('/', $arg);
43 $where = array();
44 // pas de moderation par lot sur les forum prives
45 $where[] = sql_in('statut', array('privadm', 'prive', 'privrac'), 'NOT');
46 if ($ip) {
47 $where[] = "ip=" . sql_quote($ip);
48 }
49 if ($email_auteur) {
50 $where[] = "email_auteur=" . sql_quote($email_auteur);
51 }
52 if ($id_auteur) {
53 $where[] = "id_auteur=" . intval($id_auteur);
54 }
55 if ($auteur) {
56 $where[] = "auteur=" . sql_quote($auteur);
57 }
58 $rows = sql_allfetsel("*", "spip_forum", $where);
59 if (!count($rows)) {
60 return;
61 }
62
63 include_spip('action/instituer_forum');
64 foreach ($rows as $row) {
65 instituer_un_forum($statut, $row);
66 }
67 } /**
68 * Cas 2 : seul le statut est explicite et signe
69 * les id concernes sont passes en arg supplementaires
70 * dans un taleau ids[]
71 */
72 elseif (preg_match(",^(\w+)$,", $arg, $match)
73 and in_array($statut = $match[1], array('publie', 'off', 'spam'))
74 and $id = _request('ids')
75 and is_array($id)
76 ) {
77
78 $ids = array_map('intval', $id);
79 $where = array();
80 // pas de moderation par lot sur les forum prives
81 $where[] = sql_in('statut', array('privadm', 'prive', 'privrac'), 'NOT');
82 $where[] = sql_in('id_forum', $ids);
83 $rows = sql_allfetsel("*", "spip_forum", $where);
84 if (!count($rows)) {
85 return;
86 }
87
88 include_spip('action/instituer_forum');
89 foreach ($rows as $row) {
90 instituer_un_forum($statut, $row);
91 }
92 }
93 } else {
94 spip_log("instituer_lot_forum interdit pour auteur " . $GLOBALS['visiteur_session']['id_auteur'], _LOG_ERREUR);
95 }
96
97 }