phpBB
Statistics
| Revision:

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

History | View | Annotate | Download (48.4 kB)

1
<?php
2
/**
3
*
4
* @package acp
5
* @version $Id: acp_board.php 11645 2011-12-25 14:30:08Z git-gate $
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' => true),
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:1',                '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' => 'select', '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_unreads_search'        => array('lang' => 'YES_UNREAD_SEARCH',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
323
                                                'load_moderators'                => array('lang' => 'YES_MODERATORS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
324
                                                'load_jumpbox'                        => array('lang' => 'YES_JUMPBOX',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
325
                                                'load_user_activity'        => array('lang' => 'LOAD_USER_ACTIVITY',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
326
                                                'load_tplcompile'                => array('lang' => 'RECOMPILE_STYLES',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
327
328
                                                'legend3'                                => 'CUSTOM_PROFILE_FIELDS',
329
                                                'load_cpf_memberlist'        => array('lang' => 'LOAD_CPF_MEMBERLIST',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
330
                                                'load_cpf_viewprofile'        => array('lang' => 'LOAD_CPF_VIEWPROFILE',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
331
                                                'load_cpf_viewtopic'        => array('lang' => 'LOAD_CPF_VIEWTOPIC',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => false),
332
333
                                                'legend4'                                        => 'ACP_SUBMIT_CHANGES',
334
                                        )
335
                                );
336
                        break;
337
338
                        case 'auth':
339
                                $display_vars = array(
340
                                        'title'        => 'ACP_AUTH_SETTINGS',
341
                                        'vars'        => array(
342
                                                'legend1'                => 'ACP_AUTH_SETTINGS',
343
                                                'auth_method'        => array('lang' => 'AUTH_METHOD',        'validate' => 'string',        'type' => 'select', 'method' => 'select_auth_method', 'explain' => false)
344
                                        )
345
                                );
346
                        break;
347
348
                        case 'server':
349
                                $display_vars = array(
350
                                        'title'        => 'ACP_SERVER_SETTINGS',
351
                                        'vars'        => array(
352
                                                'legend1'                                => 'ACP_SERVER_SETTINGS',
353
                                                'gzip_compress'                        => array('lang' => 'ENABLE_GZIP',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
354
355
                                                'legend2'                                => 'PATH_SETTINGS',
356
                                                'smilies_path'                        => array('lang' => 'SMILIES_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
357
                                                'icons_path'                        => array('lang' => 'ICONS_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
358
                                                'upload_icons_path'                => array('lang' => 'UPLOAD_ICONS_PATH',        'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
359
                                                'ranks_path'                        => array('lang' => 'RANKS_PATH',                'validate' => 'rpath',        'type' => 'text:20:255', 'explain' => true),
360
361
                                                'legend3'                                => 'SERVER_URL_SETTINGS',
362
                                                'force_server_vars'                => array('lang' => 'FORCE_SERVER_VARS',        'validate' => 'bool',                        'type' => 'radio:yes_no', 'explain' => true),
363
                                                'server_protocol'                => array('lang' => 'SERVER_PROTOCOL',        'validate' => 'string',                        'type' => 'text:10:10', 'explain' => true),
364
                                                'server_name'                        => array('lang' => 'SERVER_NAME',                'validate' => 'string',                        'type' => 'text:40:255', 'explain' => true),
365
                                                'server_port'                        => array('lang' => 'SERVER_PORT',                'validate' => 'int:0',                        'type' => 'text:5:5', 'explain' => true),
366
                                                'script_path'                        => array('lang' => 'SCRIPT_PATH',                'validate' => 'script_path',        'type' => 'text::255', 'explain' => true),
367
368
                                                'legend4'                                        => 'ACP_SUBMIT_CHANGES',
369
                                        )
370
                                );
371
                        break;
372
373
                        case 'security':
374
                                $display_vars = array(
375
                                        'title'        => 'ACP_SECURITY_SETTINGS',
376
                                        'vars'        => array(
377
                                                'legend1'                                => 'ACP_SECURITY_SETTINGS',
378
                                                'allow_autologin'                => array('lang' => 'ALLOW_AUTOLOGIN',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
379
                                                'max_autologin_time'        => array('lang' => 'AUTOLOGIN_LENGTH',                'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
380
                                                'ip_check'                                => array('lang' => 'IP_VALID',                                'validate' => 'int',        'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
381
                                                'browser_check'                        => array('lang' => 'BROWSER_VALID',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
382
                                                'forwarded_for_check'        => array('lang' => 'FORWARDED_FOR_VALID',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
383
                                                'referer_validation'        => array('lang' => 'REFERER_VALID',                'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
384
                                                'check_dnsbl'                        => array('lang' => 'CHECK_DNSBL',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
385
                                                'email_check_mx'                => array('lang' => 'EMAIL_CHECK_MX',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
386
                                                'max_pass_chars'                => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
387
                                                'min_pass_chars'                => array('lang' => 'PASSWORD_LENGTH',        'validate' => 'int:1',        'type' => 'custom', 'method' => 'password_length', 'explain' => true),
388
                                                'pass_complex'                        => array('lang' => 'PASSWORD_TYPE',                        'validate' => 'string',        'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
389
                                                'chg_passforce'                        => array('lang' => 'FORCE_PASS_CHANGE',                'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
390
                                                'max_login_attempts'        => array('lang' => 'MAX_LOGIN_ATTEMPTS',        'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true),
391
                                                'ip_login_limit_max'        => array('lang' => 'IP_LOGIN_LIMIT_MAX',        'validate' => 'int:0',        'type' => 'text:3:3', 'explain' => true),
392
                                                'ip_login_limit_time'        => array('lang' => 'IP_LOGIN_LIMIT_TIME',        'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
393
                                                'ip_login_limit_use_forwarded'        => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED',        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
394
                                                'tpl_allow_php'                        => array('lang' => 'TPL_ALLOW_PHP',                        'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
395
                                                'form_token_lifetime'        => array('lang' => 'FORM_TIME_MAX',                        'validate' => 'int:-1',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
396
                                                'form_token_sid_guests'        => array('lang' => 'FORM_SID_GUESTS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
397
398
                                        )
399
                                );
400
                        break;
401
402
                        case 'email':
403
                                $display_vars = array(
404
                                        'title'        => 'ACP_EMAIL_SETTINGS',
405
                                        'vars'        => array(
406
                                                'legend1'                                => 'GENERAL_SETTINGS',
407
                                                'email_enable'                        => array('lang' => 'ENABLE_EMAIL',                        'validate' => 'bool',        'type' => 'radio:enabled_disabled', 'explain' => true),
408
                                                'board_email_form'                => array('lang' => 'BOARD_EMAIL_FORM',                'validate' => 'bool',        'type' => 'radio:enabled_disabled', 'explain' => true),
409
                                                'email_function_name'        => array('lang' => 'EMAIL_FUNCTION_NAME',        'validate' => 'string',        'type' => 'text:20:50', 'explain' => true),
410
                                                'email_package_size'        => array('lang' => 'EMAIL_PACKAGE_SIZE',        'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true),
411
                                                'board_contact'                        => array('lang' => 'CONTACT_EMAIL',                        'validate' => 'string',        'type' => 'text:25:100', 'explain' => true),
412
                                                'board_email'                        => array('lang' => 'ADMIN_EMAIL',                        'validate' => 'string',        'type' => 'text:25:100', 'explain' => true),
413
                                                'board_email_sig'                => array('lang' => 'EMAIL_SIG',                                'validate' => 'string',        'type' => 'textarea:5:30', 'explain' => true),
414
                                                'board_hide_emails'                => array('lang' => 'BOARD_HIDE_EMAILS',                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
415
416
                                                'legend2'                                => 'SMTP_SETTINGS',
417
                                                'smtp_delivery'                        => array('lang' => 'USE_SMTP',                                'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
418
                                                'smtp_host'                                => array('lang' => 'SMTP_SERVER',                        'validate' => 'string',        'type' => 'text:25:50', 'explain' => false),
419
                                                'smtp_port'                                => array('lang' => 'SMTP_PORT',                                'validate' => 'int:0',        'type' => 'text:4:5', 'explain' => true),
420
                                                'smtp_auth_method'                => array('lang' => 'SMTP_AUTH_METHOD',                'validate' => 'string',        'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
421
                                                'smtp_username'                        => array('lang' => 'SMTP_USERNAME',                        'validate' => 'string',        'type' => 'text:25:255', 'explain' => true),
422
                                                'smtp_password'                        => array('lang' => 'SMTP_PASSWORD',                        'validate' => 'string',        'type' => 'password:25:255', 'explain' => true),
423
424
                                                'legend3'                                        => 'ACP_SUBMIT_CHANGES',
425
                                        )
426
                                );
427
                        break;
428
429
                        default:
430
                                trigger_error('NO_MODE', E_USER_ERROR);
431
                        break;
432
                }
433
434
                if (isset($display_vars['lang']))
435
                {
436
                        $user->add_lang($display_vars['lang']);
437
                }
438
439
                $this->new_config = $config;
440
                $cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
441
                $error = array();
442
443
                // We validate the complete config if whished
444
                validate_config_vars($display_vars['vars'], $cfg_array, $error);
445
446
                if ($submit && !check_form_key($form_key))
447
                {
448
                        $error[] = $user->lang['FORM_INVALID'];
449
                }
450
                // Do not write values if there is an error
451
                if (sizeof($error))
452
                {
453
                        $submit = false;
454
                }
455
456
                // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to...
457
                foreach ($display_vars['vars'] as $config_name => $null)
458
                {
459
                        if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false)
460
                        {
461
                                continue;
462
                        }
463
464
                        if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id')
465
                        {
466
                                continue;
467
                        }
468
469
                        $this->new_config[$config_name] = $config_value = $cfg_array[$config_name];
470
471
                        if ($config_name == 'email_function_name')
472
                        {
473
                                $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name']));
474
                                $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'];
475
                                $config_value = $this->new_config['email_function_name'];
476
                        }
477
478
                        if ($submit)
479
                        {
480
                                set_config($config_name, $config_value);
481
482
                                if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable']))
483
                                {
484
                                        enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2));
485
                                }
486
                        }
487
                }
488
489
                // Store news and exclude ids
490
                if ($mode == 'feed' && $submit)
491
                {
492
                        $cache->destroy('_feed_news_forum_ids');
493
                        $cache->destroy('_feed_excluded_forum_ids');
494
495
                        $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id');
496
                        $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id');
497
                }
498
499
                if ($mode == 'auth')
500
                {
501
                        // Retrieve a list of auth plugins and check their config values
502
                        $auth_plugins = array();
503
504
                        $dp = @opendir($phpbb_root_path . 'includes/auth');
505
506
                        if ($dp)
507
                        {
508
                                while (($file = readdir($dp)) !== false)
509
                                {
510
                                        if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
511
                                        {
512
                                                $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file));
513
                                        }
514
                                }
515
                                closedir($dp);
516
517
                                sort($auth_plugins);
518
                        }
519
520
                        $updated_auth_settings = false;
521
                        $old_auth_config = array();
522
                        foreach ($auth_plugins as $method)
523
                        {
524
                                if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
525
                                {
526
                                        include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
527
528
                                        $method = 'acp_' . $method;
529
                                        if (function_exists($method))
530
                                        {
531
                                                if ($fields = $method($this->new_config))
532
                                                {
533
                                                        // Check if we need to create config fields for this plugin and save config when submit was pressed
534
                                                        foreach ($fields['config'] as $field)
535
                                                        {
536
                                                                if (!isset($config[$field]))
537
                                                                {
538
                                                                        set_config($field, '');
539
                                                                }
540
541
                                                                if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
542
                                                                {
543
                                                                        continue;
544
                                                                }
545
546
                                                                $old_auth_config[$field] = $this->new_config[$field];
547
                                                                $config_value = $cfg_array[$field];
548
                                                                $this->new_config[$field] = $config_value;
549
550
                                                                if ($submit)
551
                                                                {
552
                                                                        $updated_auth_settings = true;
553
                                                                        set_config($field, $config_value);
554
                                                                }
555
                                                        }
556
                                                }
557
                                                unset($fields);
558
                                        }
559
                                }
560
                        }
561
562
                        if ($submit && (($cfg_array['auth_method'] != $this->new_config['auth_method']) || $updated_auth_settings))
563
                        {
564
                                $method = basename($cfg_array['auth_method']);
565
                                if ($method && in_array($method, $auth_plugins))
566
                                {
567
                                        include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
568
569
                                        $method = 'init_' . $method;
570
                                        if (function_exists($method))
571
                                        {
572
                                                if ($error = $method())
573
                                                {
574
                                                        foreach ($old_auth_config as $config_name => $config_value)
575
                                                        {
576
                                                                set_config($config_name, $config_value);
577
                                                        }
578
                                                        trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
579
                                                }
580
                                        }
581
                                        set_config('auth_method', basename($cfg_array['auth_method']));
582
                                }
583
                                else
584
                                {
585
                                        trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR);
586
                                }
587
                        }
588
                }
589
590
                if ($submit)
591
                {
592
                        add_log('admin', 'LOG_CONFIG_' . strtoupper($mode));
593
594
                        trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
595
                }
596
597
                $this->tpl_name = 'acp_board';
598
                $this->page_title = $display_vars['title'];
599
600
                $template->assign_vars(array(
601
                        'L_TITLE'                        => $user->lang[$display_vars['title']],
602
                        'L_TITLE_EXPLAIN'        => $user->lang[$display_vars['title'] . '_EXPLAIN'],
603
604
                        'S_ERROR'                        => (sizeof($error)) ? true : false,
605
                        'ERROR_MSG'                        => implode('<br />', $error),
606
607
                        'U_ACTION'                        => $this->u_action)
608
                );
609
610
                // Output relevant page
611
                foreach ($display_vars['vars'] as $config_key => $vars)
612
                {
613
                        if (!is_array($vars) && strpos($config_key, 'legend') === false)
614
                        {
615
                                continue;
616
                        }
617
618
                        if (strpos($config_key, 'legend') !== false)
619
                        {
620
                                $template->assign_block_vars('options', array(
621
                                        'S_LEGEND'                => true,
622
                                        'LEGEND'                => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
623
                                );
624
625
                                continue;
626
                        }
627
628
                        $type = explode(':', $vars['type']);
629
630
                        $l_explain = '';
631
                        if ($vars['explain'] && isset($vars['lang_explain']))
632
                        {
633
                                $l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
634
                        }
635
                        else if ($vars['explain'])
636
                        {
637
                                $l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
638
                        }
639
640
                        $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars);
641
642
                        if (empty($content))
643
                        {
644
                                continue;
645
                        }
646
647
                        $template->assign_block_vars('options', array(
648
                                'KEY'                        => $config_key,
649
                                'TITLE'                        => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
650
                                'S_EXPLAIN'                => $vars['explain'],
651
                                'TITLE_EXPLAIN'        => $l_explain,
652
                                'CONTENT'                => $content,
653
                                )
654
                        );
655
656
                        unset($display_vars['vars'][$config_key]);
657
                }
658
659
                if ($mode == 'auth')
660
                {
661
                        $template->assign_var('S_AUTH', true);
662
663
                        foreach ($auth_plugins as $method)
664
                        {
665
                                if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
666
                                {
667
                                        $method = 'acp_' . $method;
668
                                        if (function_exists($method))
669
                                        {
670
                                                $fields = $method($this->new_config);
671
672
                                                if ($fields['tpl'])
673
                                                {
674
                                                        $template->assign_block_vars('auth_tpl', array(
675
                                                                'TPL'        => $fields['tpl'])
676
                                                        );
677
                                                }
678
                                                unset($fields);
679
                                        }
680
                                }
681
                        }
682
                }
683
        }
684
685
        /**
686
        * Select auth method
687
        */
