Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_board.php

History | View | Annotate | Download (47.3 KB)

1
<?php
2
/**
3
*
4
* @package acp
5
* @version $Id: acp_board.php 10492 2010-02-16 10:42:24Z bantu $
6
* @copyright (c) 2005 phpBB Group
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
*
9
* @todo add cron intervals to server settings? (database_gc, queue_interval, session_gc, search_gc, cache_gc, warnings_gc)
10
*/
11
12
/**
13
* @ignore
14
*/
15
if (!defined('IN_PHPBB'))
16
{
17
        exit;
18
}
19
20
/**
21
* @package acp
22
*/
23
class acp_board
24
{
25
        var $u_action;
26
        var $new_config = array();
27
28
        function main($id, $mode)
29
        {
30
                global $db, $user, $auth, $template;
31
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
32
                global $cache;
33
34
                $user->add_lang('acp/board');
35
36
                $action        = request_var('action', '');
37
                $submit = (isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable'])) ? true : false;
38
39
                $form_key = 'acp_board';
40
                add_form_key($form_key);
41
42
                /**
43
                *        Validation types are:
44
                *                string, int, bool,
45
                *                script_path (absolute path in url - beginning with / and no trailing slash),
46
                *                rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable)
47
                */
48
                switch ($mode)
49
                {
50
                        case 'settings':
51
                                $display_vars = array(
52
                                        'title'        => 'ACP_BOARD_SETTINGS',
53
                                        'vars'        => array(
54
                                                'legend1'                                => 'ACP_BOARD_SETTINGS',
55
                                                'sitename'                                => array('lang' => 'SITE_NAME',                                'validate' => 'string',        'type' => 'text:40:255', 'explain' => false),
56
                                                'site_desc'                                => array('lang' => 'SITE_DESC',                                'validate' => 'string',        'type' => 'text:40:255', 'explain' => false),
57
                                                'board_disable'                        => array('lang' => 'DISABLE_BOARD',                        'validate' => 'bool',        'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
58
                                                'board_disable_msg'                => false,
59
                                                'default_lang'                        => array('lang' => 'DEFAULT_LANGUAGE',                'validate' => 'lang',        'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
60
                                                'default_dateformat'        => array('lang' => 'DEFAULT_DATE_FORMAT',        'validate' => 'string',        'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
61
                                                'board_timezone'                => array('lang' => 'SYSTEM_TIMEZONE',                'validate' => 'string',        'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => false),
62
                                                'board_dst'                                => array('lang' => 'SYSTEM_DST',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
63
                                                'default_style'                        => array('lang' => 'DEFAULT_STYLE',                        'validate' => 'int',        'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false),
64
                                                'override_user_style'        => array('lang' => 'OVERRIDE_STYLE',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
65
66
                                                'legend2'                                => 'WARNINGS',
67
                                                'warnings_expire_days'        => array('lang' => 'WARNINGS_EXPIRE',                'validate' => 'int',        'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
68
69
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
70
                                        )
71
                                );
72
                        break;
73
74
                        case 'features':
75
                                $display_vars = array(
76
                                        'title'        => 'ACP_BOARD_FEATURES',
77
                                        'vars'        => array(
78
                                                'legend1'                                => 'ACP_BOARD_FEATURES',
79
                                                'allow_privmsg'                        => array('lang' => 'BOARD_PM',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
80
                                                'allow_topic_notify'        => array('lang' => 'ALLOW_TOPIC_NOTIFY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
81
                                                'allow_forum_notify'        => array('lang' => 'ALLOW_FORUM_NOTIFY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
82
                                                'allow_namechange'                => array('lang' => 'ALLOW_NAME_CHANGE',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
83
                                                'allow_attachments'                => array('lang' => 'ALLOW_ATTACHMENTS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
84
                                                'allow_pm_attach'                => array('lang' => 'ALLOW_PM_ATTACHMENTS',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
85
                                                'allow_pm_report'                => array('lang' => 'ALLOW_PM_REPORT',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
86
                                                'allow_bbcode'                        => array('lang' => 'ALLOW_BBCODE',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
87
                                                'allow_smilies'                        => array('lang' => 'ALLOW_SMILIES',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
88
                                                'allow_sig'                                => array('lang' => 'ALLOW_SIG',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
89
                                                'allow_nocensors'                => array('lang' => 'ALLOW_NO_CENSORS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
90
                                                'allow_bookmarks'                => array('lang' => 'ALLOW_BOOKMARKS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
91
                                                'allow_birthdays'                => array('lang' => 'ALLOW_BIRTHDAYS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
92
                                                'allow_quick_reply'                => array('lang' => 'ALLOW_QUICK_REPLY',                'validate' => 'bool',        'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
93
94
                                                'legend2'                                => 'ACP_LOAD_SETTINGS',
95
                                                'load_birthdays'                => array('lang' => 'YES_BIRTHDAYS',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
96
                                                'load_moderators'                => array('lang' => 'YES_MODERATORS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
97
                                                'load_jumpbox'                        => array('lang' => 'YES_JUMPBOX',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
98
                                                'load_cpf_memberlist'        => array('lang' => 'LOAD_CPF_MEMBERLIST',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
99
                                                'load_cpf_viewprofile'        => array('lang' => 'LOAD_CPF_VIEWPROFILE',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
100
                                                'load_cpf_viewtopic'        => array('lang' => 'LOAD_CPF_VIEWTOPIC',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
101
102
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
103
                                        )
104
                                );
105
                        break;
106
107
                        case 'avatar':
108
                                $display_vars = array(
109
                                        'title'        => 'ACP_AVATAR_SETTINGS',
110
                                        'vars'        => array(
111
                                                'legend1'                                => 'ACP_AVATAR_SETTINGS',
112
113
                                                'avatar_min_width'                => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
114
                                                'avatar_min_height'                => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
115
                                                'avatar_max_width'                => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
116
                                                'avatar_max_height'                => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
117
118
                                                'allow_avatar'                        => array('lang' => 'ALLOW_AVATARS',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
119
                                                'allow_avatar_local'        => array('lang' => 'ALLOW_LOCAL',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
120
                                                'allow_avatar_remote'        => array('lang' => 'ALLOW_REMOTE',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
121
                                                'allow_avatar_upload'        => array('lang' => 'ALLOW_UPLOAD',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
122
                                                'allow_avatar_remote_upload'=> array('lang' => 'ALLOW_REMOTE_UPLOAD', 'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
123
                                                'avatar_filesize'                => array('lang' => 'MAX_FILESIZE',                        'validate' => 'int:0',        'type' => 'text:4:10', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
124
                                                'avatar_min'                        => array('lang' => 'MIN_AVATAR_SIZE',                'validate' => 'int:0',        'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
125
                                                'avatar_max'                        => array('lang' => 'MAX_AVATAR_SIZE',                'validate' => 'int:0',        'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
126
                                                'avatar_path'                        => array('lang' => 'AVATAR_STORAGE_PATH',        'validate' => 'rwpath',        'type' => 'text:20:255', 'explain' => true),
127
                                                'avatar_gallery_path'        => array('lang' => 'AVATAR_GALLERY_PATH',        'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true)
128
                                        )
129
                                );
130
                        break;
131
132
                        case 'message':
133
                                $display_vars = array(
134
                                        'title'        => 'ACP_MESSAGE_SETTINGS',
135
                                        'lang'        => 'ucp',
136
                                        'vars'        => array(
137
                                                'legend1'                                => 'GENERAL_SETTINGS',
138
                                                'allow_privmsg'                        => array('lang' => 'BOARD_PM',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
139
                                                'pm_max_boxes'                        => array('lang' => 'BOXES_MAX',                                'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
140
                                                'pm_max_msgs'                        => array('lang' => 'BOXES_LIMIT',                        'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
141
                                                'full_folder_action'        => array('lang' => 'FULL_FOLDER_ACTION',        'validate' => 'int',        'type' => 'select', 'method' => 'full_folder_select', 'explain' => true),
142
                                                'pm_edit_time'                        => array('lang' => 'PM_EDIT_TIME',                        'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
143
                                                'pm_max_recipients'                => array('lang' => 'PM_MAX_RECIPIENTS',                'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true),
144
145
                                                'legend2'                                => 'GENERAL_OPTIONS',
146
                                                'allow_mass_pm'                        => array('lang' => 'ALLOW_MASS_PM',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
147
                                                'auth_bbcode_pm'                => array('lang' => 'ALLOW_BBCODE_PM',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
148
                                                'auth_smilies_pm'                => array('lang' => 'ALLOW_SMILIES_PM',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
149
                                                'allow_pm_attach'                => array('lang' => 'ALLOW_PM_ATTACHMENTS',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
150
                                                'allow_sig_pm'                        => array('lang' => 'ALLOW_SIG_PM',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
151
                                                'print_pm'                                => array('lang' => 'ALLOW_PRINT_PM',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
152
                                                'forward_pm'                        => array('lang' => 'ALLOW_FORWARD_PM',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
153
                                                'auth_img_pm'                        => array('lang' => 'ALLOW_IMG_PM',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
154
                                                'auth_flash_pm'                        => array('lang' => 'ALLOW_FLASH_PM',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
155
                                                'enable_pm_icons'                => array('lang' => 'ENABLE_PM_ICONS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
156
157
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
158
                                        )
159
                                );
160
                        break;
161
162
                        case 'post':
163
                                $display_vars = array(
164
                                        'title'        => 'ACP_POST_SETTINGS',
165
                                        'vars'        => array(
166
                                                'legend1'                                => 'GENERAL_OPTIONS',
167
                                                'allow_topic_notify'        => array('lang' => 'ALLOW_TOPIC_NOTIFY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
168
                                                'allow_forum_notify'        => array('lang' => 'ALLOW_FORUM_NOTIFY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
169
                                                'allow_bbcode'                        => array('lang' => 'ALLOW_BBCODE',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
170
                                                'allow_post_flash'                => array('lang' => 'ALLOW_POST_FLASH',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
171
                                                'allow_smilies'                        => array('lang' => 'ALLOW_SMILIES',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
172
                                                'allow_post_links'                => array('lang' => 'ALLOW_POST_LINKS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
173
                                                'allow_nocensors'                => array('lang' => 'ALLOW_NO_CENSORS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
174
                                                'allow_bookmarks'                => array('lang' => 'ALLOW_BOOKMARKS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
175
                                                'enable_post_confirm'        => array('lang' => 'VISUAL_CONFIRM_POST',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
176
                                                'allow_quick_reply'                => array('lang' => 'ALLOW_QUICK_REPLY',                'validate' => 'bool',        'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
177
178
                                                'legend2'                                => 'POSTING',
179
                                                'bump_type'                                => false,
180
                                                'edit_time'                                => array('lang' => 'EDIT_TIME',                                'validate' => 'int:0',                'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
181
                                                'delete_time'                        => array('lang' => 'DELETE_TIME',                        'validate' => 'int:0',                'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
182
                                                'display_last_edited'        => array('lang' => 'DISPLAY_LAST_EDITED',        'validate' => 'bool',                'type' => 'radio:yes_no', 'explain' => true),
183
                                                'flood_interval'                => array('lang' => 'FLOOD_INTERVAL',                'validate' => 'int:0',                'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
184
                                                'bump_interval'                        => array('lang' => 'BUMP_INTERVAL',                        'validate' => 'int:0',                'type' => 'custom', 'method' => 'bump_interval', 'explain' => true),
185
                                                'topics_per_page'                => array('lang' => 'TOPICS_PER_PAGE',                'validate' => 'int:1',                'type' => 'text:3:4', 'explain' => false),
186
                                                'posts_per_page'                => array('lang' => 'POSTS_PER_PAGE',                'validate' => 'int:1',                'type' => 'text:3:4', 'explain' => false),
187
                                                'smilies_per_page'                => array('lang' => 'SMILIES_PER_PAGE',                'validate' => 'int:1',                'type' => 'text:3:4', 'explain' => false),
188
                                                'hot_threshold'                        => array('lang' => 'HOT_THRESHOLD',                        'validate' => 'int:0',                'type' => 'text:3:4', 'explain' => true),
189
                                                'max_poll_options'                => array('lang' => 'MAX_POLL_OPTIONS',                'validate' => 'int:2:127',        'type' => 'text:4:4', 'explain' => false),
190
                                                'max_post_chars'                => array('lang' => 'CHAR_LIMIT',                        'validate' => 'int:0',                'type' => 'text:4:6', 'explain' => true),
191
                                                'min_post_chars'                => array('lang' => 'MIN_CHAR_LIMIT',                'validate' => 'int:0',                'type' => 'text:4:6', 'explain' => true),
192
                                                'max_post_smilies'                => array('lang' => 'SMILIES_LIMIT',                        'validate' => 'int:0',                'type' => 'text:4:4', 'explain' => true),
193
                                                'max_post_urls'                        => array('lang' => 'MAX_POST_URLS',                        'validate' => 'int:0',                'type' => 'text:5:4', 'explain' => true),
194
                                                'max_post_font_size'        => array('lang' => 'MAX_POST_FONT_SIZE',        'validate' => 'int:0',                'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
195
                                                'max_quote_depth'                => array('lang' => 'QUOTE_DEPTH_LIMIT',                'validate' => 'int:0',                'type' => 'text:4:4', 'explain' => true),
196
                                                'max_post_img_width'        => array('lang' => 'MAX_POST_IMG_WIDTH',        'validate' => 'int:0',                'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
197
                                                'max_post_img_height'        => array('lang' => 'MAX_POST_IMG_HEIGHT',        'validate' => 'int:0',                'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
198
199
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
200
                                        )
201
                                );
202
                        break;
203
204
                        case 'signature':
205
                                $display_vars = array(
206
                                        'title'        => 'ACP_SIGNATURE_SETTINGS',
207
                                        'vars'        => array(
208
                                                'legend1'                                => 'GENERAL_OPTIONS',
209
                                                'allow_sig'                                => array('lang' => 'ALLOW_SIG',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
210
                                                'allow_sig_bbcode'                => array('lang' => 'ALLOW_SIG_BBCODE',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
211
                                                'allow_sig_img'                        => array('lang' => 'ALLOW_SIG_IMG',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
212
                                                'allow_sig_flash'                => array('lang' => 'ALLOW_SIG_FLASH',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
213
                                                'allow_sig_smilies'                => array('lang' => 'ALLOW_SIG_SMILIES',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
214
                                                'allow_sig_links'                => array('lang' => 'ALLOW_SIG_LINKS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
215
216
                                                'legend2'                                => 'GENERAL_SETTINGS',
217
                                                'max_sig_chars'                        => array('lang' => 'MAX_SIG_LENGTH',                'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true),
218
                                                'max_sig_urls'                        => array('lang' => 'MAX_SIG_URLS',                        'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true),
219
                                                'max_sig_font_size'                => array('lang' => 'MAX_SIG_FONT_SIZE',                'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
220
                                                'max_sig_smilies'                => array('lang' => 'MAX_SIG_SMILIES',                'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true),
221
                                                'max_sig_img_width'                => array('lang' => 'MAX_SIG_IMG_WIDTH',                'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
222
                                                'max_sig_img_height'        => array('lang' => 'MAX_SIG_IMG_HEIGHT',        'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
223
224
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
225
                                        )
226
                                );
227
                        break;
228
229
                        case 'registration':
230
                                $display_vars = array(
231
                                        'title'        => 'ACP_REGISTER_SETTINGS',
232
                                        'vars'        => array(
233
                                                'legend1'                                => 'GENERAL_SETTINGS',
234
                                                'max_name_chars'                => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false,),
235
                                                'max_pass_chars'                => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
236
237
                                                'require_activation'        => array('lang' => 'ACC_ACTIVATION',        'validate' => 'int',        'type' => 'custom', 'method' => 'select_acc_activation', 'explain' => true),
238
                                                'new_member_post_limit'        => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']),
239
                                                'new_member_group_default'=> array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
240
                                                'min_name_chars'                => array('lang' => 'USERNAME_LENGTH',        'validate' => 'int:1',        'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true),
241
                                                'min_pass_chars'                => array('lang' => 'PASSWORD_LENGTH',        'validate' => 'int:1',        'type' => 'custom', 'method' => 'password_length', 'explain' => true),
242
                                                'allow_name_chars'                => array('lang' => 'USERNAME_CHARS',        'validate' => 'string',        'type' => 'select', 'method' => 'select_username_chars', 'explain' => true),
243
                                                'pass_complex'                        => array('lang' => 'PASSWORD_TYPE',                'validate' => 'string',        'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
244
                                                'chg_passforce'                        => array('lang' => 'FORCE_PASS_CHANGE',        'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
245
246
                                                'legend2'                                => 'GENERAL_OPTIONS',
247
                                                'allow_namechange'                => array('lang' => 'ALLOW_NAME_CHANGE',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
248
                                                'allow_emailreuse'                => array('lang' => 'ALLOW_EMAIL_REUSE',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
249
                                                'enable_confirm'                => array('lang' => 'VISUAL_CONFIRM_REG',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
250
                                                'max_login_attempts'        => array('lang' => 'MAX_LOGIN_ATTEMPTS',        'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true),
251
                                                'max_reg_attempts'                => array('lang' => 'REG_LIMIT',                                'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
252
253
                                                'legend3'                        => 'COPPA',
254
                                                'coppa_enable'                => array('lang' => 'ENABLE_COPPA',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
255
                                                'coppa_mail'                => array('lang' => 'COPPA_MAIL',                'validate' => 'string',        'type' => 'textarea:5:40', 'explain' => true),
256
                                                'coppa_fax'                        => array('lang' => 'COPPA_FAX',                        'validate' => 'string',        'type' => 'text:25:100', 'explain' => false),
257
258
                                                'legend4'                        => 'ACP_SUBMIT_CHANGES',
259
                                        )
260
                                );
261
                        break;
262
263
                        case 'feed':
264
                                $display_vars = array(
265
                                        'title'        => 'ACP_FEED_MANAGEMENT',
266
                                        'vars'        => array(
267
                                                'legend1'                                        => 'ACP_FEED_GENERAL',
268
                                                'feed_enable'                                => array('lang' => 'ACP_FEED_ENABLE',                                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
269
                                                'feed_item_statistics'                => array('lang' => 'ACP_FEED_ITEM_STATISTICS',                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true),
270
                                                'feed_http_auth'                        => array('lang' => 'ACP_FEED_HTTP_AUTH',                        'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true),
271
272
                                                'legend2'                                        => 'ACP_FEED_POST_BASED',
273
                                                'feed_limit_post'                        => array('lang' => 'ACP_FEED_LIMIT',                                'validate' => 'int:5',        'type' => 'text:3:4',                                'explain' => true),
274
                                                'feed_overall'                                => array('lang' => 'ACP_FEED_OVERALL',                                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
275
                                                'feed_forum'                                => array('lang' => 'ACP_FEED_FORUM',                                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
276
                                                'feed_topic'                                => array('lang' => 'ACP_FEED_TOPIC',                                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
277
278
                                                'legend3'                                        => 'ACP_FEED_TOPIC_BASED',
279
                                                'feed_limit_topic'                        => array('lang' => 'ACP_FEED_LIMIT',                                'validate' => 'int:5',        'type' => 'text:3:4',                                'explain' => true),
280
                                                'feed_topics_new'                        => array('lang' => 'ACP_FEED_TOPICS_NEW',                        'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
281
                                                'feed_topics_active'                => array('lang' => 'ACP_FEED_TOPICS_ACTIVE',                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
282
                                                'feed_news_id'                                => array('lang' => 'ACP_FEED_NEWS',                                        'validate' => 'string',        'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true),
283
284
                                                'legend4'                                        => 'ACP_FEED_SETTINGS_OTHER',
285
                                                'feed_overall_forums'                => array('lang'        => 'ACP_FEED_OVERALL_FORUMS',                'validate' => 'bool',        'type' => 'radio:enabled_disabled',        'explain' => true ),
286
                                                'feed_exclude_id'                        => array('lang' => 'ACP_FEED_EXCLUDE_ID',                        'validate' => 'string',        'type' => 'custom', 'method' => 'select_exclude_forums', 'explain' => true),
287
                                        )
288
                                );
289
                        break;
290
291
                        case 'cookie':
292
                                $display_vars = array(
293
                                        'title'        => 'ACP_COOKIE_SETTINGS',
294
                                        'vars'        => array(
295
                                                'legend1'                => 'ACP_COOKIE_SETTINGS',
296
                                                'cookie_domain'        => array('lang' => 'COOKIE_DOMAIN',        'validate' => 'string',        'type' => 'text::255', 'explain' => false),
297
                                                'cookie_name'        => array('lang' => 'COOKIE_NAME',        'validate' => 'string',        'type' => 'text::16', 'explain' => false),
298
                                                'cookie_path'        => array('lang'        => 'COOKIE_PATH',        'validate' => 'string',        'type' => 'text::255', 'explain' => false),
299
                                                'cookie_secure'        => array('lang' => 'COOKIE_SECURE',        'validate' => 'bool',        'type' => 'radio:disabled_enabled', 'explain' => true)
300
                                        )
301
                                );
302
                        break;
303
304
                        case 'load':
305
                                $display_vars = array(
306
                                        'title'        => 'ACP_LOAD_SETTINGS',
307
                                        'vars'        => array(
308
                                                'legend1'                        => 'GENERAL_SETTINGS',
309
                                                'limit_load'                => array('lang' => 'LIMIT_LOAD',                'validate' => 'string',        'type' => 'text:4:4', 'explain' => true),
310
                                                'session_length'        => array('lang' => 'SESSION_LENGTH',        'validate' => 'int:60',        'type' => 'text:5:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
311
                                                'active_sessions'        => array('lang' => 'LIMIT_SESSIONS',        'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
312
                                                'load_online_time'        => array('lang' => 'ONLINE_LENGTH',                'validate' => 'int:0',        'type' => 'text:4:3', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
313
314
                                                'legend2'                                => 'GENERAL_OPTIONS',
315
                                                'load_db_track'                        => array('lang' => 'YES_POST_MARKING',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
316
                                                'load_db_lastread'                => array('lang' => 'YES_READ_MARKING',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
317
                                                'load_anon_lastread'        => array('lang' => 'YES_ANON_READ_MARKING',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
318
                                                'load_online'                        => array('lang' => 'YES_ONLINE',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
319
                                                'load_online_guests'        => array('lang' => 'YES_ONLINE_GUESTS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
320
                                                'load_onlinetrack'                => array('lang' => 'YES_ONLINE_TRACK',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
321
                                                'load_birthdays'                => array('lang' => 'YES_BIRTHDAYS',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
322
                                                'load_moderators'                => array('lang' => 'YES_MODERATORS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
323
                                                'load_jumpbox'                        => array('lang' => 'YES_JUMPBOX',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
324
                                                'load_user_activity'        => array('lang' => 'LOAD_USER_ACTIVITY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
325
                                                'load_tplcompile'                => array('lang' => 'RECOMPILE_STYLES',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
326
327
                                                'legend3'                                => 'CUSTOM_PROFILE_FIELDS',
328
                                                'load_cpf_memberlist'        => array('lang' => 'LOAD_CPF_MEMBERLIST',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
329
                                                'load_cpf_viewprofile'        => array('lang' => 'LOAD_CPF_VIEWPROFILE',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
330
                                                'load_cpf_viewtopic'        => array('lang' => 'LOAD_CPF_VIEWTOPIC',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
331
332
                                                'legend4'                                        => 'ACP_SUBMIT_CHANGES',
333
                                        )
334
                                );
335
                        break;
336
337
                        case 'auth':
338
                                $display_vars = array(
339
                                        'title'        => 'ACP_AUTH_SETTINGS',
340
                                        'vars'        => array(
341
                                                'legend1'                => 'ACP_AUTH_SETTINGS',
342
                                                'auth_method'        => array('lang' => 'AUTH_METHOD',        'validate' => 'string',        'type' => 'select', 'method' => 'select_auth_method', 'explain' => false)
343
                                        )
344
                                );
345
                        break;
346
347
                        case 'server':
348
                                $display_vars = array(
349
                                        'title'        => 'ACP_SERVER_SETTINGS',
350
                                        'vars'        => array(
351
                                                'legend1'                                => 'ACP_SERVER_SETTINGS',
352
                                                'gzip_compress'                        => array('lang' => 'ENABLE_GZIP',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
353
354
                                                'legend2'                                => 'PATH_SETTINGS',
355
                                                'smilies_path'                        => array('lang' => 'SMILIES_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
356
                                                'icons_path'                        => array('lang' => 'ICONS_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
357
                                                'upload_icons_path'                => array('lang' => 'UPLOAD_ICONS_PATH',        'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
358
                                                'ranks_path'                        => array('lang' => 'RANKS_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
359
360
                                                'legend3'                                => 'SERVER_URL_SETTINGS',
361
                                                'force_server_vars'                => array('lang' => 'FORCE_SERVER_VARS',        'validate' => 'bool',                        'type' => 'radio:yes_no', 'explain' => true),
362
                                                'server_protocol'                => array('lang' => 'SERVER_PROTOCOL',        'validate' => 'string',                        'type' => 'text:10:10', 'explain' => true),
363
                                                'server_name'                        => array('lang' => 'SERVER_NAME',                'validate' => 'string',                        'type' => 'text:40:255', 'explain' => true),
364
                                                'server_port'                        => array('lang' => 'SERVER_PORT',                'validate' => 'int:0',                        'type' => 'text:5:5', 'explain' => true),
365
                                                'script_path'                        => array('lang' => 'SCRIPT_PATH',                'validate' => 'script_path',        'type' => 'text::255', 'explain' => true),
366
367
                                                'legend4'                                        => 'ACP_SUBMIT_CHANGES',
368
                                        )
369
                                );
370
                        break;
371
372
                        case 'security':
373
                                $display_vars = array(
374
                                        'title'        => 'ACP_SECURITY_SETTINGS',
375
                                        'vars'        => array(
376
                                                'legend1'                                => 'ACP_SECURITY_SETTINGS',
377
                                                'allow_autologin'                => array('lang' => 'ALLOW_AUTOLOGIN',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
378
                                                'max_autologin_time'        => array('lang' => 'AUTOLOGIN_LENGTH',                'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
379
                                                'ip_check'                                => array('lang' => 'IP_VALID',                                'validate' => 'int',        'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
380
                                                'browser_check'                        => array('lang' => 'BROWSER_VALID',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
381
                                                'forwarded_for_check'        => array('lang' => 'FORWARDED_FOR_VALID',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
382
                                                'referer_validation'        => array('lang' => 'REFERER_VALID',                'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
383
                                                'check_dnsbl'                        => array('lang' => 'CHECK_DNSBL',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
384
                                                'email_check_mx'                => array('lang' => 'EMAIL_CHECK_MX',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
385
                                                'pass_complex'                        => array('lang' => 'PASSWORD_TYPE',                        'validate' => 'string',        'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
386
                                                'chg_passforce'                        => array('lang' => 'FORCE_PASS_CHANGE',                'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
387
                                                'max_login_attempts'        => array('lang' => 'MAX_LOGIN_ATTEMPTS',        'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true),
388
                                                'tpl_allow_php'                        => array('lang' => 'TPL_ALLOW_PHP',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
389
                                                'form_token_lifetime'        => array('lang' => 'FORM_TIME_MAX',                        'validate' => 'int:-1',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
390
                                                'form_token_sid_guests'        => array('lang' => 'FORM_SID_GUESTS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
391
392
                                        )
393
                                );
394
                        break;
395
396
                        case 'email':
397
                                $display_vars = array(
398
                                        'title'        => 'ACP_EMAIL_SETTINGS',
399
                                        'vars'        => array(
400
                                                'legend1'                                => 'GENERAL_SETTINGS',
401
                                                'email_enable'                        => array('lang' => 'ENABLE_EMAIL',                        'validate' => 'bool',        'type' => 'radio:enabled_disabled', 'explain' => true),
402
                                                'board_email_form'                => array('lang' => 'BOARD_EMAIL_FORM',                'validate' => 'bool',        'type' => 'radio:enabled_disabled', 'explain' => true),
403
                                                'email_function_name'        => array('lang' => 'EMAIL_FUNCTION_NAME',        'validate' => 'string',        'type' => 'text:20:50', 'explain' => true),
404
                                                'email_package_size'        => array('lang' => 'EMAIL_PACKAGE_SIZE',        'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true),
405
                                                'board_contact'                        => array('lang' => 'CONTACT_EMAIL',                        'validate' => 'string',        'type' => 'text:25:100', 'explain' => true),
406
                                                'board_email'                        => array('lang' => 'ADMIN_EMAIL',                        'validate' => 'string',        'type' => 'text:25:100', 'explain' => true),
407
                                                'board_email_sig'                => array('lang' => 'EMAIL_SIG',                                'validate' => 'string',        'type' => 'textarea:5:30', 'explain' => true),
408
                                                'board_hide_emails'                => array('lang' => 'BOARD_HIDE_EMAILS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
409
410
                                                'legend2'                                => 'SMTP_SETTINGS',
411
                                                'smtp_delivery'                        => array('lang' => 'USE_SMTP',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
412
                                                'smtp_host'                                => array('lang' => 'SMTP_SERVER',                        'validate' => 'string',        'type' => 'text:25:50', 'explain' => false),
413
                                                'smtp_port'                                => array('lang' => 'SMTP_PORT',                                'validate' => 'int:0',        'type' => 'text:4:5', 'explain' => true),
414
                                                'smtp_auth_method'                => array('lang' => 'SMTP_AUTH_METHOD',                'validate' => 'string',        'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
415
                                                'smtp_username'                        => array('lang' => 'SMTP_USERNAME',                        'validate' => 'string',        'type' => 'text:25:255', 'explain' => true),
416
                                                'smtp_password'                        => array('lang' => 'SMTP_PASSWORD',                        'validate' => 'string',        'type' => 'password:25:255', 'explain' => true),
417
418
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
419
                                        )
420
                                );
421
                        break;
422
423
                        default:
424
                                trigger_error('NO_MODE', E_USER_ERROR);
425
                        break;
426
                }
427
428
                if (isset($display_vars['lang']))
429
                {
430
                        $user->add_lang($display_vars['lang']);
431
                }
432
433
                $this->new_config = $config;
434
                $cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
435
                $error = array();
436
437
                // We validate the complete config if whished
438
                validate_config_vars($display_vars['vars'], $cfg_array, $error);
439
440
                if ($submit && !check_form_key($form_key))
441
                {
442
                        $error[] = $user->lang['FORM_INVALID'];
443
                }
444
                // Do not write values if there is an error
445
                if (sizeof($error))
446
                {
447
                        $submit = false;
448
                }
449
450
                // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to...
451
                foreach ($display_vars['vars'] as $config_name => $null)
452
                {
453
                        if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false)
454
                        {
455
                                continue;
456
                        }
457
458
                        if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id')
459
                        {
460
                                continue;
461
                        }
462
463
                        $this->new_config[$config_name] = $config_value = $cfg_array[$config_name];
464
465
                        if ($config_name == 'email_function_name')
466
                        {
467
                                $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name']));
468
                                $this->new_config['email_function_name'] = (empty($this->new_config['email_function_name']) || !function_exists($this->new_config['email_function_name'])) ? 'mail' : $this->new_config['email_function_name'];
469
                                $config_value = $this->new_config['email_function_name'];
470
                        }
471
472
                        if ($submit)
473
                        {
474
                                set_config($config_name, $config_value);
475
476
                                if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable']))
477
                                {
478
                                        enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2));
479
                                }
480
                        }
481
                }
482
483
                // Store news and exclude ids
484
                if ($mode == 'feed' && $submit)
485
                {
486
                        $cache->destroy('_feed_news_forum_ids');
487
                        $cache->destroy('_feed_excluded_forum_ids');
488
489
                        $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id');
490
                        $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id');
491
                }
492
493
                if ($mode == 'auth')
494
                {
495
                        // Retrieve a list of auth plugins and check their config values
496
                        $auth_plugins = array();
497
498
                        $dp = @opendir($phpbb_root_path . 'includes/auth');
499
500
                        if ($dp)
501
                        {
502
                                while (($file = readdir($dp)) !== false)
503
                                {
504
                                        if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
505
                                        {
506
                                                $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file));
507
                                        }
508
                                }
509
                                closedir($dp);
510
511
                                sort($auth_plugins);
512
                        }
513
514
                        $updated_auth_settings = false;
515
                        $old_auth_config = array();
516
                        foreach ($auth_plugins as $method)
517
                        {
518
                                if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
519
                                {
520
                                        include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
521
522
                                        $method = 'acp_' . $method;
523
                                        if (function_exists($method))
524
                                        {
525
                                                if ($fields = $method($this->new_config))
526
                                                {
527
                                                        // Check if we need to create config fields for this plugin and save config when submit was pressed
528
                                                        foreach ($fields['config'] as $field)
529
                                                        {
530
                                                                if (!isset($config[$field]))
531
                                                                {
532
                                                                        set_config($field, '');
533
                                                                }
534
535
                                                                if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
536
                                                                {
537
                                                                        continue;
538
                                                                }
539
540
                                                                $old_auth_config[$field] = $this->new_config[$field];
541
                                                                $config_value = $cfg_array[$field];
542
                                                                $this->new_config[$field] = $config_value;
543
544
                                                                if ($submit)
545
                                                                {
546
                                                                        $updated_auth_settings = true;
547
                                                                        set_config($field, $config_value);
548
                                                                }
549
                                                        }
550
                                                }
551
                                                unset($fields);
552
                                        }
553
                                }
554
                        }
555
556
                        if ($submit && (($cfg_array['auth_method'] != $this->new_config['auth_method']) || $updated_auth_settings))
557
                        {
558
                                $method = basename($cfg_array['auth_method']);
559
                                if ($method && in_array($method, $auth_plugins))
560
                                {
561
                                        include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
562
563
                                        $method = 'init_' . $method;
564
                                        if (function_exists($method))
565
                                        {
566
                                                if ($error = $method())
567
                                                {
568
                                                        foreach ($old_auth_config as $config_name => $config_value)
569
                                                        {
570
                                                                set_config($config_name, $config_value);
571
                                                        }
572
                                                        trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
573
                                                }
574
                                        }
575
                                        set_config('auth_method', basename($cfg_array['auth_method']));
576
                                }
577
                                else
578
                                {
579
                                        trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR);
580
                                }
581
                        }
582
                }
583
584
                if ($submit)
585
                {
586
                        add_log('admin', 'LOG_CONFIG_' . strtoupper($mode));
587
588
                        trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
589
                }
590
591
                $this->tpl_name = 'acp_board';
592
                $this->page_title = $display_vars['title'];
593
594
                $template->assign_vars(array(
595
                        'L_TITLE'                        => $user->lang[$display_vars['title']],
596
                        'L_TITLE_EXPLAIN'        => $user->lang[$display_vars['title'] . '_EXPLAIN'],
597
598
                        'S_ERROR'                        => (sizeof($error)) ? true : false,
599
                        'ERROR_MSG'                        => implode('<br />', $error),
600
601
                        'U_ACTION'                        => $this->u_action)
602
                );
603
604
                // Output relevant page
605
                foreach ($display_vars['vars'] as $config_key => $vars)
606
                {
607
                        if (!is_array($vars) && strpos($config_key, 'legend') === false)
608
                        {
609
                                continue;
610
                        }
611
612
                        if (strpos($config_key, 'legend') !== false)
613
                        {
614
                                $template->assign_block_vars('options', array(
615
                                        'S_LEGEND'                => true,
616
                                        'LEGEND'                => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
617
                                );
618
619
                                continue;
620
                        }
621
622
                        $type = explode(':', $vars['type']);
623
624
                        $l_explain = '';
625
                        if ($vars['explain'] && isset($vars['lang_explain']))
626
                        {
627
                                $l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
628
                        }
629
                        else if ($vars['explain'])
630
                        {
631
                                $l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
632
                        }
633
634
                        $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars);
635
636
                        if (empty($content))
637
                        {
638
                                continue;
639
                        }
640
641
                        $template->assign_block_vars('options', array(
642
                                'KEY'                        => $config_key,
643
                                'TITLE'                        => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
644
                                'S_EXPLAIN'                => $vars['explain'],
645
                                'TITLE_EXPLAIN'        => $l_explain,
646
                                'CONTENT'                => $content,
647
                                )
648
                        );
649
650
                        unset($display_vars['vars'][$config_key]);
651
                }
652
653
                if ($mode == 'auth')
654
                {
655
                        $template->assign_var('S_AUTH', true);
656
657
                        foreach ($auth_plugins as $method)
658
                        {
659
                                if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
660
                                {
661
                                        $method = 'acp_' . $method;
662
                                        if (function_exists($method))
663
                                        {
664
                                                $fields = $method($this->new_config);
665
666
                                                if ($fields['tpl'])
667
                                                {
668
                                                        $template->assign_block_vars('auth_tpl', array(
669
                                                                'TPL'        => $fields['tpl'])
670
                                                        );
671
                                                }
672
                                                unset($fields);
673
                                        }
674
                                }
675
                        }
676
                }
677
        }
678
679
        /**
680
        * Select auth method
681
        */
682
        function select_auth_method($selected_method, $key = '')
683
        {
684
                global $phpbb_root_path, $phpEx;
685
686
                $auth_plugins = array();
687
688
                $dp = @opendir($phpbb_root_path . 'includes/auth');
689
690
                if (!$dp)
691
                {
692
                        return '';
693
                }
694
695
                while (($file = readdir($dp)) !== false)
696
                {
697
                        if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
698
                        {
699
                                $auth_plugins[] = preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file);
700
                        }
701
                }
702
                closedir($dp);
703
704
                sort($auth_plugins);
705
706
                $auth_select = '';
707
                foreach ($auth_plugins as $method)
708
                {
709
                        $selected = ($selected_method == $method) ? ' selected="selected"' : '';
710
                        $auth_select .= '<option value="' . $method . '"' . $selected . '>' . ucfirst($method) . '</option>';
711
                }
712
713
                return $auth_select;
714
        }
715
716
        /**
717
        * Select mail authentication method
718
        */
719
        function mail_auth_select($selected_method, $key = '')
720
        {
721
                global $user;
722
723
                $auth_methods = array('PLAIN', 'LOGIN', 'CRAM-MD5', 'DIGEST-MD5', 'POP-BEFORE-SMTP');
724
                $s_smtp_auth_options = '';
725
726
                foreach ($auth_methods as $method)
727
                {
728
                        $s_smtp_auth_options .= '<option value="' . $method . '"' . (($selected_method == $method) ? ' selected="selected"' : '') . '>' . $user->lang['SMTP_' . str_replace('-', '_', $method)] . '</option>';
729
                }
730
731
                return $s_smtp_auth_options;
732
        }
733
734
        /**
735
        * Select full folder action
736
        */
737
        function full_folder_select($value, $key = '')
738
        {
739
                global $user;
740
741
                return '<option value="1"' . (($value == 1) ? ' selected="selected"' : '') . '>' . $user->lang['DELETE_OLDEST_MESSAGES'] . '</option><option value="2"' . (($value == 2) ? ' selected="selected"' : '') . '>' . $user->lang['HOLD_NEW_MESSAGES_SHORT'] . '</option>';
742
        }
743
744
        /**
745
        * Select ip validation
746
        */
747
        function select_ip_check($value, $key = '')
748
        {
749
                $radio_ary = array(4 => 'ALL', 3 => 'CLASS_C', 2 => 'CLASS_B', 0 => 'NO_IP_VALIDATION');
750
751
                return h_radio('config[ip_check]', $radio_ary, $value, $key);
752
        }
753
754
        /**
755
        * Select referer validation
756
        */
757
        function select_ref_check($value, $key = '')
758
        {
759
                $radio_ary = array(REFERER_VALIDATE_PATH => 'REF_PATH', REFERER_VALIDATE_HOST => 'REF_HOST', REFERER_VALIDATE_NONE => 'NO_REF_VALIDATION');
760
761
                return h_radio('config[referer_validation]', $radio_ary, $value, $key);
762
        }
763
764
        /**
765
        * Select account activation method
766
        */
767
        function select_acc_activation($value, $key = '')
768
        {
769
                global $user, $config;
770
771
                $radio_ary = array(USER_ACTIVATION_DISABLE => 'ACC_DISABLE', USER_ACTIVATION_NONE => 'ACC_NONE');
772
                if ($config['email_enable'])
773
                {
774
                        $radio_ary += array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN');
775
                }
776
777
                return h_radio('config[require_activation]', $radio_ary, $value, $key);
778
        }
779
780
        /**
781
        * Maximum/Minimum username length
782
        */
783
        function username_length($value, $key = '')
784
        {
785
                global $user;
786
787
                return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
788
        }
789
790
        /**
791
        * Allowed chars in usernames
792
        */
793
        function select_username_chars($selected_value, $key)
794
        {
795
                global $user;
796
797
                $user_char_ary = array('USERNAME_CHARS_ANY', 'USERNAME_ALPHA_ONLY', 'USERNAME_ALPHA_SPACERS', 'USERNAME_LETTER_NUM', 'USERNAME_LETTER_NUM_SPACERS', 'USERNAME_ASCII');
798
                $user_char_options = '';
799
                foreach ($user_char_ary as $user_type)
800
                {
801
                        $selected = ($selected_value == $user_type) ? ' selected="selected"' : '';
802
                        $user_char_options .= '<option value="' . $user_type . '"' . $selected . '>' . $user->lang[$user_type] . '</option>';
803
                }
804
805
                return $user_char_options;
806
        }
807
808
        /**
809
        * Maximum/Minimum password length
810
        */
811
        function password_length($value, $key)
812
        {
813
                global $user;
814
815
                return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
816
        }
817
818
        /**
819
        * Required chars in passwords
820
        */
821
        function select_password_chars($selected_value, $key)
822
        {
823
                global $user;
824
825
                $pass_type_ary = array('PASS_TYPE_ANY', 'PASS_TYPE_CASE', 'PASS_TYPE_ALPHA', 'PASS_TYPE_SYMBOL');
826
                $pass_char_options = '';
827
                foreach ($pass_type_ary as $pass_type)
828
                {
829
                        $selected = ($selected_value == $pass_type) ? ' selected="selected"' : '';
830
                        $pass_char_options .= '<option value="' . $pass_type . '"' . $selected . '>' . $user->lang[$pass_type] . '</option>';
831
                }
832
833
                return $pass_char_options;
834
        }
835
836
        /**
837
        * Select bump interval
838
        */
839
        function bump_interval($value, $key)
840
        {
841
                global $user;
842
843
                $s_bump_type = '';
844
                $types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS');
845
                foreach ($types as $type => $lang)
846
                {
847
                        $selected = ($this->new_config['bump_type'] == $type) ? ' selected="selected"' : '';
848
                        $s_bump_type .= '<option value="' . $type . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
849
                }
850
851
                return '<input id="' . $key . '" type="text" size="3" maxlength="4" name="config[bump_interval]" value="' . $value . '" />&nbsp;<select name="config[bump_type]">' . $s_bump_type . '</select>';
852
        }
853
854
        /**
855
        * Board disable option and message
856
        */
857
        function board_disable($value, $key)
858
        {
859
                global $user;
860
861
                $radio_ary = array(1 => 'YES', 0 => 'NO');
862
863
                return h_radio('config[board_disable]', $radio_ary, $value) . '<br /><input id="' . $key . '" type="text" name="config[board_disable_msg]" maxlength="255" size="40" value="' . $this->new_config['board_disable_msg'] . '" />';
864
        }
865
866
        /**
867
        * Global quick reply enable/disable setting and button to enable in all forums
868
        */
869
        function quick_reply($value, $key)
870
        {
871
                global $user;
872
873
                $radio_ary = array(1 => 'YES', 0 => 'NO');
874
875
                return h_radio('config[allow_quick_reply]', $radio_ary, $value) .
876
                        '<br /><br /><input class="button2" type="submit" id="' . $key . '_enable" name="' . $key . '_enable" value="' . $user->lang['ALLOW_QUICK_REPLY_BUTTON'] . '" />';
877
        }
878
879
880
        /**
881
        * Select default dateformat
882
        */
883
        function dateformat_select($value, $key)
884
        {
885
                global $user, $config;
886
887
                // Let the format_date function operate with the acp values
888
                $old_tz = $user->timezone;
889
                $old_dst = $user->dst;
890
891
                $user->timezone = $config['board_timezone'];
892
                $user->dst = $config['board_dst'];
893
894
                $dateformat_options = '';
895
896
                foreach ($user->lang['dateformats'] as $format => $null)
897
                {
898
                        $dateformat_options .= '<option value="' . $format . '"' . (($format == $value) ? ' selected="selected"' : '') . '>';
899
                        $dateformat_options .= $user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $user->lang['VARIANT_DATE_SEPARATOR'] . $user->format_date(time(), $format, true) : '');
900
                        $dateformat_options .= '</option>';
901
                }
902
903
                $dateformat_options .= '<option value="custom"';
904
                if (!isset($user->lang['dateformats'][$value]))
905
                {
906
                        $dateformat_options .= ' selected="selected"';
907
                }
908
                $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . '</option>';
909
910
                // Reset users date options
911
                $user->timezone = $old_tz;
912
                $user->dst = $old_dst;
913
914
                return "<select name=\"dateoptions\" id=\"dateoptions\" onchange=\"if (this.value == 'custom') { document.getElementById('" . addslashes($key) . "').value = '" . addslashes($value) . "'; } else { document.getElementById('" . addslashes($key) . "').value = this.value; }\">$dateformat_options</select>
915
                <input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
916
        }
917
918
        /**
919
        * Select multiple forums
920
        */
921
        function select_news_forums($value, $key)
922
        {
923
                global $user, $config;
924
925
                $forum_list = make_forum_select(false, false, true, true, true, false, true);
926
927
                // Build forum options
928
                $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
929
                foreach ($forum_list as $f_id => $f_row)
930
                {
931
                        $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_NEWS, $f_row['forum_options']);
932
933
                        $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
934
                }
935
                $s_forum_options .= '</select>';
936
937
                return $s_forum_options;
938
        }
939
940
        function select_exclude_forums($value, $key)
941
        {
942
                global $user, $config;
943
944
                $forum_list = make_forum_select(false, false, true, true, true, false, true);
945
946
                // Build forum options
947
                $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
948
                foreach ($forum_list as $f_id => $f_row)
949
                {
950
                        $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $f_row['forum_options']);
951
952
                        $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
953
                }
954
                $s_forum_options .= '</select>';
955
956
                return $s_forum_options;
957
        }
958
959
        function store_feed_forums($option, $key)
960
        {
961
                global $db, $cache;
962
963
                // Get key
964
                $values = request_var($key, array(0 => 0));
965
966
                // Empty option bit for all forums
967
                $sql = 'UPDATE ' . FORUMS_TABLE . '
968
                        SET forum_options = forum_options - ' . (1 << $option) . '
969
                        WHERE ' . $db->sql_bit_and('forum_options', $option, '<> 0');
970
                $db->sql_query($sql);
971
972
                // Already emptied for all...
973
                if (sizeof($values))
974
                {
975
                        // Set for selected forums
976
                        $sql = 'UPDATE ' . FORUMS_TABLE . '
977
                                SET forum_options = forum_options + ' . (1 << $option) . '
978
                                WHERE ' . $db->sql_in_set('forum_id', $values);
979
                        $db->sql_query($sql);
980
                }
981
982
                // Empty sql cache for forums table because options changed
983
                $cache->destroy('sql', FORUMS_TABLE);
984
        }
985
986
}
987
988
?>