Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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:52 - Dateigröße: 24.33 KiB


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