688
        function select_auth_method($selected_method, $key = '')
689
        {
690
                global $phpbb_root_path, $phpEx;
691
692
                $auth_plugins = array();
693
694
                $dp = @opendir($phpbb_root_path . 'includes/auth');
695
696
                if (!$dp)
697
                {
698
                        return '';
699
                }
700
701
                while (($file = readdir($dp)) !== false)
702
                {
703
                        if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
704
                        {
705
                                $auth_plugins[] = preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file);
706
                        }
707
                }
708
                closedir($dp);
709
710
                sort($auth_plugins);
711
712
                $auth_select = '';
713
                foreach ($auth_plugins as $method)
714
                {
715
                        $selected = ($selected_method == $method) ? ' selected="selected"' : '';
716
                        $auth_select .= '<option value="' . $method . '"' . $selected . '>' . ucfirst($method) . '</option>';
717
                }
718
719
                return $auth_select;
720
        }
721
722
        /**
723
        * Select mail authentication method
724
        */
725
        function mail_auth_select($selected_method, $key = '')
726
        {
727
                global $user;
728
729
                $auth_methods = array('PLAIN', 'LOGIN', 'CRAM-MD5', 'DIGEST-MD5', 'POP-BEFORE-SMTP');
730
                $s_smtp_auth_options = '';
731
732
                foreach ($auth_methods as $method)
733
                {
734
                        $s_smtp_auth_options .= '<option value="' . $method . '"' . (($selected_method == $method) ? ' selected="selected"' : '') . '>' . $user->lang['SMTP_' . str_replace('-', '_', $method)] . '</option>';
735
                }
736
737
                return $s_smtp_auth_options;
738
        }
