[ Index ] |
PHP Cross Reference of phpBB 3.0 Beta 3 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package ucp 5 * @version $Id: ucp_pm_options.php,v 1.21 2006/11/12 14:29:32 naderman Exp $ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * Execute message options 13 */ 14 function message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions) 15 { 16 global $phpbb_root_path, $phpEx, $user, $template, $auth, $config, $db; 17 18 $redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=options"); 19 20 // Change "full folder" setting - what to do if folder is full 21 if (isset($_POST['fullfolder'])) 22 { 23 $full_action = request_var('full_action', 0); 24 25 $set_folder_id = 0; 26 switch ($full_action) 27 { 28 case 1: 29 $set_folder_id = FULL_FOLDER_DELETE; 30 break; 31 32 case 2: 33 $set_folder_id = request_var('full_move_to', PRIVMSGS_INBOX); 34 break; 35 36 case 3: 37 $set_folder_id = FULL_FOLDER_HOLD; 38 break; 39 40 default: 41 $full_action = 0; 42 break; 43 } 44 45 if ($full_action) 46 { 47 $sql = 'UPDATE ' . USERS_TABLE . ' 48 SET user_full_folder = ' . $set_folder_id . ' 49 WHERE user_id = ' . $user->data['user_id']; 50 $db->sql_query($sql); 51 52 $user->data['user_full_folder'] = $set_folder_id; 53 54 $message = $user->lang['FULL_FOLDER_OPTION_CHANGED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); 55 meta_refresh(3, $redirect_url); 56 trigger_error($message); 57 } 58 } 59 60 // Add Folder 61 if (isset($_POST['addfolder'])) 62 { 63 $folder_name = request_var('foldername', '', true); 64 65 if ($folder_name) 66 { 67 $sql = 'SELECT folder_name 68 FROM ' . PRIVMSGS_FOLDER_TABLE . " 69 WHERE folder_name = '" . $db->sql_escape($folder_name) . "' 70 AND user_id = " . $user->data['user_id']; 71 $result = $db->sql_query_limit($sql, 1); 72 $row = $db->sql_fetchrow($result); 73 $db->sql_freeresult($result); 74 75 if ($row) 76 { 77 trigger_error(sprintf($user->lang['FOLDER_NAME_EXIST'], $folder_name)); 78 } 79 80 $sql = 'SELECT COUNT(folder_id) as num_folder 81 FROM ' . PRIVMSGS_FOLDER_TABLE . ' 82 WHERE user_id = ' . $user->data['user_id']; 83 $result = $db->sql_query($sql); 84 $num_folder = (int) $db->sql_fetchfield('num_folder'); 85 $db->sql_freeresult($result); 86 87 if ($num_folder >= $config['pm_max_boxes']) 88 { 89 trigger_error('MAX_FOLDER_REACHED'); 90 } 91 92 $sql = 'INSERT INTO ' . PRIVMSGS_FOLDER_TABLE . ' ' . $db->sql_build_array('INSERT', array( 93 'user_id' => (int) $user->data['user_id'], 94 'folder_name' => $folder_name) 95 ); 96 $db->sql_query($sql); 97 98 $message = $user->lang['FOLDER_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); 99 meta_refresh(3, $redirect_url); 100 trigger_error($message); 101 } 102 } 103 104 // Rename folder 105 if (isset($_POST['rename_folder'])) 106 { 107 $new_folder_name = request_var('new_folder_name', '', true); 108 $rename_folder_id= request_var('rename_folder_id', 0); 109 110 if (!$new_folder_name) 111 { 112 trigger_error('NO_NEW_FOLDER_NAME'); 113 } 114 115 // Select custom folder 116 $sql = 'SELECT folder_name, pm_count 117 FROM ' . PRIVMSGS_FOLDER_TABLE . " 118 WHERE user_id = {$user->data['user_id']} 119 AND folder_id = $rename_folder_id"; 120 $result = $db->sql_query_limit($sql, 1); 121 $folder_row = $db->sql_fetchrow($result); 122 $db->sql_freeresult($result); 123 124 if (!$folder_row) 125 { 126 trigger_error('CANNOT_RENAME_FOLDER'); 127 } 128 129 $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . " 130 SET folder_name = '" . $db->sql_escape($new_folder_name) . "' 131 WHERE folder_id = $rename_folder_id 132 AND user_id = {$user->data['user_id']}"; 133 $db->sql_query($sql); 134 135 $message = $user->lang['FOLDER_RENAMED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); 136 meta_refresh(3, $redirect_url); 137 trigger_error($message); 138 } 139 140 // Remove Folder 141 if (isset($_POST['remove_folder'])) 142 { 143 $remove_folder_id = request_var('remove_folder_id', 0); 144 145 // Default to "move all messages to inbox" 146 $remove_action = request_var('remove_action', 1); 147 $move_to = request_var('move_to', PRIVMSGS_INBOX); 148 149 // Move to same folder? 150 if ($remove_action == 1 && $remove_folder_id == $move_to) 151 { 152 trigger_error('CANNOT_MOVE_TO_SAME_FOLDER'); 153 } 154 155 // Select custom folder 156 $sql = 'SELECT folder_name, pm_count 157 FROM ' . PRIVMSGS_FOLDER_TABLE . " 158 WHERE user_id = {$user->data['user_id']} 159 AND folder_id = $remove_folder_id"; 160 $result = $db->sql_query_limit($sql, 1); 161 $folder_row = $db->sql_fetchrow($result); 162 $db->sql_freeresult($result); 163 164 if (!$folder_row) 165 { 166 trigger_error('CANNOT_REMOVE_FOLDER'); 167 } 168 169 $s_hidden_fields = array( 170 'remove_folder_id' => $remove_folder_id, 171 'remove_action' => $remove_action, 172 'move_to' => $move_to, 173 'remove_folder' => 1 174 ); 175 176 // Do we need to confirm? 177 if (confirm_box(true)) 178 { 179 // Gather message ids 180 $sql = 'SELECT msg_id 181 FROM ' . PRIVMSGS_TO_TABLE . ' 182 WHERE user_id = ' . $user->data['user_id'] . " 183 AND folder_id = $remove_folder_id"; 184 $result = $db->sql_query($sql); 185 186 $msg_ids = array(); 187 while ($row = $db->sql_fetchrow($result)) 188 { 189 $msg_ids[] = (int) $row['msg_id']; 190 } 191 $db->sql_freeresult($result); 192 193 // First of all, copy all messages to another folder... or delete all messages 194 switch ($remove_action) 195 { 196 // Move Messages 197 case 1: 198 $num_moved = move_pm($user->data['user_id'], $user->data['message_limit'], $msg_ids, $move_to, $remove_folder_id); 199 200 // Something went wrong, only partially moved? 201 if ($num_moved != $folder_row['pm_count']) 202 { 203 trigger_error(sprintf($user->lang['MOVE_PM_ERROR'], $num_moved, $folder_row['pm_count'])); 204 } 205 break; 206 207 // Remove Messages 208 case 2: 209 delete_pm($user->data['user_id'], $msg_ids, $remove_folder_id); 210 break; 211 } 212 213 // Remove folder 214 $sql = 'DELETE FROM ' . PRIVMSGS_FOLDER_TABLE . " 215 WHERE user_id = {$user->data['user_id']} 216 AND folder_id = $remove_folder_id"; 217 $db->sql_query($sql); 218 219 // Check full folder option. If the removed folder has been specified as destination switch back to inbox 220 if ($user->data['user_full_folder'] == $remove_folder_id) 221 { 222 $sql = 'UPDATE ' . USERS_TABLE . ' 223 SET user_full_folder = ' . PRIVMSGS_INBOX . ' 224 WHERE user_id = ' . $user->data['user_id']; 225 $db->sql_query($sql); 226 227 $user->data['user_full_folder'] = PRIVMSGS_INBOX; 228 } 229 230 $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=$mode"); 231 $message = $user->lang['FOLDER_REMOVED']; 232 233 meta_refresh(3, $meta_info); 234 $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>'); 235 trigger_error($message); 236 } 237 else 238 { 239 confirm_box(false, 'REMOVE_FOLDER', build_hidden_fields($s_hidden_fields)); 240 } 241 } 242 243 // Add Rule 244 if (isset($_POST['add_rule'])) 245 { 246 $check_option = request_var('check_option', 0); 247 $rule_option = request_var('rule_option', 0); 248 $cond_option = request_var('cond_option', ''); 249 $action_option = explode('|', request_var('action_option', '')); 250 $rule_string = ($cond_option != 'none') ? request_var('rule_string', '', true) : ''; 251 $rule_user_id = ($cond_option != 'none') ? request_var('rule_user_id', 0) : 0; 252 $rule_group_id = ($cond_option != 'none') ? request_var('rule_group_id', 0) : 0; 253 254 utf8_normalize_nfc(&$rule_string); 255 256 $action = (int) $action_option[0]; 257 $folder_id = (int) $action_option[1]; 258 259 if (!$action || !$check_option || !$rule_option || !$cond_option || ($cond_option != 'none' && !$rule_string)) 260 { 261 trigger_error('RULE_NOT_DEFINED'); 262 } 263 264 if (($cond_option == 'user' && !$rule_user_id) || ($cond_option == 'group' && !$rule_group_id)) 265 { 266 trigger_error('RULE_NOT_DEFINED'); 267 } 268 269 $rule_ary = array( 270 'user_id' => $user->data['user_id'], 271 'rule_check' => $check_option, 272 'rule_connection' => $rule_option, 273 'rule_string' => $rule_string, 274 'rule_user_id' => $rule_user_id, 275 'rule_group_id' => $rule_group_id, 276 'rule_action' => $action, 277 'rule_folder_id' => $folder_id 278 ); 279 280 $sql = 'SELECT rule_id 281 FROM ' . PRIVMSGS_RULES_TABLE . ' 282 WHERE ' . $db->sql_build_array('SELECT', $rule_ary); 283 $result = $db->sql_query($sql); 284 $row = $db->sql_fetchrow($result); 285 $db->sql_freeresult($result); 286 287 if ($row) 288 { 289 trigger_error('RULE_ALREADY_DEFINED'); 290 } 291 292 $sql = 'INSERT INTO ' . PRIVMSGS_RULES_TABLE . ' ' . $db->sql_build_array('INSERT', $rule_ary); 293 $db->sql_query($sql); 294 295 // Update users message rules 296 $sql = 'UPDATE ' . USERS_TABLE . ' 297 SET user_message_rules = 1 298 WHERE user_id = ' . $user->data['user_id']; 299 $db->sql_query($sql); 300 301 $message = $user->lang['RULE_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>'); 302 meta_refresh(3, $redirect_url); 303 trigger_error($message); 304 } 305 306 // Remove Rule 307 if (isset($_POST['delete_rule']) && !isset($_POST['cancel'])) 308 { 309 $delete_id = array_map('intval', array_keys($_POST['delete_rule'])); 310 $delete_id = (int) $delete_id[0]; 311 312 if (!$delete_id) 313 { 314 redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode)); 315 } 316 317 // Do we need to confirm? 318 if (confirm_box(true)) 319 { 320 $sql = 'DELETE FROM ' . PRIVMSGS_RULES_TABLE . ' 321 WHERE user_id = ' . $user->data['user_id'] . " 322 AND rule_id = $delete_id"; 323 $db->sql_query($sql); 324 325 $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=' . $mode); 326 $message = $user->lang['RULE_DELETED']; 327 328 // Reset user_message_rules if no more assigned 329 $sql = 'SELECT rule_id 330 FROM ' . PRIVMSGS_RULES_TABLE . ' 331 WHERE user_id = ' . $user->data['user_id']; 332 $result = $db->sql_query_limit($sql, 1); 333 $row = $db->sql_fetchrow($result); 334 $db->sql_freeresult($result); 335 336 // Update users message rules 337 if (!$row) 338 { 339 $sql = 'UPDATE ' . USERS_TABLE . ' 340 SET user_message_rules = 0 341 WHERE user_id = ' . $user->data['user_id']; 342 $db->sql_query($sql); 343 } 344 345 meta_refresh(3, $meta_info); 346 $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>'); 347 trigger_error($message); 348 } 349 else 350 { 351 confirm_box(false, 'DELETE_RULE', build_hidden_fields(array('delete_rule' => array($delete_id => 1)))); 352 } 353 } 354 355 $folder = array(); 356 357 $sql = 'SELECT COUNT(msg_id) as num_messages 358 FROM ' . PRIVMSGS_TO_TABLE . ' 359 WHERE user_id = ' . $user->data['user_id'] . ' 360 AND folder_id = ' . PRIVMSGS_INBOX; 361 $result = $db->sql_query($sql); 362 $num_messages = (int) $db->sql_fetchfield('num_messages'); 363 $db->sql_freeresult($result); 364 365 $folder[PRIVMSGS_INBOX] = array( 366 'folder_name' => $user->lang['PM_INBOX'], 367 'message_status' => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $num_messages, $user->data['message_limit']) 368 ); 369 370 $sql = 'SELECT folder_id, folder_name, pm_count 371 FROM ' . PRIVMSGS_FOLDER_TABLE . ' 372 WHERE user_id = ' . $user->data['user_id']; 373 $result = $db->sql_query($sql); 374 375 $num_user_folder = 0; 376 while ($row = $db->sql_fetchrow($result)) 377 { 378 $num_user_folder++; 379 $folder[$row['folder_id']] = array( 380 'folder_name' => $row['folder_name'], 381 'message_status' => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $row['pm_count'], $user->data['message_limit']) 382 ); 383 } 384 $db->sql_freeresult($result); 385 386 $s_full_folder_options = $s_to_folder_options = $s_folder_options = ''; 387 388 if ($user->data['user_full_folder'] == FULL_FOLDER_NONE) 389 { 390 // -3 here to let the correct folder id be selected 391 $to_folder_id = $config['full_folder_action'] - 3; 392 } 393 else 394 { 395 $to_folder_id = $user->data['user_full_folder']; 396 } 397 398 foreach ($folder as $folder_id => $folder_ary) 399 { 400 $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>'; 401 $s_to_folder_options .= '<option value="' . $folder_id . '"' . (($to_folder_id == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>'; 402 403 if ($folder_id != PRIVMSGS_INBOX) 404 { 405 $s_folder_options .= '<option value="' . $folder_id . '">' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>'; 406 } 407 } 408 409 $s_delete_checked = ($user->data['user_full_folder'] == FULL_FOLDER_DELETE) ? ' checked="checked"' : ''; 410 $s_hold_checked = ($user->data['user_full_folder'] == FULL_FOLDER_HOLD) ? ' checked="checked"' : ''; 411 $s_move_checked = ($user->data['user_full_folder'] >= 0) ? ' checked="checked"' : ''; 412 413 if ($user->data['user_full_folder'] == FULL_FOLDER_NONE) 414 { 415 switch ($config['full_folder_action']) 416 { 417 case 1: 418 $s_delete_checked = ' checked="checked"'; 419 break; 420 421 case 2: 422 $s_hold_checked = ' checked="checked"'; 423 break; 424 } 425 } 426 427 $template->assign_vars(array( 428 'S_FULL_FOLDER_OPTIONS' => $s_full_folder_options, 429 'S_TO_FOLDER_OPTIONS' => $s_to_folder_options, 430 'S_FOLDER_OPTIONS' => $s_folder_options, 431 'S_DELETE_CHECKED' => $s_delete_checked, 432 'S_HOLD_CHECKED' => $s_hold_checked, 433 'S_MOVE_CHECKED' => $s_move_checked, 434 'S_MAX_FOLDER_REACHED' => ($num_user_folder >= $config['pm_max_boxes']) ? true : false, 435 436 'DEFAULT_ACTION' => ($config['full_folder_action'] == 1) ? $user->lang['DELETE_OLDEST_MESSAGES'] : $user->lang['HOLD_NEW_MESSAGES'], 437 438 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=rule_string'), 439 'UA_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=rule_string', true)) 440 ); 441 442 $rule_lang = $action_lang = $check_lang = array(); 443 444 // Build all three language arrays 445 preg_replace('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#e', "\$strtolower('\\2') . '_lang'}[constant('\\1')] = \$user->lang['PM_\\2']['\\3']", array_keys(get_defined_constants())); 446 447 /* 448 Rule Ordering: 449 -> CHECK_* -> RULE_* [IN $global_privmsgs_rules:CHECK_*] -> [IF $rule_conditions[RULE_*] [|text|bool|user|group|own_group]] -> ACTION_* 450 */ 451 452 $check_option = request_var('check_option', 0); 453 $rule_option = request_var('rule_option', 0); 454 $cond_option = request_var('cond_option', ''); 455 $action_option = request_var('action_option', ''); 456 $back = (isset($_REQUEST['back'])) ? request_var('back', array('' => 0)) : array(); 457 458 if (sizeof($back)) 459 { 460 if ($action_option) 461 { 462 $action_option = ''; 463 } 464 else if ($cond_option) 465 { 466 $cond_option = ''; 467 } 468 else if ($rule_option) 469 { 470 $rule_option = 0; 471 } 472 else if ($check_option) 473 { 474 $check_option = 0; 475 } 476 } 477 478 if (isset($back['action']) && $cond_option == 'none') 479 { 480 $back['cond'] = true; 481 } 482 483 // Check 484 if (!isset($global_privmsgs_rules[$check_option])) 485 { 486 $check_option = 0; 487 } 488 489 define_check_option(($check_option && !isset($back['rule'])) ? true : false, $check_option, $check_lang); 490 491 if ($check_option && !isset($back['rule'])) 492 { 493 define_rule_option(($rule_option && !isset($back['cond'])) ? true : false, $rule_option, $rule_lang, $global_privmsgs_rules[$check_option]); 494 } 495 496 if ($rule_option && !isset($back['cond'])) 497 { 498 if (!isset($global_rule_conditions[$rule_option])) 499 { 500 $cond_option = 'none'; 501 $template->assign_var('NONE_CONDITION', true); 502 } 503 else 504 { 505 define_cond_option(($cond_option && !isset($back['action'])) ? true : false, $cond_option, $rule_option, $global_rule_conditions); 506 } 507 } 508 509 if ($cond_option && !isset($back['action'])) 510 { 511 define_action_option(false, $action_option, $action_lang, $folder); 512 } 513 514 show_defined_rules($user->data['user_id'], $check_lang, $rule_lang, $action_lang, $folder); 515 } 516 517 /** 518 * Defining check option for message rules 519 */ 520 function define_check_option($hardcoded, $check_option, $check_lang) 521 { 522 global $template; 523 524 $s_check_options = ''; 525 if (!$hardcoded) 526 { 527 foreach ($check_lang as $value => $lang) 528 { 529 $s_check_options .= '<option value="' . $value . '"' . (($value == $check_option) ? ' selected="selected"' : '') . '>' . $lang . '</option>'; 530 } 531 } 532 533 $template->assign_vars(array( 534 'S_CHECK_DEFINED' => true, 535 'S_CHECK_SELECT' => ($hardcoded) ? false : true, 536 'CHECK_CURRENT' => isset($check_lang[$check_option]) ? $check_lang[$check_option] : '', 537 'S_CHECK_OPTIONS' => $s_check_options, 538 'CHECK_OPTION' => $check_option) 539 ); 540 } 541 542 /** 543 * Defining action option for message rules 544 */ 545 function define_action_option($hardcoded, $action_option, $action_lang, $folder) 546 { 547 global $db, $template, $user; 548 549 $l_action = $s_action_options = ''; 550 if ($hardcoded) 551 { 552 $option = explode('|', $action_option); 553 $action = (int) $option[0]; 554 $folder_id = (int) $option[1]; 555 556 $l_action = $action_lang[$action]; 557 if ($action == ACTION_PLACE_INTO_FOLDER) 558 { 559 $l_action .= ' -> ' . $folder[$folder_id]['folder_name']; 560 } 561 } 562 else 563 { 564 foreach ($action_lang as $action => $lang) 565 { 566 if ($action == ACTION_PLACE_INTO_FOLDER) 567 { 568 foreach ($folder as $folder_id => $folder_ary) 569 { 570 $s_action_options .= '<option value="' . $action . '|' . $folder_id . '"' . (($action_option == $action . '|' . $folder_id) ? ' selected="selected"' : '') . '>' . $lang . ' -> ' . $folder_ary['folder_name'] . '</option>'; 571 } 572 } 573 else 574 { 575 $s_action_options .= '<option value="' . $action . '|0"' . (($action_option == $action . '|0') ? ' selected="selected"' : '') . '>' . $lang . '</option>'; 576 } 577 } 578 } 579 580 $template->assign_vars(array( 581 'S_ACTION_DEFINED' => true, 582 'S_ACTION_SELECT' => ($hardcoded) ? false : true, 583 'ACTION_CURRENT' => $l_action, 584 'S_ACTION_OPTIONS' => $s_action_options, 585 'ACTION_OPTION' => $action_option) 586 ); 587 } 588 589 /** 590 * Defining rule option for message rules 591 */ 592 function define_rule_option($hardcoded, $rule_option, $rule_lang, $check_ary) 593 { 594 global $template; 595 596 $s_rule_options = ''; 597 if (!$hardcoded) 598 { 599 foreach ($check_ary as $value => $_check) 600 { 601 $s_rule_options .= '<option value="' . $value . '"' . (($value == $rule_option) ? ' selected="selected"' : '') . '>' . $rule_lang[$value] . '</option>'; 602 } 603 } 604 605 $template->assign_vars(array( 606 'S_RULE_DEFINED' => true, 607 'S_RULE_SELECT' => !$hardcoded, 608 'RULE_CURRENT' => isset($rule_lang[$rule_option]) ? $rule_lang[$rule_option] : '', 609 'S_RULE_OPTIONS' => $s_rule_options, 610 'RULE_OPTION' => $rule_option) 611 ); 612 } 613 614 /** 615 * Defining condition option for message rules 616 */ 617 function define_cond_option($hardcoded, $cond_option, $rule_option, $global_rule_conditions) 618 { 619 global $db, $template, $auth; 620 621 $template->assign_vars(array( 622 'S_COND_DEFINED' => true, 623 'S_COND_SELECT' => (!$hardcoded && isset($global_rule_conditions[$rule_option])) ? true : false) 624 ); 625 626 // Define COND_OPTION 627 if (!isset($global_rule_conditions[$rule_option])) 628 { 629 $template->assign_vars(array( 630 'COND_OPTION' => 'none', 631 'COND_CURRENT' => false) 632 ); 633 return; 634 } 635 636 // Define Condition 637 $condition = $global_rule_conditions[$rule_option]; 638 $current_value = ''; 639 640 switch ($condition) 641 { 642 case 'text': 643 $rule_string = request_var('rule_string', '', true); 644 645 utf8_normalize_nfc(&$rule_string); 646 647 $template->assign_vars(array( 648 'S_TEXT_CONDITION' => true, 649 'CURRENT_STRING' => $rule_string, 650 'CURRENT_USER_ID' => 0, 651 'CURRENT_GROUP_ID' => 0) 652 ); 653 654 $current_value = $rule_string; 655 break; 656 657 case 'user': 658 $rule_user_id = request_var('rule_user_id', 0); 659 $rule_string = request_var('rule_string', '', true); 660 661 utf8_normalize_nfc(&$rule_string); 662 663 if ($rule_string && !$rule_user_id) 664 { 665 $sql = 'SELECT user_id 666 FROM ' . USERS_TABLE . " 667 WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($rule_string)) . "'"; 668 $result = $db->sql_query($sql); 669 $rule_user_id = (int) $db->sql_fetchfield('user_id'); 670 $db->sql_freeresult($result); 671 672 if (!$rule_user_id) 673 { 674 $rule_string = ''; 675 } 676 } 677 else if (!$rule_string && $rule_user_id) 678 { 679 $sql = 'SELECT username 680 FROM ' . USERS_TABLE . " 681 WHERE user_id = $rule_user_id"; 682 $result = $db->sql_query($sql); 683 $rule_string = $db->sql_fetchfield('username'); 684 $db->sql_freeresult($result); 685 686 if (!$rule_string) 687 { 688 $rule_user_id = 0; 689 } 690 } 691 692 $template->assign_vars(array( 693 'S_USER_CONDITION' => true, 694 'CURRENT_STRING' => $rule_string, 695 'CURRENT_USER_ID' => $rule_user_id, 696 'CURRENT_GROUP_ID' => 0) 697 ); 698 699 $current_value = $rule_string; 700 break; 701 702 case 'group': 703 $rule_group_id = request_var('rule_group_id', 0); 704 $rule_string = request_var('rule_string', '', true); 705 706 utf8_normalize_nfc(&$rule_string); 707 708 $sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')'; 709 $sql = 'SELECT group_id, group_name, group_type 710 FROM ' . GROUPS_TABLE . " 711 WHERE group_type $sql_and 712 ORDER BY group_type DESC, group_name"; 713 $result = $db->sql_query($sql); 714 715 $s_group_options = ''; 716 while ($row = $db->sql_fetchrow($result)) 717 { 718 if ($rule_group_id && ($row['group_id'] == $rule_group_id)) 719 { 720 $rule_string = (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']); 721 } 722 723 $s_selected = ($row['group_id'] == $rule_group_id) ? ' selected="selected"' : ''; 724 $s_group_options .= '<option value="' . $row['group_id'] . '"' . $s_selected . '>' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>'; 725 } 726 $db->sql_freeresult($result); 727 728 $template->assign_vars(array( 729 'S_GROUP_CONDITION' => true, 730 'S_GROUP_OPTIONS' => $s_group_options, 731 'CURRENT_STRING' => $rule_string, 732 'CURRENT_USER_ID' => 0, 733 'CURRENT_GROUP_ID' => $rule_group_id) 734 ); 735 736 $current_value = $rule_string; 737 break; 738 739 default: 740 return; 741 } 742 743 $template->assign_vars(array( 744 'COND_OPTION' => $condition, 745 'COND_CURRENT' => $current_value) 746 ); 747 } 748 749 /** 750 * Display defined message rules 751 */ 752 function show_defined_rules($user_id, $check_lang, $rule_lang, $action_lang, $folder) 753 { 754 global $db, $template; 755 756 $sql = 'SELECT * 757 FROM ' . PRIVMSGS_RULES_TABLE . ' 758 WHERE user_id = ' . $user_id . ' 759 ORDER BY rule_id ASC'; 760 $result = $db->sql_query($sql); 761 762 $count = 0; 763 while ($row = $db->sql_fetchrow($result)) 764 { 765 $template->assign_block_vars('rule', array( 766 'COUNT' => ++$count, 767 'RULE_ID' => $row['rule_id'], 768 'CHECK' => $check_lang[$row['rule_check']], 769 'RULE' => $rule_lang[$row['rule_connection']], 770 'STRING' => $row['rule_string'], 771 'ACTION' => $action_lang[$row['rule_action']], 772 'FOLDER' => ($row['rule_action'] == ACTION_PLACE_INTO_FOLDER) ? $folder[$row['rule_folder_id']]['folder_name'] : '') 773 ); 774 } 775 $db->sql_freeresult($result); 776 } 777 778 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 22 00:35:05 2006 | Cross-referenced by PHPXref 0.6 |