Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0 / 0 |
|
100.00% |
0 / 0 |
CRAP | |
0.00% |
0 / 668 |
|
| message_options | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 434 |
|||
| anonymous function | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 2 |
|||
| define_check_option | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 18 |
|||
| define_action_option | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 39 |
|||
| define_rule_option | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 32 |
|||
| define_cond_option | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 117 |
|||
| show_defined_rules | |
0.00% |
0 / 1 |
0 | |
0.00% |
0 / 22 |
|||
| <?php | |
| /** | |
| * | |
| * This file is part of the phpBB Forum Software package. | |
| * | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com> | |
| * @license GNU General Public License, version 2 (GPL-2.0) | |
| * | |
| * For full copyright and license information, please see | |
| * the docs/CREDITS.txt file. | |
| * | |
| */ | |
| /** | |
| * @ignore | |
| */ | |
| if (!defined('IN_PHPBB')) | |
| { | |
| exit; | |
| } | |
| /** | |
| * Execute message options | |
| */ | |
| function message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions) | |
| { | |
| global $phpbb_root_path, $phpEx, $user, $template, $config, $db, $request; | |
| $redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=options"); | |
| add_form_key('ucp_pm_options'); | |
| // Change "full folder" setting - what to do if folder is full | |
| if (isset($_POST['fullfolder'])) | |
| { | |
| if (!check_form_key('ucp_pm_options')) | |
| { | |
| trigger_error('FORM_INVALID'); | |
| } | |
| $full_action = $request->variable('full_action', 0); | |
| $set_folder_id = 0; | |
| switch ($full_action) | |
| { | |
| case 1: | |
| $set_folder_id = FULL_FOLDER_DELETE; | |
| break; | |
| case 2: | |
| $set_folder_id = $request->variable('full_move_to', PRIVMSGS_INBOX); | |
| break; | |
| case 3: | |
| $set_folder_id = FULL_FOLDER_HOLD; | |
| break; | |
| default: | |
| $full_action = 0; | |
| break; | |
| } | |
| if ($full_action) | |
| { | |
| $sql = 'UPDATE ' . USERS_TABLE . ' | |
| SET user_full_folder = ' . $set_folder_id . ' | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $db->sql_query($sql); | |
| $user->data['user_full_folder'] = $set_folder_id; | |
| $message = $user->lang['FULL_FOLDER_OPTION_CHANGED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); | |
| meta_refresh(3, $redirect_url); | |
| trigger_error($message); | |
| } | |
| } | |
| // Add Folder | |
| if (isset($_POST['addfolder'])) | |
| { | |
| if (check_form_key('ucp_pm_options')) | |
| { | |
| $folder_name = $request->variable('foldername', '', true); | |
| if ($folder_name) | |
| { | |
| $sql = 'SELECT folder_name | |
| FROM ' . PRIVMSGS_FOLDER_TABLE . " | |
| WHERE folder_name = '" . $db->sql_escape($folder_name) . "' | |
| AND user_id = " . $user->data['user_id']; | |
| $result = $db->sql_query_limit($sql, 1); | |
| $row = $db->sql_fetchrow($result); | |
| $db->sql_freeresult($result); | |
| if ($row) | |
| { | |
| trigger_error(sprintf($user->lang['FOLDER_NAME_EXIST'], $folder_name)); | |
| } | |
| $sql = 'SELECT COUNT(folder_id) as num_folder | |
| FROM ' . PRIVMSGS_FOLDER_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $result = $db->sql_query($sql); | |
| $num_folder = (int) $db->sql_fetchfield('num_folder'); | |
| $db->sql_freeresult($result); | |
| if ($num_folder >= $config['pm_max_boxes']) | |
| { | |
| trigger_error('MAX_FOLDER_REACHED'); | |
| } | |
| $sql = 'INSERT INTO ' . PRIVMSGS_FOLDER_TABLE . ' ' . $db->sql_build_array('INSERT', array( | |
| 'user_id' => (int) $user->data['user_id'], | |
| 'folder_name' => $folder_name) | |
| ); | |
| $db->sql_query($sql); | |
| $msg = $user->lang['FOLDER_ADDED']; | |
| } | |
| else | |
| { | |
| $msg = $user->lang['FOLDER_NAME_EMPTY']; | |
| } | |
| } | |
| else | |
| { | |
| $msg = $user->lang['FORM_INVALID']; | |
| } | |
| $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); | |
| meta_refresh(3, $redirect_url); | |
| trigger_error($message); | |
| } | |
| // Rename folder | |
| if (isset($_POST['rename_folder'])) | |
| { | |
| if (check_form_key('ucp_pm_options')) | |
| { | |
| $new_folder_name = $request->variable('new_folder_name', '', true); | |
| $rename_folder_id= $request->variable('rename_folder_id', 0); | |
| if (!$new_folder_name) | |
| { | |
| trigger_error('NO_NEW_FOLDER_NAME'); | |
| } | |
| // Select custom folder | |
| $sql = 'SELECT folder_name, pm_count | |
| FROM ' . PRIVMSGS_FOLDER_TABLE . " | |
| WHERE user_id = {$user->data['user_id']} | |
| AND folder_id = $rename_folder_id"; | |
| $result = $db->sql_query_limit($sql, 1); | |
| $folder_row = $db->sql_fetchrow($result); | |
| $db->sql_freeresult($result); | |
| if (!$folder_row) | |
| { | |
| trigger_error('CANNOT_RENAME_FOLDER'); | |
| } | |
| $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . " | |
| SET folder_name = '" . $db->sql_escape($new_folder_name) . "' | |
| WHERE folder_id = $rename_folder_id | |
| AND user_id = {$user->data['user_id']}"; | |
| $db->sql_query($sql); | |
| $msg = $user->lang['FOLDER_RENAMED']; | |
| } | |
| else | |
| { | |
| $msg = $user->lang['FORM_INVALID']; | |
| } | |
| $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); | |
| meta_refresh(3, $redirect_url); | |
| trigger_error($message); | |
| } | |
| // Remove Folder | |
| if (isset($_POST['remove_folder'])) | |
| { | |
| $remove_folder_id = $request->variable('remove_folder_id', 0); | |
| // Default to "move all messages to inbox" | |
| $remove_action = $request->variable('remove_action', 1); | |
| $move_to = $request->variable('move_to', PRIVMSGS_INBOX); | |
| // Move to same folder? | |
| if ($remove_action == 1 && $remove_folder_id == $move_to) | |
| { | |
| trigger_error('CANNOT_MOVE_TO_SAME_FOLDER'); | |
| } | |
| // Select custom folder | |
| $sql = 'SELECT folder_name, pm_count | |
| FROM ' . PRIVMSGS_FOLDER_TABLE . " | |
| WHERE user_id = {$user->data['user_id']} | |
| AND folder_id = $remove_folder_id"; | |
| $result = $db->sql_query_limit($sql, 1); | |
| $folder_row = $db->sql_fetchrow($result); | |
| $db->sql_freeresult($result); | |
| if (!$folder_row) | |
| { | |
| trigger_error('CANNOT_REMOVE_FOLDER'); | |
| } | |
| $s_hidden_fields = array( | |
| 'remove_folder_id' => $remove_folder_id, | |
| 'remove_action' => $remove_action, | |
| 'move_to' => $move_to, | |
| 'remove_folder' => 1 | |
| ); | |
| // Do we need to confirm? | |
| if (confirm_box(true)) | |
| { | |
| // Gather message ids | |
| $sql = 'SELECT msg_id | |
| FROM ' . PRIVMSGS_TO_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id'] . " | |
| AND folder_id = $remove_folder_id"; | |
| $result = $db->sql_query($sql); | |
| $msg_ids = array(); | |
| while ($row = $db->sql_fetchrow($result)) | |
| { | |
| $msg_ids[] = (int) $row['msg_id']; | |
| } | |
| $db->sql_freeresult($result); | |
| // First of all, copy all messages to another folder... or delete all messages | |
| switch ($remove_action) | |
| { | |
| // Move Messages | |
| case 1: | |
| $num_moved = move_pm($user->data['user_id'], $user->data['message_limit'], $msg_ids, $move_to, $remove_folder_id); | |
| // Something went wrong, only partially moved? | |
| if ($num_moved != $folder_row['pm_count']) | |
| { | |
| trigger_error($user->lang('MOVE_PM_ERROR', $user->lang('MESSAGES_COUNT', (int) $folder_row['pm_count']), $num_moved)); | |
| } | |
| break; | |
| // Remove Messages | |
| case 2: | |
| delete_pm($user->data['user_id'], $msg_ids, $remove_folder_id); | |
| break; | |
| } | |
| // Remove folder | |
| $sql = 'DELETE FROM ' . PRIVMSGS_FOLDER_TABLE . " | |
| WHERE user_id = {$user->data['user_id']} | |
| AND folder_id = $remove_folder_id"; | |
| $db->sql_query($sql); | |
| // Check full folder option. If the removed folder has been specified as destination switch back to inbox | |
| if ($user->data['user_full_folder'] == $remove_folder_id) | |
| { | |
| $sql = 'UPDATE ' . USERS_TABLE . ' | |
| SET user_full_folder = ' . PRIVMSGS_INBOX . ' | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $db->sql_query($sql); | |
| $user->data['user_full_folder'] = PRIVMSGS_INBOX; | |
| } | |
| // Now make sure the folder is not used for rules | |
| // We assign another folder id (the one the messages got moved to) or assign the INBOX (to not have to remove any rule) | |
| $sql = 'UPDATE ' . PRIVMSGS_RULES_TABLE . ' SET rule_folder_id = '; | |
| $sql .= ($remove_action == 1) ? $move_to : PRIVMSGS_INBOX; | |
| $sql .= ' WHERE rule_folder_id = ' . $remove_folder_id; | |
| $db->sql_query($sql); | |
| $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=$mode"); | |
| $message = $user->lang['FOLDER_REMOVED']; | |
| meta_refresh(3, $meta_info); | |
| $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>'); | |
| trigger_error($message); | |
| } | |
| else | |
| { | |
| confirm_box(false, 'REMOVE_FOLDER', build_hidden_fields($s_hidden_fields)); | |
| } | |
| } | |
| // Add Rule | |
| if (isset($_POST['add_rule'])) | |
| { | |
| if (check_form_key('ucp_pm_options')) | |
| { | |
| $check_option = $request->variable('check_option', 0); | |
| $rule_option = $request->variable('rule_option', 0); | |
| $cond_option = $request->variable('cond_option', ''); | |
| $action_option = explode('|', $request->variable('action_option', '')); | |
| $rule_string = ($cond_option != 'none') ? $request->variable('rule_string', '', true) : ''; | |
| $rule_user_id = ($cond_option != 'none') ? $request->variable('rule_user_id', 0) : 0; | |
| $rule_group_id = ($cond_option != 'none') ? $request->variable('rule_group_id', 0) : 0; | |
| $action = (int) $action_option[0]; | |
| $folder_id = (int) $action_option[1]; | |
| if (!$action || !$check_option || !$rule_option || !$cond_option || ($cond_option != 'none' && !$rule_string)) | |
| { | |
| trigger_error('RULE_NOT_DEFINED'); | |
| } | |
| if (($cond_option == 'user' && !$rule_user_id) || ($cond_option == 'group' && !$rule_group_id)) | |
| { | |
| trigger_error('RULE_NOT_DEFINED'); | |
| } | |
| $rule_ary = array( | |
| 'user_id' => $user->data['user_id'], | |
| 'rule_check' => $check_option, | |
| 'rule_connection' => $rule_option, | |
| 'rule_string' => $rule_string, | |
| 'rule_user_id' => $rule_user_id, | |
| 'rule_group_id' => $rule_group_id, | |
| 'rule_action' => $action, | |
| 'rule_folder_id' => $folder_id | |
| ); | |
| $sql = 'SELECT rule_id | |
| FROM ' . PRIVMSGS_RULES_TABLE . ' | |
| WHERE ' . $db->sql_build_array('SELECT', $rule_ary); | |
| $result = $db->sql_query($sql); | |
| $row = $db->sql_fetchrow($result); | |
| $db->sql_freeresult($result); | |
| if ($row) | |
| { | |
| trigger_error('RULE_ALREADY_DEFINED'); | |
| } | |
| // Prevent users from flooding the rules table | |
| $sql = 'SELECT COUNT(rule_id) AS num_rules | |
| FROM ' . PRIVMSGS_RULES_TABLE . ' | |
| WHERE user_id = ' . (int) $user->data['user_id']; | |
| $result = $db->sql_query($sql); | |
| $num_rules = (int) $db->sql_fetchfield('num_rules'); | |
| $db->sql_freeresult($result); | |
| if ($num_rules >= 5000) | |
| { | |
| trigger_error('RULE_LIMIT_REACHED'); | |
| } | |
| $sql = 'INSERT INTO ' . PRIVMSGS_RULES_TABLE . ' ' . $db->sql_build_array('INSERT', $rule_ary); | |
| $db->sql_query($sql); | |
| // Set the user_message_rules bit | |
| $sql = 'UPDATE ' . USERS_TABLE . ' | |
| SET user_message_rules = 1 | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $db->sql_query($sql); | |
| $msg = $user->lang['RULE_ADDED']; | |
| } | |
| else | |
| { | |
| $msg = $user->lang['FORM_INVALID']; | |
| } | |
| $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); | |
| meta_refresh(3, $redirect_url); | |
| trigger_error($message); | |
| } | |
| // Remove Rule | |
| if (isset($_POST['delete_rule']) && !isset($_POST['cancel'])) | |
| { | |
| $delete_id = array_keys($request->variable('delete_rule', array(0 => 0))); | |
| $delete_id = (!empty($delete_id[0])) ? $delete_id[0] : 0; | |
| if (!$delete_id) | |
| { | |
| redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode)); | |
| } | |
| // Do we need to confirm? | |
| if (confirm_box(true)) | |
| { | |
| $sql = 'DELETE FROM ' . PRIVMSGS_RULES_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id'] . " | |
| AND rule_id = $delete_id"; | |
| $db->sql_query($sql); | |
| $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode); | |
| $message = $user->lang['RULE_DELETED']; | |
| // Reset user_message_rules if no more assigned | |
| $sql = 'SELECT rule_id | |
| FROM ' . PRIVMSGS_RULES_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $result = $db->sql_query_limit($sql, 1); | |
| $row = $db->sql_fetchrow($result); | |
| $db->sql_freeresult($result); | |
| // Unset the user_message_rules bit | |
| if (!$row) | |
| { | |
| $sql = 'UPDATE ' . USERS_TABLE . ' | |
| SET user_message_rules = 0 | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $db->sql_query($sql); | |
| } | |
| meta_refresh(3, $meta_info); | |
| $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>'); | |
| trigger_error($message); | |
| } | |
| else | |
| { | |
| confirm_box(false, 'DELETE_RULE', build_hidden_fields(array('delete_rule' => array($delete_id => 1)))); | |
| } | |
| } | |
| $folder = array(); | |
| $sql = 'SELECT COUNT(msg_id) as num_messages | |
| FROM ' . PRIVMSGS_TO_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id'] . ' | |
| AND folder_id = ' . PRIVMSGS_INBOX; | |
| $result = $db->sql_query($sql); | |
| $num_messages = (int) $db->sql_fetchfield('num_messages'); | |
| $db->sql_freeresult($result); | |
| $folder[PRIVMSGS_INBOX] = array( | |
| 'folder_name' => $user->lang['PM_INBOX'], | |
| 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', $user->lang('MESSAGES_COUNT', (int) $user->data['message_limit']), $num_messages), | |
| ); | |
| $sql = 'SELECT folder_id, folder_name, pm_count | |
| FROM ' . PRIVMSGS_FOLDER_TABLE . ' | |
| WHERE user_id = ' . $user->data['user_id']; | |
| $result = $db->sql_query($sql); | |
| $num_user_folder = 0; | |
| while ($row = $db->sql_fetchrow($result)) | |
| { | |
| $num_user_folder++; | |
| $folder[$row['folder_id']] = array( | |
| 'folder_name' => $row['folder_name'], | |
| 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', $user->lang('MESSAGES_COUNT', (int) $user->data['message_limit']), (int) $row['pm_count']), | |
| ); | |
| } | |
| $db->sql_freeresult($result); | |
| $s_full_folder_options = $s_to_folder_options = $s_folder_options = ''; | |
| if ($user->data['user_full_folder'] == FULL_FOLDER_NONE) | |
| { | |
| // -3 here to let the correct folder id be selected | |
| $to_folder_id = $config['full_folder_action'] - 3; | |
| } | |
| else | |
| { | |
| $to_folder_id = $user->data['user_full_folder']; | |
| } | |
| foreach ($folder as $folder_id => $folder_ary) | |
| { | |
| $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>'; | |
| $s_to_folder_options .= '<option value="' . $folder_id . '"' . (($to_folder_id == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>'; | |
| if ($folder_id != PRIVMSGS_INBOX) | |
| { | |
| $s_folder_options .= '<option value="' . $folder_id . '">' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>'; | |
| } | |
| } | |
| $s_delete_checked = ($user->data['user_full_folder'] == FULL_FOLDER_DELETE) ? ' checked="checked"' : ''; | |
| $s_hold_checked = ($user->data['user_full_folder'] == FULL_FOLDER_HOLD) ? ' checked="checked"' : ''; | |
| $s_move_checked = ($user->data['user_full_folder'] >= 0) ? ' checked="checked"' : ''; | |
| if ($user->data['user_full_folder'] == FULL_FOLDER_NONE) | |
| { | |
| switch ($config['full_folder_action']) | |
| { | |
| case 1: | |
| $s_delete_checked = ' checked="checked"'; | |
| break; | |
| case 2: | |
| $s_hold_checked = ' checked="checked"'; | |
| break; | |
| } | |
| } | |
| $template->assign_vars(array( | |
| 'S_FULL_FOLDER_OPTIONS' => $s_full_folder_options, | |
| 'S_TO_FOLDER_OPTIONS' => $s_to_folder_options, | |
| 'S_FOLDER_OPTIONS' => $s_folder_options, | |
| 'S_DELETE_CHECKED' => $s_delete_checked, | |
| 'S_HOLD_CHECKED' => $s_hold_checked, | |
| 'S_MOVE_CHECKED' => $s_move_checked, | |
| 'S_MAX_FOLDER_REACHED' => ($num_user_folder >= $config['pm_max_boxes']) ? true : false, | |
| 'S_MAX_FOLDER_ZERO' => ($config['pm_max_boxes'] == 0) ? true : false, | |
| 'DEFAULT_ACTION' => ($config['full_folder_action'] == 1) ? $user->lang['DELETE_OLDEST_MESSAGES'] : $user->lang['HOLD_NEW_MESSAGES'], | |
| 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=rule_string&select_single=true'), | |
| )); | |
| $rule_lang = $action_lang = $check_lang = array(); | |
| // Build all three language arrays | |
| preg_replace_callback('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#', function ($match) use(&$rule_lang, &$action_lang, &$check_lang, $user) { | |
| ${strtolower($match[2]) . '_lang'}[constant($match[1])] = $user->lang['PM_' . $match[2]][$match[3]]; | |
| }, array_keys(get_defined_constants())); | |
| /* | |
| Rule Ordering: | |
| -> CHECK_* -> RULE_* [IN $global_privmsgs_rules:CHECK_*] -> [IF $rule_conditions[RULE_*] [|text|bool|user|group|own_group]] -> ACTION_* | |
| */ | |
| $check_option = $request->variable('check_option', 0); | |
| $rule_option = $request->variable('rule_option', 0); | |
| $cond_option = $request->variable('cond_option', ''); | |
| $action_option = $request->variable('action_option', ''); | |
| $back = (isset($_REQUEST['back'])) ? $request->variable('back', array('' => 0)) : array(); | |
| if (count($back)) | |
| { | |
| if ($action_option) | |
| { | |
| $action_option = ''; | |
| } | |
| else if ($cond_option) | |
| { | |
| $cond_option = ''; | |
| } | |
| else if ($rule_option) | |
| { | |
| $rule_option = 0; | |
| } | |
| else if ($check_option) | |
| { | |
| $check_option = 0; | |
| } | |
| } | |
| if (isset($back['action']) && $cond_option == 'none') | |
| { | |
| $back['cond'] = true; | |
| } | |
| // Check | |
| if (!isset($global_privmsgs_rules[$check_option])) | |
| { | |
| $check_option = 0; | |
| } | |
| define_check_option(($check_option && !isset($back['rule'])) ? true : false, $check_option, $check_lang); | |
| if ($check_option && !isset($back['rule'])) | |
| { | |
| define_rule_option(($rule_option && !isset($back['cond'])) ? true : false, $rule_option, $rule_lang, $global_privmsgs_rules[$check_option]); | |
| } | |
| if ($rule_option && !isset($back['cond'])) | |
| { | |
| if (!isset($global_rule_conditions[$rule_option])) | |
| { | |
| $cond_option = 'none'; | |
| $template->assign_var('NONE_CONDITION', true); | |
| } | |
| else | |
| { | |
| define_cond_option(($cond_option && !isset($back['action'])) ? true : false, $cond_option, $rule_option, $global_rule_conditions); | |
| } | |
| } | |
| if ($cond_option && !isset($back['action'])) | |
| { | |
| define_action_option(false, $action_option, $action_lang, $folder); | |
| } | |
| show_defined_rules($user->data['user_id'], $check_lang, $rule_lang, $action_lang, $folder); | |
| } | |
| /** | |
| * Defining check option for message rules | |
| */ | |
| function define_check_option($hardcoded, $check_option, $check_lang) | |
| { | |
| global $template; | |
| $s_check_options = ''; | |
| if (!$hardcoded) | |
| { | |
| foreach ($check_lang as $value => $lang) | |
| { | |
| $s_check_options .= '<option value="' . $value . '"' . (($value == $check_option) ? ' selected="selected"' : '') . '>' . $lang . '</option>'; | |
| } | |
| } | |
| $template->assign_vars(array( | |
| 'S_CHECK_DEFINED' => true, | |
| 'S_CHECK_SELECT' => ($hardcoded) ? false : true, | |
| 'CHECK_CURRENT' => isset($check_lang[$check_option]) ? $check_lang[$check_option] : '', | |
| 'S_CHECK_OPTIONS' => $s_check_options, | |
| 'CHECK_OPTION' => $check_option) | |
| ); | |
| } | |
| /** | |
| * Defining action option for message rules | |
| */ | |
| function define_action_option($hardcoded, $action_option, $action_lang, $folder) | |
| { | |
| global $template; | |
| $l_action = $s_action_options = ''; | |
| if ($hardcoded) | |
| { | |
| $option = explode('|', $action_option); | |
| $action = (int) $option[0]; | |
| $folder_id = (int) $option[1]; | |
| $l_action = $action_lang[$action]; | |
| if ($action == ACTION_PLACE_INTO_FOLDER) | |
| { | |
| $l_action .= ' -> ' . $folder[$folder_id]['folder_name']; | |
| } | |
| } | |
| else | |
| { | |
| foreach ($action_lang as $action => $lang) | |
| { | |
| if ($action == ACTION_PLACE_INTO_FOLDER) | |
| { | |
| foreach ($folder as $folder_id => $folder_ary) | |
| { | |
| $s_action_options .= '<option value="' . $action . '|' . $folder_id . '"' . (($action_option == $action . '|' . $folder_id) ? ' selected="selected"' : '') . '>' . $lang . ' -> ' . $folder_ary['folder_name'] . '</option>'; | |
| } | |
| } | |
| else | |
| { | |
| $s_action_options .= '<option value="' . $action . '|0"' . (($action_option == $action . '|0') ? ' selected="selected"' : '') . '>' . $lang . '</option>'; | |
| } | |
| } | |
| } | |
| $template->assign_vars(array( | |
| 'S_ACTION_DEFINED' => true, | |
| 'S_ACTION_SELECT' => ($hardcoded) ? false : true, | |
| 'ACTION_CURRENT' => $l_action, | |
| 'S_ACTION_OPTIONS' => $s_action_options, | |
| 'ACTION_OPTION' => $action_option) | |
| ); | |
| } | |
| /** | |
| * Defining rule option for message rules | |
| */ | |
| function define_rule_option($hardcoded, $rule_option, $rule_lang, $check_ary) | |
| { | |
| global $template; | |
| global $module; | |
| $exclude = array(); | |
| if (!$module->loaded('zebra', 'friends')) | |
| { | |
| $exclude[RULE_IS_FRIEND] = true; | |
| } | |
| if (!$module->loaded('zebra', 'foes')) | |
| { | |
| $exclude[RULE_IS_FOE] = true; | |
| } | |
| $s_rule_options = ''; | |
| if (!$hardcoded) | |
| { | |
| foreach ($check_ary as $value => $_check) | |
| { | |
| if (isset($exclude[$value])) | |
| { | |
| continue; | |
| } | |
| $s_rule_options .= '<option value="' . $value . '"' . (($value == $rule_option) ? ' selected="selected"' : '') . '>' . $rule_lang[$value] . '</option>'; | |
| } | |
| } | |
| $template->assign_vars(array( | |
| 'S_RULE_DEFINED' => true, | |
| 'S_RULE_SELECT' => !$hardcoded, | |
| 'RULE_CURRENT' => isset($rule_lang[$rule_option]) ? $rule_lang[$rule_option] : '', | |
| 'S_RULE_OPTIONS' => $s_rule_options, | |
| 'RULE_OPTION' => $rule_option) | |
| ); | |
| } | |
| /** | |
| * Defining condition option for message rules | |
| */ | |
| function define_cond_option($hardcoded, $cond_option, $rule_option, $global_rule_conditions) | |
| { | |
| global $db, $template, $auth, $user, $request, $phpbb_container; | |
| /** @var \phpbb\group\helper $group_helper */ | |
| $group_helper = $phpbb_container->get('group_helper'); | |
| $template->assign_vars(array( | |
| 'S_COND_DEFINED' => true, | |
| 'S_COND_SELECT' => (!$hardcoded && isset($global_rule_conditions[$rule_option])) ? true : false) | |
| ); | |
| // Define COND_OPTION | |
| if (!isset($global_rule_conditions[$rule_option])) | |
| { | |
| $template->assign_vars(array( | |
| 'COND_OPTION' => 'none', | |
| 'COND_CURRENT' => false) | |
| ); | |
| return; | |
| } | |
| // Define Condition | |
| $condition = $global_rule_conditions[$rule_option]; | |
| switch ($condition) | |
| { | |
| case 'text': | |
| $rule_string = $request->variable('rule_string', '', true); | |
| $template->assign_vars(array( | |
| 'S_TEXT_CONDITION' => true, | |
| 'CURRENT_STRING' => $rule_string, | |
| 'CURRENT_USER_ID' => 0, | |
| 'CURRENT_GROUP_ID' => 0) | |
| ); | |
| $current_value = $rule_string; | |
| break; | |
| case 'user': | |
| $rule_user_id = $request->variable('rule_user_id', 0); | |
| $rule_string = $request->variable('rule_string', '', true); | |
| if ($rule_string && !$rule_user_id) | |
| { | |
| $sql = 'SELECT user_id | |
| FROM ' . USERS_TABLE . " | |
| WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($rule_string)) . "'"; | |
| $result = $db->sql_query($sql); | |
| $rule_user_id = (int) $db->sql_fetchfield('user_id'); | |
| $db->sql_freeresult($result); | |
| if (!$rule_user_id) | |
| { | |
| $rule_string = ''; | |
| } | |
| } | |
| else if (!$rule_string && $rule_user_id) | |
| { | |
| $sql = 'SELECT username | |
| FROM ' . USERS_TABLE . " | |
| WHERE user_id = $rule_user_id"; | |
| $result = $db->sql_query($sql); | |
| $rule_string = $db->sql_fetchfield('username'); | |
| $db->sql_freeresult($result); | |
| if (!$rule_string) | |
| { | |
| $rule_user_id = 0; | |
| } | |
| } | |
| $template->assign_vars(array( | |
| 'S_USER_CONDITION' => true, | |
| 'CURRENT_STRING' => $rule_string, | |
| 'CURRENT_USER_ID' => $rule_user_id, | |
| 'CURRENT_GROUP_ID' => 0) | |
| ); | |
| $current_value = $rule_string; | |
| break; | |
| case 'group': | |
| $rule_group_id = $request->variable('rule_group_id', 0); | |
| $rule_string = $request->variable('rule_string', '', true); | |
| $sql = 'SELECT g.group_id, g.group_name, g.group_type | |
| FROM ' . GROUPS_TABLE . ' g '; | |
| if (!$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) | |
| { | |
| $sql .= 'LEFT JOIN ' . USER_GROUP_TABLE . ' ug | |
| ON ( | |
| g.group_id = ug.group_id | |
| AND ug.user_id = ' . $user->data['user_id'] . ' | |
| AND ug.user_pending = 0 | |
| ) | |
| WHERE (ug.user_id = ' . $user->data['user_id'] . ' OR g.group_type <> ' . GROUP_HIDDEN . ') | |
| AND'; | |
| } | |
| else | |
| { | |
| $sql .= 'WHERE'; | |
| } | |
| $sql .= " (g.group_name NOT IN ('GUESTS', 'BOTS') OR g.group_type <> " . GROUP_SPECIAL . ') | |
| ORDER BY g.group_type DESC, g.group_name ASC'; | |
| $result = $db->sql_query($sql); | |
| $s_group_options = ''; | |
| while ($row = $db->sql_fetchrow($result)) | |
| { | |
| if ($rule_group_id && ($row['group_id'] == $rule_group_id)) | |
| { | |
| $rule_string = $group_helper->get_name($row['group_name']); | |
| } | |
| $s_class = ($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : ''; | |
| $s_selected = ($row['group_id'] == $rule_group_id) ? ' selected="selected"' : ''; | |
| $s_group_options .= '<option value="' . $row['group_id'] . '"' . $s_class . $s_selected . '>' . $group_helper->get_name($row['group_name']) . '</option>'; | |
| } | |
| $db->sql_freeresult($result); | |
| $template->assign_vars(array( | |
| 'S_GROUP_CONDITION' => true, | |
| 'S_GROUP_OPTIONS' => $s_group_options, | |
| 'CURRENT_STRING' => $rule_string, | |
| 'CURRENT_USER_ID' => 0, | |
| 'CURRENT_GROUP_ID' => $rule_group_id) | |
| ); | |
| $current_value = $rule_string; | |
| break; | |
| default: | |
| return; | |
| } | |
| $template->assign_vars(array( | |
| 'COND_OPTION' => $condition, | |
| 'COND_CURRENT' => $current_value) | |
| ); | |
| } | |
| /** | |
| * Display defined message rules | |
| */ | |
| function show_defined_rules($user_id, $check_lang, $rule_lang, $action_lang, $folder) | |
| { | |
| global $db, $template; | |
| $sql = 'SELECT * | |
| FROM ' . PRIVMSGS_RULES_TABLE . ' | |
| WHERE user_id = ' . $user_id . ' | |
| ORDER BY rule_id ASC'; | |
| $result = $db->sql_query($sql); | |
| $count = 0; | |
| while ($row = $db->sql_fetchrow($result)) | |
| { | |
| $template->assign_block_vars('rule', array( | |
| 'COUNT' => ++$count, | |
| 'RULE_ID' => $row['rule_id'], | |
| 'CHECK' => $check_lang[$row['rule_check']], | |
| 'RULE' => $rule_lang[$row['rule_connection']], | |
| 'STRING' => $row['rule_string'], | |
| 'ACTION' => $action_lang[$row['rule_action']], | |
| 'FOLDER' => ($row['rule_action'] == ACTION_PLACE_INTO_FOLDER) ? $folder[$row['rule_folder_id']]['folder_name'] : '') | |
| ); | |
| } | |
| $db->sql_freeresult($result); | |
| } |