739
740
        /**
741
        * Select full folder action
742
        */
743
        function full_folder_select($value, $key = '')
744
        {
745
                global $user;
746
747
                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>';
748
        }
749
750
        /**
751
        * Select ip validation
752
        */
753
        function select_ip_check($value, $key = '')
754
        {
755
                $radio_ary = array(4 => 'ALL', 3 => 'CLASS_C', 2 => 'CLASS_B', 0 => 'NO_IP_VALIDATION');
756
757
                return h_radio('config[ip_check]', $radio_ary, $value, $key);
758
        }
759
760
        /**
761
        * Select referer validation
762
        */
763
        function select_ref_check($value, $key = '')
764
        {
765
                $radio_ary = array(REFERER_VALIDATE_PATH => 'REF_PATH', REFERER_VALIDATE_HOST => 'REF_HOST', REFERER_VALIDATE_NONE => 'NO_REF_VALIDATION');
766
767
                return h_radio('config[referer_validation]', $radio_ary, $value, $key);
768
        }
769
770
        /**
771
        * Select account activation method
772
        */
773
        function select_acc_activation($selected_value, $value)
774
        {
775
                global $user, $config;
776
777
                $act_ary = array(
778
                  'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
779
                  'ACC_NONE' => USER_ACTIVATION_NONE,
780
                );
781
                if ($config['email_enable'])
782
                {
783
                        $act_ary['ACC_USER'] = USER_ACTIVATION_SELF;
784
                        $act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN;
785
                }                
786
                $act_options = '';
787
788
                foreach ($act_ary as $key => $value)
789
                {
790
                        $selected = ($selected_value == $value) ? ' selected="selected"' : '';
791
                        $act_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$key] . '</option>';
792
                }
