Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
ucp_pm_options.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 /**
015 * @ignore
016 */
017 if (!defined('IN_PHPBB'))
018 {
019 exit;
020 }
021
022 /**
023 * Execute message options
024 */
025 function message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions)
026 {
027 global $phpbb_root_path, $phpEx, $user, $template, $config, $db, $request;
028
029 $redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=options");
030
031 add_form_key('ucp_pm_options');
032 // Change "full folder" setting - what to do if folder is full
033 if (isset($_POST['fullfolder']))
034 {
035 if (!check_form_key('ucp_pm_options'))
036 {
037 trigger_error('FORM_INVALID');
038 }
039
040 $full_action = $request->variable('full_action', 0);
041
042 $set_folder_id = 0;
043 switch ($full_action)
044 {
045 case 1:
046 $set_folder_id = FULL_FOLDER_DELETE;
047 break;
048
049 case 2:
050 $set_folder_id = $request->variable('full_move_to', PRIVMSGS_INBOX);
051 break;
052
053 case 3:
054 $set_folder_id = FULL_FOLDER_HOLD;
055 break;
056
057 default:
058 $full_action = 0;
059 break;
060 }
061
062 if ($full_action)
063 {
064 $sql = 'UPDATE ' . USERS_TABLE . '
065 SET user_full_folder = ' . $set_folder_id . '
066 WHERE user_id = ' . $user->data['user_id'];
067 $db->sql_query($sql);
068
069 $user->data['user_full_folder'] = $set_folder_id;
070
071 $message = $user->lang['FULL_FOLDER_OPTION_CHANGED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
072 meta_refresh(3, $redirect_url);
073 trigger_error($message);
074 }
075 }
076
077 // Add Folder
078 if (isset($_POST['addfolder']))
079 {
080 if (check_form_key('ucp_pm_options'))
081 {
082 $folder_name = $request->variable('foldername', '', true);
083
084 if ($folder_name)
085 {
086 $sql = 'SELECT folder_name
087 FROM ' . PRIVMSGS_FOLDER_TABLE . "
088 WHERE folder_name = '" . $db->sql_escape($folder_name) . "'
089 AND user_id = " . $user->data['user_id'];
090 $result = $db->sql_query_limit($sql, 1);
091 $row = $db->sql_fetchrow($result);
092 $db->sql_freeresult($result);
093
094 if ($row)
095 {
096 trigger_error(sprintf($user->lang['FOLDER_NAME_EXIST'], $folder_name));
097 }
098
099 $sql = 'SELECT COUNT(folder_id) as num_folder
100 FROM ' . PRIVMSGS_FOLDER_TABLE . '
101 WHERE user_id = ' . $user->data['user_id'];
102 $result = $db->sql_query($sql);
103 $num_folder = (int) $db->sql_fetchfield('num_folder');
104 $db->sql_freeresult($result);
105
106 if ($num_folder >= $config['pm_max_boxes'])
107 {
108 trigger_error('MAX_FOLDER_REACHED');
109 }
110
111 $sql = 'INSERT INTO ' . PRIVMSGS_FOLDER_TABLE . ' ' . $db->sql_build_array('INSERT', array(
112 'user_id' => (int) $user->data['user_id'],
113 'folder_name' => $folder_name)
114 );
115 $db->sql_query($sql);
116 $msg = $user->lang['FOLDER_ADDED'];
117 }
118 else
119 {
120 $msg = $user->lang['FOLDER_NAME_EMPTY'];
121 }
122 }
123 else
124 {
125 $msg = $user->lang['FORM_INVALID'];
126 }
127 $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
128 meta_refresh(3, $redirect_url);
129 trigger_error($message);
130 }
131
132 // Rename folder
133 if (isset($_POST['rename_folder']))
134 {
135 if (check_form_key('ucp_pm_options'))
136 {
137 $new_folder_name = $request->variable('new_folder_name', '', true);
138 $rename_folder_id= $request->variable('rename_folder_id', 0);
139
140 if (!$new_folder_name)
141 {
142 trigger_error('NO_NEW_FOLDER_NAME');
143 }
144
145 // Select custom folder
146 $sql = 'SELECT folder_name, pm_count
147 FROM ' . PRIVMSGS_FOLDER_TABLE . "
148 WHERE user_id = {$user->data['user_id']}
149 AND folder_id = $rename_folder_id";
150 $result = $db->sql_query_limit($sql, 1);
151 $folder_row = $db->sql_fetchrow($result);
152 $db->sql_freeresult($result);
153
154 if (!$folder_row)
155 {
156 trigger_error('CANNOT_RENAME_FOLDER');
157 }
158
159 $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . "
160 SET folder_name = '" . $db->sql_escape($new_folder_name) . "'
161 WHERE folder_id = $rename_folder_id
162 AND user_id = {$user->data['user_id']}";
163 $db->sql_query($sql);
164 $msg = $user->lang['FOLDER_RENAMED'];
165 }
166 else
167 {
168 $msg = $user->lang['FORM_INVALID'];
169 }
170
171 $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
172
173 meta_refresh(3, $redirect_url);
174 trigger_error($message);
175 }
176
177 // Remove Folder
178 if (isset($_POST['remove_folder']))
179 {
180 $remove_folder_id = $request->variable('remove_folder_id', 0);
181
182 // Default to "move all messages to inbox"
183 $remove_action = $request->variable('remove_action', 1);
184 $move_to = $request->variable('move_to', PRIVMSGS_INBOX);
185
186 // Move to same folder?
187 if ($remove_action == 1 && $remove_folder_id == $move_to)
188 {
189 trigger_error('CANNOT_MOVE_TO_SAME_FOLDER');
190 }
191
192 // Select custom folder
193 $sql = 'SELECT folder_name, pm_count
194 FROM ' . PRIVMSGS_FOLDER_TABLE . "
195 WHERE user_id = {$user->data['user_id']}
196 AND folder_id = $remove_folder_id";
197 $result = $db->sql_query_limit($sql, 1);
198 $folder_row = $db->sql_fetchrow($result);
199 $db->sql_freeresult($result);
200
201 if (!$folder_row)
202 {
203 trigger_error('CANNOT_REMOVE_FOLDER');
204 }
205
206 $s_hidden_fields = array(
207 'remove_folder_id' => $remove_folder_id,
208 'remove_action' => $remove_action,
209 'move_to' => $move_to,
210 'remove_folder' => 1
211 );
212
213 // Do we need to confirm?
214 if (confirm_box(true))
215 {
216 // Gather message ids
217 $sql = 'SELECT msg_id
218 FROM ' . PRIVMSGS_TO_TABLE . '
219 WHERE user_id = ' . $user->data['user_id'] . "
220 AND folder_id = $remove_folder_id";
221 $result = $db->sql_query($sql);
222
223 $msg_ids = array();
224 while ($row = $db->sql_fetchrow($result))
225 {
226 $msg_ids[] = (int) $row['msg_id'];
227 }
228 $db->sql_freeresult($result);
229
230 // First of all, copy all messages to another folder... or delete all messages
231 switch ($remove_action)
232 {
233 // Move Messages
234 case 1:
235 $num_moved = move_pm($user->data['user_id'], $user->data['message_limit'], $msg_ids, $move_to, $remove_folder_id);
236
237 // Something went wrong, only partially moved?
238 if ($num_moved != $folder_row['pm_count'])
239 {
240 trigger_error($user->lang('MOVE_PM_ERROR', $user->lang('MESSAGES_COUNT', (int) $folder_row['pm_count']), $num_moved));
241 }
242 break;
243
244 // Remove Messages
245 case 2:
246 delete_pm($user->data['user_id'], $msg_ids, $remove_folder_id);
247 break;
248 }
249
250 // Remove folder
251 $sql = 'DELETE FROM ' . PRIVMSGS_FOLDER_TABLE . "
252 WHERE user_id = {$user->data['user_id']}
253 AND folder_id = $remove_folder_id";
254 $db->sql_query($sql);
255
256 // Check full folder option. If the removed folder has been specified as destination switch back to inbox
257 if ($user->data['user_full_folder'] == $remove_folder_id)
258 {
259 $sql = 'UPDATE ' . USERS_TABLE . '
260 SET user_full_folder = ' . PRIVMSGS_INBOX . '
261 WHERE user_id = ' . $user->data['user_id'];
262 $db->sql_query($sql);
263
264 $user->data['user_full_folder'] = PRIVMSGS_INBOX;
265 }
266
267 // Now make sure the folder is not used for rules
268 // We assign another folder id (the one the messages got moved to) or assign the INBOX (to not have to remove any rule)
269 $sql = 'UPDATE ' . PRIVMSGS_RULES_TABLE . ' SET rule_folder_id = ';
270 $sql .= ($remove_action == 1) ? $move_to : PRIVMSGS_INBOX;
271 $sql .= ' WHERE rule_folder_id = ' . $remove_folder_id;
272
273 $db->sql_query($sql);
274
275 $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=$mode");
276 $message = $user->lang['FOLDER_REMOVED'];
277
278 meta_refresh(3, $meta_info);
279 $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>');
280 trigger_error($message);
281 }
282 else
283 {
284 confirm_box(false, 'REMOVE_FOLDER', build_hidden_fields($s_hidden_fields));
285 }
286 }
287
288 // Add Rule
289 if (isset($_POST['add_rule']))
290 {
291 if (check_form_key('ucp_pm_options'))
292 {
293 $check_option = $request->variable('check_option', 0);
294 $rule_option = $request->variable('rule_option', 0);
295 $cond_option = $request->variable('cond_option', '');
296 $action_option = explode('|', $request->variable('action_option', ''));
297 $rule_string = ($cond_option != 'none') ? $request->variable('rule_string', '', true) : '';
298 $rule_user_id = ($cond_option != 'none') ? $request->variable('rule_user_id', 0) : 0;
299 $rule_group_id = ($cond_option != 'none') ? $request->variable('rule_group_id', 0) : 0;
300
301 $action = (int) $action_option[0];
302 $folder_id = (int) $action_option[1];
303
304 if (!$action || !$check_option || !$rule_option || !$cond_option || ($cond_option != 'none' && !$rule_string))
305 {
306 trigger_error('RULE_NOT_DEFINED');
307 }
308
309 if (($cond_option == 'user' && !$rule_user_id) || ($cond_option == 'group' && !$rule_group_id))
310 {
311 trigger_error('RULE_NOT_DEFINED');
312 }
313
314 $rule_ary = array(
315 'user_id' => $user->data['user_id'],
316 'rule_check' => $check_option,
317 'rule_connection' => $rule_option,
318 'rule_string' => $rule_string,
319 'rule_user_id' => $rule_user_id,
320 'rule_group_id' => $rule_group_id,
321 'rule_action' => $action,
322 'rule_folder_id' => $folder_id
323 );
324
325 $sql = 'SELECT rule_id
326 FROM ' . PRIVMSGS_RULES_TABLE . '
327 WHERE ' . $db->sql_build_array('SELECT', $rule_ary);
328 $result = $db->sql_query($sql);
329 $row = $db->sql_fetchrow($result);
330 $db->sql_freeresult($result);
331
332 if ($row)
333 {
334 trigger_error('RULE_ALREADY_DEFINED');
335 }
336
337 // Prevent users from flooding the rules table
338 $sql = 'SELECT COUNT(rule_id) AS num_rules
339 FROM ' . PRIVMSGS_RULES_TABLE . '
340 WHERE user_id = ' . (int) $user->data['user_id'];
341 $result = $db->sql_query($sql);
342 $num_rules = (int) $db->sql_fetchfield('num_rules');
343 $db->sql_freeresult($result);
344
345 if ($num_rules >= 5000)
346 {
347 trigger_error('RULE_LIMIT_REACHED');
348 }
349
350 $sql = 'INSERT INTO ' . PRIVMSGS_RULES_TABLE . ' ' . $db->sql_build_array('INSERT', $rule_ary);
351 $db->sql_query($sql);
352
353 // Set the user_message_rules bit
354 $sql = 'UPDATE ' . USERS_TABLE . '
355 SET user_message_rules = 1
356 WHERE user_id = ' . $user->data['user_id'];
357 $db->sql_query($sql);
358
359 $msg = $user->lang['RULE_ADDED'];
360 }
361 else
362 {
363 $msg = $user->lang['FORM_INVALID'];
364 }
365 $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
366 meta_refresh(3, $redirect_url);
367 trigger_error($message);
368 }
369
370 // Remove Rule
371 if (isset($_POST['delete_rule']) && !isset($_POST['cancel']))
372 {
373 $delete_id = array_keys($request->variable('delete_rule', array(0 => 0)));
374 $delete_id = (!empty($delete_id[0])) ? $delete_id[0] : 0;
375
376 if (!$delete_id)
377 {
378 redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode));
379 }
380
381 // Do we need to confirm?
382 if (confirm_box(true))
383 {
384 $sql = 'DELETE FROM ' . PRIVMSGS_RULES_TABLE . '
385 WHERE user_id = ' . $user->data['user_id'] . "
386 AND rule_id = $delete_id";
387 $db->sql_query($sql);
388
389 $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode);
390 $message = $user->lang['RULE_DELETED'];
391
392 // Reset user_message_rules if no more assigned
393 $sql = 'SELECT rule_id
394 FROM ' . PRIVMSGS_RULES_TABLE . '
395 WHERE user_id = ' . $user->data['user_id'];
396 $result = $db->sql_query_limit($sql, 1);
397 $row = $db->sql_fetchrow($result);
398 $db->sql_freeresult($result);
399
400 // Unset the user_message_rules bit
401 if (!$row)
402 {
403 $sql = 'UPDATE ' . USERS_TABLE . '
404 SET user_message_rules = 0
405 WHERE user_id = ' . $user->data['user_id'];
406 $db->sql_query($sql);
407 }
408
409 meta_refresh(3, $meta_info);
410 $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>');
411 trigger_error($message);
412 }
413 else
414 {
415 confirm_box(false, 'DELETE_RULE', build_hidden_fields(array('delete_rule' => array($delete_id => 1))));
416 }
417 }
418
419 $folder = array();
420
421 $sql = 'SELECT COUNT(msg_id) as num_messages
422 FROM ' . PRIVMSGS_TO_TABLE . '
423 WHERE user_id = ' . $user->data['user_id'] . '
424 AND folder_id = ' . PRIVMSGS_INBOX;
425 $result = $db->sql_query($sql);
426 $num_messages = (int) $db->sql_fetchfield('num_messages');
427 $db->sql_freeresult($result);
428
429 $folder[PRIVMSGS_INBOX] = array(
430 'folder_name' => $user->lang['PM_INBOX'],
431 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', $user->lang('MESSAGES_COUNT', (int) $user->data['message_limit']), $num_messages),
432 );
433
434 $sql = 'SELECT folder_id, folder_name, pm_count
435 FROM ' . PRIVMSGS_FOLDER_TABLE . '
436 WHERE user_id = ' . $user->data['user_id'];
437 $result = $db->sql_query($sql);
438
439 $num_user_folder = 0;
440 while ($row = $db->sql_fetchrow($result))
441 {
442 $num_user_folder++;
443 $folder[$row['folder_id']] = array(
444 'folder_name' => $row['folder_name'],
445 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', $user->lang('MESSAGES_COUNT', (int) $user->data['message_limit']), (int) $row['pm_count']),
446 );
447 }
448 $db->sql_freeresult($result);
449
450 $s_full_folder_options = $s_to_folder_options = $s_folder_options = '';
451
452 if ($user->data['user_full_folder'] == FULL_FOLDER_NONE)
453 {
454 // -3 here to let the correct folder id be selected
455 $to_folder_id = $config['full_folder_action'] - 3;
456 }
457 else
458 {
459 $to_folder_id = $user->data['user_full_folder'];
460 }
461
462 foreach ($folder as $folder_id => $folder_ary)
463 {
464 $s_full_folder_options .= '<option value="' . $folder_id . '"' . (($user->data['user_full_folder'] == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>';
465 $s_to_folder_options .= '<option value="' . $folder_id . '"' . (($to_folder_id == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>';
466
467 if ($folder_id != PRIVMSGS_INBOX)
468 {
469 $s_folder_options .= '<option value="' . $folder_id . '">' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>';
470 }
471 }
472
473 $s_delete_checked = ($user->data['user_full_folder'] == FULL_FOLDER_DELETE) ? ' checked="checked"' : '';
474 $s_hold_checked = ($user->data['user_full_folder'] == FULL_FOLDER_HOLD) ? ' checked="checked"' : '';
475 $s_move_checked = ($user->data['user_full_folder'] >= 0) ? ' checked="checked"' : '';
476
477 if ($user->data['user_full_folder'] == FULL_FOLDER_NONE)
478 {
479 switch ($config['full_folder_action'])
480 {
481 case 1:
482 $s_delete_checked = ' checked="checked"';
483 break;
484
485 case 2:
486 $s_hold_checked = ' checked="checked"';
487 break;
488 }
489 }
490
491 $template->assign_vars(array(
492 'S_FULL_FOLDER_OPTIONS' => $s_full_folder_options,
493 'S_TO_FOLDER_OPTIONS' => $s_to_folder_options,
494 'S_FOLDER_OPTIONS' => $s_folder_options,
495 'S_DELETE_CHECKED' => $s_delete_checked,
496 'S_HOLD_CHECKED' => $s_hold_checked,
497 'S_MOVE_CHECKED' => $s_move_checked,
498 'S_MAX_FOLDER_REACHED' => ($num_user_folder >= $config['pm_max_boxes']) ? true : false,
499 'S_MAX_FOLDER_ZERO' => ($config['pm_max_boxes'] == 0) ? true : false,
500
501 'DEFAULT_ACTION' => ($config['full_folder_action'] == 1) ? $user->lang['DELETE_OLDEST_MESSAGES'] : $user->lang['HOLD_NEW_MESSAGES'],
502
503 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=rule_string&select_single=true'),
504 ));
505
506 $rule_lang = $action_lang = $check_lang = array();
507
508 // Build all three language arrays
509 preg_replace_callback('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#', function ($match) use(&$rule_lang, &$action_lang, &$check_lang, $user) {
510 ${strtolower($match[2]) . '_lang'}[constant($match[1])] = $user->lang['PM_' . $match[2]][$match[3]];
511 }, array_keys(get_defined_constants()));
512
513 /*
514 Rule Ordering:
515 -> CHECK_* -> RULE_* [IN $global_privmsgs_rules:CHECK_*] -> [IF $rule_conditions[RULE_*] [|text|bool|user|group|own_group]] -> ACTION_*
516 */
517
518 $check_option = $request->variable('check_option', 0);
519 $rule_option = $request->variable('rule_option', 0);
520 $cond_option = $request->variable('cond_option', '');
521 $action_option = $request->variable('action_option', '');
522 $back = (isset($_REQUEST['back'])) ? $request->variable('back', array('' => 0)) : array();
523
524 if (sizeof($back))
525 {
526 if ($action_option)
527 {
528 $action_option = '';
529 }
530 else if ($cond_option)
531 {
532 $cond_option = '';
533 }
534 else if ($rule_option)
535 {
536 $rule_option = 0;
537 }
538 else if ($check_option)
539 {
540 $check_option = 0;
541 }
542 }
543
544 if (isset($back['action']) && $cond_option == 'none')
545 {
546 $back['cond'] = true;
547 }
548
549 // Check
550 if (!isset($global_privmsgs_rules[$check_option]))
551 {
552 $check_option = 0;
553 }
554
555 define_check_option(($check_option && !isset($back['rule'])) ? true : false, $check_option, $check_lang);
556
557 if ($check_option && !isset($back['rule']))
558 {
559 define_rule_option(($rule_option && !isset($back['cond'])) ? true : false, $rule_option, $rule_lang, $global_privmsgs_rules[$check_option]);
560 }
561
562 if ($rule_option && !isset($back['cond']))
563 {
564 if (!isset($global_rule_conditions[$rule_option]))
565 {
566 $cond_option = 'none';
567 $template->assign_var('NONE_CONDITION', true);
568 }
569 else
570 {
571 define_cond_option(($cond_option && !isset($back['action'])) ? true : false, $cond_option, $rule_option, $global_rule_conditions);
572 }
573 }
574
575 if ($cond_option && !isset($back['action']))
576 {
577 define_action_option(false, $action_option, $action_lang, $folder);
578 }
579
580 show_defined_rules($user->data['user_id'], $check_lang, $rule_lang, $action_lang, $folder);
581 }
582
583 /**
584 * Defining check option for message rules
585 */
586 function define_check_option($hardcoded, $check_option, $check_lang)
587 {
588 global $template;
589
590 $s_check_options = '';
591 if (!$hardcoded)
592 {
593 foreach ($check_lang as $value => $lang)
594 {
595 $s_check_options .= '<option value="' . $value . '"' . (($value == $check_option) ? ' selected="selected"' : '') . '>' . $lang . '</option>';
596 }
597 }
598
599 $template->assign_vars(array(
600 'S_CHECK_DEFINED' => true,
601 'S_CHECK_SELECT' => ($hardcoded) ? false : true,
602 'CHECK_CURRENT' => isset($check_lang[$check_option]) ? $check_lang[$check_option] : '',
603 'S_CHECK_OPTIONS' => $s_check_options,
604 'CHECK_OPTION' => $check_option)
605 );
606 }
607
608 /**
609 * Defining action option for message rules
610 */
611 function define_action_option($hardcoded, $action_option, $action_lang, $folder)
612 {
613 global $template;
614
615 $l_action = $s_action_options = '';
616 if ($hardcoded)
617 {
618 $option = explode('|', $action_option);
619 $action = (int) $option[0];
620 $folder_id = (int) $option[1];
621
622 $l_action = $action_lang[$action];
623 if ($action == ACTION_PLACE_INTO_FOLDER)
624 {
625 $l_action .= ' -> ' . $folder[$folder_id]['folder_name'];
626 }
627 }
628 else
629 {
630 foreach ($action_lang as $action => $lang)
631 {
632 if ($action == ACTION_PLACE_INTO_FOLDER)
633 {
634 foreach ($folder as $folder_id => $folder_ary)
635 {
636 $s_action_options .= '<option value="' . $action . '|' . $folder_id . '"' . (($action_option == $action . '|' . $folder_id) ? ' selected="selected"' : '') . '>' . $lang . ' -> ' . $folder_ary['folder_name'] . '</option>';
637 }
638 }
639 else
640 {
641 $s_action_options .= '<option value="' . $action . '|0"' . (($action_option == $action . '|0') ? ' selected="selected"' : '') . '>' . $lang . '</option>';
642 }
643 }
644 }
645
646 $template->assign_vars(array(
647 'S_ACTION_DEFINED' => true,
648 'S_ACTION_SELECT' => ($hardcoded) ? false : true,
649 'ACTION_CURRENT' => $l_action,
650 'S_ACTION_OPTIONS' => $s_action_options,
651 'ACTION_OPTION' => $action_option)
652 );
653 }
654
655 /**
656 * Defining rule option for message rules
657 */
658 function define_rule_option($hardcoded, $rule_option, $rule_lang, $check_ary)
659 {
660 global $template;
661 global $module;
662
663 $exclude = array();
664
665 if (!$module->loaded('zebra', 'friends'))
666 {
667 $exclude[RULE_IS_FRIEND] = true;
668 }
669
670 if (!$module->loaded('zebra', 'foes'))
671 {
672 $exclude[RULE_IS_FOE] = true;
673 }
674
675 $s_rule_options = '';
676 if (!$hardcoded)
677 {
678 foreach ($check_ary as $value => $_check)
679 {
680 if (isset($exclude[$value]))
681 {
682 continue;
683 }
684 $s_rule_options .= '<option value="' . $value . '"' . (($value == $rule_option) ? ' selected="selected"' : '') . '>' . $rule_lang[$value] . '</option>';
685 }
686 }
687
688 $template->assign_vars(array(
689 'S_RULE_DEFINED' => true,
690 'S_RULE_SELECT' => !$hardcoded,
691 'RULE_CURRENT' => isset($rule_lang[$rule_option]) ? $rule_lang[$rule_option] : '',
692 'S_RULE_OPTIONS' => $s_rule_options,
693 'RULE_OPTION' => $rule_option)
694 );
695 }
696
697 /**
698 * Defining condition option for message rules
699 */
700 function define_cond_option($hardcoded, $cond_option, $rule_option, $global_rule_conditions)
701 {
702 global $db, $template, $auth, $user, $request, $phpbb_container;
703
704 /** @var \phpbb\group\helper $group_helper */
705 $group_helper = $phpbb_container->get('group_helper');
706
707 $template->assign_vars(array(
708 'S_COND_DEFINED' => true,
709 'S_COND_SELECT' => (!$hardcoded && isset($global_rule_conditions[$rule_option])) ? true : false)
710 );
711
712 // Define COND_OPTION
713 if (!isset($global_rule_conditions[$rule_option]))
714 {
715 $template->assign_vars(array(
716 'COND_OPTION' => 'none',
717 'COND_CURRENT' => false)
718 );
719 return;
720 }
721
722 // Define Condition
723 $condition = $global_rule_conditions[$rule_option];
724
725 switch ($condition)
726 {
727 case 'text':
728 $rule_string = $request->variable('rule_string', '', true);
729
730 $template->assign_vars(array(
731 'S_TEXT_CONDITION' => true,
732 'CURRENT_STRING' => $rule_string,
733 'CURRENT_USER_ID' => 0,
734 'CURRENT_GROUP_ID' => 0)
735 );
736
737 $current_value = $rule_string;
738 break;
739
740 case 'user':
741 $rule_user_id = $request->variable('rule_user_id', 0);
742 $rule_string = $request->variable('rule_string', '', true);
743
744 if ($rule_string && !$rule_user_id)
745 {
746 $sql = 'SELECT user_id
747 FROM ' . USERS_TABLE . "
748 WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($rule_string)) . "'";
749 $result = $db->sql_query($sql);
750 $rule_user_id = (int) $db->sql_fetchfield('user_id');
751 $db->sql_freeresult($result);
752
753 if (!$rule_user_id)
754 {
755 $rule_string = '';
756 }
757 }
758 else if (!$rule_string && $rule_user_id)
759 {
760 $sql = 'SELECT username
761 FROM ' . USERS_TABLE . "
762 WHERE user_id = $rule_user_id";
763 $result = $db->sql_query($sql);
764 $rule_string = $db->sql_fetchfield('username');
765 $db->sql_freeresult($result);
766
767 if (!$rule_string)
768 {
769 $rule_user_id = 0;
770 }
771 }
772
773 $template->assign_vars(array(
774 'S_USER_CONDITION' => true,
775 'CURRENT_STRING' => $rule_string,
776 'CURRENT_USER_ID' => $rule_user_id,
777 'CURRENT_GROUP_ID' => 0)
778 );
779
780 $current_value = $rule_string;
781 break;
782
783 case 'group':
784 $rule_group_id = $request->variable('rule_group_id', 0);
785 $rule_string = $request->variable('rule_string', '', true);
786
787 $sql = 'SELECT g.group_id, g.group_name, g.group_type
788 FROM ' . GROUPS_TABLE . ' g ';
789
790 if (!$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
791 {
792 $sql .= 'LEFT JOIN ' . USER_GROUP_TABLE . ' ug
793 ON (
794 g.group_id = ug.group_id
795 AND ug.user_id = ' . $user->data['user_id'] . '
796 AND ug.user_pending = 0
797 )
798 WHERE (ug.user_id = ' . $user->data['user_id'] . ' OR g.group_type <> ' . GROUP_HIDDEN . ')
799 AND';
800 }
801 else
802 {
803 $sql .= 'WHERE';
804 }
805
806 $sql .= " (g.group_name NOT IN ('GUESTS', 'BOTS') OR g.group_type <> " . GROUP_SPECIAL . ')
807 ORDER BY g.group_type DESC, g.group_name ASC';
808
809 $result = $db->sql_query($sql);
810
811 $s_group_options = '';
812 while ($row = $db->sql_fetchrow($result))
813 {
814 if ($rule_group_id && ($row['group_id'] == $rule_group_id))
815 {
816 $rule_string = $group_helper->get_name($row['group_name']);
817 }
818
819 $s_class = ($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '';
820 $s_selected = ($row['group_id'] == $rule_group_id) ? ' selected="selected"' : '';
821
822 $s_group_options .= '<option value="' . $row['group_id'] . '"' . $s_class . $s_selected . '>' . $group_helper->get_name($row['group_name']) . '</option>';
823 }
824 $db->sql_freeresult($result);
825
826 $template->assign_vars(array(
827 'S_GROUP_CONDITION' => true,
828 'S_GROUP_OPTIONS' => $s_group_options,
829 'CURRENT_STRING' => $rule_string,
830 'CURRENT_USER_ID' => 0,
831 'CURRENT_GROUP_ID' => $rule_group_id)
832 );
833
834 $current_value = $rule_string;
835 break;
836
837 default:
838 return;
839 }
840
841 $template->assign_vars(array(
842 'COND_OPTION' => $condition,
843 'COND_CURRENT' => $current_value)
844 );
845 }
846
847 /**
848 * Display defined message rules
849 */
850 function show_defined_rules($user_id, $check_lang, $rule_lang, $action_lang, $folder)
851 {
852 global $db, $template;
853
854 $sql = 'SELECT *
855 FROM ' . PRIVMSGS_RULES_TABLE . '
856 WHERE user_id = ' . $user_id . '
857 ORDER BY rule_id ASC';
858 $result = $db->sql_query($sql);
859
860 $count = 0;
861 while ($row = $db->sql_fetchrow($result))
862 {
863 $template->assign_block_vars('rule', array(
864 'COUNT' => ++$count,
865 'RULE_ID' => $row['rule_id'],
866 'CHECK' => $check_lang[$row['rule_check']],
867 'RULE' => $rule_lang[$row['rule_connection']],
868 'STRING' => $row['rule_string'],
869 'ACTION' => $action_lang[$row['rule_action']],
870 'FOLDER' => ($row['rule_action'] == ACTION_PLACE_INTO_FOLDER) ? $folder[$row['rule_folder_id']]['folder_name'] : '')
871 );
872 }
873 $db->sql_freeresult($result);
874 }
875