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