793
794
                return $act_options;
795
        }
796
797
        /**
798
        * Maximum/Minimum username length
799
        */
800
        function username_length($value, $key = '')
801
        {
802
                global $user;
803
804
                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'];
805
        }
806
807
        /**
808
        * Allowed chars in usernames
809
        */
810
        function select_username_chars($selected_value, $key)
811
        {
812
                global $user;
813
814
                $user_char_ary = array('USERNAME_CHARS_ANY', 'USERNAME_ALPHA_ONLY', 'USERNAME_ALPHA_SPACERS', 'USERNAME_LETTER_NUM', 'USERNAME_LETTER_NUM_SPACERS', 'USERNAME_ASCII');
815
                $user_char_options = '';
816
                foreach ($user_char_ary as $user_type)
817
                {
818
                        $selected = ($selected_value == $user_type) ? ' selected="selected"' : '';
819
                        $user_char_options .= '<option value="' . $user_type . '"' . $selected . '>' . $user->lang[$user_type] . '</option>';
820
                }
821
822
                return $user_char_options;
823
        }
824
825
        /**
826
        * Maximum/Minimum password length
827
        */
828
        function password_length($value, $key)
829
        {
830
                global $user;
831
832
                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'];
833
        }
834
835
        /**
836
        * Required chars in passwords
837
        */
