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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
ucp_pm_options.php
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&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&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&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&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&form=ucp&field=rule_string&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