Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

ucp_pm_options.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 23.45 KiB


 001  <?php
 002  /**
 003  *
 004  * @package ucp
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  * @ignore
 013  */
 014  if (!defined('IN_PHPBB'))
 015  {
 016      exit;
 017  }
 018   
 019  /**
 020  * Execute message options
 021  */
 022  function message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions)
 023  {
 024      global $phpbb_root_path, $phpEx, $user, $template, $auth, $config, $db;
 025   
 026      $redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&amp;mode=options");
 027   
 028      add_form_key('ucp_pm_options');
 029      // Change "full folder" setting - what to do if folder is full
 030      if (isset($_POST['fullfolder']))
 031      {
 032          check_form_key('ucp_pm_options', $config['form_token_lifetime'], $redirect_url);
 033          $full_action = request_var('full_action', 0);
 034   
 035          $set_folder_id = 0;
 036          switch ($full_action)
 037          {
 038              case 1:
 039                  $set_folder_id = FULL_FOLDER_DELETE;
 040              break;
 041   
 042              case 2:
 043                  $set_folder_id = request_var('full_move_to', PRIVMSGS_INBOX);
 044              break;
 045   
 046              case 3:
 047                  $set_folder_id = FULL_FOLDER_HOLD;
 048              break;
 049   
 050              default:
 051                  $full_action = 0;
 052              break;
 053          }
 054   
 055          if ($full_action)
 056          {
 057              $sql = 'UPDATE ' . USERS_TABLE . '
 058                  SET user_full_folder = ' . $set_folder_id . '
 059                  WHERE user_id = ' . $user->data['user_id'];
 060              $db->sql_query($sql);
 061   
 062              $user->data['user_full_folder'] = $set_folder_id;
 063   
 064              $message = $user->lang['FULL_FOLDER_OPTION_CHANGED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
 065              meta_refresh(3, $redirect_url);
 066              trigger_error($message);
 067          }
 068      }
 069      
 070      // Add Folder
 071      if (isset($_POST['addfolder']))
 072      {
 073          if (check_form_key('ucp_pm_options'))
 074          {
 075              $folder_name = utf8_normalize_nfc(request_var('foldername', '', true));
 076              $msg = '';
 077   
 078              if ($folder_name)
 079              {
 080                  $sql = 'SELECT folder_name
 081                      FROM ' . PRIVMSGS_FOLDER_TABLE . "
 082                      WHERE folder_name = '" . $db->sql_escape($folder_name) . "'
 083                          AND user_id = " . $user->data['user_id'];
 084                  $result = $db->sql_query_limit($sql, 1);
 085                  $row = $db->sql_fetchrow($result);
 086                  $db->sql_freeresult($result);
 087   
 088                  if ($row)
 089                  {
 090                      trigger_error(sprintf($user->lang['FOLDER_NAME_EXIST'], $folder_name));
 091                  }
 092   
 093                  $sql = 'SELECT COUNT(folder_id) as num_folder
 094                      FROM ' . PRIVMSGS_FOLDER_TABLE . '
 095                          WHERE user_id = ' . $user->data['user_id'];
 096                  $result = $db->sql_query($sql);
 097                  $num_folder = (int) $db->sql_fetchfield('num_folder');
 098                  $db->sql_freeresult($result);
 099   
 100                  if ($num_folder >= $config['pm_max_boxes'])
 101                  {
 102                      trigger_error('MAX_FOLDER_REACHED');
 103                  }
 104   
 105                  $sql = 'INSERT INTO ' . PRIVMSGS_FOLDER_TABLE . ' ' . $db->sql_build_array('INSERT', array(
 106                      'user_id'        => (int) $user->data['user_id'],
 107                      'folder_name'    => $folder_name)
 108                  );
 109                  $db->sql_query($sql);
 110                  $msg = $user->lang['FOLDER_ADDED'];
 111              }
 112          }
 113          else
 114          {
 115              $msg = $user->lang['FORM_INVALID'];
 116          }
 117          $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
 118          meta_refresh(3, $redirect_url);
 119          trigger_error($message);
 120      }
 121   
 122      // Rename folder
 123      if (isset($_POST['rename_folder']))
 124      {
 125          if (check_form_key('ucp_pm_options'))
 126          {
 127              $new_folder_name = utf8_normalize_nfc(request_var('new_folder_name', '', true));
 128              $rename_folder_id= request_var('rename_folder_id', 0);
 129   
 130              if (!$new_folder_name)
 131              {
 132                  trigger_error('NO_NEW_FOLDER_NAME');
 133              }
 134   
 135              // Select custom folder
 136              $sql = 'SELECT folder_name, pm_count
 137                  FROM ' . PRIVMSGS_FOLDER_TABLE . "
 138                  WHERE user_id = {$user->data['user_id']}
 139                      AND folder_id = $rename_folder_id";
 140              $result = $db->sql_query_limit($sql, 1);
 141              $folder_row = $db->sql_fetchrow($result);
 142              $db->sql_freeresult($result);
 143   
 144              if (!$folder_row)
 145              {
 146                  trigger_error('CANNOT_RENAME_FOLDER');
 147              }
 148   
 149              $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . "
 150                  SET folder_name = '" . $db->sql_escape($new_folder_name) . "'
 151                  WHERE folder_id = $rename_folder_id
 152                      AND user_id = {$user->data['user_id']}";
 153              $db->sql_query($sql);
 154              $msg = $user->lang['FOLDER_RENAMED'];
 155          }
 156          else
 157          {
 158              $msg = $user->lang['FORM_INVALID'];
 159          }
 160   
 161          $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
 162   
 163          meta_refresh(3, $redirect_url);
 164          trigger_error($message);
 165      }
 166   
 167      // Remove Folder
 168      if (isset($_POST['remove_folder']))
 169      {
 170          $remove_folder_id = request_var('remove_folder_id', 0);
 171   
 172          // Default to "move all messages to inbox"
 173          $remove_action = request_var('remove_action', 1);
 174          $move_to = request_var('move_to', PRIVMSGS_INBOX);
 175   
 176          // Move to same folder?
 177          if ($remove_action == 1 && $remove_folder_id == $move_to)
 178          {
 179              trigger_error('CANNOT_MOVE_TO_SAME_FOLDER');
 180          }
 181   
 182          // Select custom folder
 183          $sql = 'SELECT folder_name, pm_count
 184              FROM ' . PRIVMSGS_FOLDER_TABLE . "
 185              WHERE user_id = {$user->data['user_id']}
 186                  AND folder_id = $remove_folder_id";
 187          $result = $db->sql_query_limit($sql, 1);
 188          $folder_row = $db->sql_fetchrow($result);
 189          $db->sql_freeresult($result);
 190   
 191          if (!$folder_row)
 192          {
 193              trigger_error('CANNOT_REMOVE_FOLDER');
 194          }
 195   
 196          $s_hidden_fields = array(
 197              'remove_folder_id'    => $remove_folder_id,
 198              'remove_action'        => $remove_action,
 199              'move_to'            => $move_to,
 200              'remove_folder'        => 1
 201          );
 202   
 203          // Do we need to confirm?
 204          if (confirm_box(true))
 205          {
 206              // Gather message ids
 207              $sql = 'SELECT msg_id
 208                  FROM ' . PRIVMSGS_TO_TABLE . '
 209                  WHERE user_id = ' . $user->data['user_id'] . "
 210                      AND folder_id = $remove_folder_id";
 211              $result = $db->sql_query($sql);
 212   
 213              $msg_ids = array();
 214              while ($row = $db->sql_fetchrow($result))
 215              {
 216                  $msg_ids[] = (int) $row['msg_id'];
 217              }
 218              $db->sql_freeresult($result);
 219   
 220              // First of all, copy all messages to another folder... or delete all messages
 221              switch ($remove_action)
 222              {
 223                  // Move Messages
 224                  case 1:
 225                      $num_moved = move_pm($user->data['user_id'], $user->data['message_limit'], $msg_ids, $move_to, $remove_folder_id);
 226                      
 227                      // Something went wrong, only partially moved?
 228                      if ($num_moved != $folder_row['pm_count'])
 229                      {
 230                          trigger_error(sprintf($user->lang['MOVE_PM_ERROR'], $num_moved, $folder_row['pm_count']));
 231                      }
 232                  break;
 233   
 234                  // Remove Messages
 235                  case 2:
 236                      delete_pm($user->data['user_id'], $msg_ids, $remove_folder_id);
 237                  break;
 238              }
 239   
 240              // Remove folder
 241              $sql = 'DELETE FROM ' . PRIVMSGS_FOLDER_TABLE . "
 242                  WHERE user_id = {$user->data['user_id']}
 243                      AND folder_id = $remove_folder_id";
 244              $db->sql_query($sql);
 245   
 246              // Check full folder option. If the removed folder has been specified as destination switch back to inbox
 247              if ($user->data['user_full_folder'] == $remove_folder_id)
 248              {
 249                  $sql = 'UPDATE ' . USERS_TABLE . '
 250                      SET user_full_folder = ' . PRIVMSGS_INBOX . '
 251                      WHERE user_id = ' . $user->data['user_id'];
 252                  $db->sql_query($sql);
 253   
 254                  $user->data['user_full_folder'] = PRIVMSGS_INBOX;
 255              }
 256   
 257              // Now make sure the folder is not used for rules
 258              // We assign another folder id (the one the messages got moved to) or assign the INBOX (to not have to remove any rule)
 259              $sql = 'UPDATE ' . PRIVMSGS_RULES_TABLE . ' SET rule_folder_id = ';
 260              $sql .= ($remove_action == 1) ? $move_to : PRIVMSGS_INBOX;
 261              $sql .= ' WHERE rule_folder_id = ' . $remove_folder_id;
 262   
 263              $db->sql_query($sql);
 264   
 265              $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&amp;mode=$mode");
 266              $message = $user->lang['FOLDER_REMOVED'];
 267   
 268              meta_refresh(3, $meta_info);
 269              $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>');
 270              trigger_error($message);
 271          }
 272          else
 273          {
 274              confirm_box(false, 'REMOVE_FOLDER', build_hidden_fields($s_hidden_fields));
 275          }
 276      }
 277   
 278      // Add Rule
 279      if (isset($_POST['add_rule']))
 280      {
 281          if (check_form_key('ucp_pm_options'))
 282          {
 283              $check_option    = request_var('check_option', 0);
 284              $rule_option    = request_var('rule_option', 0);
 285              $cond_option    = request_var('cond_option', '');
 286              $action_option    = explode('|', request_var('action_option', ''));
 287              $rule_string    = ($cond_option != 'none') ? utf8_normalize_nfc(request_var('rule_string', '', true)) : '';
 288              $rule_user_id    = ($cond_option != 'none') ? request_var('rule_user_id', 0) : 0;
 289              $rule_group_id    = ($cond_option != 'none') ? request_var('rule_group_id', 0) : 0;
 290   
 291              $action = (int) $action_option[0];
 292              $folder_id = (int) $action_option[1];
 293   
 294              if (!$action || !$check_option || !$rule_option || !$cond_option || ($cond_option != 'none' && !$rule_string))
 295              {
 296                  trigger_error('RULE_NOT_DEFINED');
 297              }
 298   
 299              if (($cond_option == 'user' && !$rule_user_id) || ($cond_option == 'group' && !$rule_group_id))
 300              {
 301                  trigger_error('RULE_NOT_DEFINED');
 302              }
 303   
 304              $rule_ary = array(
 305                  'user_id'            => $user->data['user_id'],
 306                  'rule_check'        => $check_option,
 307                  'rule_connection'    => $rule_option,
 308                  'rule_string'        => $rule_string,
 309                  'rule_user_id'        => $rule_user_id,
 310                  'rule_group_id'        => $rule_group_id,
 311                  'rule_action'        => $action,
 312                  'rule_folder_id'    => $folder_id
 313              );
 314   
 315              $sql = 'SELECT rule_id
 316                  FROM ' . PRIVMSGS_RULES_TABLE . '
 317                  WHERE ' . $db->sql_build_array('SELECT', $rule_ary);
 318              $result = $db->sql_query($sql);
 319              $row = $db->sql_fetchrow($result);
 320              $db->sql_freeresult($result);
 321   
 322              if ($row)
 323              {
 324                  trigger_error('RULE_ALREADY_DEFINED');
 325              }
 326   
 327              $sql = 'INSERT INTO ' . PRIVMSGS_RULES_TABLE . ' ' . $db->sql_build_array('INSERT', $rule_ary);
 328              $db->sql_query($sql);
 329   
 330              // Update users message rules
 331              $sql = 'UPDATE ' . USERS_TABLE . '
 332                  SET user_message_rules = 1
 333                  WHERE user_id = ' . $user->data['user_id'];
 334              $db->sql_query($sql);
 335   
 336              $msg = $user->lang['RULE_ADDED'];
 337          }
 338          else
 339          {
 340              $msg = $user->lang['FORM_INVALID'];
 341          }
 342          $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $redirect_url . '">', '</a>');
 343          meta_refresh(3, $redirect_url);
 344          trigger_error($message);
 345      }
 346   
 347      // Remove Rule
 348      if (isset($_POST['delete_rule']) && !isset($_POST['cancel']))
 349      {
 350          $delete_id = array_keys(request_var('delete_rule', array(0 => 0)));
 351          $delete_id = (!empty($delete_id[0])) ? $delete_id[0] : 0;
 352   
 353          if (!$delete_id)
 354          {
 355              redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=' . $mode));
 356          }
 357   
 358          // Do we need to confirm?
 359          if (confirm_box(true))
 360          {
 361              $sql = 'DELETE FROM ' . PRIVMSGS_RULES_TABLE . '
 362                  WHERE user_id = ' . $user->data['user_id'] . "
 363                      AND rule_id = $delete_id";
 364              $db->sql_query($sql);
 365   
 366              $meta_info = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=' . $mode);
 367              $message = $user->lang['RULE_DELETED'];
 368   
 369              // Reset user_message_rules if no more assigned
 370              $sql = 'SELECT rule_id
 371                  FROM ' . PRIVMSGS_RULES_TABLE . '
 372                  WHERE user_id = ' . $user->data['user_id'];
 373              $result = $db->sql_query_limit($sql, 1);
 374              $row = $db->sql_fetchrow($result);
 375              $db->sql_freeresult($result);
 376   
 377              // Update users message rules
 378              if (!$row)
 379              {
 380                  $sql = 'UPDATE ' . USERS_TABLE . '
 381                      SET user_message_rules = 0
 382                      WHERE user_id = ' . $user->data['user_id'];
 383                  $db->sql_query($sql);
 384              }
 385   
 386              meta_refresh(3, $meta_info);
 387              $message .= '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $meta_info . '">', '</a>');
 388              trigger_error($message);
 389          }
 390          else
 391          {
 392              confirm_box(false, 'DELETE_RULE', build_hidden_fields(array('delete_rule' => array($delete_id => 1))));
 393          }
 394      }
 395   
 396      $folder = array();
 397   
 398      $sql = 'SELECT COUNT(msg_id) as num_messages
 399          FROM ' . PRIVMSGS_TO_TABLE . '
 400          WHERE user_id = ' . $user->data['user_id'] . '
 401              AND folder_id = ' . PRIVMSGS_INBOX;
 402      $result = $db->sql_query($sql);
 403      $num_messages = (int) $db->sql_fetchfield('num_messages');
 404      $db->sql_freeresult($result);
 405      
 406      $folder[PRIVMSGS_INBOX] = array(
 407          'folder_name'        => $user->lang['PM_INBOX'],
 408          'message_status'    => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $num_messages, $user->data['message_limit'])
 409      );
 410   
 411      $sql = 'SELECT folder_id, folder_name, pm_count
 412          FROM ' . PRIVMSGS_FOLDER_TABLE . '
 413              WHERE user_id = ' . $user->data['user_id'];
 414      $result = $db->sql_query($sql);
 415   
 416      $num_user_folder = 0;
 417      while ($row = $db->sql_fetchrow($result))
 418      {
 419          $num_user_folder++;
 420          $folder[$row['folder_id']] = array(
 421              'folder_name'        => $row['folder_name'],
 422              'message_status'    => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $row['pm_count'], $user->data['message_limit'])
 423          );
 424      }
 425      $db->sql_freeresult($result);
 426   
 427      $s_full_folder_options = $s_to_folder_options = $s_folder_options = '';
 428   
 429      if ($user->data['user_full_folder'] == FULL_FOLDER_NONE)
 430      {
 431          // -3 here to let the correct folder id be selected
 432          $to_folder_id = $config['full_folder_action'] - 3;
 433      }
 434      else
 435      {
 436          $to_folder_id = $user->data['user_full_folder'];
 437      }
 438   
 439      foreach ($folder as $folder_id => $folder_ary)
 440      {
 441          $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>';
 442          $s_to_folder_options .= '<option value="' . $folder_id . '"' . (($to_folder_id == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>';
 443   
 444          if ($folder_id != PRIVMSGS_INBOX)
 445          {
 446              $s_folder_options .= '<option value="' . $folder_id . '">' . $folder_ary['folder_name'] . ' (' . $folder_ary['message_status'] . ')</option>';
 447          }
 448      }
 449   
 450      $s_delete_checked = ($user->data['user_full_folder'] == FULL_FOLDER_DELETE) ? ' checked="checked"' : '';
 451      $s_hold_checked = ($user->data['user_full_folder'] == FULL_FOLDER_HOLD) ? ' checked="checked"' : '';
 452      $s_move_checked = ($user->data['user_full_folder'] >= 0) ? ' checked="checked"' : '';
 453   
 454      if ($user->data['user_full_folder'] == FULL_FOLDER_NONE)
 455      {
 456          switch ($config['full_folder_action'])
 457          {
 458              case 1:
 459                  $s_delete_checked = ' checked="checked"';
 460              break;
 461   
 462              case 2:
 463                  $s_hold_checked = ' checked="checked"';
 464              break;
 465          }
 466      }
 467   
 468      $template->assign_vars(array(
 469          'S_FULL_FOLDER_OPTIONS'    => $s_full_folder_options,
 470          'S_TO_FOLDER_OPTIONS'    => $s_to_folder_options,
 471          'S_FOLDER_OPTIONS'        => $s_folder_options,
 472          'S_DELETE_CHECKED'        => $s_delete_checked,
 473          'S_HOLD_CHECKED'        => $s_hold_checked,
 474          'S_MOVE_CHECKED'        => $s_move_checked,
 475          'S_MAX_FOLDER_REACHED'    => ($num_user_folder >= $config['pm_max_boxes']) ? true : false,
 476          'S_MAX_FOLDER_ZERO'        => ($config['pm_max_boxes'] == 0) ? true : false,
 477   
 478          'DEFAULT_ACTION'        => ($config['full_folder_action'] == 1) ? $user->lang['DELETE_OLDEST_MESSAGES'] : $user->lang['HOLD_NEW_MESSAGES'],
 479   
 480          'U_FIND_USERNAME'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=ucp&amp;field=rule_string&amp;select_single=true'),
 481      ));
 482   
 483      $rule_lang = $action_lang = $check_lang = array();
 484   
 485      // Build all three language arrays
 486      preg_replace('#^((RULE|ACTION|CHECK)_([A-Z0-9_]+))$#e', "\${strtolower('\\2') . '_lang'}[constant('\\1')] = \$user->lang['PM_\\2']['\\3']", array_keys(get_defined_constants()));
 487   
 488      /*
 489          Rule Ordering:
 490              -> CHECK_* -> RULE_* [IN $global_privmsgs_rules:CHECK_*] -> [IF $rule_conditions[RULE_*] [|text|bool|user|group|own_group]] -> ACTION_*
 491      */
 492   
 493      $check_option    = request_var('check_option', 0);
 494      $rule_option    = request_var('rule_option', 0);
 495      $cond_option    = request_var('cond_option', '');
 496      $action_option    = request_var('action_option', '');
 497      $back = (isset($_REQUEST['back'])) ? request_var('back', array('' => 0)) : array();
 498   
 499      if (sizeof($back))
 500      {
 501          if ($action_option)
 502          {
 503              $action_option = '';
 504          }
 505          else if ($cond_option)
 506          {
 507              $cond_option = '';
 508          }
 509          else if ($rule_option)
 510          {
 511              $rule_option = 0;
 512          }
 513          else if ($check_option)
 514          {
 515              $check_option = 0;
 516          }
 517      }
 518   
 519      if (isset($back['action']) && $cond_option == 'none')
 520      {
 521          $back['cond'] = true;
 522      }
 523   
 524      // Check
 525      if (!isset($global_privmsgs_rules[$check_option]))
 526      {
 527          $check_option = 0;
 528      }
 529   
 530      define_check_option(($check_option && !isset($back['rule'])) ? true : false, $check_option, $check_lang);
 531   
 532      if ($check_option && !isset($back['rule']))
 533      {
 534          define_rule_option(($rule_option && !isset($back['cond'])) ? true : false, $rule_option, $rule_lang, $global_privmsgs_rules[$check_option]);
 535      }
 536   
 537      if ($rule_option && !isset($back['cond']))
 538      {
 539          if (!isset($global_rule_conditions[$rule_option]))
 540          {
 541              $cond_option = 'none';
 542              $template->assign_var('NONE_CONDITION', true);
 543          }
 544          else
 545          {
 546              define_cond_option(($cond_option && !isset($back['action'])) ? true : false, $cond_option, $rule_option, $global_rule_conditions);
 547          }
 548      }
 549   
 550      if ($cond_option && !isset($back['action']))
 551      {
 552          define_action_option(false, $action_option, $action_lang, $folder);
 553      }
 554   
 555      show_defined_rules($user->data['user_id'], $check_lang, $rule_lang, $action_lang, $folder);
 556  }
 557   
 558  /**
 559  * Defining check option for message rules
 560  */
 561  function define_check_option($hardcoded, $check_option, $check_lang)
 562  {
 563      global $template;
 564   
 565      $s_check_options = '';
 566      if (!$hardcoded)
 567      {
 568          foreach ($check_lang as $value => $lang)
 569          {
 570              $s_check_options .= '<option value="' . $value . '"' . (($value == $check_option) ? ' selected="selected"' : '') . '>' . $lang . '</option>';
 571          }
 572      }
 573   
 574      $template->assign_vars(array(
 575          'S_CHECK_DEFINED'    => true,
 576          'S_CHECK_SELECT'    => ($hardcoded) ? false : true,
 577          'CHECK_CURRENT'        => isset($check_lang[$check_option]) ? $check_lang[$check_option] : '',
 578          'S_CHECK_OPTIONS'    => $s_check_options,
 579          'CHECK_OPTION'        => $check_option)
 580      );
 581  }
 582   
 583  /**
 584  * Defining action option for message rules
 585  */
 586  function define_action_option($hardcoded, $action_option, $action_lang, $folder)
 587  {
 588      global $db, $template, $user;
 589   
 590      $l_action = $s_action_options = '';
 591      if ($hardcoded)
 592      {
 593          $option = explode('|', $action_option);
 594          $action = (int) $option[0];
 595          $folder_id = (int) $option[1];
 596   
 597          $l_action = $action_lang[$action];
 598          if ($action == ACTION_PLACE_INTO_FOLDER)
 599          {
 600              $l_action .= ' -> ' . $folder[$folder_id]['folder_name'];
 601          }
 602      }
 603      else
 604      {
 605          foreach ($action_lang as $action => $lang)
 606          {
 607              if ($action == ACTION_PLACE_INTO_FOLDER)
 608              {
 609                  foreach ($folder as $folder_id => $folder_ary)
 610                  {
 611                      $s_action_options .= '<option value="' . $action . '|' . $folder_id . '"' . (($action_option == $action . '|' . $folder_id) ? ' selected="selected"' : '') . '>' . $lang . ' -> ' . $folder_ary['folder_name'] . '</option>';
 612                  }
 613              }
 614              else
 615              {
 616                  $s_action_options .= '<option value="' . $action . '|0"' . (($action_option == $action . '|0') ? ' selected="selected"' : '') . '>' . $lang . '</option>';
 617              }
 618          }
 619      }
 620   
 621      $template->assign_vars(array(
 622          'S_ACTION_DEFINED'    => true,
 623          'S_ACTION_SELECT'    => ($hardcoded) ? false : true,
 624          'ACTION_CURRENT'    => $l_action,
 625          'S_ACTION_OPTIONS'    => $s_action_options,
 626          'ACTION_OPTION'        => $action_option)
 627      );
 628  }
 629   
 630  /**
 631  * Defining rule option for message rules
 632  */
 633  function define_rule_option($hardcoded, $rule_option, $rule_lang, $check_ary)
 634  {
 635      global $template;
 636   
 637      $s_rule_options = '';
 638      if (!$hardcoded)
 639      {
 640          foreach ($check_ary as $value => $_check)
 641          {
 642              $s_rule_options .= '<option value="' . $value . '"' . (($value == $rule_option) ? ' selected="selected"' : '') . '>' . $rule_lang[$value] . '</option>';
 643          }
 644      }
 645   
 646      $template->assign_vars(array(
 647          'S_RULE_DEFINED'    => true,
 648          'S_RULE_SELECT'        => !$hardcoded,
 649          'RULE_CURRENT'        => isset($rule_lang[$rule_option]) ? $rule_lang[$rule_option] : '',
 650          'S_RULE_OPTIONS'    => $s_rule_options,
 651          'RULE_OPTION'        => $rule_option)
 652      );
 653  }
 654   
 655  /**
 656  * Defining condition option for message rules
 657  */
 658  function define_cond_option($hardcoded, $cond_option, $rule_option, $global_rule_conditions)
 659  {
 660      global $db, $template, $auth, $user;
 661      
 662      $template->assign_vars(array(
 663          'S_COND_DEFINED'    => true,
 664          'S_COND_SELECT'        => (!$hardcoded && isset($global_rule_conditions[$rule_option])) ? true : false)
 665      );
 666   
 667      // Define COND_OPTION
 668      if (!isset($global_rule_conditions[$rule_option]))
 669      {
 670          $template->assign_vars(array(
 671              'COND_OPTION'    => 'none',
 672              'COND_CURRENT'    => false)
 673          );
 674          return;
 675      }
 676   
 677      // Define Condition
 678      $condition = $global_rule_conditions[$rule_option];
 679      $current_value = '';
 680   
 681      switch ($condition)
 682      {
 683          case 'text':
 684              $rule_string = utf8_normalize_nfc(request_var('rule_string', '', true));
 685              
 686              $template->assign_vars(array(
 687                  'S_TEXT_CONDITION'    => true,
 688                  'CURRENT_STRING'    => $rule_string,
 689                  'CURRENT_USER_ID'    => 0,
 690                  'CURRENT_GROUP_ID'    => 0)
 691              );
 692   
 693              $current_value = $rule_string;
 694          break;
 695   
 696          case 'user':
 697              $rule_user_id = request_var('rule_user_id', 0);
 698              $rule_string = utf8_normalize_nfc(request_var('rule_string', '', true));
 699              
 700              if ($rule_string && !$rule_user_id)
 701              {
 702                  $sql = 'SELECT user_id
 703                      FROM ' . USERS_TABLE . "
 704                      WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($rule_string)) . "'";
 705                  $result = $db->sql_query($sql);
 706                  $rule_user_id = (int) $db->sql_fetchfield('user_id');
 707                  $db->sql_freeresult($result);
 708   
 709                  if (!$rule_user_id)
 710                  {
 711                      $rule_string = '';
 712                  }
 713              }
 714              else if (!$rule_string && $rule_user_id)
 715              {
 716                  $sql = 'SELECT username
 717                      FROM ' . USERS_TABLE . "
 718                      WHERE user_id = $rule_user_id";
 719                  $result = $db->sql_query($sql);
 720                  $rule_string = $db->sql_fetchfield('username');
 721                  $db->sql_freeresult($result);
 722   
 723                  if (!$rule_string)
 724                  {
 725                      $rule_user_id = 0;
 726                  }
 727              }
 728   
 729              $template->assign_vars(array(
 730                  'S_USER_CONDITION'    => true,
 731                  'CURRENT_STRING'    => $rule_string,
 732                  'CURRENT_USER_ID'    => $rule_user_id,
 733                  'CURRENT_GROUP_ID'    => 0)
 734              );
 735   
 736              $current_value = $rule_string;
 737          break;
 738   
 739          case 'group':
 740              $rule_group_id = request_var('rule_group_id', 0);
 741              $rule_string = utf8_normalize_nfc(request_var('rule_string', '', true));
 742   
 743              $sql = 'SELECT g.group_id, g.group_name, g.group_type
 744                      FROM ' . GROUPS_TABLE . ' g ';
 745   
 746              if (!$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
 747              {
 748                  $sql .= 'LEFT JOIN ' . USER_GROUP_TABLE . ' ug
 749                      ON (
 750                          g.group_id = ug.group_id
 751                          AND ug.user_id = ' . $user->data['user_id'] . '
 752                          AND ug.user_pending = 0
 753                      )
 754                      WHERE (ug.user_id = ' . $user->data['user_id'] . ' OR g.group_type <> ' . GROUP_HIDDEN . ')
 755                      AND';
 756              }
 757              else
 758              {
 759                  $sql .= 'WHERE';
 760              }
 761              
 762              $sql .= " (g.group_name NOT IN ('GUESTS', 'BOTS') OR g.group_type <> " . GROUP_SPECIAL . ')    
 763                  ORDER BY g.group_type DESC, g.group_name ASC';
 764              
 765              $result = $db->sql_query($sql);
 766   
 767              $s_group_options = '';
 768              while ($row = $db->sql_fetchrow($result))
 769              {
 770                  if ($rule_group_id && ($row['group_id'] == $rule_group_id))
 771                  {
 772                      $rule_string = (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']);
 773                  }
 774   
 775                  $s_class    = ($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '';
 776                  $s_selected    = ($row['group_id'] == $rule_group_id) ? ' selected="selected"' : '';
 777                  
 778                  $s_group_options .= '<option value="' . $row['group_id'] . '"' . $s_class . $s_selected . '>' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>';
 779              }
 780              $db->sql_freeresult($result);
 781   
 782              $template->assign_vars(array(
 783                  'S_GROUP_CONDITION'    => true,
 784                  'S_GROUP_OPTIONS'    => $s_group_options,
 785                  'CURRENT_STRING'    => $rule_string,
 786                  'CURRENT_USER_ID'    => 0,
 787                  'CURRENT_GROUP_ID'    => $rule_group_id)
 788              );
 789   
 790              $current_value = $rule_string;
 791          break;
 792   
 793          default:
 794              return;
 795      }
 796   
 797      $template->assign_vars(array(
 798          'COND_OPTION'    => $condition,
 799          'COND_CURRENT'    => $current_value)
 800      );
 801  }
 802   
 803  /**
 804  * Display defined message rules
 805  */
 806  function show_defined_rules($user_id, $check_lang, $rule_lang, $action_lang, $folder)
 807  {
 808      global $db, $template;
 809   
 810      $sql = 'SELECT *
 811          FROM ' . PRIVMSGS_RULES_TABLE . '
 812          WHERE user_id = ' . $user_id . '
 813          ORDER BY rule_id ASC';
 814      $result = $db->sql_query($sql);
 815      
 816      $count = 0;
 817      while ($row = $db->sql_fetchrow($result))
 818      {
 819          $template->assign_block_vars('rule', array(
 820              'COUNT'        => ++$count,
 821              'RULE_ID'    => $row['rule_id'],
 822              'CHECK'        => $check_lang[$row['rule_check']],
 823              'RULE'        => $rule_lang[$row['rule_connection']],
 824              'STRING'    => $row['rule_string'],
 825              'ACTION'    => $action_lang[$row['rule_action']],
 826              'FOLDER'    => ($row['rule_action'] == ACTION_PLACE_INTO_FOLDER) ? $folder[$row['rule_folder_id']]['folder_name'] : '')
 827          );
 828      }
 829      $db->sql_freeresult($result);
 830  }
 831   
 832  ?>