838
        function select_password_chars($selected_value, $key)
839
        {
840
                global $user;
841
842
                $pass_type_ary = array('PASS_TYPE_ANY', 'PASS_TYPE_CASE', 'PASS_TYPE_ALPHA', 'PASS_TYPE_SYMBOL');
843
                $pass_char_options = '';
844
                foreach ($pass_type_ary as $pass_type)
845
                {
846
                        $selected = ($selected_value == $pass_type) ? ' selected="selected"' : '';
847
                        $pass_char_options .= '<option value="' . $pass_type . '"' . $selected . '>' . $user->lang[$pass_type] . '</option>';
848
                }
849
850
                return $pass_char_options;
851
        }
852
853
        /**
854
        * Select bump interval
855
        */
856
        function bump_interval($value, $key)
857
        {
858
                global $user;
859
860
                $s_bump_type = '';
861
                $types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS');
862
                foreach ($types as $type => $lang)
863
                {
864
                        $selected = ($this->new_config['bump_type'] == $type) ? ' selected="selected"' : '';
865
                        $s_bump_type .= '<option value="' . $type . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
866
                }
867
868
                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>';
869
        }
870
871
        /**
872
        * Board disable option and message
873
        */
874
        function board_disable($value, $key)
875
        {
876
                global $user;
877
878
                $radio_ary = array(1 => 'YES', 0 => 'NO');
879
880
                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'] . '" />';
881
        }
