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  ?>