source: trunk/forum/includes/ucp/ucp_pm_options.php

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