[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

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

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


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1