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); | |
} |