Chris@76
|
1 <?php
|
Chris@76
|
2
|
Chris@76
|
3 /**
|
Chris@76
|
4 * Simple Machines Forum (SMF)
|
Chris@76
|
5 *
|
Chris@76
|
6 * @package SMF
|
Chris@76
|
7 * @author Simple Machines http://www.simplemachines.org
|
Chris@76
|
8 * @copyright 2011 Simple Machines
|
Chris@76
|
9 * @license http://www.simplemachines.org/about/smf/license.php BSD
|
Chris@76
|
10 *
|
Chris@76
|
11 * @version 2.0.1
|
Chris@76
|
12 */
|
Chris@76
|
13
|
Chris@76
|
14 if (!defined('SMF'))
|
Chris@76
|
15 die('Hacking attempt...');
|
Chris@76
|
16
|
Chris@76
|
17 /*
|
Chris@76
|
18 //!!!
|
Chris@76
|
19 */
|
Chris@76
|
20
|
Chris@76
|
21 // Entry point for the moderation center.
|
Chris@76
|
22 function ModerationMain($dont_call = false)
|
Chris@76
|
23 {
|
Chris@76
|
24 global $txt, $context, $scripturl, $sc, $modSettings, $user_info, $settings, $sourcedir, $options, $smcFunc;
|
Chris@76
|
25
|
Chris@76
|
26 // Don't run this twice... and don't conflict with the admin bar.
|
Chris@76
|
27 if (isset($context['admin_area']))
|
Chris@76
|
28 return;
|
Chris@76
|
29
|
Chris@76
|
30 $context['can_moderate_boards'] = $user_info['mod_cache']['bq'] != '0=1';
|
Chris@76
|
31 $context['can_moderate_groups'] = $user_info['mod_cache']['gq'] != '0=1';
|
Chris@76
|
32 $context['can_moderate_approvals'] = $modSettings['postmod_active'] && !empty($user_info['mod_cache']['ap']);
|
Chris@76
|
33
|
Chris@76
|
34 // Everyone using this area must be allowed here!
|
Chris@76
|
35 if (!$context['can_moderate_boards'] && !$context['can_moderate_groups'] && !$context['can_moderate_approvals'])
|
Chris@76
|
36 isAllowedTo('access_mod_center');
|
Chris@76
|
37
|
Chris@76
|
38 // We're gonna want a menu of some kind.
|
Chris@76
|
39 require_once($sourcedir . '/Subs-Menu.php');
|
Chris@76
|
40
|
Chris@76
|
41 // Load the language, and the template.
|
Chris@76
|
42 loadLanguage('ModerationCenter');
|
Chris@76
|
43 loadTemplate(false, 'admin');
|
Chris@76
|
44
|
Chris@76
|
45 $context['admin_preferences'] = !empty($options['admin_preferences']) ? unserialize($options['admin_preferences']) : array();
|
Chris@76
|
46 $context['robot_no_index'] = true;
|
Chris@76
|
47
|
Chris@76
|
48 // This is the menu structure - refer to Subs-Menu.php for the details.
|
Chris@76
|
49 $moderation_areas = array(
|
Chris@76
|
50 'main' => array(
|
Chris@76
|
51 'title' => $txt['mc_main'],
|
Chris@76
|
52 'areas' => array(
|
Chris@76
|
53 'index' => array(
|
Chris@76
|
54 'label' => $txt['moderation_center'],
|
Chris@76
|
55 'function' => 'ModerationHome',
|
Chris@76
|
56 ),
|
Chris@76
|
57 'modlog' => array(
|
Chris@76
|
58 'label' => $txt['modlog_view'],
|
Chris@76
|
59 'enabled' => !empty($modSettings['modlog_enabled']) && $context['can_moderate_boards'],
|
Chris@76
|
60 'file' => 'Modlog.php',
|
Chris@76
|
61 'function' => 'ViewModlog',
|
Chris@76
|
62 ),
|
Chris@76
|
63 'notice' => array(
|
Chris@76
|
64 'file' => 'ModerationCenter.php',
|
Chris@76
|
65 'function' => 'ShowNotice',
|
Chris@76
|
66 'select' => 'index'
|
Chris@76
|
67 ),
|
Chris@76
|
68 'warnings' => array(
|
Chris@76
|
69 'label' => $txt['mc_warnings'],
|
Chris@76
|
70 'enabled' => in_array('w', $context['admin_features']) && $modSettings['warning_settings'][0] == 1 && $context['can_moderate_boards'],
|
Chris@76
|
71 'function' => 'ViewWarnings',
|
Chris@76
|
72 'subsections' => array(
|
Chris@76
|
73 'log' => array($txt['mc_warning_log']),
|
Chris@76
|
74 'templates' => array($txt['mc_warning_templates'], 'issue_warning'),
|
Chris@76
|
75 ),
|
Chris@76
|
76 ),
|
Chris@76
|
77 'userwatch' => array(
|
Chris@76
|
78 'label' => $txt['mc_watched_users_title'],
|
Chris@76
|
79 'enabled' => in_array('w', $context['admin_features']) && $modSettings['warning_settings'][0] == 1 && $context['can_moderate_boards'],
|
Chris@76
|
80 'function' => 'ViewWatchedUsers',
|
Chris@76
|
81 'subsections' => array(
|
Chris@76
|
82 'member' => array($txt['mc_watched_users_member']),
|
Chris@76
|
83 'post' => array($txt['mc_watched_users_post']),
|
Chris@76
|
84 ),
|
Chris@76
|
85 ),
|
Chris@76
|
86 ),
|
Chris@76
|
87 ),
|
Chris@76
|
88 'posts' => array(
|
Chris@76
|
89 'title' => $txt['mc_posts'],
|
Chris@76
|
90 'enabled' => $context['can_moderate_boards'] || $context['can_moderate_approvals'],
|
Chris@76
|
91 'areas' => array(
|
Chris@76
|
92 'postmod' => array(
|
Chris@76
|
93 'label' => $txt['mc_unapproved_posts'],
|
Chris@76
|
94 'enabled' => $context['can_moderate_approvals'],
|
Chris@76
|
95 'file' => 'PostModeration.php',
|
Chris@76
|
96 'function' => 'PostModerationMain',
|
Chris@76
|
97 'custom_url' => $scripturl . '?action=moderate;area=postmod',
|
Chris@76
|
98 'subsections' => array(
|
Chris@76
|
99 'posts' => array($txt['mc_unapproved_replies']),
|
Chris@76
|
100 'topics' => array($txt['mc_unapproved_topics']),
|
Chris@76
|
101 ),
|
Chris@76
|
102 ),
|
Chris@76
|
103 'attachmod' => array(
|
Chris@76
|
104 'label' => $txt['mc_unapproved_attachments'],
|
Chris@76
|
105 'enabled' => $context['can_moderate_approvals'],
|
Chris@76
|
106 'file' => 'PostModeration.php',
|
Chris@76
|
107 'function' => 'PostModerationMain',
|
Chris@76
|
108 'custom_url' => $scripturl . '?action=moderate;area=attachmod;sa=attachments',
|
Chris@76
|
109 ),
|
Chris@76
|
110 'reports' => array(
|
Chris@76
|
111 'label' => $txt['mc_reported_posts'],
|
Chris@76
|
112 'enabled' => $context['can_moderate_boards'],
|
Chris@76
|
113 'file' => 'ModerationCenter.php',
|
Chris@76
|
114 'function' => 'ReportedPosts',
|
Chris@76
|
115 'subsections' => array(
|
Chris@76
|
116 'open' => array($txt['mc_reportedp_active']),
|
Chris@76
|
117 'closed' => array($txt['mc_reportedp_closed']),
|
Chris@76
|
118 ),
|
Chris@76
|
119 ),
|
Chris@76
|
120 ),
|
Chris@76
|
121 ),
|
Chris@76
|
122 'groups' => array(
|
Chris@76
|
123 'title' => $txt['mc_groups'],
|
Chris@76
|
124 'enabled' => $context['can_moderate_groups'],
|
Chris@76
|
125 'areas' => array(
|
Chris@76
|
126 'groups' => array(
|
Chris@76
|
127 'label' => $txt['mc_group_requests'],
|
Chris@76
|
128 'file' => 'Groups.php',
|
Chris@76
|
129 'function' => 'Groups',
|
Chris@76
|
130 'custom_url' => $scripturl . '?action=moderate;area=groups;sa=requests',
|
Chris@76
|
131 ),
|
Chris@76
|
132 'viewgroups' => array(
|
Chris@76
|
133 'label' => $txt['mc_view_groups'],
|
Chris@76
|
134 'file' => 'Groups.php',
|
Chris@76
|
135 'function' => 'Groups',
|
Chris@76
|
136 ),
|
Chris@76
|
137 ),
|
Chris@76
|
138 ),
|
Chris@76
|
139 'prefs' => array(
|
Chris@76
|
140 'title' => $txt['mc_prefs'],
|
Chris@76
|
141 'areas' => array(
|
Chris@76
|
142 'settings' => array(
|
Chris@76
|
143 'label' => $txt['mc_settings'],
|
Chris@76
|
144 'function' => 'ModerationSettings',
|
Chris@76
|
145 ),
|
Chris@76
|
146 ),
|
Chris@76
|
147 ),
|
Chris@76
|
148 );
|
Chris@76
|
149
|
Chris@76
|
150 // I don't know where we're going - I don't know where we've been...
|
Chris@76
|
151 $menuOptions = array(
|
Chris@76
|
152 'action' => 'moderate',
|
Chris@76
|
153 'disable_url_session_check' => true,
|
Chris@76
|
154 );
|
Chris@76
|
155 $mod_include_data = createMenu($moderation_areas, $menuOptions);
|
Chris@76
|
156 unset($moderation_areas);
|
Chris@76
|
157
|
Chris@76
|
158 // We got something - didn't we? DIDN'T WE!
|
Chris@76
|
159 if ($mod_include_data == false)
|
Chris@76
|
160 fatal_lang_error('no_access', false);
|
Chris@76
|
161
|
Chris@76
|
162 // Retain the ID information in case required by a subaction.
|
Chris@76
|
163 $context['moderation_menu_id'] = $context['max_menu_id'];
|
Chris@76
|
164 $context['moderation_menu_name'] = 'menu_data_' . $context['moderation_menu_id'];
|
Chris@76
|
165
|
Chris@76
|
166 // What a pleasant shortcut - even tho we're not *really* on the admin screen who cares...
|
Chris@76
|
167 $context['admin_area'] = $mod_include_data['current_area'];
|
Chris@76
|
168
|
Chris@76
|
169 // Build the link tree.
|
Chris@76
|
170 $context['linktree'][] = array(
|
Chris@76
|
171 'url' => $scripturl . '?action=moderate',
|
Chris@76
|
172 'name' => $txt['moderation_center'],
|
Chris@76
|
173 );
|
Chris@76
|
174 if (isset($mod_include_data['current_area']) && $mod_include_data['current_area'] != 'index')
|
Chris@76
|
175 $context['linktree'][] = array(
|
Chris@76
|
176 'url' => $scripturl . '?action=moderate;area=' . $mod_include_data['current_area'],
|
Chris@76
|
177 'name' => $mod_include_data['label'],
|
Chris@76
|
178 );
|
Chris@76
|
179 if (!empty($mod_include_data['current_subsection']) && $mod_include_data['subsections'][$mod_include_data['current_subsection']][0] != $mod_include_data['label'])
|
Chris@76
|
180 $context['linktree'][] = array(
|
Chris@76
|
181 'url' => $scripturl . '?action=moderate;area=' . $mod_include_data['current_area'] . ';sa=' . $mod_include_data['current_subsection'],
|
Chris@76
|
182 'name' => $mod_include_data['subsections'][$mod_include_data['current_subsection']][0],
|
Chris@76
|
183 );
|
Chris@76
|
184
|
Chris@76
|
185 // Now - finally - the bit before the encore - the main performance of course!
|
Chris@76
|
186 if (!$dont_call)
|
Chris@76
|
187 {
|
Chris@76
|
188 if (isset($mod_include_data['file']))
|
Chris@76
|
189 require_once($sourcedir . '/' . $mod_include_data['file']);
|
Chris@76
|
190
|
Chris@76
|
191 $mod_include_data['function']();
|
Chris@76
|
192 }
|
Chris@76
|
193 }
|
Chris@76
|
194
|
Chris@76
|
195 // This function basically is the home page of the moderation center.
|
Chris@76
|
196 function ModerationHome()
|
Chris@76
|
197 {
|
Chris@76
|
198 global $txt, $context, $scripturl, $modSettings, $user_info, $user_settings;
|
Chris@76
|
199
|
Chris@76
|
200 loadTemplate('ModerationCenter');
|
Chris@76
|
201
|
Chris@76
|
202 $context['page_title'] = $txt['moderation_center'];
|
Chris@76
|
203 $context['sub_template'] = 'moderation_center';
|
Chris@76
|
204
|
Chris@76
|
205 // Load what blocks the user actually can see...
|
Chris@76
|
206 $valid_blocks = array(
|
Chris@76
|
207 'n' => 'LatestNews',
|
Chris@76
|
208 'p' => 'Notes',
|
Chris@76
|
209 );
|
Chris@76
|
210 if ($context['can_moderate_groups'])
|
Chris@76
|
211 $valid_blocks['g'] = 'GroupRequests';
|
Chris@76
|
212 if ($context['can_moderate_boards'])
|
Chris@76
|
213 {
|
Chris@76
|
214 $valid_blocks['r'] = 'ReportedPosts';
|
Chris@76
|
215 $valid_blocks['w'] = 'WatchedUsers';
|
Chris@76
|
216 }
|
Chris@76
|
217
|
Chris@76
|
218 if (empty($user_settings['mod_prefs']))
|
Chris@76
|
219 $user_blocks = 'n' . ($context['can_moderate_boards'] ? 'wr' : '') . ($context['can_moderate_groups'] ? 'g' : '');
|
Chris@76
|
220 else
|
Chris@76
|
221 list (, $user_blocks) = explode('|', $user_settings['mod_prefs']);
|
Chris@76
|
222
|
Chris@76
|
223 $user_blocks = str_split($user_blocks);
|
Chris@76
|
224
|
Chris@76
|
225 $context['mod_blocks'] = array();
|
Chris@76
|
226 foreach ($valid_blocks as $k => $block)
|
Chris@76
|
227 {
|
Chris@76
|
228 if (in_array($k, $user_blocks))
|
Chris@76
|
229 {
|
Chris@76
|
230 $block = 'ModBlock' . $block;
|
Chris@76
|
231 if (function_exists($block))
|
Chris@76
|
232 $context['mod_blocks'][] = $block();
|
Chris@76
|
233 }
|
Chris@76
|
234 }
|
Chris@76
|
235 }
|
Chris@76
|
236
|
Chris@76
|
237 // Just prepares the time stuff for the simple machines latest news.
|
Chris@76
|
238 function ModBlockLatestNews()
|
Chris@76
|
239 {
|
Chris@76
|
240 global $context, $user_info;
|
Chris@76
|
241
|
Chris@76
|
242 $context['time_format'] = urlencode($user_info['time_format']);
|
Chris@76
|
243
|
Chris@76
|
244 // Return the template to use.
|
Chris@76
|
245 return 'latest_news';
|
Chris@76
|
246 }
|
Chris@76
|
247
|
Chris@76
|
248 // Show a list of the most active watched users.
|
Chris@76
|
249 function ModBlockWatchedUsers()
|
Chris@76
|
250 {
|
Chris@76
|
251 global $context, $smcFunc, $scripturl, $modSettings;
|
Chris@76
|
252
|
Chris@76
|
253 if (($watched_users = cache_get_data('recent_user_watches', 240)) === null)
|
Chris@76
|
254 {
|
Chris@76
|
255 $modSettings['warning_watch'] = empty($modSettings['warning_watch']) ? 1 : $modSettings['warning_watch'];
|
Chris@76
|
256 $request = $smcFunc['db_query']('', '
|
Chris@76
|
257 SELECT id_member, real_name, last_login
|
Chris@76
|
258 FROM {db_prefix}members
|
Chris@76
|
259 WHERE warning >= {int:warning_watch}
|
Chris@76
|
260 ORDER BY last_login DESC
|
Chris@76
|
261 LIMIT 10',
|
Chris@76
|
262 array(
|
Chris@76
|
263 'warning_watch' => $modSettings['warning_watch'],
|
Chris@76
|
264 )
|
Chris@76
|
265 );
|
Chris@76
|
266 $watched_users = array();
|
Chris@76
|
267 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
268 $watched_users[] = $row;
|
Chris@76
|
269 $smcFunc['db_free_result']($request);
|
Chris@76
|
270
|
Chris@76
|
271 cache_put_data('recent_user_watches', $watched_users, 240);
|
Chris@76
|
272 }
|
Chris@76
|
273
|
Chris@76
|
274 $context['watched_users'] = array();
|
Chris@76
|
275 foreach ($watched_users as $user)
|
Chris@76
|
276 {
|
Chris@76
|
277 $context['watched_users'][] = array(
|
Chris@76
|
278 'id' => $user['id_member'],
|
Chris@76
|
279 'name' => $user['real_name'],
|
Chris@76
|
280 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $user['id_member'] . '">' . $user['real_name'] . '</a>',
|
Chris@76
|
281 'href' => $scripturl . '?action=profile;u=' . $user['id_member'],
|
Chris@76
|
282 'last_login' => !empty($user['last_login']) ? timeformat($user['last_login']) : '',
|
Chris@76
|
283 );
|
Chris@76
|
284 }
|
Chris@76
|
285
|
Chris@76
|
286 return 'watched_users';
|
Chris@76
|
287 }
|
Chris@76
|
288
|
Chris@76
|
289 // Show an area for the moderator to type into.
|
Chris@76
|
290 function ModBlockNotes()
|
Chris@76
|
291 {
|
Chris@76
|
292 global $context, $smcFunc, $scripturl, $txt, $user_info;
|
Chris@76
|
293
|
Chris@76
|
294 // Are we saving a note?
|
Chris@76
|
295 if (isset($_POST['makenote']) && isset($_POST['new_note']))
|
Chris@76
|
296 {
|
Chris@76
|
297 checkSession();
|
Chris@76
|
298
|
Chris@76
|
299 $_POST['new_note'] = $smcFunc['htmlspecialchars'](trim($_POST['new_note']));
|
Chris@76
|
300 // Make sure they actually entered something.
|
Chris@76
|
301 if (!empty($_POST['new_note']) && $_POST['new_note'] !== $txt['mc_click_add_note'])
|
Chris@76
|
302 {
|
Chris@76
|
303 // Insert it into the database then!
|
Chris@76
|
304 $smcFunc['db_insert']('',
|
Chris@76
|
305 '{db_prefix}log_comments',
|
Chris@76
|
306 array(
|
Chris@76
|
307 'id_member' => 'int', 'member_name' => 'string', 'comment_type' => 'string', 'recipient_name' => 'string',
|
Chris@76
|
308 'body' => 'string', 'log_time' => 'int',
|
Chris@76
|
309 ),
|
Chris@76
|
310 array(
|
Chris@76
|
311 $user_info['id'], $user_info['name'], 'modnote', '', $_POST['new_note'], time(),
|
Chris@76
|
312 ),
|
Chris@76
|
313 array('id_comment')
|
Chris@76
|
314 );
|
Chris@76
|
315
|
Chris@76
|
316 // Clear the cache.
|
Chris@76
|
317 cache_put_data('moderator_notes', null, 240);
|
Chris@76
|
318 cache_put_data('moderator_notes_total', null, 240);
|
Chris@76
|
319 }
|
Chris@76
|
320
|
Chris@76
|
321 // Redirect otherwise people can resubmit.
|
Chris@76
|
322 redirectexit('action=moderate');
|
Chris@76
|
323 }
|
Chris@76
|
324
|
Chris@76
|
325 // Bye... bye...
|
Chris@76
|
326 if (isset($_GET['notes']) && isset($_GET['delete']) && is_numeric($_GET['delete']))
|
Chris@76
|
327 {
|
Chris@76
|
328 checkSession('get');
|
Chris@76
|
329
|
Chris@76
|
330 // Lets delete it.
|
Chris@76
|
331 $smcFunc['db_query']('', '
|
Chris@76
|
332 DELETE FROM {db_prefix}log_comments
|
Chris@76
|
333 WHERE id_comment = {int:note}
|
Chris@76
|
334 AND comment_type = {string:type}',
|
Chris@76
|
335 array(
|
Chris@76
|
336 'note' => $_GET['delete'],
|
Chris@76
|
337 'type' => 'modnote',
|
Chris@76
|
338 )
|
Chris@76
|
339 );
|
Chris@76
|
340
|
Chris@76
|
341 // Clear the cache.
|
Chris@76
|
342 cache_put_data('moderator_notes', null, 240);
|
Chris@76
|
343 cache_put_data('moderator_notes_total', null, 240);
|
Chris@76
|
344
|
Chris@76
|
345 redirectexit('action=moderate');
|
Chris@76
|
346 }
|
Chris@76
|
347
|
Chris@76
|
348 // How many notes in total?
|
Chris@76
|
349 if (($moderator_notes_total = cache_get_data('moderator_notes_total', 240)) === null)
|
Chris@76
|
350 {
|
Chris@76
|
351 $request = $smcFunc['db_query']('', '
|
Chris@76
|
352 SELECT COUNT(*)
|
Chris@76
|
353 FROM {db_prefix}log_comments AS lc
|
Chris@76
|
354 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lc.id_member)
|
Chris@76
|
355 WHERE lc.comment_type = {string:modnote}',
|
Chris@76
|
356 array(
|
Chris@76
|
357 'modnote' => 'modnote',
|
Chris@76
|
358 )
|
Chris@76
|
359 );
|
Chris@76
|
360 list ($moderator_notes_total) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
361 $smcFunc['db_free_result']($request);
|
Chris@76
|
362
|
Chris@76
|
363 cache_put_data('moderator_notes_total', $moderator_notes_total, 240);
|
Chris@76
|
364 }
|
Chris@76
|
365
|
Chris@76
|
366 // Grab the current notes. We can only use the cache for the first page of notes.
|
Chris@76
|
367 $offset = isset($_GET['notes']) && isset($_GET['start']) ? $_GET['start'] : 0;
|
Chris@76
|
368 if ($offset != 0 || ($moderator_notes = cache_get_data('moderator_notes', 240)) === null)
|
Chris@76
|
369 {
|
Chris@76
|
370 $request = $smcFunc['db_query']('', '
|
Chris@76
|
371 SELECT IFNULL(mem.id_member, 0) AS id_member, IFNULL(mem.real_name, lc.member_name) AS member_name,
|
Chris@76
|
372 lc.log_time, lc.body, lc.id_comment AS id_note
|
Chris@76
|
373 FROM {db_prefix}log_comments AS lc
|
Chris@76
|
374 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lc.id_member)
|
Chris@76
|
375 WHERE lc.comment_type = {string:modnote}
|
Chris@76
|
376 ORDER BY id_comment DESC
|
Chris@76
|
377 LIMIT {int:offset}, 10',
|
Chris@76
|
378 array(
|
Chris@76
|
379 'modnote' => 'modnote',
|
Chris@76
|
380 'offset' => $offset,
|
Chris@76
|
381 )
|
Chris@76
|
382 );
|
Chris@76
|
383 $moderator_notes = array();
|
Chris@76
|
384 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
385 $moderator_notes[] = $row;
|
Chris@76
|
386 $smcFunc['db_free_result']($request);
|
Chris@76
|
387
|
Chris@76
|
388 if ($offset == 0)
|
Chris@76
|
389 cache_put_data('moderator_notes', $moderator_notes, 240);
|
Chris@76
|
390 }
|
Chris@76
|
391
|
Chris@76
|
392 // Lets construct a page index.
|
Chris@76
|
393 $context['page_index'] = constructPageIndex($scripturl . '?action=moderate;area=index;notes', $_GET['start'], $moderator_notes_total, 10);
|
Chris@76
|
394 $context['start'] = $_GET['start'];
|
Chris@76
|
395
|
Chris@76
|
396 $context['notes'] = array();
|
Chris@76
|
397 foreach ($moderator_notes as $note)
|
Chris@76
|
398 {
|
Chris@76
|
399 $context['notes'][] = array(
|
Chris@76
|
400 'author' => array(
|
Chris@76
|
401 'id' => $note['id_member'],
|
Chris@76
|
402 'link' => $note['id_member'] ? ('<a href="' . $scripturl . '?action=profile;u=' . $note['id_member'] . '" title="' . $txt['on'] . ' ' . strip_tags(timeformat($note['log_time'])) . '">' . $note['member_name'] . '</a>') : $note['member_name'],
|
Chris@76
|
403 ),
|
Chris@76
|
404 'time' => timeformat($note['log_time']),
|
Chris@76
|
405 'text' => parse_bbc($note['body']),
|
Chris@76
|
406 'delete_href' => $scripturl . '?action=moderate;area=index;notes;delete=' . $note['id_note'] . ';' . $context['session_var'] . '=' . $context['session_id'],
|
Chris@76
|
407 );
|
Chris@76
|
408 }
|
Chris@76
|
409
|
Chris@76
|
410 return 'notes';
|
Chris@76
|
411 }
|
Chris@76
|
412
|
Chris@76
|
413 // Show a list of the most recent reported posts.
|
Chris@76
|
414 function ModBlockReportedPosts()
|
Chris@76
|
415 {
|
Chris@76
|
416 global $context, $user_info, $scripturl, $smcFunc;
|
Chris@76
|
417
|
Chris@76
|
418 // Got the info already?
|
Chris@76
|
419 $cachekey = md5(serialize($user_info['mod_cache']['bq']));
|
Chris@76
|
420 $context['reported_posts'] = array();
|
Chris@76
|
421 if ($user_info['mod_cache']['bq'] == '0=1')
|
Chris@76
|
422 return 'reported_posts_block';
|
Chris@76
|
423
|
Chris@76
|
424 if (($reported_posts = cache_get_data('reported_posts_' . $cachekey, 90)) === null)
|
Chris@76
|
425 {
|
Chris@76
|
426 // By George, that means we in a position to get the reports, jolly good.
|
Chris@76
|
427 $request = $smcFunc['db_query']('', '
|
Chris@76
|
428 SELECT lr.id_report, lr.id_msg, lr.id_topic, lr.id_board, lr.id_member, lr.subject,
|
Chris@76
|
429 lr.num_reports, IFNULL(mem.real_name, lr.membername) AS author_name,
|
Chris@76
|
430 IFNULL(mem.id_member, 0) AS id_author
|
Chris@76
|
431 FROM {db_prefix}log_reported AS lr
|
Chris@76
|
432 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lr.id_member)
|
Chris@76
|
433 WHERE ' . ($user_info['mod_cache']['bq'] == '1=1' || $user_info['mod_cache']['bq'] == '0=1' ? $user_info['mod_cache']['bq'] : 'lr.' . $user_info['mod_cache']['bq']) . '
|
Chris@76
|
434 AND lr.closed = {int:not_closed}
|
Chris@76
|
435 AND lr.ignore_all = {int:not_ignored}
|
Chris@76
|
436 ORDER BY lr.time_updated DESC
|
Chris@76
|
437 LIMIT 10',
|
Chris@76
|
438 array(
|
Chris@76
|
439 'not_closed' => 0,
|
Chris@76
|
440 'not_ignored' => 0,
|
Chris@76
|
441 )
|
Chris@76
|
442 );
|
Chris@76
|
443 $reported_posts = array();
|
Chris@76
|
444 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
445 $reported_posts[] = $row;
|
Chris@76
|
446 $smcFunc['db_free_result']($request);
|
Chris@76
|
447
|
Chris@76
|
448 // Cache it.
|
Chris@76
|
449 cache_put_data('reported_posts_' . $cachekey, $reported_posts, 90);
|
Chris@76
|
450 }
|
Chris@76
|
451
|
Chris@76
|
452 $context['reported_posts'] = array();
|
Chris@76
|
453 foreach ($reported_posts as $i => $row)
|
Chris@76
|
454 {
|
Chris@76
|
455 $context['reported_posts'][] = array(
|
Chris@76
|
456 'id' => $row['id_report'],
|
Chris@76
|
457 'alternate' => $i % 2,
|
Chris@76
|
458 'topic_href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#msg' . $row['id_msg'],
|
Chris@76
|
459 'report_href' => $scripturl . '?action=moderate;area=reports;report=' . $row['id_report'],
|
Chris@76
|
460 'author' => array(
|
Chris@76
|
461 'id' => $row['id_author'],
|
Chris@76
|
462 'name' => $row['author_name'],
|
Chris@76
|
463 'link' => $row['id_author'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_author'] . '">' . $row['author_name'] . '</a>' : $row['author_name'],
|
Chris@76
|
464 'href' => $scripturl . '?action=profile;u=' . $row['id_author'],
|
Chris@76
|
465 ),
|
Chris@76
|
466 'comments' => array(),
|
Chris@76
|
467 'subject' => $row['subject'],
|
Chris@76
|
468 'num_reports' => $row['num_reports'],
|
Chris@76
|
469 );
|
Chris@76
|
470 }
|
Chris@76
|
471
|
Chris@76
|
472 return 'reported_posts_block';
|
Chris@76
|
473 }
|
Chris@76
|
474
|
Chris@76
|
475 // Show a list of all the group requests they can see.
|
Chris@76
|
476 function ModBlockGroupRequests()
|
Chris@76
|
477 {
|
Chris@76
|
478 global $context, $user_info, $scripturl, $smcFunc;
|
Chris@76
|
479
|
Chris@76
|
480 $context['group_requests'] = array();
|
Chris@76
|
481 // Make sure they can even moderate someone!
|
Chris@76
|
482 if ($user_info['mod_cache']['gq'] == '0=1')
|
Chris@76
|
483 return 'group_requests_block';
|
Chris@76
|
484
|
Chris@76
|
485 // What requests are outstanding?
|
Chris@76
|
486 $request = $smcFunc['db_query']('', '
|
Chris@76
|
487 SELECT lgr.id_request, lgr.id_member, lgr.id_group, lgr.time_applied, mem.member_name, mg.group_name, mem.real_name
|
Chris@76
|
488 FROM {db_prefix}log_group_requests AS lgr
|
Chris@76
|
489 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = lgr.id_member)
|
Chris@76
|
490 INNER JOIN {db_prefix}membergroups AS mg ON (mg.id_group = lgr.id_group)
|
Chris@76
|
491 WHERE ' . ($user_info['mod_cache']['gq'] == '1=1' || $user_info['mod_cache']['gq'] == '0=1' ? $user_info['mod_cache']['gq'] : 'lgr.' . $user_info['mod_cache']['gq']) . '
|
Chris@76
|
492 ORDER BY lgr.id_request DESC
|
Chris@76
|
493 LIMIT 10',
|
Chris@76
|
494 array(
|
Chris@76
|
495 )
|
Chris@76
|
496 );
|
Chris@76
|
497 for ($i = 0; $row = $smcFunc['db_fetch_assoc']($request); $i ++)
|
Chris@76
|
498 {
|
Chris@76
|
499 $context['group_requests'][] = array(
|
Chris@76
|
500 'id' => $row['id_request'],
|
Chris@76
|
501 'alternate' => $i % 2,
|
Chris@76
|
502 'request_href' => $scripturl . '?action=groups;sa=requests;gid=' . $row['id_group'],
|
Chris@76
|
503 'member' => array(
|
Chris@76
|
504 'id' => $row['id_member'],
|
Chris@76
|
505 'name' => $row['real_name'],
|
Chris@76
|
506 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>',
|
Chris@76
|
507 'href' => $scripturl . '?action=profile;u=' . $row['id_member'],
|
Chris@76
|
508 ),
|
Chris@76
|
509 'group' => array(
|
Chris@76
|
510 'id' => $row['id_group'],
|
Chris@76
|
511 'name' => $row['group_name'],
|
Chris@76
|
512 ),
|
Chris@76
|
513 'time_submitted' => timeformat($row['time_applied']),
|
Chris@76
|
514 );
|
Chris@76
|
515 }
|
Chris@76
|
516 $smcFunc['db_free_result']($request);
|
Chris@76
|
517
|
Chris@76
|
518 return 'group_requests_block';
|
Chris@76
|
519 }
|
Chris@76
|
520
|
Chris@76
|
521 //!!! This needs to be given its own file.
|
Chris@76
|
522 // Browse all the reported posts...
|
Chris@76
|
523 function ReportedPosts()
|
Chris@76
|
524 {
|
Chris@76
|
525 global $txt, $context, $scripturl, $modSettings, $user_info, $smcFunc;
|
Chris@76
|
526
|
Chris@76
|
527 loadTemplate('ModerationCenter');
|
Chris@76
|
528
|
Chris@76
|
529 // Put the open and closed options into tabs, because we can...
|
Chris@76
|
530 $context[$context['moderation_menu_name']]['tab_data'] = array(
|
Chris@76
|
531 'title' => $txt['mc_reported_posts'],
|
Chris@76
|
532 'help' => '',
|
Chris@76
|
533 'description' => $txt['mc_reported_posts_desc'],
|
Chris@76
|
534 );
|
Chris@76
|
535
|
Chris@76
|
536 // This comes under the umbrella of moderating posts.
|
Chris@76
|
537 if ($user_info['mod_cache']['bq'] == '0=1')
|
Chris@76
|
538 isAllowedTo('moderate_forum');
|
Chris@76
|
539
|
Chris@76
|
540 // Are they wanting to view a particular report?
|
Chris@76
|
541 if (!empty($_REQUEST['report']))
|
Chris@76
|
542 return ModReport();
|
Chris@76
|
543
|
Chris@76
|
544 // Set up the comforting bits...
|
Chris@76
|
545 $context['page_title'] = $txt['mc_reported_posts'];
|
Chris@76
|
546 $context['sub_template'] = 'reported_posts';
|
Chris@76
|
547
|
Chris@76
|
548 // Are we viewing open or closed reports?
|
Chris@76
|
549 $context['view_closed'] = isset($_GET['sa']) && $_GET['sa'] == 'closed' ? 1 : 0;
|
Chris@76
|
550
|
Chris@76
|
551 // Are we doing any work?
|
Chris@76
|
552 if ((isset($_GET['ignore']) || isset($_GET['close'])) && isset($_GET['rid']))
|
Chris@76
|
553 {
|
Chris@76
|
554 checkSession('get');
|
Chris@76
|
555 $_GET['rid'] = (int) $_GET['rid'];
|
Chris@76
|
556
|
Chris@76
|
557 // Update the report...
|
Chris@76
|
558 $smcFunc['db_query']('', '
|
Chris@76
|
559 UPDATE {db_prefix}log_reported
|
Chris@76
|
560 SET ' . (isset($_GET['ignore']) ? 'ignore_all = {int:ignore_all}' : 'closed = {int:closed}') . '
|
Chris@76
|
561 WHERE id_report = {int:id_report}
|
Chris@76
|
562 AND ' . $user_info['mod_cache']['bq'],
|
Chris@76
|
563 array(
|
Chris@76
|
564 'ignore_all' => isset($_GET['ignore']) ? (int) $_GET['ignore'] : 0,
|
Chris@76
|
565 'closed' => isset($_GET['close']) ? (int) $_GET['close'] : 0,
|
Chris@76
|
566 'id_report' => $_GET['rid'],
|
Chris@76
|
567 )
|
Chris@76
|
568 );
|
Chris@76
|
569
|
Chris@76
|
570 // Time to update.
|
Chris@76
|
571 updateSettings(array('last_mod_report_action' => time()));
|
Chris@76
|
572 recountOpenReports();
|
Chris@76
|
573 }
|
Chris@76
|
574 elseif (isset($_POST['close']) && isset($_POST['close_selected']))
|
Chris@76
|
575 {
|
Chris@76
|
576 checkSession('post');
|
Chris@76
|
577
|
Chris@76
|
578 // All the ones to update...
|
Chris@76
|
579 $toClose = array();
|
Chris@76
|
580 foreach ($_POST['close'] as $rid)
|
Chris@76
|
581 $toClose[] = (int) $rid;
|
Chris@76
|
582
|
Chris@76
|
583 if (!empty($toClose))
|
Chris@76
|
584 {
|
Chris@76
|
585 $smcFunc['db_query']('', '
|
Chris@76
|
586 UPDATE {db_prefix}log_reported
|
Chris@76
|
587 SET closed = {int:is_closed}
|
Chris@76
|
588 WHERE id_report IN ({array_int:report_list})
|
Chris@76
|
589 AND ' . $user_info['mod_cache']['bq'],
|
Chris@76
|
590 array(
|
Chris@76
|
591 'report_list' => $toClose,
|
Chris@76
|
592 'is_closed' => 1,
|
Chris@76
|
593 )
|
Chris@76
|
594 );
|
Chris@76
|
595
|
Chris@76
|
596 // Time to update.
|
Chris@76
|
597 updateSettings(array('last_mod_report_action' => time()));
|
Chris@76
|
598 recountOpenReports();
|
Chris@76
|
599 }
|
Chris@76
|
600 }
|
Chris@76
|
601
|
Chris@76
|
602 // How many entries are we viewing?
|
Chris@76
|
603 $request = $smcFunc['db_query']('', '
|
Chris@76
|
604 SELECT COUNT(*)
|
Chris@76
|
605 FROM {db_prefix}log_reported AS lr
|
Chris@76
|
606 WHERE lr.closed = {int:view_closed}
|
Chris@76
|
607 AND ' . ($user_info['mod_cache']['bq'] == '1=1' || $user_info['mod_cache']['bq'] == '0=1' ? $user_info['mod_cache']['bq'] : 'lr.' . $user_info['mod_cache']['bq']),
|
Chris@76
|
608 array(
|
Chris@76
|
609 'view_closed' => $context['view_closed'],
|
Chris@76
|
610 )
|
Chris@76
|
611 );
|
Chris@76
|
612 list ($context['total_reports']) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
613 $smcFunc['db_free_result']($request);
|
Chris@76
|
614
|
Chris@76
|
615 // So, that means we can page index, yes?
|
Chris@76
|
616 $context['page_index'] = constructPageIndex($scripturl . '?action=moderate;area=reports' . ($context['view_closed'] ? ';sa=closed' : ''), $_GET['start'], $context['total_reports'], 10);
|
Chris@76
|
617 $context['start'] = $_GET['start'];
|
Chris@76
|
618
|
Chris@76
|
619 // By George, that means we in a position to get the reports, golly good.
|
Chris@76
|
620 $request = $smcFunc['db_query']('', '
|
Chris@76
|
621 SELECT lr.id_report, lr.id_msg, lr.id_topic, lr.id_board, lr.id_member, lr.subject, lr.body,
|
Chris@76
|
622 lr.time_started, lr.time_updated, lr.num_reports, lr.closed, lr.ignore_all,
|
Chris@76
|
623 IFNULL(mem.real_name, lr.membername) AS author_name, IFNULL(mem.id_member, 0) AS id_author
|
Chris@76
|
624 FROM {db_prefix}log_reported AS lr
|
Chris@76
|
625 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lr.id_member)
|
Chris@76
|
626 WHERE lr.closed = {int:view_closed}
|
Chris@76
|
627 AND ' . ($user_info['mod_cache']['bq'] == '1=1' || $user_info['mod_cache']['bq'] == '0=1' ? $user_info['mod_cache']['bq'] : 'lr.' . $user_info['mod_cache']['bq']) . '
|
Chris@76
|
628 ORDER BY lr.time_updated DESC
|
Chris@76
|
629 LIMIT ' . $context['start'] . ', 10',
|
Chris@76
|
630 array(
|
Chris@76
|
631 'view_closed' => $context['view_closed'],
|
Chris@76
|
632 )
|
Chris@76
|
633 );
|
Chris@76
|
634 $context['reports'] = array();
|
Chris@76
|
635 $report_ids = array();
|
Chris@76
|
636 for ($i = 0; $row = $smcFunc['db_fetch_assoc']($request); $i++)
|
Chris@76
|
637 {
|
Chris@76
|
638 $report_ids[] = $row['id_report'];
|
Chris@76
|
639 $context['reports'][$row['id_report']] = array(
|
Chris@76
|
640 'id' => $row['id_report'],
|
Chris@76
|
641 'alternate' => $i % 2,
|
Chris@76
|
642 'topic_href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#msg' . $row['id_msg'],
|
Chris@76
|
643 'report_href' => $scripturl . '?action=moderate;area=reports;report=' . $row['id_report'],
|
Chris@76
|
644 'author' => array(
|
Chris@76
|
645 'id' => $row['id_author'],
|
Chris@76
|
646 'name' => $row['author_name'],
|
Chris@76
|
647 'link' => $row['id_author'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_author'] . '">' . $row['author_name'] . '</a>' : $row['author_name'],
|
Chris@76
|
648 'href' => $scripturl . '?action=profile;u=' . $row['id_author'],
|
Chris@76
|
649 ),
|
Chris@76
|
650 'comments' => array(),
|
Chris@76
|
651 'time_started' => timeformat($row['time_started']),
|
Chris@76
|
652 'last_updated' => timeformat($row['time_updated']),
|
Chris@76
|
653 'subject' => $row['subject'],
|
Chris@76
|
654 'body' => parse_bbc($row['body']),
|
Chris@76
|
655 'num_reports' => $row['num_reports'],
|
Chris@76
|
656 'closed' => $row['closed'],
|
Chris@76
|
657 'ignore' => $row['ignore_all']
|
Chris@76
|
658 );
|
Chris@76
|
659 }
|
Chris@76
|
660 $smcFunc['db_free_result']($request);
|
Chris@76
|
661
|
Chris@76
|
662 // Now get all the people who reported it.
|
Chris@76
|
663 if (!empty($report_ids))
|
Chris@76
|
664 {
|
Chris@76
|
665 $request = $smcFunc['db_query']('', '
|
Chris@76
|
666 SELECT lrc.id_comment, lrc.id_report, lrc.time_sent, lrc.comment,
|
Chris@76
|
667 IFNULL(mem.id_member, 0) AS id_member, IFNULL(mem.real_name, lrc.membername) AS reporter
|
Chris@76
|
668 FROM {db_prefix}log_reported_comments AS lrc
|
Chris@76
|
669 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lrc.id_member)
|
Chris@76
|
670 WHERE lrc.id_report IN ({array_int:report_list})',
|
Chris@76
|
671 array(
|
Chris@76
|
672 'report_list' => $report_ids,
|
Chris@76
|
673 )
|
Chris@76
|
674 );
|
Chris@76
|
675 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
676 {
|
Chris@76
|
677 $context['reports'][$row['id_report']]['comments'][] = array(
|
Chris@76
|
678 'id' => $row['id_comment'],
|
Chris@76
|
679 'message' => $row['comment'],
|
Chris@76
|
680 'time' => timeformat($row['time_sent']),
|
Chris@76
|
681 'member' => array(
|
Chris@76
|
682 'id' => $row['id_member'],
|
Chris@76
|
683 'name' => empty($row['reporter']) ? $txt['guest'] : $row['reporter'],
|
Chris@76
|
684 'link' => $row['id_member'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['reporter'] . '</a>' : (empty($row['reporter']) ? $txt['guest'] : $row['reporter']),
|
Chris@76
|
685 'href' => $row['id_member'] ? $scripturl . '?action=profile;u=' . $row['id_member'] : '',
|
Chris@76
|
686 ),
|
Chris@76
|
687 );
|
Chris@76
|
688 }
|
Chris@76
|
689 $smcFunc['db_free_result']($request);
|
Chris@76
|
690 }
|
Chris@76
|
691 }
|
Chris@76
|
692
|
Chris@76
|
693 // Act as an entrace for all group related activity.
|
Chris@76
|
694 //!!! As for most things in this file, this needs to be moved somewhere appropriate.
|
Chris@76
|
695 function ModerateGroups()
|
Chris@76
|
696 {
|
Chris@76
|
697 global $txt, $context, $scripturl, $modSettings, $user_info;
|
Chris@76
|
698
|
Chris@76
|
699 // You need to be allowed to moderate groups...
|
Chris@76
|
700 if ($user_info['mod_cache']['gq'] == '0=1')
|
Chris@76
|
701 isAllowedTo('manage_membergroups');
|
Chris@76
|
702
|
Chris@76
|
703 // Load the group templates.
|
Chris@76
|
704 loadTemplate('ModerationCenter');
|
Chris@76
|
705
|
Chris@76
|
706 // Setup the subactions...
|
Chris@76
|
707 $subactions = array(
|
Chris@76
|
708 'requests' => 'GroupRequests',
|
Chris@76
|
709 'view' => 'ViewGroups',
|
Chris@76
|
710 );
|
Chris@76
|
711
|
Chris@76
|
712 if (!isset($_GET['sa']) || !isset($subactions[$_GET['sa']]))
|
Chris@76
|
713 $_GET['sa'] = 'view';
|
Chris@76
|
714 $context['sub_action'] = $_GET['sa'];
|
Chris@76
|
715
|
Chris@76
|
716 // Call the relevant function.
|
Chris@76
|
717 $subactions[$context['sub_action']]();
|
Chris@76
|
718 }
|
Chris@76
|
719
|
Chris@76
|
720 // How many open reports do we have?
|
Chris@76
|
721 function recountOpenReports()
|
Chris@76
|
722 {
|
Chris@76
|
723 global $user_info, $context, $smcFunc;
|
Chris@76
|
724
|
Chris@76
|
725 $request = $smcFunc['db_query']('', '
|
Chris@76
|
726 SELECT COUNT(*)
|
Chris@76
|
727 FROM {db_prefix}log_reported
|
Chris@76
|
728 WHERE ' . $user_info['mod_cache']['bq'] . '
|
Chris@76
|
729 AND closed = {int:not_closed}
|
Chris@76
|
730 AND ignore_all = {int:not_ignored}',
|
Chris@76
|
731 array(
|
Chris@76
|
732 'not_closed' => 0,
|
Chris@76
|
733 'not_ignored' => 0,
|
Chris@76
|
734 )
|
Chris@76
|
735 );
|
Chris@76
|
736 list ($open_reports) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
737 $smcFunc['db_free_result']($request);
|
Chris@76
|
738
|
Chris@76
|
739 $_SESSION['rc'] = array(
|
Chris@76
|
740 'id' => $user_info['id'],
|
Chris@76
|
741 'time' => time(),
|
Chris@76
|
742 'reports' => $open_reports,
|
Chris@76
|
743 );
|
Chris@76
|
744
|
Chris@76
|
745 $context['open_mod_reports'] = $open_reports;
|
Chris@76
|
746 }
|
Chris@76
|
747
|
Chris@76
|
748 function ModReport()
|
Chris@76
|
749 {
|
Chris@76
|
750 global $user_info, $context, $sourcedir, $scripturl, $txt, $smcFunc;
|
Chris@76
|
751
|
Chris@76
|
752 // Have to at least give us something
|
Chris@76
|
753 if (empty($_REQUEST['report']))
|
Chris@76
|
754 fatal_lang_error('mc_no_modreport_specified');
|
Chris@76
|
755
|
Chris@76
|
756 // Integers only please
|
Chris@76
|
757 $_REQUEST['report'] = (int) $_REQUEST['report'];
|
Chris@76
|
758
|
Chris@76
|
759 // Get the report details, need this so we can limit access to a particular board
|
Chris@76
|
760 $request = $smcFunc['db_query']('', '
|
Chris@76
|
761 SELECT lr.id_report, lr.id_msg, lr.id_topic, lr.id_board, lr.id_member, lr.subject, lr.body,
|
Chris@76
|
762 lr.time_started, lr.time_updated, lr.num_reports, lr.closed, lr.ignore_all,
|
Chris@76
|
763 IFNULL(mem.real_name, lr.membername) AS author_name, IFNULL(mem.id_member, 0) AS id_author
|
Chris@76
|
764 FROM {db_prefix}log_reported AS lr
|
Chris@76
|
765 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lr.id_member)
|
Chris@76
|
766 WHERE lr.id_report = {int:id_report}
|
Chris@76
|
767 AND ' . ($user_info['mod_cache']['bq'] == '1=1' || $user_info['mod_cache']['bq'] == '0=1' ? $user_info['mod_cache']['bq'] : 'lr.' . $user_info['mod_cache']['bq']) . '
|
Chris@76
|
768 LIMIT 1',
|
Chris@76
|
769 array(
|
Chris@76
|
770 'id_report' => $_REQUEST['report'],
|
Chris@76
|
771 )
|
Chris@76
|
772 );
|
Chris@76
|
773
|
Chris@76
|
774 // So did we find anything?
|
Chris@76
|
775 if (!$smcFunc['db_num_rows']($request))
|
Chris@76
|
776 fatal_lang_error('mc_no_modreport_found');
|
Chris@76
|
777
|
Chris@76
|
778 // Woohoo we found a report and they can see it! Bad news is we have more work to do
|
Chris@76
|
779 $row = $smcFunc['db_fetch_assoc']($request);
|
Chris@76
|
780 $smcFunc['db_free_result']($request);
|
Chris@76
|
781
|
Chris@76
|
782 // If they are adding a comment then... add a comment.
|
Chris@76
|
783 if (isset($_POST['add_comment']) && !empty($_POST['mod_comment']))
|
Chris@76
|
784 {
|
Chris@76
|
785 checkSession();
|
Chris@76
|
786
|
Chris@76
|
787 $newComment = trim($smcFunc['htmlspecialchars']($_POST['mod_comment']));
|
Chris@76
|
788
|
Chris@76
|
789 // In it goes.
|
Chris@76
|
790 if (!empty($newComment))
|
Chris@76
|
791 {
|
Chris@76
|
792 $smcFunc['db_insert']('',
|
Chris@76
|
793 '{db_prefix}log_comments',
|
Chris@76
|
794 array(
|
Chris@76
|
795 'id_member' => 'int', 'member_name' => 'string', 'comment_type' => 'string', 'recipient_name' => 'string',
|
Chris@76
|
796 'id_notice' => 'int', 'body' => 'string', 'log_time' => 'int',
|
Chris@76
|
797 ),
|
Chris@76
|
798 array(
|
Chris@76
|
799 $user_info['id'], $user_info['name'], 'reportc', '',
|
Chris@76
|
800 $_REQUEST['report'], $newComment, time(),
|
Chris@76
|
801 ),
|
Chris@76
|
802 array('id_comment')
|
Chris@76
|
803 );
|
Chris@76
|
804
|
Chris@76
|
805 // Redirect to prevent double submittion.
|
Chris@76
|
806 redirectexit($scripturl . '?action=moderate;area=reports;report=' . $_REQUEST['report']);
|
Chris@76
|
807 }
|
Chris@76
|
808 }
|
Chris@76
|
809
|
Chris@76
|
810 $context['report'] = array(
|
Chris@76
|
811 'id' => $row['id_report'],
|
Chris@76
|
812 'topic_id' => $row['id_topic'],
|
Chris@76
|
813 'board_id' => $row['id_board'],
|
Chris@76
|
814 'message_id' => $row['id_msg'],
|
Chris@76
|
815 'message_href' => $scripturl . '?msg=' . $row['id_msg'],
|
Chris@76
|
816 'message_link' => '<a href="' . $scripturl . '?msg=' . $row['id_msg'] . '">' . $row['subject'] . '</a>',
|
Chris@76
|
817 'report_href' => $scripturl . '?action=moderate;area=reports;report=' . $row['id_report'],
|
Chris@76
|
818 'author' => array(
|
Chris@76
|
819 'id' => $row['id_author'],
|
Chris@76
|
820 'name' => $row['author_name'],
|
Chris@76
|
821 'link' => $row['id_author'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_author'] . '">' . $row['author_name'] . '</a>' : $row['author_name'],
|
Chris@76
|
822 'href' => $scripturl . '?action=profile;u=' . $row['id_author'],
|
Chris@76
|
823 ),
|
Chris@76
|
824 'comments' => array(),
|
Chris@76
|
825 'mod_comments' => array(),
|
Chris@76
|
826 'time_started' => timeformat($row['time_started']),
|
Chris@76
|
827 'last_updated' => timeformat($row['time_updated']),
|
Chris@76
|
828 'subject' => $row['subject'],
|
Chris@76
|
829 'body' => parse_bbc($row['body']),
|
Chris@76
|
830 'num_reports' => $row['num_reports'],
|
Chris@76
|
831 'closed' => $row['closed'],
|
Chris@76
|
832 'ignore' => $row['ignore_all']
|
Chris@76
|
833 );
|
Chris@76
|
834
|
Chris@76
|
835 // So what bad things do the reporters have to say about it?
|
Chris@76
|
836 $request = $smcFunc['db_query']('', '
|
Chris@76
|
837 SELECT lrc.id_comment, lrc.id_report, lrc.time_sent, lrc.comment, lrc.member_ip,
|
Chris@76
|
838 IFNULL(mem.id_member, 0) AS id_member, IFNULL(mem.real_name, lrc.membername) AS reporter
|
Chris@76
|
839 FROM {db_prefix}log_reported_comments AS lrc
|
Chris@76
|
840 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lrc.id_member)
|
Chris@76
|
841 WHERE lrc.id_report = {int:id_report}',
|
Chris@76
|
842 array(
|
Chris@76
|
843 'id_report' => $context['report']['id'],
|
Chris@76
|
844 )
|
Chris@76
|
845 );
|
Chris@76
|
846 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
847 {
|
Chris@76
|
848 $context['report']['comments'][] = array(
|
Chris@76
|
849 'id' => $row['id_comment'],
|
Chris@76
|
850 'message' => $row['comment'],
|
Chris@76
|
851 'time' => timeformat($row['time_sent']),
|
Chris@76
|
852 'member' => array(
|
Chris@76
|
853 'id' => $row['id_member'],
|
Chris@76
|
854 'name' => empty($row['reporter']) ? $txt['guest'] : $row['reporter'],
|
Chris@76
|
855 'link' => $row['id_member'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['reporter'] . '</a>' : (empty($row['reporter']) ? $txt['guest'] : $row['reporter']),
|
Chris@76
|
856 'href' => $row['id_member'] ? $scripturl . '?action=profile;u=' . $row['id_member'] : '',
|
Chris@76
|
857 'ip' => !empty($row['member_ip']) && allowedTo('moderate_forum') ? '<a href="' . $scripturl . '?action=trackip;searchip=' . $row['member_ip'] . '">' . $row['member_ip'] . '</a>' : '',
|
Chris@76
|
858 ),
|
Chris@76
|
859 );
|
Chris@76
|
860 }
|
Chris@76
|
861 $smcFunc['db_free_result']($request);
|
Chris@76
|
862
|
Chris@76
|
863 // Hang about old chap, any comments from moderators on this one?
|
Chris@76
|
864 $request = $smcFunc['db_query']('', '
|
Chris@76
|
865 SELECT lc.id_comment, lc.id_notice, lc.log_time, lc.body,
|
Chris@76
|
866 IFNULL(mem.id_member, 0) AS id_member, IFNULL(mem.real_name, lc.member_name) AS moderator
|
Chris@76
|
867 FROM {db_prefix}log_comments AS lc
|
Chris@76
|
868 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lc.id_member)
|
Chris@76
|
869 WHERE lc.id_notice = {int:id_report}
|
Chris@76
|
870 AND lc.comment_type = {string:reportc}',
|
Chris@76
|
871 array(
|
Chris@76
|
872 'id_report' => $context['report']['id'],
|
Chris@76
|
873 'reportc' => 'reportc',
|
Chris@76
|
874 )
|
Chris@76
|
875 );
|
Chris@76
|
876 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
877 {
|
Chris@76
|
878 $context['report']['mod_comments'][] = array(
|
Chris@76
|
879 'id' => $row['id_comment'],
|
Chris@76
|
880 'message' => parse_bbc($row['body']),
|
Chris@76
|
881 'time' => timeformat($row['log_time']),
|
Chris@76
|
882 'member' => array(
|
Chris@76
|
883 'id' => $row['id_member'],
|
Chris@76
|
884 'name' => $row['moderator'],
|
Chris@76
|
885 'link' => $row['id_member'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['moderator'] . '</a>' : $row['moderator'],
|
Chris@76
|
886 'href' => $scripturl . '?action=profile;u=' . $row['id_member'],
|
Chris@76
|
887 ),
|
Chris@76
|
888 );
|
Chris@76
|
889 }
|
Chris@76
|
890 $smcFunc['db_free_result']($request);
|
Chris@76
|
891
|
Chris@76
|
892 // What have the other moderators done to this message?
|
Chris@76
|
893 require_once($sourcedir . '/Modlog.php');
|
Chris@76
|
894 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
895 loadLanguage('Modlog');
|
Chris@76
|
896
|
Chris@76
|
897 // This is all the information from the moderation log.
|
Chris@76
|
898 $listOptions = array(
|
Chris@76
|
899 'id' => 'moderation_actions_list',
|
Chris@76
|
900 'title' => $txt['mc_modreport_modactions'],
|
Chris@76
|
901 'items_per_page' => 15,
|
Chris@76
|
902 'no_items_label' => $txt['modlog_no_entries_found'],
|
Chris@76
|
903 'base_href' => $scripturl . '?action=moderate;area=reports;report=' . $context['report']['id'],
|
Chris@76
|
904 'default_sort_col' => 'time',
|
Chris@76
|
905 'get_items' => array(
|
Chris@76
|
906 'function' => 'list_getModLogEntries',
|
Chris@76
|
907 'params' => array(
|
Chris@76
|
908 'lm.id_topic = {int:id_topic}',
|
Chris@76
|
909 array('id_topic' => $context['report']['topic_id']),
|
Chris@76
|
910 1,
|
Chris@76
|
911 ),
|
Chris@76
|
912 ),
|
Chris@76
|
913 'get_count' => array(
|
Chris@76
|
914 'function' => 'list_getModLogEntryCount',
|
Chris@76
|
915 'params' => array(
|
Chris@76
|
916 'lm.id_topic = {int:id_topic}',
|
Chris@76
|
917 array('id_topic' => $context['report']['topic_id']),
|
Chris@76
|
918 1,
|
Chris@76
|
919 ),
|
Chris@76
|
920 ),
|
Chris@76
|
921 // This assumes we are viewing by user.
|
Chris@76
|
922 'columns' => array(
|
Chris@76
|
923 'action' => array(
|
Chris@76
|
924 'header' => array(
|
Chris@76
|
925 'value' => $txt['modlog_action'],
|
Chris@76
|
926 ),
|
Chris@76
|
927 'data' => array(
|
Chris@76
|
928 'db' => 'action_text',
|
Chris@76
|
929 'class' => 'smalltext',
|
Chris@76
|
930 ),
|
Chris@76
|
931 'sort' => array(
|
Chris@76
|
932 'default' => 'lm.action',
|
Chris@76
|
933 'reverse' => 'lm.action DESC',
|
Chris@76
|
934 ),
|
Chris@76
|
935 ),
|
Chris@76
|
936 'time' => array(
|
Chris@76
|
937 'header' => array(
|
Chris@76
|
938 'value' => $txt['modlog_date'],
|
Chris@76
|
939 ),
|
Chris@76
|
940 'data' => array(
|
Chris@76
|
941 'db' => 'time',
|
Chris@76
|
942 'class' => 'smalltext',
|
Chris@76
|
943 ),
|
Chris@76
|
944 'sort' => array(
|
Chris@76
|
945 'default' => 'lm.log_time',
|
Chris@76
|
946 'reverse' => 'lm.log_time DESC',
|
Chris@76
|
947 ),
|
Chris@76
|
948 ),
|
Chris@76
|
949 'moderator' => array(
|
Chris@76
|
950 'header' => array(
|
Chris@76
|
951 'value' => $txt['modlog_member'],
|
Chris@76
|
952 ),
|
Chris@76
|
953 'data' => array(
|
Chris@76
|
954 'db' => 'moderator_link',
|
Chris@76
|
955 'class' => 'smalltext',
|
Chris@76
|
956 ),
|
Chris@76
|
957 'sort' => array(
|
Chris@76
|
958 'default' => 'mem.real_name',
|
Chris@76
|
959 'reverse' => 'mem.real_name DESC',
|
Chris@76
|
960 ),
|
Chris@76
|
961 ),
|
Chris@76
|
962 'position' => array(
|
Chris@76
|
963 'header' => array(
|
Chris@76
|
964 'value' => $txt['modlog_position'],
|
Chris@76
|
965 ),
|
Chris@76
|
966 'data' => array(
|
Chris@76
|
967 'db' => 'position',
|
Chris@76
|
968 'class' => 'smalltext',
|
Chris@76
|
969 ),
|
Chris@76
|
970 'sort' => array(
|
Chris@76
|
971 'default' => 'mg.group_name',
|
Chris@76
|
972 'reverse' => 'mg.group_name DESC',
|
Chris@76
|
973 ),
|
Chris@76
|
974 ),
|
Chris@76
|
975 'ip' => array(
|
Chris@76
|
976 'header' => array(
|
Chris@76
|
977 'value' => $txt['modlog_ip'],
|
Chris@76
|
978 ),
|
Chris@76
|
979 'data' => array(
|
Chris@76
|
980 'db' => 'ip',
|
Chris@76
|
981 'class' => 'smalltext',
|
Chris@76
|
982 ),
|
Chris@76
|
983 'sort' => array(
|
Chris@76
|
984 'default' => 'lm.ip',
|
Chris@76
|
985 'reverse' => 'lm.ip DESC',
|
Chris@76
|
986 ),
|
Chris@76
|
987 ),
|
Chris@76
|
988 ),
|
Chris@76
|
989 );
|
Chris@76
|
990
|
Chris@76
|
991 // Create the watched user list.
|
Chris@76
|
992 createList($listOptions);
|
Chris@76
|
993
|
Chris@76
|
994 // Make sure to get the correct tab selected.
|
Chris@76
|
995 if ($context['report']['closed'])
|
Chris@76
|
996 $context[$context['moderation_menu_name']]['current_subsection'] = 'closed';
|
Chris@76
|
997
|
Chris@76
|
998 // Finally we are done :P
|
Chris@76
|
999 loadTemplate('ModerationCenter');
|
Chris@76
|
1000 $context['page_title'] = sprintf($txt['mc_viewmodreport'], $context['report']['subject'], $context['report']['author']['name']);
|
Chris@76
|
1001 $context['sub_template'] = 'viewmodreport';
|
Chris@76
|
1002 }
|
Chris@76
|
1003
|
Chris@76
|
1004 // Show a notice sent to a user.
|
Chris@76
|
1005 function ShowNotice()
|
Chris@76
|
1006 {
|
Chris@76
|
1007 global $smcFunc, $txt, $context;
|
Chris@76
|
1008
|
Chris@76
|
1009 $context['page_title'] = $txt['show_notice'];
|
Chris@76
|
1010 $context['sub_template'] = 'show_notice';
|
Chris@76
|
1011 $context['template_layers'] = array();
|
Chris@76
|
1012
|
Chris@76
|
1013 loadTemplate('ModerationCenter');
|
Chris@76
|
1014
|
Chris@76
|
1015 //!!! Assumes nothing needs permission more than accessing moderation center!
|
Chris@76
|
1016 $id_notice = (int) $_GET['nid'];
|
Chris@76
|
1017 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1018 SELECT body, subject
|
Chris@76
|
1019 FROM {db_prefix}log_member_notices
|
Chris@76
|
1020 WHERE id_notice = {int:id_notice}',
|
Chris@76
|
1021 array(
|
Chris@76
|
1022 'id_notice' => $id_notice,
|
Chris@76
|
1023 )
|
Chris@76
|
1024 );
|
Chris@76
|
1025 if ($smcFunc['db_num_rows']($request) == 0)
|
Chris@76
|
1026 fatal_lang_error('no_access', false);
|
Chris@76
|
1027 list ($context['notice_body'], $context['notice_subject']) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1028 $smcFunc['db_free_result']($request);
|
Chris@76
|
1029
|
Chris@76
|
1030 $context['notice_body'] = parse_bbc($context['notice_body'], false);
|
Chris@76
|
1031 }
|
Chris@76
|
1032
|
Chris@76
|
1033 // View watched users.
|
Chris@76
|
1034 function ViewWatchedUsers()
|
Chris@76
|
1035 {
|
Chris@76
|
1036 global $smcFunc, $modSettings, $context, $txt, $scripturl, $user_info, $sourcedir;
|
Chris@76
|
1037
|
Chris@76
|
1038 // Some important context!
|
Chris@76
|
1039 $context['page_title'] = $txt['mc_watched_users_title'];
|
Chris@76
|
1040 $context['view_posts'] = isset($_GET['sa']) && $_GET['sa'] == 'post';
|
Chris@76
|
1041 $context['start'] = isset($_REQUEST['start']) ? (int) $_REQUEST['start'] : 0;
|
Chris@76
|
1042
|
Chris@76
|
1043 loadTemplate('ModerationCenter');
|
Chris@76
|
1044
|
Chris@76
|
1045 // Get some key settings!
|
Chris@76
|
1046 $modSettings['warning_watch'] = empty($modSettings['warning_watch']) ? 1 : $modSettings['warning_watch'];
|
Chris@76
|
1047
|
Chris@76
|
1048 // Put some pretty tabs on cause we're gonna be doing hot stuff here...
|
Chris@76
|
1049 $context[$context['moderation_menu_name']]['tab_data'] = array(
|
Chris@76
|
1050 'title' => $txt['mc_watched_users_title'],
|
Chris@76
|
1051 'help' => '',
|
Chris@76
|
1052 'description' => $txt['mc_watched_users_desc'],
|
Chris@76
|
1053 );
|
Chris@76
|
1054
|
Chris@76
|
1055 // First off - are we deleting?
|
Chris@76
|
1056 if (!empty($_REQUEST['delete']))
|
Chris@76
|
1057 {
|
Chris@76
|
1058 checkSession(!is_array($_REQUEST['delete']) ? 'get' : 'post');
|
Chris@76
|
1059
|
Chris@76
|
1060 $toDelete = array();
|
Chris@76
|
1061 if (!is_array($_REQUEST['delete']))
|
Chris@76
|
1062 $toDelete[] = (int) $_REQUEST['delete'];
|
Chris@76
|
1063 else
|
Chris@76
|
1064 foreach ($_REQUEST['delete'] as $did)
|
Chris@76
|
1065 $toDelete[] = (int) $did;
|
Chris@76
|
1066
|
Chris@76
|
1067 if (!empty($toDelete))
|
Chris@76
|
1068 {
|
Chris@76
|
1069 require_once($sourcedir . '/RemoveTopic.php');
|
Chris@76
|
1070 // If they don't have permission we'll let it error - either way no chance of a security slip here!
|
Chris@76
|
1071 foreach ($toDelete as $did)
|
Chris@76
|
1072 removeMessage($did);
|
Chris@76
|
1073 }
|
Chris@76
|
1074 }
|
Chris@76
|
1075
|
Chris@76
|
1076 // Start preparing the list by grabbing relevant permissions.
|
Chris@76
|
1077 if (!$context['view_posts'])
|
Chris@76
|
1078 {
|
Chris@76
|
1079 $approve_query = '';
|
Chris@76
|
1080 $delete_boards = array();
|
Chris@76
|
1081 }
|
Chris@76
|
1082 else
|
Chris@76
|
1083 {
|
Chris@76
|
1084 // Still obey permissions!
|
Chris@76
|
1085 $approve_boards = boardsAllowedTo('approve_posts');
|
Chris@76
|
1086 $delete_boards = boardsAllowedTo('delete_any');
|
Chris@76
|
1087
|
Chris@76
|
1088 if ($approve_boards == array(0))
|
Chris@76
|
1089 $approve_query = '';
|
Chris@76
|
1090 elseif (!empty($approve_boards))
|
Chris@76
|
1091 $approve_query = ' AND m.id_board IN (' . implode(',', $approve_boards) . ')';
|
Chris@76
|
1092 // Nada, zip, etc...
|
Chris@76
|
1093 else
|
Chris@76
|
1094 $approve_query = ' AND 0';
|
Chris@76
|
1095 }
|
Chris@76
|
1096
|
Chris@76
|
1097 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
1098
|
Chris@76
|
1099 // This is all the information required for a watched user listing.
|
Chris@76
|
1100 $listOptions = array(
|
Chris@76
|
1101 'id' => 'watch_user_list',
|
Chris@76
|
1102 'title' => $txt['mc_watched_users_title'] . ' - ' . ($context['view_posts'] ? $txt['mc_watched_users_post'] : $txt['mc_watched_users_member']),
|
Chris@76
|
1103 'width' => '100%',
|
Chris@76
|
1104 'items_per_page' => $modSettings['defaultMaxMessages'],
|
Chris@76
|
1105 'no_items_label' => $context['view_posts'] ? $txt['mc_watched_users_no_posts'] : $txt['mc_watched_users_none'],
|
Chris@76
|
1106 'base_href' => $scripturl . '?action=moderate;area=userwatch;sa=' . ($context['view_posts'] ? 'post' : 'member'),
|
Chris@76
|
1107 'default_sort_col' => $context['view_posts'] ? '' : 'member',
|
Chris@76
|
1108 'get_items' => array(
|
Chris@76
|
1109 'function' => $context['view_posts'] ? 'list_getWatchedUserPosts' : 'list_getWatchedUsers',
|
Chris@76
|
1110 'params' => array(
|
Chris@76
|
1111 $approve_query,
|
Chris@76
|
1112 $delete_boards,
|
Chris@76
|
1113 ),
|
Chris@76
|
1114 ),
|
Chris@76
|
1115 'get_count' => array(
|
Chris@76
|
1116 'function' => $context['view_posts'] ? 'list_getWatchedUserPostsCount' : 'list_getWatchedUserCount',
|
Chris@76
|
1117 'params' => array(
|
Chris@76
|
1118 $approve_query,
|
Chris@76
|
1119 ),
|
Chris@76
|
1120 ),
|
Chris@76
|
1121 // This assumes we are viewing by user.
|
Chris@76
|
1122 'columns' => array(
|
Chris@76
|
1123 'member' => array(
|
Chris@76
|
1124 'header' => array(
|
Chris@76
|
1125 'value' => $txt['mc_watched_users_member'],
|
Chris@76
|
1126 ),
|
Chris@76
|
1127 'data' => array(
|
Chris@76
|
1128 'sprintf' => array(
|
Chris@76
|
1129 'format' => '<a href="' . $scripturl . '?action=profile;u=%1$d">%2$s</a>',
|
Chris@76
|
1130 'params' => array(
|
Chris@76
|
1131 'id' => false,
|
Chris@76
|
1132 'name' => false,
|
Chris@76
|
1133 ),
|
Chris@76
|
1134 ),
|
Chris@76
|
1135 ),
|
Chris@76
|
1136 'sort' => array(
|
Chris@76
|
1137 'default' => 'real_name',
|
Chris@76
|
1138 'reverse' => 'real_name DESC',
|
Chris@76
|
1139 ),
|
Chris@76
|
1140 ),
|
Chris@76
|
1141 'warning' => array(
|
Chris@76
|
1142 'header' => array(
|
Chris@76
|
1143 'value' => $txt['mc_watched_users_warning'],
|
Chris@76
|
1144 ),
|
Chris@76
|
1145 'data' => array(
|
Chris@76
|
1146 'function' => create_function('$member', '
|
Chris@76
|
1147 global $scripturl;
|
Chris@76
|
1148
|
Chris@76
|
1149 return allowedTo(\'issue_warning\') ? \'<a href="\' . $scripturl . \'?action=profile;area=issuewarning;u=\' . $member[\'id\'] . \'">\' . $member[\'warning\'] . \'%</a>\' : $member[\'warning\'] . \'%\';
|
Chris@76
|
1150 '),
|
Chris@76
|
1151 ),
|
Chris@76
|
1152 'sort' => array(
|
Chris@76
|
1153 'default' => 'warning',
|
Chris@76
|
1154 'reverse' => 'warning DESC',
|
Chris@76
|
1155 ),
|
Chris@76
|
1156 ),
|
Chris@76
|
1157 'posts' => array(
|
Chris@76
|
1158 'header' => array(
|
Chris@76
|
1159 'value' => $txt['posts'],
|
Chris@76
|
1160 ),
|
Chris@76
|
1161 'data' => array(
|
Chris@76
|
1162 'sprintf' => array(
|
Chris@76
|
1163 'format' => '<a href="' . $scripturl . '?action=profile;u=%1$d;area=showposts;sa=messages">%2$s</a>',
|
Chris@76
|
1164 'params' => array(
|
Chris@76
|
1165 'id' => false,
|
Chris@76
|
1166 'posts' => false,
|
Chris@76
|
1167 ),
|
Chris@76
|
1168 ),
|
Chris@76
|
1169 ),
|
Chris@76
|
1170 'sort' => array(
|
Chris@76
|
1171 'default' => 'posts',
|
Chris@76
|
1172 'reverse' => 'posts DESC',
|
Chris@76
|
1173 ),
|
Chris@76
|
1174 ),
|
Chris@76
|
1175 'last_login' => array(
|
Chris@76
|
1176 'header' => array(
|
Chris@76
|
1177 'value' => $txt['mc_watched_users_last_login'],
|
Chris@76
|
1178 ),
|
Chris@76
|
1179 'data' => array(
|
Chris@76
|
1180 'db' => 'last_login',
|
Chris@76
|
1181 ),
|
Chris@76
|
1182 'sort' => array(
|
Chris@76
|
1183 'default' => 'last_login',
|
Chris@76
|
1184 'reverse' => 'last_login DESC',
|
Chris@76
|
1185 ),
|
Chris@76
|
1186 ),
|
Chris@76
|
1187 'last_post' => array(
|
Chris@76
|
1188 'header' => array(
|
Chris@76
|
1189 'value' => $txt['mc_watched_users_last_post'],
|
Chris@76
|
1190 ),
|
Chris@76
|
1191 'data' => array(
|
Chris@76
|
1192 'function' => create_function('$member', '
|
Chris@76
|
1193 global $scripturl;
|
Chris@76
|
1194
|
Chris@76
|
1195 if ($member[\'last_post_id\'])
|
Chris@76
|
1196 return \'<a href="\' . $scripturl . \'?msg=\' . $member[\'last_post_id\'] . \'">\' . $member[\'last_post\'] . \'</a>\';
|
Chris@76
|
1197 else
|
Chris@76
|
1198 return $member[\'last_post\'];
|
Chris@76
|
1199 '),
|
Chris@76
|
1200 ),
|
Chris@76
|
1201 ),
|
Chris@76
|
1202 ),
|
Chris@76
|
1203 'form' => array(
|
Chris@76
|
1204 'href' => $scripturl . '?action=moderate;area=userwatch;sa=post',
|
Chris@76
|
1205 'include_sort' => true,
|
Chris@76
|
1206 'include_start' => true,
|
Chris@76
|
1207 'hidden_fields' => array(
|
Chris@76
|
1208 $context['session_var'] => $context['session_id'],
|
Chris@76
|
1209 ),
|
Chris@76
|
1210 ),
|
Chris@76
|
1211 'additional_rows' => array(
|
Chris@76
|
1212 $context['view_posts'] ?
|
Chris@76
|
1213 array(
|
Chris@76
|
1214 'position' => 'bottom_of_list',
|
Chris@76
|
1215 'value' => '
|
Chris@76
|
1216 <input type="submit" name="delete_selected" value="' . $txt['quickmod_delete_selected'] . '" class="button_submit" />',
|
Chris@76
|
1217 'align' => 'right',
|
Chris@76
|
1218 ) : array(),
|
Chris@76
|
1219 ),
|
Chris@76
|
1220 );
|
Chris@76
|
1221
|
Chris@76
|
1222 // If this is being viewed by posts we actually change the columns to call a template each time.
|
Chris@76
|
1223 if ($context['view_posts'])
|
Chris@76
|
1224 {
|
Chris@76
|
1225 $listOptions['columns'] = array(
|
Chris@76
|
1226 'posts' => array(
|
Chris@76
|
1227 'data' => array(
|
Chris@76
|
1228 'function' => create_function('$post', '
|
Chris@76
|
1229 return template_user_watch_post_callback($post);
|
Chris@76
|
1230 '),
|
Chris@76
|
1231 ),
|
Chris@76
|
1232 ),
|
Chris@76
|
1233 );
|
Chris@76
|
1234 }
|
Chris@76
|
1235
|
Chris@76
|
1236 // Create the watched user list.
|
Chris@76
|
1237 createList($listOptions);
|
Chris@76
|
1238
|
Chris@76
|
1239 $context['sub_template'] = 'show_list';
|
Chris@76
|
1240 $context['default_list'] = 'watch_user_list';
|
Chris@76
|
1241 }
|
Chris@76
|
1242
|
Chris@76
|
1243 function list_getWatchedUserCount($approve_query)
|
Chris@76
|
1244 {
|
Chris@76
|
1245 global $smcFunc, $modSettings;
|
Chris@76
|
1246
|
Chris@76
|
1247 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1248 SELECT COUNT(*)
|
Chris@76
|
1249 FROM {db_prefix}members
|
Chris@76
|
1250 WHERE warning >= {int:warning_watch}',
|
Chris@76
|
1251 array(
|
Chris@76
|
1252 'warning_watch' => $modSettings['warning_watch'],
|
Chris@76
|
1253 )
|
Chris@76
|
1254 );
|
Chris@76
|
1255 list ($totalMembers) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1256 $smcFunc['db_free_result']($request);
|
Chris@76
|
1257
|
Chris@76
|
1258 return $totalMembers;
|
Chris@76
|
1259 }
|
Chris@76
|
1260
|
Chris@76
|
1261 function list_getWatchedUsers($start, $items_per_page, $sort, $approve_query, $dummy)
|
Chris@76
|
1262 {
|
Chris@76
|
1263 global $smcFunc, $txt, $scripturl, $modSettings, $user_info, $context;
|
Chris@76
|
1264
|
Chris@76
|
1265 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1266 SELECT id_member, real_name, last_login, posts, warning
|
Chris@76
|
1267 FROM {db_prefix}members
|
Chris@76
|
1268 WHERE warning >= {int:warning_watch}
|
Chris@76
|
1269 ORDER BY {raw:sort}
|
Chris@76
|
1270 LIMIT ' . $start . ', ' . $items_per_page,
|
Chris@76
|
1271 array(
|
Chris@76
|
1272 'warning_watch' => $modSettings['warning_watch'],
|
Chris@76
|
1273 'sort' => $sort,
|
Chris@76
|
1274 )
|
Chris@76
|
1275 );
|
Chris@76
|
1276 $watched_users = array();
|
Chris@76
|
1277 $members = array();
|
Chris@76
|
1278 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1279 {
|
Chris@76
|
1280 $watched_users[$row['id_member']] = array(
|
Chris@76
|
1281 'id' => $row['id_member'],
|
Chris@76
|
1282 'name' => $row['real_name'],
|
Chris@76
|
1283 'last_login' => $row['last_login'] ? timeformat($row['last_login']) : $txt['never'],
|
Chris@76
|
1284 'last_post' => $txt['not_applicable'],
|
Chris@76
|
1285 'last_post_id' => 0,
|
Chris@76
|
1286 'warning' => $row['warning'],
|
Chris@76
|
1287 'posts' => $row['posts'],
|
Chris@76
|
1288 );
|
Chris@76
|
1289 $members[] = $row['id_member'];
|
Chris@76
|
1290 }
|
Chris@76
|
1291 $smcFunc['db_free_result']($request);
|
Chris@76
|
1292
|
Chris@76
|
1293 if (!empty($members))
|
Chris@76
|
1294 {
|
Chris@76
|
1295 // First get the latest messages from these users.
|
Chris@76
|
1296 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1297 SELECT m.id_member, MAX(m.id_msg) AS last_post_id
|
Chris@76
|
1298 FROM {db_prefix}messages AS m' . ($user_info['query_see_board'] == '1=1' ? '' : '
|
Chris@76
|
1299 INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board AND {query_see_board})') . '
|
Chris@76
|
1300 WHERE m.id_member IN ({array_int:member_list})' . (!$modSettings['postmod_active'] || allowedTo('approve_posts') ? '' : '
|
Chris@76
|
1301 AND m.approved = {int:is_approved}') . '
|
Chris@76
|
1302 GROUP BY m.id_member',
|
Chris@76
|
1303 array(
|
Chris@76
|
1304 'member_list' => $members,
|
Chris@76
|
1305 'is_approved' => 1,
|
Chris@76
|
1306 )
|
Chris@76
|
1307 );
|
Chris@76
|
1308 $latest_posts = array();
|
Chris@76
|
1309 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1310 $latest_posts[$row['id_member']] = $row['last_post_id'];
|
Chris@76
|
1311
|
Chris@76
|
1312 if (!empty($latest_posts))
|
Chris@76
|
1313 {
|
Chris@76
|
1314 // Now get the time those messages were posted.
|
Chris@76
|
1315 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1316 SELECT id_member, poster_time
|
Chris@76
|
1317 FROM {db_prefix}messages
|
Chris@76
|
1318 WHERE id_msg IN ({array_int:message_list})',
|
Chris@76
|
1319 array(
|
Chris@76
|
1320 'message_list' => $latest_posts,
|
Chris@76
|
1321 )
|
Chris@76
|
1322 );
|
Chris@76
|
1323 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1324 {
|
Chris@76
|
1325 $watched_users[$row['id_member']]['last_post'] = timeformat($row['poster_time']);
|
Chris@76
|
1326 $watched_users[$row['id_member']]['last_post_id'] = $latest_posts[$row['id_member']];
|
Chris@76
|
1327 }
|
Chris@76
|
1328
|
Chris@76
|
1329 $smcFunc['db_free_result']($request);
|
Chris@76
|
1330 }
|
Chris@76
|
1331
|
Chris@76
|
1332 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1333 SELECT MAX(m.poster_time) AS last_post, MAX(m.id_msg) AS last_post_id, m.id_member
|
Chris@76
|
1334 FROM {db_prefix}messages AS m' . ($user_info['query_see_board'] == '1=1' ? '' : '
|
Chris@76
|
1335 INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board AND {query_see_board})') . '
|
Chris@76
|
1336 WHERE m.id_member IN ({array_int:member_list})' . (!$modSettings['postmod_active'] || allowedTo('approve_posts') ? '' : '
|
Chris@76
|
1337 AND m.approved = {int:is_approved}') . '
|
Chris@76
|
1338 GROUP BY m.id_member',
|
Chris@76
|
1339 array(
|
Chris@76
|
1340 'member_list' => $members,
|
Chris@76
|
1341 'is_approved' => 1,
|
Chris@76
|
1342 )
|
Chris@76
|
1343 );
|
Chris@76
|
1344 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1345 {
|
Chris@76
|
1346 $watched_users[$row['id_member']]['last_post'] = timeformat($row['last_post']);
|
Chris@76
|
1347 $watched_users[$row['id_member']]['last_post_id'] = $row['last_post_id'];
|
Chris@76
|
1348 }
|
Chris@76
|
1349 $smcFunc['db_free_result']($request);
|
Chris@76
|
1350 }
|
Chris@76
|
1351
|
Chris@76
|
1352 return $watched_users;
|
Chris@76
|
1353 }
|
Chris@76
|
1354
|
Chris@76
|
1355 function list_getWatchedUserPostsCount($approve_query)
|
Chris@76
|
1356 {
|
Chris@76
|
1357 global $smcFunc, $modSettings, $user_info;
|
Chris@76
|
1358
|
Chris@76
|
1359 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1360 SELECT COUNT(*)
|
Chris@76
|
1361 FROM {db_prefix}messages AS m
|
Chris@76
|
1362 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
|
Chris@76
|
1363 INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board)
|
Chris@76
|
1364 WHERE mem.warning >= {int:warning_watch}
|
Chris@76
|
1365 AND {query_see_board}
|
Chris@76
|
1366 ' . $approve_query,
|
Chris@76
|
1367 array(
|
Chris@76
|
1368 'warning_watch' => $modSettings['warning_watch'],
|
Chris@76
|
1369 )
|
Chris@76
|
1370 );
|
Chris@76
|
1371 list ($totalMemberPosts) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1372 $smcFunc['db_free_result']($request);
|
Chris@76
|
1373
|
Chris@76
|
1374 return $totalMemberPosts;
|
Chris@76
|
1375 }
|
Chris@76
|
1376
|
Chris@76
|
1377 function list_getWatchedUserPosts($start, $items_per_page, $sort, $approve_query, $delete_boards)
|
Chris@76
|
1378 {
|
Chris@76
|
1379 global $smcFunc, $txt, $scripturl, $modSettings, $user_info;
|
Chris@76
|
1380
|
Chris@76
|
1381 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1382 SELECT m.id_msg, m.id_topic, m.id_board, m.id_member, m.subject, m.body, m.poster_time,
|
Chris@76
|
1383 m.approved, mem.real_name, m.smileys_enabled
|
Chris@76
|
1384 FROM {db_prefix}messages AS m
|
Chris@76
|
1385 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
|
Chris@76
|
1386 INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board)
|
Chris@76
|
1387 WHERE mem.warning >= {int:warning_watch}
|
Chris@76
|
1388 AND {query_see_board}
|
Chris@76
|
1389 ' . $approve_query . '
|
Chris@76
|
1390 ORDER BY m.id_msg DESC
|
Chris@76
|
1391 LIMIT ' . $start . ', ' . $items_per_page,
|
Chris@76
|
1392 array(
|
Chris@76
|
1393 'warning_watch' => $modSettings['warning_watch'],
|
Chris@76
|
1394 )
|
Chris@76
|
1395 );
|
Chris@76
|
1396 $member_posts = array();
|
Chris@76
|
1397 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1398 {
|
Chris@76
|
1399 $row['subject'] = censorText($row['subject']);
|
Chris@76
|
1400 $row['body'] = censorText($row['body']);
|
Chris@76
|
1401
|
Chris@76
|
1402 $member_posts[$row['id_msg']] = array(
|
Chris@76
|
1403 'id' => $row['id_msg'],
|
Chris@76
|
1404 'id_topic' => $row['id_topic'],
|
Chris@76
|
1405 'author_link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>',
|
Chris@76
|
1406 'subject' => $row['subject'],
|
Chris@76
|
1407 'body' => parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']),
|
Chris@76
|
1408 'poster_time' => timeformat($row['poster_time']),
|
Chris@76
|
1409 'approved' => $row['approved'],
|
Chris@76
|
1410 'can_delete' => $delete_boards == array(0) || in_array($row['id_board'], $delete_boards),
|
Chris@76
|
1411 );
|
Chris@76
|
1412 }
|
Chris@76
|
1413 $smcFunc['db_free_result']($request);
|
Chris@76
|
1414
|
Chris@76
|
1415 return $member_posts;
|
Chris@76
|
1416 }
|
Chris@76
|
1417
|
Chris@76
|
1418 // Entry point for viewing warning related stuff.
|
Chris@76
|
1419 function ViewWarnings()
|
Chris@76
|
1420 {
|
Chris@76
|
1421 global $context, $txt;
|
Chris@76
|
1422
|
Chris@76
|
1423 $subActions = array(
|
Chris@76
|
1424 'log' => array('ViewWarningLog'),
|
Chris@76
|
1425 'templateedit' => array('ModifyWarningTemplate', 'issue_warning'),
|
Chris@76
|
1426 'templates' => array('ViewWarningTemplates', 'issue_warning'),
|
Chris@76
|
1427 );
|
Chris@76
|
1428
|
Chris@76
|
1429 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) && (empty($subActions[$_REQUEST['sa']][1]) || allowedTo($subActions[$_REQUEST['sa']]))? $_REQUEST['sa'] : 'log';
|
Chris@76
|
1430
|
Chris@76
|
1431 // Some of this stuff is overseas, so to speak.
|
Chris@76
|
1432 loadTemplate('ModerationCenter');
|
Chris@76
|
1433 loadLanguage('Profile');
|
Chris@76
|
1434
|
Chris@76
|
1435 // Setup the admin tabs.
|
Chris@76
|
1436 $context[$context['moderation_menu_name']]['tab_data'] = array(
|
Chris@76
|
1437 'title' => $txt['mc_warnings'],
|
Chris@76
|
1438 'description' => $txt['mc_warnings_description'],
|
Chris@76
|
1439 );
|
Chris@76
|
1440
|
Chris@76
|
1441 // Call the right function.
|
Chris@76
|
1442 $subActions[$_REQUEST['sa']][0]();
|
Chris@76
|
1443 }
|
Chris@76
|
1444
|
Chris@76
|
1445 // Simply put, look at the warning log!
|
Chris@76
|
1446 function ViewWarningLog()
|
Chris@76
|
1447 {
|
Chris@76
|
1448 global $smcFunc, $modSettings, $context, $txt, $scripturl, $sourcedir;
|
Chris@76
|
1449
|
Chris@76
|
1450 // Setup context as always.
|
Chris@76
|
1451 $context['page_title'] = $txt['mc_warning_log_title'];
|
Chris@76
|
1452
|
Chris@76
|
1453 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
1454
|
Chris@76
|
1455 // This is all the information required for a watched user listing.
|
Chris@76
|
1456 $listOptions = array(
|
Chris@76
|
1457 'id' => 'warning_list',
|
Chris@76
|
1458 'title' => $txt['mc_warning_log_title'],
|
Chris@76
|
1459 'items_per_page' => $modSettings['defaultMaxMessages'],
|
Chris@76
|
1460 'no_items_label' => $txt['mc_warnings_none'],
|
Chris@76
|
1461 'base_href' => $scripturl . '?action=moderate;area=warnings;sa=log;' . $context['session_var'] . '=' . $context['session_id'],
|
Chris@76
|
1462 'default_sort_col' => 'time',
|
Chris@76
|
1463 'get_items' => array(
|
Chris@76
|
1464 'function' => 'list_getWarnings',
|
Chris@76
|
1465 ),
|
Chris@76
|
1466 'get_count' => array(
|
Chris@76
|
1467 'function' => 'list_getWarningCount',
|
Chris@76
|
1468 ),
|
Chris@76
|
1469 // This assumes we are viewing by user.
|
Chris@76
|
1470 'columns' => array(
|
Chris@76
|
1471 'issuer' => array(
|
Chris@76
|
1472 'header' => array(
|
Chris@76
|
1473 'value' => $txt['profile_warning_previous_issued'],
|
Chris@76
|
1474 ),
|
Chris@76
|
1475 'data' => array(
|
Chris@76
|
1476 'db' => 'issuer_link',
|
Chris@76
|
1477 ),
|
Chris@76
|
1478 'sort' => array(
|
Chris@76
|
1479 'default' => 'member_name_col',
|
Chris@76
|
1480 'reverse' => 'member_name_col DESC',
|
Chris@76
|
1481 ),
|
Chris@76
|
1482 ),
|
Chris@76
|
1483 'recipient' => array(
|
Chris@76
|
1484 'header' => array(
|
Chris@76
|
1485 'value' => $txt['mc_warnings_recipient'],
|
Chris@76
|
1486 ),
|
Chris@76
|
1487 'data' => array(
|
Chris@76
|
1488 'db' => 'recipient_link',
|
Chris@76
|
1489 ),
|
Chris@76
|
1490 'sort' => array(
|
Chris@76
|
1491 'default' => 'recipient_name',
|
Chris@76
|
1492 'reverse' => 'recipient_name DESC',
|
Chris@76
|
1493 ),
|
Chris@76
|
1494 ),
|
Chris@76
|
1495 'time' => array(
|
Chris@76
|
1496 'header' => array(
|
Chris@76
|
1497 'value' => $txt['profile_warning_previous_time'],
|
Chris@76
|
1498 ),
|
Chris@76
|
1499 'data' => array(
|
Chris@76
|
1500 'db' => 'time',
|
Chris@76
|
1501 ),
|
Chris@76
|
1502 'sort' => array(
|
Chris@76
|
1503 'default' => 'lc.log_time DESC',
|
Chris@76
|
1504 'reverse' => 'lc.log_time',
|
Chris@76
|
1505 ),
|
Chris@76
|
1506 ),
|
Chris@76
|
1507 'reason' => array(
|
Chris@76
|
1508 'header' => array(
|
Chris@76
|
1509 'value' => $txt['profile_warning_previous_reason'],
|
Chris@76
|
1510 ),
|
Chris@76
|
1511 'data' => array(
|
Chris@76
|
1512 'function' => create_function('$warning', '
|
Chris@76
|
1513 global $scripturl, $settings, $txt;
|
Chris@76
|
1514
|
Chris@76
|
1515 $output = \'
|
Chris@76
|
1516 <div class="floatleft">
|
Chris@76
|
1517 \' . $warning[\'reason\'] . \'
|
Chris@76
|
1518 </div>\';
|
Chris@76
|
1519
|
Chris@76
|
1520 if (!empty($warning[\'id_notice\']))
|
Chris@76
|
1521 $output .= \'
|
Chris@76
|
1522 <div class="floatright">
|
Chris@76
|
1523 <a href="\' . $scripturl . \'?action=moderate;area=notice;nid=\' . $warning[\'id_notice\'] . \'" onclick="window.open(this.href, \\\'\\\', \\\'scrollbars=yes,resizable=yes,width=400,height=250\\\');return false;" target="_blank" class="new_win" title="\' . $txt[\'profile_warning_previous_notice\'] . \'"><img src="\' . $settings[\'default_images_url\'] . \'/filter.gif" alt="\' . $txt[\'profile_warning_previous_notice\'] . \'" /></a>
|
Chris@76
|
1524 </div>\';
|
Chris@76
|
1525
|
Chris@76
|
1526 return $output;
|
Chris@76
|
1527 '),
|
Chris@76
|
1528 ),
|
Chris@76
|
1529 ),
|
Chris@76
|
1530 'points' => array(
|
Chris@76
|
1531 'header' => array(
|
Chris@76
|
1532 'value' => $txt['profile_warning_previous_level'],
|
Chris@76
|
1533 ),
|
Chris@76
|
1534 'data' => array(
|
Chris@76
|
1535 'db' => 'counter',
|
Chris@76
|
1536 ),
|
Chris@76
|
1537 ),
|
Chris@76
|
1538 ),
|
Chris@76
|
1539 );
|
Chris@76
|
1540
|
Chris@76
|
1541 // Create the watched user list.
|
Chris@76
|
1542 createList($listOptions);
|
Chris@76
|
1543
|
Chris@76
|
1544 $context['sub_template'] = 'show_list';
|
Chris@76
|
1545 $context['default_list'] = 'warning_list';
|
Chris@76
|
1546 }
|
Chris@76
|
1547
|
Chris@76
|
1548 function list_getWarningCount()
|
Chris@76
|
1549 {
|
Chris@76
|
1550 global $smcFunc, $modSettings;
|
Chris@76
|
1551
|
Chris@76
|
1552 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1553 SELECT COUNT(*)
|
Chris@76
|
1554 FROM {db_prefix}log_comments
|
Chris@76
|
1555 WHERE comment_type = {string:warning}',
|
Chris@76
|
1556 array(
|
Chris@76
|
1557 'warning' => 'warning',
|
Chris@76
|
1558 )
|
Chris@76
|
1559 );
|
Chris@76
|
1560 list ($totalWarns) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1561 $smcFunc['db_free_result']($request);
|
Chris@76
|
1562
|
Chris@76
|
1563 return $totalWarns;
|
Chris@76
|
1564 }
|
Chris@76
|
1565
|
Chris@76
|
1566 function list_getWarnings($start, $items_per_page, $sort)
|
Chris@76
|
1567 {
|
Chris@76
|
1568 global $smcFunc, $txt, $scripturl, $modSettings, $user_info;
|
Chris@76
|
1569
|
Chris@76
|
1570 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1571 SELECT IFNULL(mem.id_member, 0) AS id_member, IFNULL(mem.real_name, lc.member_name) AS member_name_col,
|
Chris@76
|
1572 IFNULL(mem2.id_member, 0) AS id_recipient, IFNULL(mem2.real_name, lc.recipient_name) AS recipient_name,
|
Chris@76
|
1573 lc.log_time, lc.body, lc.id_notice, lc.counter
|
Chris@76
|
1574 FROM {db_prefix}log_comments AS lc
|
Chris@76
|
1575 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lc.id_member)
|
Chris@76
|
1576 LEFT JOIN {db_prefix}members AS mem2 ON (mem2.id_member = lc.id_recipient)
|
Chris@76
|
1577 WHERE lc.comment_type = {string:warning}
|
Chris@76
|
1578 ORDER BY ' . $sort . '
|
Chris@76
|
1579 LIMIT ' . $start . ', ' . $items_per_page,
|
Chris@76
|
1580 array(
|
Chris@76
|
1581 'warning' => 'warning',
|
Chris@76
|
1582 )
|
Chris@76
|
1583 );
|
Chris@76
|
1584 $warnings = array();
|
Chris@76
|
1585 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1586 {
|
Chris@76
|
1587 $warnings[] = array(
|
Chris@76
|
1588 'issuer_link' => $row['id_member'] ? ('<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['member_name_col'] . '</a>') : $row['member_name_col'],
|
Chris@76
|
1589 'recipient_link' => $row['id_recipient'] ? ('<a href="' . $scripturl . '?action=profile;u=' . $row['id_recipient'] . '">' . $row['recipient_name'] . '</a>') : $row['recipient_name'],
|
Chris@76
|
1590 'time' => timeformat($row['log_time']),
|
Chris@76
|
1591 'reason' => $row['body'],
|
Chris@76
|
1592 'counter' => $row['counter'] > 0 ? '+' . $row['counter'] : $row['counter'],
|
Chris@76
|
1593 'id_notice' => $row['id_notice'],
|
Chris@76
|
1594 );
|
Chris@76
|
1595 }
|
Chris@76
|
1596 $smcFunc['db_free_result']($request);
|
Chris@76
|
1597
|
Chris@76
|
1598 return $warnings;
|
Chris@76
|
1599 }
|
Chris@76
|
1600
|
Chris@76
|
1601 // Load all the warning templates.
|
Chris@76
|
1602 function ViewWarningTemplates()
|
Chris@76
|
1603 {
|
Chris@76
|
1604 global $smcFunc, $modSettings, $context, $txt, $scripturl, $sourcedir, $user_info;
|
Chris@76
|
1605
|
Chris@76
|
1606 // Submitting a new one?
|
Chris@76
|
1607 if (isset($_POST['add']))
|
Chris@76
|
1608 return ModifyWarningTemplate();
|
Chris@76
|
1609 elseif (isset($_POST['delete']) && !empty($_POST['deltpl']))
|
Chris@76
|
1610 {
|
Chris@76
|
1611 checkSession('post');
|
Chris@76
|
1612
|
Chris@76
|
1613 // Log the actions.
|
Chris@76
|
1614 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1615 SELECT recipient_name
|
Chris@76
|
1616 FROM {db_prefix}log_comments
|
Chris@76
|
1617 WHERE id_comment IN ({array_int:delete_ids})
|
Chris@76
|
1618 AND comment_type = {string:warntpl}
|
Chris@76
|
1619 AND (id_recipient = {int:generic} OR id_recipient = {int:current_member})',
|
Chris@76
|
1620 array(
|
Chris@76
|
1621 'delete_ids' => $_POST['deltpl'],
|
Chris@76
|
1622 'warntpl' => 'warntpl',
|
Chris@76
|
1623 'generic' => 0,
|
Chris@76
|
1624 'current_member' => $user_info['id'],
|
Chris@76
|
1625 )
|
Chris@76
|
1626 );
|
Chris@76
|
1627 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1628 logAction('delete_warn_template', array('template' => $row['recipient_name']));
|
Chris@76
|
1629 $smcFunc['db_free_result']($request);
|
Chris@76
|
1630
|
Chris@76
|
1631 // Do the deletes.
|
Chris@76
|
1632 $smcFunc['db_query']('', '
|
Chris@76
|
1633 DELETE FROM {db_prefix}log_comments
|
Chris@76
|
1634 WHERE id_comment IN ({array_int:delete_ids})
|
Chris@76
|
1635 AND comment_type = {string:warntpl}
|
Chris@76
|
1636 AND (id_recipient = {int:generic} OR id_recipient = {int:current_member})',
|
Chris@76
|
1637 array(
|
Chris@76
|
1638 'delete_ids' => $_POST['deltpl'],
|
Chris@76
|
1639 'warntpl' => 'warntpl',
|
Chris@76
|
1640 'generic' => 0,
|
Chris@76
|
1641 'current_member' => $user_info['id'],
|
Chris@76
|
1642 )
|
Chris@76
|
1643 );
|
Chris@76
|
1644 }
|
Chris@76
|
1645
|
Chris@76
|
1646 // Setup context as always.
|
Chris@76
|
1647 $context['page_title'] = $txt['mc_warning_templates_title'];
|
Chris@76
|
1648
|
Chris@76
|
1649 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
1650
|
Chris@76
|
1651 // This is all the information required for a watched user listing.
|
Chris@76
|
1652 $listOptions = array(
|
Chris@76
|
1653 'id' => 'warning_template_list',
|
Chris@76
|
1654 'title' => $txt['mc_warning_templates_title'],
|
Chris@76
|
1655 'items_per_page' => $modSettings['defaultMaxMessages'],
|
Chris@76
|
1656 'no_items_label' => $txt['mc_warning_templates_none'],
|
Chris@76
|
1657 'base_href' => $scripturl . '?action=moderate;area=warnings;sa=templates;' . $context['session_var'] . '=' . $context['session_id'],
|
Chris@76
|
1658 'default_sort_col' => 'title',
|
Chris@76
|
1659 'get_items' => array(
|
Chris@76
|
1660 'function' => 'list_getWarningTemplates',
|
Chris@76
|
1661 ),
|
Chris@76
|
1662 'get_count' => array(
|
Chris@76
|
1663 'function' => 'list_getWarningTemplateCount',
|
Chris@76
|
1664 ),
|
Chris@76
|
1665 // This assumes we are viewing by user.
|
Chris@76
|
1666 'columns' => array(
|
Chris@76
|
1667 'title' => array(
|
Chris@76
|
1668 'header' => array(
|
Chris@76
|
1669 'value' => $txt['mc_warning_templates_name'],
|
Chris@76
|
1670 ),
|
Chris@76
|
1671 'data' => array(
|
Chris@76
|
1672 'sprintf' => array(
|
Chris@76
|
1673 'format' => '<a href="' . $scripturl . '?action=moderate;area=warnings;sa=templateedit;tid=%1$d">%2$s</a>',
|
Chris@76
|
1674 'params' => array(
|
Chris@76
|
1675 'id_comment' => false,
|
Chris@76
|
1676 'title' => false,
|
Chris@76
|
1677 'body' => false,
|
Chris@76
|
1678 ),
|
Chris@76
|
1679 ),
|
Chris@76
|
1680 ),
|
Chris@76
|
1681 'sort' => array(
|
Chris@76
|
1682 'default' => 'template_title',
|
Chris@76
|
1683 'reverse' => 'template_title DESC',
|
Chris@76
|
1684 ),
|
Chris@76
|
1685 ),
|
Chris@76
|
1686 'creator' => array(
|
Chris@76
|
1687 'header' => array(
|
Chris@76
|
1688 'value' => $txt['mc_warning_templates_creator'],
|
Chris@76
|
1689 ),
|
Chris@76
|
1690 'data' => array(
|
Chris@76
|
1691 'db' => 'creator',
|
Chris@76
|
1692 ),
|
Chris@76
|
1693 'sort' => array(
|
Chris@76
|
1694 'default' => 'creator_name',
|
Chris@76
|
1695 'reverse' => 'creator_name DESC',
|
Chris@76
|
1696 ),
|
Chris@76
|
1697 ),
|
Chris@76
|
1698 'time' => array(
|
Chris@76
|
1699 'header' => array(
|
Chris@76
|
1700 'value' => $txt['mc_warning_templates_time'],
|
Chris@76
|
1701 ),
|
Chris@76
|
1702 'data' => array(
|
Chris@76
|
1703 'db' => 'time',
|
Chris@76
|
1704 ),
|
Chris@76
|
1705 'sort' => array(
|
Chris@76
|
1706 'default' => 'lc.log_time DESC',
|
Chris@76
|
1707 'reverse' => 'lc.log_time',
|
Chris@76
|
1708 ),
|
Chris@76
|
1709 ),
|
Chris@76
|
1710 'delete' => array(
|
Chris@76
|
1711 'header' => array(
|
Chris@76
|
1712 'style' => 'width: 4%;',
|
Chris@76
|
1713 ),
|
Chris@76
|
1714 'data' => array(
|
Chris@76
|
1715 'function' => create_function('$rowData', '
|
Chris@76
|
1716 global $context, $txt, $scripturl;
|
Chris@76
|
1717
|
Chris@76
|
1718 return \'<input type="checkbox" name="deltpl[]" value="\' . $rowData[\'id_comment\'] . \'" class="input_check" />\';
|
Chris@76
|
1719 '),
|
Chris@76
|
1720 'style' => 'text-align: center;',
|
Chris@76
|
1721 ),
|
Chris@76
|
1722 ),
|
Chris@76
|
1723 ),
|
Chris@76
|
1724 'form' => array(
|
Chris@76
|
1725 'href' => $scripturl . '?action=moderate;area=warnings;sa=templates',
|
Chris@76
|
1726 ),
|
Chris@76
|
1727 'additional_rows' => array(
|
Chris@76
|
1728 array(
|
Chris@76
|
1729 'position' => 'below_table_data',
|
Chris@76
|
1730 'value' => '
|
Chris@76
|
1731 <input type="submit" name="add" value="' . $txt['mc_warning_template_add'] . '" class="button_submit" />
|
Chris@76
|
1732 <input type="submit" name="delete" value="' . $txt['mc_warning_template_delete'] . '" onclick="return confirm(\'' . $txt['mc_warning_template_delete_confirm'] . '\');" class="button_submit" />',
|
Chris@76
|
1733 'style' => 'text-align: right;',
|
Chris@76
|
1734 ),
|
Chris@76
|
1735 ),
|
Chris@76
|
1736 );
|
Chris@76
|
1737
|
Chris@76
|
1738 // Create the watched user list.
|
Chris@76
|
1739 createList($listOptions);
|
Chris@76
|
1740
|
Chris@76
|
1741 $context['sub_template'] = 'show_list';
|
Chris@76
|
1742 $context['default_list'] = 'warning_template_list';
|
Chris@76
|
1743 }
|
Chris@76
|
1744
|
Chris@76
|
1745 function list_getWarningTemplateCount()
|
Chris@76
|
1746 {
|
Chris@76
|
1747 global $smcFunc, $modSettings, $user_info;
|
Chris@76
|
1748
|
Chris@76
|
1749 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1750 SELECT COUNT(*)
|
Chris@76
|
1751 FROM {db_prefix}log_comments
|
Chris@76
|
1752 WHERE comment_type = {string:warntpl}
|
Chris@76
|
1753 AND (id_recipient = {string:generic} OR id_recipient = {int:current_member})',
|
Chris@76
|
1754 array(
|
Chris@76
|
1755 'warntpl' => 'warntpl',
|
Chris@76
|
1756 'generic' => 0,
|
Chris@76
|
1757 'current_member' => $user_info['id'],
|
Chris@76
|
1758 )
|
Chris@76
|
1759 );
|
Chris@76
|
1760 list ($totalWarns) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1761 $smcFunc['db_free_result']($request);
|
Chris@76
|
1762
|
Chris@76
|
1763 return $totalWarns;
|
Chris@76
|
1764 }
|
Chris@76
|
1765
|
Chris@76
|
1766 function list_getWarningTemplates($start, $items_per_page, $sort)
|
Chris@76
|
1767 {
|
Chris@76
|
1768 global $smcFunc, $txt, $scripturl, $modSettings, $user_info;
|
Chris@76
|
1769
|
Chris@76
|
1770 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1771 SELECT lc.id_comment, IFNULL(mem.id_member, 0) AS id_member,
|
Chris@76
|
1772 IFNULL(mem.real_name, lc.member_name) AS creator_name, recipient_name AS template_title,
|
Chris@76
|
1773 lc.log_time, lc.body
|
Chris@76
|
1774 FROM {db_prefix}log_comments AS lc
|
Chris@76
|
1775 LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lc.id_member)
|
Chris@76
|
1776 WHERE lc.comment_type = {string:warntpl}
|
Chris@76
|
1777 AND (id_recipient = {string:generic} OR id_recipient = {int:current_member})
|
Chris@76
|
1778 ORDER BY ' . $sort . '
|
Chris@76
|
1779 LIMIT ' . $start . ', ' . $items_per_page,
|
Chris@76
|
1780 array(
|
Chris@76
|
1781 'warntpl' => 'warntpl',
|
Chris@76
|
1782 'generic' => 0,
|
Chris@76
|
1783 'current_member' => $user_info['id'],
|
Chris@76
|
1784 )
|
Chris@76
|
1785 );
|
Chris@76
|
1786 $templates = array();
|
Chris@76
|
1787 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1788 {
|
Chris@76
|
1789 $templates[] = array(
|
Chris@76
|
1790 'id_comment' => $row['id_comment'],
|
Chris@76
|
1791 'creator' => $row['id_member'] ? ('<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['creator_name'] . '</a>') : $row['creator_name'],
|
Chris@76
|
1792 'time' => timeformat($row['log_time']),
|
Chris@76
|
1793 'title' => $row['template_title'],
|
Chris@76
|
1794 'body' => $smcFunc['htmlspecialchars']($row['body']),
|
Chris@76
|
1795 );
|
Chris@76
|
1796 }
|
Chris@76
|
1797 $smcFunc['db_free_result']($request);
|
Chris@76
|
1798
|
Chris@76
|
1799 return $templates;
|
Chris@76
|
1800 }
|
Chris@76
|
1801
|
Chris@76
|
1802 // Edit a warning template.
|
Chris@76
|
1803 function ModifyWarningTemplate()
|
Chris@76
|
1804 {
|
Chris@76
|
1805 global $smcFunc, $context, $txt, $user_info, $sourcedir;
|
Chris@76
|
1806
|
Chris@76
|
1807 $context['id_template'] = isset($_REQUEST['tid']) ? (int) $_REQUEST['tid'] : 0;
|
Chris@76
|
1808 $context['is_edit'] = $context['id_template'];
|
Chris@76
|
1809
|
Chris@76
|
1810 // Standard template things.
|
Chris@76
|
1811 $context['page_title'] = $context['is_edit'] ? $txt['mc_warning_template_modify'] : $txt['mc_warning_template_add'];
|
Chris@76
|
1812 $context['sub_template'] = 'warn_template';
|
Chris@76
|
1813 $context[$context['moderation_menu_name']]['current_subsection'] = 'templates';
|
Chris@76
|
1814
|
Chris@76
|
1815 // Defaults.
|
Chris@76
|
1816 $context['template_data'] = array(
|
Chris@76
|
1817 'title' => '',
|
Chris@76
|
1818 'body' => $txt['mc_warning_template_body_default'],
|
Chris@76
|
1819 'personal' => false,
|
Chris@76
|
1820 'can_edit_personal' => true,
|
Chris@76
|
1821 );
|
Chris@76
|
1822
|
Chris@76
|
1823 // If it's an edit load it.
|
Chris@76
|
1824 if ($context['is_edit'])
|
Chris@76
|
1825 {
|
Chris@76
|
1826 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1827 SELECT id_member, id_recipient, recipient_name AS template_title, body
|
Chris@76
|
1828 FROM {db_prefix}log_comments
|
Chris@76
|
1829 WHERE id_comment = {int:id}
|
Chris@76
|
1830 AND comment_type = {string:warntpl}
|
Chris@76
|
1831 AND (id_recipient = {int:generic} OR id_recipient = {int:current_member})',
|
Chris@76
|
1832 array(
|
Chris@76
|
1833 'id' => $context['id_template'],
|
Chris@76
|
1834 'warntpl' => 'warntpl',
|
Chris@76
|
1835 'generic' => 0,
|
Chris@76
|
1836 'current_member' => $user_info['id'],
|
Chris@76
|
1837 )
|
Chris@76
|
1838 );
|
Chris@76
|
1839 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1840 {
|
Chris@76
|
1841 $context['template_data'] = array(
|
Chris@76
|
1842 'title' => $row['template_title'],
|
Chris@76
|
1843 'body' => $smcFunc['htmlspecialchars']($row['body']),
|
Chris@76
|
1844 'personal' => $row['id_recipient'],
|
Chris@76
|
1845 'can_edit_personal' => $row['id_member'] == $user_info['id'],
|
Chris@76
|
1846 );
|
Chris@76
|
1847 }
|
Chris@76
|
1848 $smcFunc['db_free_result']($request);
|
Chris@76
|
1849 }
|
Chris@76
|
1850
|
Chris@76
|
1851 // Wait, we are saving?
|
Chris@76
|
1852 if (isset($_POST['save']))
|
Chris@76
|
1853 {
|
Chris@76
|
1854 checkSession('post');
|
Chris@76
|
1855
|
Chris@76
|
1856 // To check the BBC is pretty good...
|
Chris@76
|
1857 require_once($sourcedir . '/Subs-Post.php');
|
Chris@76
|
1858
|
Chris@76
|
1859 // Bit of cleaning!
|
Chris@76
|
1860 $_POST['template_body'] = trim($_POST['template_body']);
|
Chris@76
|
1861 $_POST['template_title'] = trim($_POST['template_title']);
|
Chris@76
|
1862
|
Chris@76
|
1863 // Need something in both boxes.
|
Chris@76
|
1864 if (empty($_POST['template_body']) || empty($_POST['template_title']))
|
Chris@76
|
1865 fatal_error($txt['mc_warning_template_error_empty']);
|
Chris@76
|
1866
|
Chris@76
|
1867 // Safety first.
|
Chris@76
|
1868 $_POST['template_title'] = $smcFunc['htmlspecialchars']($_POST['template_title']);
|
Chris@76
|
1869
|
Chris@76
|
1870 // Clean up BBC.
|
Chris@76
|
1871 preparsecode($_POST['template_body']);
|
Chris@76
|
1872 // But put line breaks back!
|
Chris@76
|
1873 $_POST['template_body'] = strtr($_POST['template_body'], array('<br />' => "\n"));
|
Chris@76
|
1874
|
Chris@76
|
1875 // Is this personal?
|
Chris@76
|
1876 $recipient_id = !empty($_POST['make_personal']) ? $user_info['id'] : 0;
|
Chris@76
|
1877
|
Chris@76
|
1878 // If we are this far it's save time.
|
Chris@76
|
1879 if ($context['is_edit'])
|
Chris@76
|
1880 {
|
Chris@76
|
1881 // Simple update...
|
Chris@76
|
1882 $smcFunc['db_query']('', '
|
Chris@76
|
1883 UPDATE {db_prefix}log_comments
|
Chris@76
|
1884 SET id_recipient = {int:personal}, recipient_name = {string:title}, body = {string:body}
|
Chris@76
|
1885 WHERE id_comment = {int:id}
|
Chris@76
|
1886 AND comment_type = {string:warntpl}
|
Chris@76
|
1887 AND (id_recipient = {int:generic} OR id_recipient = {int:current_member})'.
|
Chris@76
|
1888 ($recipient_id ? ' AND id_member = {int:current_member}' : ''),
|
Chris@76
|
1889 array(
|
Chris@76
|
1890 'personal' => $recipient_id,
|
Chris@76
|
1891 'title' => $_POST['template_title'],
|
Chris@76
|
1892 'body' => $_POST['template_body'],
|
Chris@76
|
1893 'id' => $context['id_template'],
|
Chris@76
|
1894 'warntpl' => 'warntpl',
|
Chris@76
|
1895 'generic' => 0,
|
Chris@76
|
1896 'current_member' => $user_info['id'],
|
Chris@76
|
1897 )
|
Chris@76
|
1898 );
|
Chris@76
|
1899
|
Chris@76
|
1900 // If it wasn't visible and now is they've effectively added it.
|
Chris@76
|
1901 if ($context['template_data']['personal'] && !$recipient_id)
|
Chris@76
|
1902 logAction('add_warn_template', array('template' => $_POST['template_title']));
|
Chris@76
|
1903 // Conversely if they made it personal it's a delete.
|
Chris@76
|
1904 elseif (!$context['template_data']['personal'] && $recipient_id)
|
Chris@76
|
1905 logAction('delete_warn_template', array('template' => $_POST['template_title']));
|
Chris@76
|
1906 // Otherwise just an edit.
|
Chris@76
|
1907 else
|
Chris@76
|
1908 logAction('modify_warn_template', array('template' => $_POST['template_title']));
|
Chris@76
|
1909 }
|
Chris@76
|
1910 else
|
Chris@76
|
1911 {
|
Chris@76
|
1912 $smcFunc['db_insert']('',
|
Chris@76
|
1913 '{db_prefix}log_comments',
|
Chris@76
|
1914 array(
|
Chris@76
|
1915 'id_member' => 'int', 'member_name' => 'string', 'comment_type' => 'string', 'id_recipient' => 'int',
|
Chris@76
|
1916 'recipient_name' => 'string-255', 'body' => 'string-65535', 'log_time' => 'int',
|
Chris@76
|
1917 ),
|
Chris@76
|
1918 array(
|
Chris@76
|
1919 $user_info['id'], $user_info['name'], 'warntpl', $recipient_id,
|
Chris@76
|
1920 $_POST['template_title'], $_POST['template_body'], time(),
|
Chris@76
|
1921 ),
|
Chris@76
|
1922 array('id_comment')
|
Chris@76
|
1923 );
|
Chris@76
|
1924
|
Chris@76
|
1925 logAction('add_warn_template', array('template' => $_POST['template_title']));
|
Chris@76
|
1926 }
|
Chris@76
|
1927
|
Chris@76
|
1928 // Get out of town...
|
Chris@76
|
1929 redirectexit('action=moderate;area=warnings;sa=templates');
|
Chris@76
|
1930 }
|
Chris@76
|
1931 }
|
Chris@76
|
1932
|
Chris@76
|
1933 // Change moderation preferences.
|
Chris@76
|
1934 function ModerationSettings()
|
Chris@76
|
1935 {
|
Chris@76
|
1936 global $context, $smcFunc, $txt, $sourcedir, $scripturl, $user_settings, $user_info;
|
Chris@76
|
1937
|
Chris@76
|
1938 // Some useful context stuff.
|
Chris@76
|
1939 loadTemplate('ModerationCenter');
|
Chris@76
|
1940 $context['page_title'] = $txt['mc_settings'];
|
Chris@76
|
1941 $context['sub_template'] = 'moderation_settings';
|
Chris@76
|
1942
|
Chris@76
|
1943 // What blocks can this user see?
|
Chris@76
|
1944 $context['homepage_blocks'] = array(
|
Chris@76
|
1945 'n' => $txt['mc_prefs_latest_news'],
|
Chris@76
|
1946 'p' => $txt['mc_notes'],
|
Chris@76
|
1947 );
|
Chris@76
|
1948 if ($context['can_moderate_groups'])
|
Chris@76
|
1949 $context['homepage_blocks']['g'] = $txt['mc_group_requests'];
|
Chris@76
|
1950 if ($context['can_moderate_boards'])
|
Chris@76
|
1951 {
|
Chris@76
|
1952 $context['homepage_blocks']['r'] = $txt['mc_reported_posts'];
|
Chris@76
|
1953 $context['homepage_blocks']['w'] = $txt['mc_watched_users'];
|
Chris@76
|
1954 }
|
Chris@76
|
1955
|
Chris@76
|
1956 // Does the user have any settings yet?
|
Chris@76
|
1957 if (empty($user_settings['mod_prefs']))
|
Chris@76
|
1958 {
|
Chris@76
|
1959 $mod_blocks = 'n' . ($context['can_moderate_boards'] ? 'wr' : '') . ($context['can_moderate_groups'] ? 'g' : '');
|
Chris@76
|
1960 $pref_binary = 5;
|
Chris@76
|
1961 $show_reports = 1;
|
Chris@76
|
1962 }
|
Chris@76
|
1963 else
|
Chris@76
|
1964 {
|
Chris@76
|
1965 list ($show_reports, $mod_blocks, $pref_binary) = explode('|', $user_settings['mod_prefs']);
|
Chris@76
|
1966 }
|
Chris@76
|
1967
|
Chris@76
|
1968 // Are we saving?
|
Chris@76
|
1969 if (isset($_POST['save']))
|
Chris@76
|
1970 {
|
Chris@76
|
1971 checkSession('post');
|
Chris@76
|
1972 /* Current format of mod_prefs is:
|
Chris@76
|
1973 x|ABCD|yyy
|
Chris@76
|
1974
|
Chris@76
|
1975 WHERE:
|
Chris@76
|
1976 x = Show report count on forum header.
|
Chris@76
|
1977 ABCD = Block indexes to show on moderation main page.
|
Chris@76
|
1978 yyy = Integer with the following bit status:
|
Chris@76
|
1979 - yyy & 1 = Always notify on reports.
|
Chris@76
|
1980 - yyy & 2 = Notify on reports for moderators only.
|
Chris@76
|
1981 - yyy & 4 = Notify about posts awaiting approval.
|
Chris@76
|
1982 */
|
Chris@76
|
1983
|
Chris@76
|
1984 // Do blocks first!
|
Chris@76
|
1985 $mod_blocks = '';
|
Chris@76
|
1986 if (!empty($_POST['mod_homepage']))
|
Chris@76
|
1987 foreach ($_POST['mod_homepage'] as $k => $v)
|
Chris@76
|
1988 {
|
Chris@76
|
1989 // Make sure they can add this...
|
Chris@76
|
1990 if (isset($context['homepage_blocks'][$k]))
|
Chris@76
|
1991 $mod_blocks .= $k;
|
Chris@76
|
1992 }
|
Chris@76
|
1993
|
Chris@76
|
1994 // Now check other options!
|
Chris@76
|
1995 $pref_binary = 0;
|
Chris@76
|
1996
|
Chris@76
|
1997 if ($context['can_moderate_approvals'] && !empty($_POST['mod_notify_approval']))
|
Chris@76
|
1998 $pref_binary |= 4;
|
Chris@76
|
1999
|
Chris@76
|
2000 if ($context['can_moderate_boards'])
|
Chris@76
|
2001 {
|
Chris@76
|
2002 if (!empty($_POST['mod_notify_report']))
|
Chris@76
|
2003 $pref_binary |= ($_POST['mod_notify_report'] == 2 ? 1 : 2);
|
Chris@76
|
2004
|
Chris@76
|
2005 $show_reports = !empty($_POST['mod_show_reports']) ? 1 : 0;
|
Chris@76
|
2006 }
|
Chris@76
|
2007
|
Chris@76
|
2008 // Put it all together.
|
Chris@76
|
2009 $mod_prefs = $show_reports . '|' . $mod_blocks . '|' . $pref_binary;
|
Chris@76
|
2010 updateMemberData($user_info['id'], array('mod_prefs' => $mod_prefs));
|
Chris@76
|
2011 }
|
Chris@76
|
2012
|
Chris@76
|
2013 // What blocks does the user currently have selected?
|
Chris@76
|
2014 $context['mod_settings'] = array(
|
Chris@76
|
2015 'show_reports' => $show_reports,
|
Chris@76
|
2016 'notify_report' => $pref_binary & 2 ? 1 : ($pref_binary & 1 ? 2 : 0),
|
Chris@76
|
2017 'notify_approval' => $pref_binary & 4,
|
Chris@76
|
2018 'user_blocks' => str_split($mod_blocks),
|
Chris@76
|
2019 );
|
Chris@76
|
2020 }
|
Chris@76
|
2021
|
Chris@76
|
2022 ?> |