882
883
        /**
884
        * Global quick reply enable/disable setting and button to enable in all forums
885
        */
886
        function quick_reply($value, $key)
887
        {
888
                global $user;
889
890
                $radio_ary = array(1 => 'YES', 0 => 'NO');
891
892
                return h_radio('config[allow_quick_reply]', $radio_ary, $value) .
893
                        '<br /><br /><input class="button2" type="submit" id="' . $key . '_enable" name="' . $key . '_enable" value="' . $user->lang['ALLOW_QUICK_REPLY_BUTTON'] . '" />';
894
        }
895
896
897
        /**
898
        * Select default dateformat
899
        */
900
        function dateformat_select($value, $key)
901
        {
902
                global $user, $config;
903
904
                // Let the format_date function operate with the acp values
905
                $old_tz = $user->timezone;
906
                $old_dst = $user->dst;
907
908
                $user->timezone = $config['board_timezone'] * 3600;
909
                $user->dst = $config['board_dst'] * 3600;
910
911
                $dateformat_options = '';
912
913
                foreach ($user->lang['dateformats'] as $format => $null)
914
                {
915
                        $dateformat_options .= '<option value="' . $format . '"' . (($format == $value) ? ' selected="selected"' : '') . '>';
916
                        $dateformat_options .= $user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $user->lang['VARIANT_DATE_SEPARATOR'] . $user->format_date(time(), $format, true) : '');
917
                        $dateformat_options .= '</option>';
918
                }
919
920
                $dateformat_options .= '<option value="custom"';
921
                if (!isset($user->lang['dateformats'][$value]))
922
                {
923
                        $dateformat_options .= ' selected="selected"';
924
                }
925
                $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . '</option>';
926
927
                // Reset users date options
928
                $user->timezone = $old_tz;
929
                $user->dst = $old_dst;
930
931
                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>
932
                <input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
933
        }
934
935
        /**
936
        * Select multiple forums
937
        */
938
        function select_news_forums($value, $key)
939
        {
940
                global $user, $config;
941
942
                $forum_list = make_forum_select(false, false, true, true, true, false, true);
943
944
                // Build forum options
945
                $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
946
                foreach ($forum_list as $f_id => $f_row)
947
                {
948
                        $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_NEWS, $f_row['forum_options']);
949
950
                        $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>';
951
                }
952
                $s_forum_options .= '</select>';
953
954
                return $s_forum_options;
955
        }
956
957
        function select_exclude_forums($value, $key)
958
        {
959
                global $user, $config;
960
961
                $forum_list = make_forum_select(false, false, true, true, true, false, true);
962
963
                // Build forum options
964
                $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
965
                foreach ($forum_list as $f_id => $f_row)
966
                {
967
                        $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $f_row['forum_options']);
968
969
                        $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>';
970
                }
971
                $s_forum_options .= '</select>';
972
973
                return $s_forum_options;
974
        }
975
976
        function store_feed_forums($option, $key)
977
        {
978
                global $db, $cache;
979
980
                // Get key
981
                $values = request_var($key, array(0 => 0));
982
983
                // Empty option bit for all forums
984
                $sql = 'UPDATE ' . FORUMS_TABLE . '
985
                        SET forum_options = forum_options - ' . (1 << $option) . '
986
                        WHERE ' . $db->sql_bit_and('forum_options', $option, '<> 0');
987
                $db->sql_query($sql);
988
989
                // Already emptied for all...
990
                if (sizeof($values))
991
                {
992
                        // Set for selected forums
993
                        $sql = 'UPDATE ' . FORUMS_TABLE . '
994
                                SET forum_options = forum_options + ' . (1 << $option) . '
995
                                WHERE ' . $db->sql_in_set('forum_id', $values);
996
                        $db->sql_query($sql);
997
                }
998
999
                // Empty sql cache for forums table because options changed
1000
                $cache->destroy('sql', FORUMS_TABLE);
1001
        }
1002
1003
}
1004
1005
?>