[ Index ]

PHP Cross Reference of phpBB 3.0 Beta 3

title

Body

[close]

/includes/ucp/ -> ucp_pm_options.php (source)

   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&amp;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&amp;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&amp;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&amp;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&amp;form=ucp&amp;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  ?>


Generated: Wed Nov 22 00:35:05 2006 Cross-referenced by PHPXref 0.6