Chris@76
|
1 <?php
|
Chris@76
|
2
|
Chris@76
|
3 /**
|
Chris@76
|
4 * Simple Machines Forum (SMF)
|
Chris@76
|
5 *
|
Chris@76
|
6 * @package SMF
|
Chris@76
|
7 * @author Simple Machines http://www.simplemachines.org
|
Chris@76
|
8 * @copyright 2011 Simple Machines
|
Chris@76
|
9 * @license http://www.simplemachines.org/about/smf/license.php BSD
|
Chris@76
|
10 *
|
Chris@76
|
11 * @version 2.0
|
Chris@76
|
12 */
|
Chris@76
|
13
|
Chris@76
|
14 if (!defined('SMF'))
|
Chris@76
|
15 die('Hacking attempt...');
|
Chris@76
|
16
|
Chris@76
|
17 /* This file is here to make it easier for installed mods to have settings
|
Chris@76
|
18 and options. It uses the following functions:
|
Chris@76
|
19
|
Chris@76
|
20 void ModifyFeatureSettings()
|
Chris@76
|
21 // !!!
|
Chris@76
|
22
|
Chris@76
|
23 void ModifySecuritySettings()
|
Chris@76
|
24 // !!!
|
Chris@76
|
25
|
Chris@76
|
26 void ModifyModSettings()
|
Chris@76
|
27 // !!!
|
Chris@76
|
28
|
Chris@76
|
29 void ModifyCoreFeatures()
|
Chris@76
|
30 // !!!
|
Chris@76
|
31
|
Chris@76
|
32 void ModifyBasicSettings()
|
Chris@76
|
33 // !!!
|
Chris@76
|
34
|
Chris@76
|
35 void ModifyGeneralSecuritySettings()
|
Chris@76
|
36 // !!!
|
Chris@76
|
37
|
Chris@76
|
38 void ModifyLayoutSettings()
|
Chris@76
|
39 // !!!
|
Chris@76
|
40
|
Chris@76
|
41 void ModifyKarmaSettings()
|
Chris@76
|
42 // !!!
|
Chris@76
|
43
|
Chris@76
|
44 void ModifyModerationSettings()
|
Chris@76
|
45 // !!!
|
Chris@76
|
46
|
Chris@76
|
47 void ModifySpamSettings()
|
Chris@76
|
48 // !!!
|
Chris@76
|
49
|
Chris@76
|
50 void ModifySignatureSettings()
|
Chris@76
|
51 // !!!
|
Chris@76
|
52
|
Chris@76
|
53 void pauseSignatureApplySettings()
|
Chris@76
|
54 // !!!
|
Chris@76
|
55
|
Chris@76
|
56 void ShowCustomProfiles()
|
Chris@76
|
57 // !!!
|
Chris@76
|
58
|
Chris@76
|
59 void EditCustomProfiles()
|
Chris@76
|
60 // !!!
|
Chris@76
|
61
|
Chris@76
|
62 void ModifyPruningSettings()
|
Chris@76
|
63 // !!!
|
Chris@76
|
64
|
Chris@76
|
65 void disablePostModeration()
|
Chris@76
|
66 // !!!
|
Chris@76
|
67 // !!!
|
Chris@76
|
68 */
|
Chris@76
|
69
|
Chris@76
|
70 // This just avoids some repetition.
|
Chris@76
|
71 function loadGeneralSettingParameters($subActions = array(), $defaultAction = '')
|
Chris@76
|
72 {
|
Chris@76
|
73 global $context, $txt, $sourcedir;
|
Chris@76
|
74
|
Chris@76
|
75 // You need to be an admin to edit settings!
|
Chris@76
|
76 isAllowedTo('admin_forum');
|
Chris@76
|
77
|
Chris@76
|
78 loadLanguage('Help');
|
Chris@76
|
79 loadLanguage('ManageSettings');
|
Chris@76
|
80
|
Chris@76
|
81 // Will need the utility functions from here.
|
Chris@76
|
82 require_once($sourcedir . '/ManageServer.php');
|
Chris@76
|
83
|
Chris@76
|
84 $context['sub_template'] = 'show_settings';
|
Chris@76
|
85
|
Chris@76
|
86 // By default do the basic settings.
|
Chris@76
|
87 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : (!empty($defaultAction) ? $defaultAction : array_pop(array_keys($subActions)));
|
Chris@76
|
88 $context['sub_action'] = $_REQUEST['sa'];
|
Chris@76
|
89 }
|
Chris@76
|
90
|
Chris@76
|
91 // This function passes control through to the relevant tab.
|
Chris@76
|
92 function ModifyFeatureSettings()
|
Chris@76
|
93 {
|
Chris@76
|
94 global $context, $txt, $scripturl, $modSettings, $settings;
|
Chris@76
|
95
|
Chris@76
|
96 $context['page_title'] = $txt['modSettings_title'];
|
Chris@76
|
97
|
Chris@76
|
98 $subActions = array(
|
Chris@76
|
99 'basic' => 'ModifyBasicSettings',
|
Chris@76
|
100 'layout' => 'ModifyLayoutSettings',
|
Chris@76
|
101 'karma' => 'ModifyKarmaSettings',
|
Chris@76
|
102 'sig' => 'ModifySignatureSettings',
|
Chris@76
|
103 'profile' => 'ShowCustomProfiles',
|
Chris@76
|
104 'profileedit' => 'EditCustomProfiles',
|
Chris@76
|
105 );
|
Chris@76
|
106
|
Chris@76
|
107 loadGeneralSettingParameters($subActions, 'basic');
|
Chris@76
|
108
|
Chris@76
|
109 // Load up all the tabs...
|
Chris@76
|
110 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
111 'title' => $txt['modSettings_title'],
|
Chris@76
|
112 'help' => 'featuresettings',
|
Chris@76
|
113 'description' => sprintf($txt['modSettings_desc'], $settings['theme_id'], $context['session_id'], $context['session_var']),
|
Chris@76
|
114 'tabs' => array(
|
Chris@76
|
115 'basic' => array(
|
Chris@76
|
116 ),
|
Chris@76
|
117 'layout' => array(
|
Chris@76
|
118 ),
|
Chris@76
|
119 'karma' => array(
|
Chris@76
|
120 ),
|
Chris@76
|
121 'sig' => array(
|
Chris@76
|
122 'description' => $txt['signature_settings_desc'],
|
Chris@76
|
123 ),
|
Chris@76
|
124 'profile' => array(
|
Chris@76
|
125 'description' => $txt['custom_profile_desc'],
|
Chris@76
|
126 ),
|
Chris@76
|
127 ),
|
Chris@76
|
128 );
|
Chris@76
|
129
|
Chris@76
|
130 // Call the right function for this sub-acton.
|
Chris@76
|
131 $subActions[$_REQUEST['sa']]();
|
Chris@76
|
132 }
|
Chris@76
|
133
|
Chris@76
|
134 // This function passes control through to the relevant security tab.
|
Chris@76
|
135 function ModifySecuritySettings()
|
Chris@76
|
136 {
|
Chris@76
|
137 global $context, $txt, $scripturl, $modSettings, $settings;
|
Chris@76
|
138
|
Chris@76
|
139 $context['page_title'] = $txt['admin_security_moderation'];
|
Chris@76
|
140
|
Chris@76
|
141 $subActions = array(
|
Chris@76
|
142 'general' => 'ModifyGeneralSecuritySettings',
|
Chris@76
|
143 'spam' => 'ModifySpamSettings',
|
Chris@76
|
144 'moderation' => 'ModifyModerationSettings',
|
Chris@76
|
145 );
|
Chris@76
|
146
|
Chris@76
|
147 loadGeneralSettingParameters($subActions, 'general');
|
Chris@76
|
148
|
Chris@76
|
149 // Load up all the tabs...
|
Chris@76
|
150 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
151 'title' => $txt['admin_security_moderation'],
|
Chris@76
|
152 'help' => 'securitysettings',
|
Chris@76
|
153 'description' => $txt['security_settings_desc'],
|
Chris@76
|
154 'tabs' => array(
|
Chris@76
|
155 'general' => array(
|
Chris@76
|
156 ),
|
Chris@76
|
157 'spam' => array(
|
Chris@76
|
158 'description' => $txt['antispam_Settings_desc'] ,
|
Chris@76
|
159 ),
|
Chris@76
|
160 'moderation' => array(
|
Chris@76
|
161 ),
|
Chris@76
|
162 ),
|
Chris@76
|
163 );
|
Chris@76
|
164
|
Chris@76
|
165 // Call the right function for this sub-acton.
|
Chris@76
|
166 $subActions[$_REQUEST['sa']]();
|
Chris@76
|
167 }
|
Chris@76
|
168
|
Chris@76
|
169 // This my friend, is for all the mod authors out there. They're like builders without the ass crack - with the possible exception of... /cut short
|
Chris@76
|
170 function ModifyModSettings()
|
Chris@76
|
171 {
|
Chris@76
|
172 global $context, $txt, $scripturl, $modSettings, $settings;
|
Chris@76
|
173
|
Chris@76
|
174 $context['page_title'] = $txt['admin_modifications'];
|
Chris@76
|
175
|
Chris@76
|
176 $subActions = array(
|
Chris@76
|
177 'general' => 'ModifyGeneralModSettings',
|
Chris@76
|
178 // Mod authors, once again, if you have a whole section to add do it AFTER this line, and keep a comma at the end.
|
Chris@76
|
179 );
|
Chris@76
|
180
|
Chris@76
|
181 // Make it easier for mods to add new areas.
|
Chris@76
|
182 call_integration_hook('integrate_modify_modifications', array(&$subActions));
|
Chris@76
|
183
|
Chris@76
|
184 loadGeneralSettingParameters($subActions, 'general');
|
Chris@76
|
185
|
Chris@76
|
186 // Load up all the tabs...
|
Chris@76
|
187 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
188 'title' => $txt['admin_modifications'],
|
Chris@76
|
189 'help' => 'modsettings',
|
Chris@76
|
190 'description' => $txt['modification_settings_desc'],
|
Chris@76
|
191 'tabs' => array(
|
Chris@76
|
192 'general' => array(
|
Chris@76
|
193 ),
|
Chris@76
|
194 ),
|
Chris@76
|
195 );
|
Chris@76
|
196
|
Chris@76
|
197 // Call the right function for this sub-acton.
|
Chris@76
|
198 $subActions[$_REQUEST['sa']]();
|
Chris@76
|
199 }
|
Chris@76
|
200
|
Chris@76
|
201 // This is an overall control panel enabling/disabling lots of SMF's key feature components.
|
Chris@76
|
202 function ModifyCoreFeatures($return_config = false)
|
Chris@76
|
203 {
|
Chris@76
|
204 global $txt, $scripturl, $context, $settings, $sc, $modSettings;
|
Chris@76
|
205
|
Chris@76
|
206 /* This is an array of all the features that can be enabled/disabled - each option can have the following:
|
Chris@76
|
207 title - Text title of this item (If standard string does not exist).
|
Chris@76
|
208 desc - Description of this feature (If standard string does not exist).
|
Chris@76
|
209 image - Custom image to show next to feature.
|
Chris@76
|
210 settings - Array of settings to change (For each name => value) on enable - reverse is done for disable. If > 1 will not change value if set.
|
Chris@76
|
211 setting_callback- Function that returns an array of settings to save - takes one parameter which is value for this feature.
|
Chris@76
|
212 save_callback - Function called on save, takes state as parameter.
|
Chris@76
|
213 */
|
Chris@76
|
214 $core_features = array(
|
Chris@76
|
215 // cd = calendar.
|
Chris@76
|
216 'cd' => array(
|
Chris@76
|
217 'url' => 'action=admin;area=managecalendar',
|
Chris@76
|
218 'settings' => array(
|
Chris@76
|
219 'cal_enabled' => 1,
|
Chris@76
|
220 ),
|
Chris@76
|
221 ),
|
Chris@76
|
222 // cp = custom profile fields.
|
Chris@76
|
223 'cp' => array(
|
Chris@76
|
224 'url' => 'action=admin;area=featuresettings;sa=profile',
|
Chris@76
|
225 'save_callback' => create_function('$value', '
|
Chris@76
|
226 global $smcFunc;
|
Chris@76
|
227 if (!$value)
|
Chris@76
|
228 {
|
Chris@76
|
229 $smcFunc[\'db_query\'](\'\', \'
|
Chris@76
|
230 UPDATE {db_prefix}custom_fields
|
Chris@76
|
231 SET active = 0\');
|
Chris@76
|
232 }
|
Chris@76
|
233 '),
|
Chris@76
|
234 'setting_callback' => create_function('$value', '
|
Chris@76
|
235 if (!$value)
|
Chris@76
|
236 return array(
|
Chris@76
|
237 \'disabled_profile_fields\' => \'\',
|
Chris@76
|
238 \'registration_fields\' => \'\',
|
Chris@76
|
239 \'displayFields\' => \'\',
|
Chris@76
|
240 );
|
Chris@76
|
241 else
|
Chris@76
|
242 return array();
|
Chris@76
|
243 '),
|
Chris@76
|
244 ),
|
Chris@76
|
245 // k = karma.
|
Chris@76
|
246 'k' => array(
|
Chris@76
|
247 'url' => 'action=admin;area=featuresettings;sa=karma',
|
Chris@76
|
248 'settings' => array(
|
Chris@76
|
249 'karmaMode' => 2,
|
Chris@76
|
250 ),
|
Chris@76
|
251 ),
|
Chris@76
|
252 // ml = moderation log.
|
Chris@76
|
253 'ml' => array(
|
Chris@76
|
254 'url' => 'action=admin;area=logs;sa=modlog',
|
Chris@76
|
255 'settings' => array(
|
Chris@76
|
256 'modlog_enabled' => 1,
|
Chris@76
|
257 ),
|
Chris@76
|
258 ),
|
Chris@76
|
259 // pm = post moderation.
|
Chris@76
|
260 'pm' => array(
|
Chris@76
|
261 'url' => 'action=admin;area=permissions;sa=postmod',
|
Chris@76
|
262 'setting_callback' => create_function('$value', '
|
Chris@76
|
263 global $sourcedir;
|
Chris@76
|
264
|
Chris@76
|
265 // Cant use warning post moderation if disabled!
|
Chris@76
|
266 if (!$value)
|
Chris@76
|
267 {
|
Chris@76
|
268 require_once($sourcedir . \'/PostModeration.php\');
|
Chris@76
|
269 approveAllData();
|
Chris@76
|
270
|
Chris@76
|
271 return array(\'warning_moderate\' => 0);
|
Chris@76
|
272 }
|
Chris@76
|
273 else
|
Chris@76
|
274 return array();
|
Chris@76
|
275 '),
|
Chris@76
|
276 ),
|
Chris@76
|
277 // ps = Paid Subscriptions.
|
Chris@76
|
278 'ps' => array(
|
Chris@76
|
279 'url' => 'action=admin;area=paidsubscribe',
|
Chris@76
|
280 'settings' => array(
|
Chris@76
|
281 'paid_enabled' => 1,
|
Chris@76
|
282 ),
|
Chris@76
|
283 'setting_callback' => create_function('$value', '
|
Chris@76
|
284 global $smcFunc, $sourcedir;
|
Chris@76
|
285
|
Chris@76
|
286 // Set the correct disabled value for scheduled task.
|
Chris@76
|
287 $smcFunc[\'db_query\'](\'\', \'
|
Chris@76
|
288 UPDATE {db_prefix}scheduled_tasks
|
Chris@76
|
289 SET disabled = {int:disabled}
|
Chris@76
|
290 WHERE task = {string:task}\',
|
Chris@76
|
291 array(
|
Chris@76
|
292 \'disabled\' => $value ? 0 : 1,
|
Chris@76
|
293 \'task\' => \'paid_subscriptions\',
|
Chris@76
|
294 )
|
Chris@76
|
295 );
|
Chris@76
|
296
|
Chris@76
|
297 // Should we calculate next trigger?
|
Chris@76
|
298 if ($value)
|
Chris@76
|
299 {
|
Chris@76
|
300 require_once($sourcedir . \'/ScheduledTasks.php\');
|
Chris@76
|
301 CalculateNextTrigger(\'paid_subscriptions\');
|
Chris@76
|
302 }
|
Chris@76
|
303 '),
|
Chris@76
|
304 ),
|
Chris@76
|
305 // rg = report generator.
|
Chris@76
|
306 'rg' => array(
|
Chris@76
|
307 'url' => 'action=admin;area=reports',
|
Chris@76
|
308 ),
|
Chris@76
|
309 // w = warning.
|
Chris@76
|
310 'w' => array(
|
Chris@76
|
311 'url' => 'action=admin;area=securitysettings;sa=moderation',
|
Chris@76
|
312 'setting_callback' => create_function('$value', '
|
Chris@76
|
313 global $modSettings;
|
Chris@76
|
314 list ($modSettings[\'warning_enable\'], $modSettings[\'user_limit\'], $modSettings[\'warning_decrement\']) = explode(\',\', $modSettings[\'warning_settings\']);
|
Chris@76
|
315 $warning_settings = ($value ? 1 : 0) . \',\' . $modSettings[\'user_limit\'] . \',\' . $modSettings[\'warning_decrement\'];
|
Chris@76
|
316 if (!$value)
|
Chris@76
|
317 {
|
Chris@76
|
318 $returnSettings = array(
|
Chris@76
|
319 \'warning_watch\' => 0,
|
Chris@76
|
320 \'warning_moderate\' => 0,
|
Chris@76
|
321 \'warning_mute\' => 0,
|
Chris@76
|
322 );
|
Chris@76
|
323 }
|
Chris@76
|
324 elseif (empty($modSettings[\'warning_enable\']) && $value)
|
Chris@76
|
325 {
|
Chris@76
|
326 $returnSettings = array(
|
Chris@76
|
327 \'warning_watch\' => 10,
|
Chris@76
|
328 \'warning_moderate\' => 35,
|
Chris@76
|
329 \'warning_mute\' => 60,
|
Chris@76
|
330 );
|
Chris@76
|
331 }
|
Chris@76
|
332 else
|
Chris@76
|
333 $returnSettings = array();
|
Chris@76
|
334
|
Chris@76
|
335 $returnSettings[\'warning_settings\'] = $warning_settings;
|
Chris@76
|
336 return $returnSettings;
|
Chris@76
|
337 '),
|
Chris@76
|
338 ),
|
Chris@76
|
339 // Search engines
|
Chris@76
|
340 'sp' => array(
|
Chris@76
|
341 'url' => 'action=admin;area=sengines',
|
Chris@76
|
342 'settings' => array(
|
Chris@76
|
343 'spider_mode' => 1,
|
Chris@76
|
344 ),
|
Chris@76
|
345 'setting_callback' => create_function('$value', '
|
Chris@76
|
346 // Turn off the spider group if disabling.
|
Chris@76
|
347 if (!$value)
|
Chris@76
|
348 return array(\'spider_group\' => 0, \'show_spider_online\' => 0);
|
Chris@76
|
349 '),
|
Chris@76
|
350 'on_save' => create_function('', '
|
Chris@76
|
351 global $sourcedir, $modSettings;
|
Chris@76
|
352 require_once($sourcedir . \'/ManageSearchEngines.php\');
|
Chris@76
|
353 recacheSpiderNames();
|
Chris@76
|
354 '),
|
Chris@76
|
355 ),
|
Chris@76
|
356 );
|
Chris@76
|
357
|
Chris@76
|
358 // Anyone who would like to add a core feature?
|
Chris@76
|
359 call_integration_hook('integrate_core_features', array(&$core_features));
|
Chris@76
|
360
|
Chris@76
|
361 // Are we getting info for the help section.
|
Chris@76
|
362 if ($return_config)
|
Chris@76
|
363 {
|
Chris@76
|
364 $return_data = array();
|
Chris@76
|
365 foreach ($core_features as $id => $data)
|
Chris@76
|
366 $return_data[] = array('switch', isset($data['title']) ? $data['title'] : $txt['core_settings_item_' . $id]);
|
Chris@76
|
367 return $return_data;
|
Chris@76
|
368 }
|
Chris@76
|
369
|
Chris@76
|
370 loadGeneralSettingParameters();
|
Chris@76
|
371
|
Chris@76
|
372 // Are we saving?
|
Chris@76
|
373 if (isset($_POST['save']))
|
Chris@76
|
374 {
|
Chris@76
|
375 checkSession();
|
Chris@76
|
376
|
Chris@76
|
377 $setting_changes = array('admin_features' => array());
|
Chris@76
|
378
|
Chris@76
|
379 // Are we using the javascript stuff or radios to submit?
|
Chris@76
|
380 $post_var_prefix = empty($_POST['js_worked']) ? 'feature_plain_' : 'feature_';
|
Chris@76
|
381
|
Chris@76
|
382 // Cycle each feature and change things as required!
|
Chris@76
|
383 foreach ($core_features as $id => $feature)
|
Chris@76
|
384 {
|
Chris@76
|
385 // Enabled?
|
Chris@76
|
386 if (!empty($_POST[$post_var_prefix . $id]))
|
Chris@76
|
387 $setting_changes['admin_features'][] = $id;
|
Chris@76
|
388
|
Chris@76
|
389 // Setting values to change?
|
Chris@76
|
390 if (isset($feature['settings']))
|
Chris@76
|
391 {
|
Chris@76
|
392 foreach ($feature['settings'] as $key => $value)
|
Chris@76
|
393 {
|
Chris@76
|
394 if (empty($_POST[$post_var_prefix . $id]) || (!empty($_POST[$post_var_prefix . $id]) && ($value < 2 || empty($modSettings[$key]))))
|
Chris@76
|
395 $setting_changes[$key] = !empty($_POST[$post_var_prefix . $id]) ? $value : !$value;
|
Chris@76
|
396 }
|
Chris@76
|
397 }
|
Chris@76
|
398 // Is there a call back for settings?
|
Chris@76
|
399 if (isset($feature['setting_callback']))
|
Chris@76
|
400 {
|
Chris@76
|
401 $returned_settings = $feature['setting_callback'](!empty($_POST[$post_var_prefix . $id]));
|
Chris@76
|
402 if (!empty($returned_settings))
|
Chris@76
|
403 $setting_changes = array_merge($setting_changes, $returned_settings);
|
Chris@76
|
404 }
|
Chris@76
|
405
|
Chris@76
|
406 // Standard save callback?
|
Chris@76
|
407 if (isset($feature['on_save']))
|
Chris@76
|
408 $feature['on_save']();
|
Chris@76
|
409 }
|
Chris@76
|
410
|
Chris@76
|
411 // Make sure this one setting is a string!
|
Chris@76
|
412 $setting_changes['admin_features'] = implode(',', $setting_changes['admin_features']);
|
Chris@76
|
413
|
Chris@76
|
414 // Make any setting changes!
|
Chris@76
|
415 updateSettings($setting_changes);
|
Chris@76
|
416
|
Chris@76
|
417 // Any post save things?
|
Chris@76
|
418 foreach ($core_features as $id => $feature)
|
Chris@76
|
419 {
|
Chris@76
|
420 // Standard save callback?
|
Chris@76
|
421 if (isset($feature['save_callback']))
|
Chris@76
|
422 $feature['save_callback'](!empty($_POST[$post_var_prefix . $id]));
|
Chris@76
|
423 }
|
Chris@76
|
424
|
Chris@76
|
425 redirectexit('action=admin;area=corefeatures;' . $context['session_var'] . '=' . $context['session_id']);
|
Chris@76
|
426 }
|
Chris@76
|
427
|
Chris@76
|
428 // Put them in context.
|
Chris@76
|
429 $context['features'] = array();
|
Chris@76
|
430 foreach ($core_features as $id => $feature)
|
Chris@76
|
431 $context['features'][$id] = array(
|
Chris@76
|
432 'title' => isset($feature['title']) ? $feature['title'] : $txt['core_settings_item_' . $id],
|
Chris@76
|
433 'desc' => isset($feature['desc']) ? $feature['desc'] : $txt['core_settings_item_' . $id . '_desc'],
|
Chris@76
|
434 'enabled' => in_array($id, $context['admin_features']),
|
Chris@76
|
435 'url' => !empty($feature['url']) ? $scripturl . '?' . $feature['url'] . ';' . $context['session_var'] . '=' . $context['session_id'] : '',
|
Chris@76
|
436 );
|
Chris@76
|
437
|
Chris@76
|
438 // Are they a new user?
|
Chris@76
|
439 $context['is_new_install'] = !isset($modSettings['admin_features']);
|
Chris@76
|
440 $context['force_disable_tabs'] = $context['is_new_install'];
|
Chris@76
|
441 // Don't show them this twice!
|
Chris@76
|
442 if ($context['is_new_install'])
|
Chris@76
|
443 updateSettings(array('admin_features' => ''));
|
Chris@76
|
444
|
Chris@76
|
445 $context['sub_template'] = 'core_features';
|
Chris@76
|
446 $context['page_title'] = $txt['core_settings_title'];
|
Chris@76
|
447 }
|
Chris@76
|
448
|
Chris@76
|
449 function ModifyBasicSettings($return_config = false)
|
Chris@76
|
450 {
|
Chris@76
|
451 global $txt, $scripturl, $context, $settings, $sc, $modSettings;
|
Chris@76
|
452
|
Chris@76
|
453 $config_vars = array(
|
Chris@76
|
454 // Big Options... polls, sticky, bbc....
|
Chris@76
|
455 array('select', 'pollMode', array($txt['disable_polls'], $txt['enable_polls'], $txt['polls_as_topics'])),
|
Chris@76
|
456 '',
|
Chris@76
|
457 // Basic stuff, titles, flash, permissions...
|
Chris@76
|
458 array('check', 'allow_guestAccess'),
|
Chris@76
|
459 array('check', 'enable_buddylist'),
|
Chris@76
|
460 array('check', 'allow_editDisplayName'),
|
Chris@76
|
461 array('check', 'allow_hideOnline'),
|
Chris@76
|
462 array('check', 'titlesEnable'),
|
Chris@76
|
463 array('text', 'default_personal_text'),
|
Chris@76
|
464 '',
|
Chris@76
|
465 // SEO stuff
|
Chris@76
|
466 array('check', 'queryless_urls'),
|
Chris@76
|
467 array('text', 'meta_keywords', 'size' => 50),
|
Chris@76
|
468 '',
|
Chris@76
|
469 // Number formatting, timezones.
|
Chris@76
|
470 array('text', 'time_format'),
|
Chris@76
|
471 array('select', 'number_format', array('1234.00' => '1234.00', '1,234.00' => '1,234.00', '1.234,00' => '1.234,00', '1 234,00' => '1 234,00', '1234,00' => '1234,00')),
|
Chris@76
|
472 array('float', 'time_offset'),
|
Chris@76
|
473 'default_timezone' => array('select', 'default_timezone', array()),
|
Chris@76
|
474 '',
|
Chris@76
|
475 // Who's online?
|
Chris@76
|
476 array('check', 'who_enabled'),
|
Chris@76
|
477 array('int', 'lastActive'),
|
Chris@76
|
478 '',
|
Chris@76
|
479 // Statistics.
|
Chris@76
|
480 array('check', 'trackStats'),
|
Chris@76
|
481 array('check', 'hitStats'),
|
Chris@76
|
482 '',
|
Chris@76
|
483 // Option-ish things... miscellaneous sorta.
|
Chris@76
|
484 array('check', 'allow_disableAnnounce'),
|
Chris@76
|
485 array('check', 'disallow_sendBody'),
|
Chris@76
|
486 );
|
Chris@76
|
487
|
Chris@76
|
488 // Get all the time zones.
|
Chris@76
|
489 if (function_exists('timezone_identifiers_list') && function_exists('date_default_timezone_set'))
|
Chris@76
|
490 {
|
Chris@76
|
491 $all_zones = timezone_identifiers_list();
|
Chris@76
|
492 // Make sure we set the value to the same as the printed value.
|
Chris@76
|
493 foreach ($all_zones as $zone)
|
Chris@76
|
494 $config_vars['default_timezone'][2][$zone] = $zone;
|
Chris@76
|
495 }
|
Chris@76
|
496 else
|
Chris@76
|
497 unset($config_vars['default_timezone']);
|
Chris@76
|
498
|
Chris@76
|
499 if ($return_config)
|
Chris@76
|
500 return $config_vars;
|
Chris@76
|
501
|
Chris@76
|
502 // Saving?
|
Chris@76
|
503 if (isset($_GET['save']))
|
Chris@76
|
504 {
|
Chris@76
|
505 checkSession();
|
Chris@76
|
506
|
Chris@76
|
507 // Prevent absurd boundaries here - make it a day tops.
|
Chris@76
|
508 if (isset($_POST['lastActive']))
|
Chris@76
|
509 $_POST['lastActive'] = min((int) $_POST['lastActive'], 1440);
|
Chris@76
|
510
|
Chris@76
|
511 saveDBSettings($config_vars);
|
Chris@76
|
512
|
Chris@76
|
513 writeLog();
|
Chris@76
|
514 redirectexit('action=admin;area=featuresettings;sa=basic');
|
Chris@76
|
515 }
|
Chris@76
|
516
|
Chris@76
|
517 $context['post_url'] = $scripturl . '?action=admin;area=featuresettings;save;sa=basic';
|
Chris@76
|
518 $context['settings_title'] = $txt['mods_cat_features'];
|
Chris@76
|
519
|
Chris@76
|
520 prepareDBSettingContext($config_vars);
|
Chris@76
|
521 }
|
Chris@76
|
522
|
Chris@76
|
523 // Settings really associated with general security aspects.
|
Chris@76
|
524 function ModifyGeneralSecuritySettings($return_config = false)
|
Chris@76
|
525 {
|
Chris@76
|
526 global $txt, $scripturl, $context, $settings, $sc, $modSettings;
|
Chris@76
|
527
|
Chris@76
|
528 $config_vars = array(
|
Chris@76
|
529 array('check', 'guest_hideContacts'),
|
Chris@76
|
530 array('check', 'make_email_viewable'),
|
Chris@76
|
531 '',
|
Chris@76
|
532 array('int', 'failed_login_threshold'),
|
Chris@76
|
533 '',
|
Chris@76
|
534 array('check', 'enableErrorLogging'),
|
Chris@76
|
535 array('check', 'enableErrorQueryLogging'),
|
Chris@76
|
536 array('check', 'securityDisable'),
|
Chris@76
|
537 '',
|
Chris@76
|
538 // Reactive on email, and approve on delete
|
Chris@76
|
539 array('check', 'send_validation_onChange'),
|
Chris@76
|
540 array('check', 'approveAccountDeletion'),
|
Chris@76
|
541 '',
|
Chris@76
|
542 // Password strength.
|
Chris@76
|
543 array('select', 'password_strength', array($txt['setting_password_strength_low'], $txt['setting_password_strength_medium'], $txt['setting_password_strength_high'])),
|
Chris@76
|
544 '',
|
Chris@76
|
545 // Reporting of personal messages?
|
Chris@76
|
546 array('check', 'enableReportPM'),
|
Chris@76
|
547 );
|
Chris@76
|
548
|
Chris@76
|
549 if ($return_config)
|
Chris@76
|
550 return $config_vars;
|
Chris@76
|
551
|
Chris@76
|
552 // Saving?
|
Chris@76
|
553 if (isset($_GET['save']))
|
Chris@76
|
554 {
|
Chris@76
|
555 checkSession();
|
Chris@76
|
556
|
Chris@76
|
557 saveDBSettings($config_vars);
|
Chris@76
|
558
|
Chris@76
|
559 writeLog();
|
Chris@76
|
560 redirectexit('action=admin;area=securitysettings;sa=general');
|
Chris@76
|
561 }
|
Chris@76
|
562
|
Chris@76
|
563 $context['post_url'] = $scripturl . '?action=admin;area=securitysettings;save;sa=general';
|
Chris@76
|
564 $context['settings_title'] = $txt['mods_cat_security_general'];
|
Chris@76
|
565
|
Chris@76
|
566 prepareDBSettingContext($config_vars);
|
Chris@76
|
567 }
|
Chris@76
|
568
|
Chris@76
|
569 function ModifyLayoutSettings($return_config = false)
|
Chris@76
|
570 {
|
Chris@76
|
571 global $txt, $scripturl, $context, $settings, $sc;
|
Chris@76
|
572
|
Chris@76
|
573 $config_vars = array(
|
Chris@76
|
574 // Pagination stuff.
|
Chris@76
|
575 array('check', 'compactTopicPagesEnable'),
|
Chris@76
|
576 array('int', 'compactTopicPagesContiguous', null, $txt['contiguous_page_display'] . '<div class="smalltext">' . str_replace(' ', ' ', '"3" ' . $txt['to_display'] . ': <strong>1 ... 4 [5] 6 ... 9</strong>') . '<br />' . str_replace(' ', ' ', '"5" ' . $txt['to_display'] . ': <strong>1 ... 3 4 [5] 6 7 ... 9</strong>') . '</div>'),
|
Chris@76
|
577 array('int', 'defaultMaxMembers'),
|
Chris@76
|
578 '',
|
Chris@76
|
579 // Stuff that just is everywhere - today, search, online, etc.
|
Chris@76
|
580 array('select', 'todayMod', array($txt['today_disabled'], $txt['today_only'], $txt['yesterday_today'])),
|
Chris@76
|
581 array('check', 'topbottomEnable'),
|
Chris@76
|
582 array('check', 'onlineEnable'),
|
Chris@76
|
583 array('check', 'enableVBStyleLogin'),
|
Chris@76
|
584 '',
|
Chris@76
|
585 // Automagic image resizing.
|
Chris@76
|
586 array('int', 'max_image_width'),
|
Chris@76
|
587 array('int', 'max_image_height'),
|
Chris@76
|
588 '',
|
Chris@76
|
589 // This is like debugging sorta.
|
Chris@76
|
590 array('check', 'timeLoadPageEnable'),
|
Chris@76
|
591 );
|
Chris@76
|
592
|
Chris@76
|
593 if ($return_config)
|
Chris@76
|
594 return $config_vars;
|
Chris@76
|
595
|
Chris@76
|
596 // Saving?
|
Chris@76
|
597 if (isset($_GET['save']))
|
Chris@76
|
598 {
|
Chris@76
|
599 checkSession();
|
Chris@76
|
600
|
Chris@76
|
601 saveDBSettings($config_vars);
|
Chris@76
|
602 writeLog();
|
Chris@76
|
603
|
Chris@76
|
604 redirectexit('action=admin;area=featuresettings;sa=layout');
|
Chris@76
|
605 }
|
Chris@76
|
606
|
Chris@76
|
607 $context['post_url'] = $scripturl . '?action=admin;area=featuresettings;save;sa=layout';
|
Chris@76
|
608 $context['settings_title'] = $txt['mods_cat_layout'];
|
Chris@76
|
609
|
Chris@76
|
610 prepareDBSettingContext($config_vars);
|
Chris@76
|
611 }
|
Chris@76
|
612
|
Chris@76
|
613 function ModifyKarmaSettings($return_config = false)
|
Chris@76
|
614 {
|
Chris@76
|
615 global $txt, $scripturl, $context, $settings, $sc;
|
Chris@76
|
616
|
Chris@76
|
617 $config_vars = array(
|
Chris@76
|
618 // Karma - On or off?
|
Chris@76
|
619 array('select', 'karmaMode', explode('|', $txt['karma_options'])),
|
Chris@76
|
620 '',
|
Chris@76
|
621 // Who can do it.... and who is restricted by time limits?
|
Chris@76
|
622 array('int', 'karmaMinPosts'),
|
Chris@76
|
623 array('float', 'karmaWaitTime'),
|
Chris@76
|
624 array('check', 'karmaTimeRestrictAdmins'),
|
Chris@76
|
625 '',
|
Chris@76
|
626 // What does it look like? [smite]?
|
Chris@76
|
627 array('text', 'karmaLabel'),
|
Chris@76
|
628 array('text', 'karmaApplaudLabel'),
|
Chris@76
|
629 array('text', 'karmaSmiteLabel'),
|
Chris@76
|
630 );
|
Chris@76
|
631
|
Chris@76
|
632 if ($return_config)
|
Chris@76
|
633 return $config_vars;
|
Chris@76
|
634
|
Chris@76
|
635 // Saving?
|
Chris@76
|
636 if (isset($_GET['save']))
|
Chris@76
|
637 {
|
Chris@76
|
638 checkSession();
|
Chris@76
|
639
|
Chris@76
|
640 saveDBSettings($config_vars);
|
Chris@76
|
641 redirectexit('action=admin;area=featuresettings;sa=karma');
|
Chris@76
|
642 }
|
Chris@76
|
643
|
Chris@76
|
644 $context['post_url'] = $scripturl . '?action=admin;area=featuresettings;save;sa=karma';
|
Chris@76
|
645 $context['settings_title'] = $txt['karma'];
|
Chris@76
|
646
|
Chris@76
|
647 prepareDBSettingContext($config_vars);
|
Chris@76
|
648 }
|
Chris@76
|
649
|
Chris@76
|
650 // Moderation type settings - although there are fewer than we have you believe ;)
|
Chris@76
|
651 function ModifyModerationSettings($return_config = false)
|
Chris@76
|
652 {
|
Chris@76
|
653 global $txt, $scripturl, $context, $settings, $sc, $modSettings;
|
Chris@76
|
654
|
Chris@76
|
655 $config_vars = array(
|
Chris@76
|
656 // Warning system?
|
Chris@76
|
657 array('int', 'warning_watch', 'help' => 'warning_enable'),
|
Chris@76
|
658 'moderate' => array('int', 'warning_moderate'),
|
Chris@76
|
659 array('int', 'warning_mute'),
|
Chris@76
|
660 'rem1' => array('int', 'user_limit'),
|
Chris@76
|
661 'rem2' => array('int', 'warning_decrement'),
|
Chris@76
|
662 array('select', 'warning_show', array($txt['setting_warning_show_mods'], $txt['setting_warning_show_user'], $txt['setting_warning_show_all'])),
|
Chris@76
|
663 );
|
Chris@76
|
664
|
Chris@76
|
665 if ($return_config)
|
Chris@76
|
666 return $config_vars;
|
Chris@76
|
667
|
Chris@76
|
668 // Cannot use moderation if post moderation is not enabled.
|
Chris@76
|
669 if (!$modSettings['postmod_active'])
|
Chris@76
|
670 unset($config_vars['moderate']);
|
Chris@76
|
671
|
Chris@76
|
672 // Saving?
|
Chris@76
|
673 if (isset($_GET['save']))
|
Chris@76
|
674 {
|
Chris@76
|
675 checkSession();
|
Chris@76
|
676
|
Chris@76
|
677 // Make sure these don't have an effect.
|
Chris@76
|
678 if (substr($modSettings['warning_settings'], 0, 1) != 1)
|
Chris@76
|
679 {
|
Chris@76
|
680 $_POST['warning_watch'] = 0;
|
Chris@76
|
681 $_POST['warning_moderate'] = 0;
|
Chris@76
|
682 $_POST['warning_mute'] = 0;
|
Chris@76
|
683 }
|
Chris@76
|
684 else
|
Chris@76
|
685 {
|
Chris@76
|
686 $_POST['warning_watch'] = min($_POST['warning_watch'], 100);
|
Chris@76
|
687 $_POST['warning_moderate'] = $modSettings['postmod_active'] ? min($_POST['warning_moderate'], 100) : 0;
|
Chris@76
|
688 $_POST['warning_mute'] = min($_POST['warning_mute'], 100);
|
Chris@76
|
689 }
|
Chris@76
|
690
|
Chris@76
|
691 // Fix the warning setting array!
|
Chris@76
|
692 $_POST['warning_settings'] = '1,' . min(100, (int) $_POST['user_limit']) . ',' . min(100, (int) $_POST['warning_decrement']);
|
Chris@76
|
693 $save_vars = $config_vars;
|
Chris@76
|
694 $save_vars[] = array('text', 'warning_settings');
|
Chris@76
|
695 unset($save_vars['rem1'], $save_vars['rem2']);
|
Chris@76
|
696
|
Chris@76
|
697 saveDBSettings($save_vars);
|
Chris@76
|
698 redirectexit('action=admin;area=securitysettings;sa=moderation');
|
Chris@76
|
699 }
|
Chris@76
|
700
|
Chris@76
|
701 // We actually store lots of these together - for efficiency.
|
Chris@76
|
702 list ($modSettings['warning_enable'], $modSettings['user_limit'], $modSettings['warning_decrement']) = explode(',', $modSettings['warning_settings']);
|
Chris@76
|
703
|
Chris@76
|
704 $context['post_url'] = $scripturl . '?action=admin;area=securitysettings;save;sa=moderation';
|
Chris@76
|
705 $context['settings_title'] = $txt['moderation_settings'];
|
Chris@76
|
706
|
Chris@76
|
707 prepareDBSettingContext($config_vars);
|
Chris@76
|
708 }
|
Chris@76
|
709
|
Chris@76
|
710 // Let's try keep the spam to a minimum ah Thantos?
|
Chris@76
|
711 function ModifySpamSettings($return_config = false)
|
Chris@76
|
712 {
|
Chris@76
|
713 global $txt, $scripturl, $context, $settings, $sc, $modSettings, $smcFunc;
|
Chris@76
|
714
|
Chris@76
|
715 // Generate a sample registration image.
|
Chris@76
|
716 $context['use_graphic_library'] = in_array('gd', get_loaded_extensions());
|
Chris@76
|
717 $context['verification_image_href'] = $scripturl . '?action=verificationcode;rand=' . md5(mt_rand());
|
Chris@76
|
718
|
Chris@76
|
719 $config_vars = array(
|
Chris@76
|
720 array('check', 'reg_verification'),
|
Chris@76
|
721 array('check', 'search_enable_captcha'),
|
Chris@76
|
722 // This, my friend, is a cheat :p
|
Chris@76
|
723 'guest_verify' => array('check', 'guests_require_captcha', 'subtext' => $txt['setting_guests_require_captcha_desc']),
|
Chris@76
|
724 array('int', 'posts_require_captcha', 'subtext' => $txt['posts_require_captcha_desc'], 'onchange' => 'if (this.value > 0){ document.getElementById(\'guests_require_captcha\').checked = true; document.getElementById(\'guests_require_captcha\').disabled = true;} else {document.getElementById(\'guests_require_captcha\').disabled = false;}'),
|
Chris@76
|
725 array('check', 'guests_report_require_captcha'),
|
Chris@76
|
726 '',
|
Chris@76
|
727 // PM Settings
|
Chris@76
|
728 'pm1' => array('int', 'max_pm_recipients'),
|
Chris@76
|
729 'pm2' => array('int', 'pm_posts_verification'),
|
Chris@76
|
730 'pm3' => array('int', 'pm_posts_per_hour'),
|
Chris@76
|
731 // Visual verification.
|
Chris@76
|
732 array('title', 'configure_verification_means'),
|
Chris@76
|
733 array('desc', 'configure_verification_means_desc'),
|
Chris@76
|
734 'vv' => array('select', 'visual_verification_type', array($txt['setting_image_verification_off'], $txt['setting_image_verification_vsimple'], $txt['setting_image_verification_simple'], $txt['setting_image_verification_medium'], $txt['setting_image_verification_high'], $txt['setting_image_verification_extreme']), 'subtext'=> $txt['setting_visual_verification_type_desc'], 'onchange' => $context['use_graphic_library'] ? 'refreshImages();' : ''),
|
Chris@76
|
735 array('int', 'qa_verification_number', 'subtext' => $txt['setting_qa_verification_number_desc']),
|
Chris@76
|
736 // Clever Thomas, who is looking sheepy now? Not I, the mighty sword swinger did say.
|
Chris@76
|
737 array('title', 'setup_verification_questions'),
|
Chris@76
|
738 array('desc', 'setup_verification_questions_desc'),
|
Chris@76
|
739 array('callback', 'question_answer_list'),
|
Chris@76
|
740 );
|
Chris@76
|
741
|
Chris@76
|
742 if ($return_config)
|
Chris@76
|
743 return $config_vars;
|
Chris@76
|
744
|
Chris@76
|
745 // Load any question and answers!
|
Chris@76
|
746 $context['question_answers'] = array();
|
Chris@76
|
747 $request = $smcFunc['db_query']('', '
|
Chris@76
|
748 SELECT id_comment, body AS question, recipient_name AS answer
|
Chris@76
|
749 FROM {db_prefix}log_comments
|
Chris@76
|
750 WHERE comment_type = {string:ver_test}',
|
Chris@76
|
751 array(
|
Chris@76
|
752 'ver_test' => 'ver_test',
|
Chris@76
|
753 )
|
Chris@76
|
754 );
|
Chris@76
|
755 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
756 {
|
Chris@76
|
757 $context['question_answers'][$row['id_comment']] = array(
|
Chris@76
|
758 'id' => $row['id_comment'],
|
Chris@76
|
759 'question' => $row['question'],
|
Chris@76
|
760 'answer' => $row['answer'],
|
Chris@76
|
761 );
|
Chris@76
|
762 }
|
Chris@76
|
763 $smcFunc['db_free_result']($request);
|
Chris@76
|
764
|
Chris@76
|
765 // Saving?
|
Chris@76
|
766 if (isset($_GET['save']))
|
Chris@76
|
767 {
|
Chris@76
|
768 checkSession();
|
Chris@76
|
769
|
Chris@76
|
770 // Fix PM settings.
|
Chris@76
|
771 $_POST['pm_spam_settings'] = (int) $_POST['max_pm_recipients'] . ',' . (int) $_POST['pm_posts_verification'] . ',' . (int) $_POST['pm_posts_per_hour'];
|
Chris@76
|
772
|
Chris@76
|
773 // Hack in guest requiring verification!
|
Chris@76
|
774 if (empty($_POST['posts_require_captcha']) && !empty($_POST['guests_require_captcha']))
|
Chris@76
|
775 $_POST['posts_require_captcha'] = -1;
|
Chris@76
|
776
|
Chris@76
|
777 $save_vars = $config_vars;
|
Chris@76
|
778 unset($save_vars['pm1'], $save_vars['pm2'], $save_vars['pm3'], $save_vars['guest_verify']);
|
Chris@76
|
779
|
Chris@76
|
780 $save_vars[] = array('text', 'pm_spam_settings');
|
Chris@76
|
781
|
Chris@76
|
782 // Handle verification questions.
|
Chris@76
|
783 $questionInserts = array();
|
Chris@76
|
784 $count_questions = 0;
|
Chris@76
|
785 foreach ($_POST['question'] as $id => $question)
|
Chris@76
|
786 {
|
Chris@76
|
787 $question = trim($smcFunc['htmlspecialchars']($question, ENT_COMPAT, $context['character_set']));
|
Chris@76
|
788 $answer = trim($smcFunc['strtolower']($smcFunc['htmlspecialchars']($_POST['answer'][$id], ENT_COMPAT, $context['character_set'])));
|
Chris@76
|
789
|
Chris@76
|
790 // Already existed?
|
Chris@76
|
791 if (isset($context['question_answers'][$id]))
|
Chris@76
|
792 {
|
Chris@76
|
793 $count_questions++;
|
Chris@76
|
794 // Changed?
|
Chris@76
|
795 if ($context['question_answers'][$id]['question'] != $question || $context['question_answers'][$id]['answer'] != $answer)
|
Chris@76
|
796 {
|
Chris@76
|
797 if ($question == '' || $answer == '')
|
Chris@76
|
798 {
|
Chris@76
|
799 $smcFunc['db_query']('', '
|
Chris@76
|
800 DELETE FROM {db_prefix}log_comments
|
Chris@76
|
801 WHERE comment_type = {string:ver_test}
|
Chris@76
|
802 AND id_comment = {int:id}',
|
Chris@76
|
803 array(
|
Chris@76
|
804 'id' => $id,
|
Chris@76
|
805 'ver_test' => 'ver_test',
|
Chris@76
|
806 )
|
Chris@76
|
807 );
|
Chris@76
|
808 $count_questions--;
|
Chris@76
|
809 }
|
Chris@76
|
810 else
|
Chris@76
|
811 $request = $smcFunc['db_query']('', '
|
Chris@76
|
812 UPDATE {db_prefix}log_comments
|
Chris@76
|
813 SET body = {string:question}, recipient_name = {string:answer}
|
Chris@76
|
814 WHERE comment_type = {string:ver_test}
|
Chris@76
|
815 AND id_comment = {int:id}',
|
Chris@76
|
816 array(
|
Chris@76
|
817 'id' => $id,
|
Chris@76
|
818 'ver_test' => 'ver_test',
|
Chris@76
|
819 'question' => $question,
|
Chris@76
|
820 'answer' => $answer,
|
Chris@76
|
821 )
|
Chris@76
|
822 );
|
Chris@76
|
823 }
|
Chris@76
|
824 }
|
Chris@76
|
825 // It's so shiney and new!
|
Chris@76
|
826 elseif ($question != '' && $answer != '')
|
Chris@76
|
827 {
|
Chris@76
|
828 $questionInserts[] = array(
|
Chris@76
|
829 'comment_type' => 'ver_test',
|
Chris@76
|
830 'body' => $question,
|
Chris@76
|
831 'recipient_name' => $answer,
|
Chris@76
|
832 );
|
Chris@76
|
833 }
|
Chris@76
|
834 }
|
Chris@76
|
835
|
Chris@76
|
836 // Any questions to insert?
|
Chris@76
|
837 if (!empty($questionInserts))
|
Chris@76
|
838 {
|
Chris@76
|
839 $smcFunc['db_insert']('',
|
Chris@76
|
840 '{db_prefix}log_comments',
|
Chris@76
|
841 array('comment_type' => 'string', 'body' => 'string-65535', 'recipient_name' => 'string-80'),
|
Chris@76
|
842 $questionInserts,
|
Chris@76
|
843 array('id_comment')
|
Chris@76
|
844 );
|
Chris@76
|
845 $count_questions++;
|
Chris@76
|
846 }
|
Chris@76
|
847
|
Chris@76
|
848 if (empty($count_questions) || $_POST['qa_verification_number'] > $count_questions)
|
Chris@76
|
849 $_POST['qa_verification_number'] = $count_questions;
|
Chris@76
|
850
|
Chris@76
|
851 // Now save.
|
Chris@76
|
852 saveDBSettings($save_vars);
|
Chris@76
|
853
|
Chris@76
|
854 cache_put_data('verificationQuestionIds', null, 300);
|
Chris@76
|
855
|
Chris@76
|
856 redirectexit('action=admin;area=securitysettings;sa=spam');
|
Chris@76
|
857 }
|
Chris@76
|
858
|
Chris@76
|
859 $character_range = array_merge(range('A', 'H'), array('K', 'M', 'N', 'P', 'R'), range('T', 'Y'));
|
Chris@76
|
860 $_SESSION['visual_verification_code'] = '';
|
Chris@76
|
861 for ($i = 0; $i < 6; $i++)
|
Chris@76
|
862 $_SESSION['visual_verification_code'] .= $character_range[array_rand($character_range)];
|
Chris@76
|
863
|
Chris@76
|
864 // Some javascript for CAPTCHA.
|
Chris@76
|
865 $context['settings_post_javascript'] = '';
|
Chris@76
|
866 if ($context['use_graphic_library'])
|
Chris@76
|
867 $context['settings_post_javascript'] .= '
|
Chris@76
|
868 function refreshImages()
|
Chris@76
|
869 {
|
Chris@76
|
870 var imageType = document.getElementById(\'visual_verification_type\').value;
|
Chris@76
|
871 document.getElementById(\'verification_image\').src = \'' . $context['verification_image_href'] . ';type=\' + imageType;
|
Chris@76
|
872 }';
|
Chris@76
|
873
|
Chris@76
|
874 // Show the image itself, or text saying we can't.
|
Chris@76
|
875 if ($context['use_graphic_library'])
|
Chris@76
|
876 $config_vars['vv']['postinput'] = '<br /><img src="' . $context['verification_image_href'] . ';type=' . (empty($modSettings['visual_verification_type']) ? 0 : $modSettings['visual_verification_type']) . '" alt="' . $txt['setting_image_verification_sample'] . '" id="verification_image" /><br />';
|
Chris@76
|
877 else
|
Chris@76
|
878 $config_vars['vv']['postinput'] = '<br /><span class="smalltext">' . $txt['setting_image_verification_nogd'] . '</span>';
|
Chris@76
|
879
|
Chris@76
|
880 // Hack for PM spam settings.
|
Chris@76
|
881 list ($modSettings['max_pm_recipients'], $modSettings['pm_posts_verification'], $modSettings['pm_posts_per_hour']) = explode(',', $modSettings['pm_spam_settings']);
|
Chris@76
|
882
|
Chris@76
|
883 // Hack for guests requiring verification.
|
Chris@76
|
884 $modSettings['guests_require_captcha'] = !empty($modSettings['posts_require_captcha']);
|
Chris@76
|
885 $modSettings['posts_require_captcha'] = !isset($modSettings['posts_require_captcha']) || $modSettings['posts_require_captcha'] == -1 ? 0 : $modSettings['posts_require_captcha'];
|
Chris@76
|
886
|
Chris@76
|
887 // Some minor javascript for the guest post setting.
|
Chris@76
|
888 if ($modSettings['posts_require_captcha'])
|
Chris@76
|
889 $context['settings_post_javascript'] .= '
|
Chris@76
|
890 document.getElementById(\'guests_require_captcha\').disabled = true;';
|
Chris@76
|
891
|
Chris@76
|
892 $context['post_url'] = $scripturl . '?action=admin;area=securitysettings;save;sa=spam';
|
Chris@76
|
893 $context['settings_title'] = $txt['antispam_Settings'];
|
Chris@76
|
894
|
Chris@76
|
895 prepareDBSettingContext($config_vars);
|
Chris@76
|
896 }
|
Chris@76
|
897
|
Chris@76
|
898 // You'll never guess what this function does...
|
Chris@76
|
899 function ModifySignatureSettings($return_config = false)
|
Chris@76
|
900 {
|
Chris@76
|
901 global $context, $txt, $modSettings, $sig_start, $smcFunc, $helptxt, $scripturl;
|
Chris@76
|
902
|
Chris@76
|
903 $config_vars = array(
|
Chris@76
|
904 // Are signatures even enabled?
|
Chris@76
|
905 array('check', 'signature_enable'),
|
Chris@76
|
906 '',
|
Chris@76
|
907 // Tweaking settings!
|
Chris@76
|
908 array('int', 'signature_max_length'),
|
Chris@76
|
909 array('int', 'signature_max_lines'),
|
Chris@76
|
910 array('int', 'signature_max_font_size'),
|
Chris@76
|
911 array('check', 'signature_allow_smileys', 'onclick' => 'document.getElementById(\'signature_max_smileys\').disabled = !this.checked;'),
|
Chris@76
|
912 array('int', 'signature_max_smileys'),
|
Chris@76
|
913 '',
|
Chris@76
|
914 // Image settings.
|
Chris@76
|
915 array('int', 'signature_max_images'),
|
Chris@76
|
916 array('int', 'signature_max_image_width'),
|
Chris@76
|
917 array('int', 'signature_max_image_height'),
|
Chris@76
|
918 '',
|
Chris@76
|
919 array('bbc', 'signature_bbc'),
|
Chris@76
|
920 );
|
Chris@76
|
921
|
Chris@76
|
922 if ($return_config)
|
Chris@76
|
923 return $config_vars;
|
Chris@76
|
924
|
Chris@76
|
925 // Setup the template.
|
Chris@76
|
926 $context['page_title'] = $txt['signature_settings'];
|
Chris@76
|
927 $context['sub_template'] = 'show_settings';
|
Chris@76
|
928
|
Chris@76
|
929 // Disable the max smileys option if we don't allow smileys at all!
|
Chris@76
|
930 $context['settings_post_javascript'] = 'document.getElementById(\'signature_max_smileys\').disabled = !document.getElementById(\'signature_allow_smileys\').checked;';
|
Chris@76
|
931
|
Chris@76
|
932 // Load all the signature settings.
|
Chris@76
|
933 list ($sig_limits, $sig_bbc) = explode(':', $modSettings['signature_settings']);
|
Chris@76
|
934 $sig_limits = explode(',', $sig_limits);
|
Chris@76
|
935 $disabledTags = !empty($sig_bbc) ? explode(',', $sig_bbc) : array();
|
Chris@76
|
936
|
Chris@76
|
937 // Applying to ALL signatures?!!
|
Chris@76
|
938 if (isset($_GET['apply']))
|
Chris@76
|
939 {
|
Chris@76
|
940 // Security!
|
Chris@76
|
941 checkSession('get');
|
Chris@76
|
942
|
Chris@76
|
943 $sig_start = time();
|
Chris@76
|
944 // This is horrid - but I suppose some people will want the option to do it.
|
Chris@76
|
945 $_GET['step'] = isset($_GET['step']) ? (int) $_GET['step'] : 0;
|
Chris@76
|
946 $done = false;
|
Chris@76
|
947
|
Chris@76
|
948 $request = $smcFunc['db_query']('', '
|
Chris@76
|
949 SELECT MAX(id_member)
|
Chris@76
|
950 FROM {db_prefix}members',
|
Chris@76
|
951 array(
|
Chris@76
|
952 )
|
Chris@76
|
953 );
|
Chris@76
|
954 list ($context['max_member']) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
955 $smcFunc['db_free_result']($request);
|
Chris@76
|
956
|
Chris@76
|
957 while (!$done)
|
Chris@76
|
958 {
|
Chris@76
|
959 $changes = array();
|
Chris@76
|
960
|
Chris@76
|
961 $request = $smcFunc['db_query']('', '
|
Chris@76
|
962 SELECT id_member, signature
|
Chris@76
|
963 FROM {db_prefix}members
|
Chris@76
|
964 WHERE id_member BETWEEN ' . $_GET['step'] . ' AND ' . $_GET['step'] . ' + 49
|
Chris@76
|
965 AND id_group != {int:admin_group}
|
Chris@76
|
966 AND FIND_IN_SET({int:admin_group}, additional_groups) = 0',
|
Chris@76
|
967 array(
|
Chris@76
|
968 'admin_group' => 1,
|
Chris@76
|
969 )
|
Chris@76
|
970 );
|
Chris@76
|
971 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
972 {
|
Chris@76
|
973 // Apply all the rules we can realistically do.
|
Chris@76
|
974 $sig = strtr($row['signature'], array('<br />' => "\n"));
|
Chris@76
|
975
|
Chris@76
|
976 // Max characters...
|
Chris@76
|
977 if (!empty($sig_limits[1]))
|
Chris@76
|
978 $sig = $smcFunc['substr']($sig, 0, $sig_limits[1]);
|
Chris@76
|
979 // Max lines...
|
Chris@76
|
980 if (!empty($sig_limits[2]))
|
Chris@76
|
981 {
|
Chris@76
|
982 $count = 0;
|
Chris@76
|
983 for ($i = 0; $i < strlen($sig); $i++)
|
Chris@76
|
984 {
|
Chris@76
|
985 if ($sig[$i] == "\n")
|
Chris@76
|
986 {
|
Chris@76
|
987 $count++;
|
Chris@76
|
988 if ($count >= $sig_limits[2])
|
Chris@76
|
989 $sig = substr($sig, 0, $i) . strtr(substr($sig, $i), array("\n" => ' '));
|
Chris@76
|
990 }
|
Chris@76
|
991 }
|
Chris@76
|
992 }
|
Chris@76
|
993
|
Chris@76
|
994 if (!empty($sig_limits[7]) && preg_match_all('~\[size=([\d\.]+)?(px|pt|em|x-large|larger)~i', $sig, $matches) !== false && isset($matches[2]))
|
Chris@76
|
995 {
|
Chris@76
|
996 foreach ($matches[1] as $ind => $size)
|
Chris@76
|
997 {
|
Chris@76
|
998 $limit_broke = 0;
|
Chris@76
|
999 // Attempt to allow all sizes of abuse, so to speak.
|
Chris@76
|
1000 if ($matches[2][$ind] == 'px' && $size > $sig_limits[7])
|
Chris@76
|
1001 $limit_broke = $sig_limits[7] . 'px';
|
Chris@76
|
1002 elseif ($matches[2][$ind] == 'pt' && $size > ($sig_limits[7] * 0.75))
|
Chris@76
|
1003 $limit_broke = ((int) $sig_limits[7] * 0.75) . 'pt';
|
Chris@76
|
1004 elseif ($matches[2][$ind] == 'em' && $size > ((float) $sig_limits[7] / 16))
|
Chris@76
|
1005 $limit_broke = ((float) $sig_limits[7] / 16) . 'em';
|
Chris@76
|
1006 elseif ($matches[2][$ind] != 'px' && $matches[2][$ind] != 'pt' && $matches[2][$ind] != 'em' && $sig_limits[7] < 18)
|
Chris@76
|
1007 $limit_broke = 'large';
|
Chris@76
|
1008
|
Chris@76
|
1009 if ($limit_broke)
|
Chris@76
|
1010 $sig = str_replace($matches[0][$ind], '[size=' . $sig_limits[7] . 'px', $sig);
|
Chris@76
|
1011 }
|
Chris@76
|
1012 }
|
Chris@76
|
1013
|
Chris@76
|
1014 // Stupid images - this is stupidly, stupidly challenging.
|
Chris@76
|
1015 if ((!empty($sig_limits[3]) || !empty($sig_limits[5]) || !empty($sig_limits[6])))
|
Chris@76
|
1016 {
|
Chris@76
|
1017 $replaces = array();
|
Chris@76
|
1018 $img_count = 0;
|
Chris@76
|
1019 // Get all BBC tags...
|
Chris@76
|
1020 preg_match_all('~\[img(\s+width=([\d]+))?(\s+height=([\d]+))?(\s+width=([\d]+))?\s*\](?:<br />)*([^<">]+?)(?:<br />)*\[/img\]~i', $sig, $matches);
|
Chris@76
|
1021 // ... and all HTML ones.
|
Chris@76
|
1022 preg_match_all('~<img\s+src=(?:")?((?:http://|ftp://|https://|ftps://).+?)(?:")?(?:\s+alt=(?:")?(.*?)(?:")?)?(?:\s?/)?>~i', $sig, $matches2, PREG_PATTERN_ORDER);
|
Chris@76
|
1023 // And stick the HTML in the BBC.
|
Chris@76
|
1024 if (!empty($matches2))
|
Chris@76
|
1025 {
|
Chris@76
|
1026 foreach ($matches2[0] as $ind => $dummy)
|
Chris@76
|
1027 {
|
Chris@76
|
1028 $matches[0][] = $matches2[0][$ind];
|
Chris@76
|
1029 $matches[1][] = '';
|
Chris@76
|
1030 $matches[2][] = '';
|
Chris@76
|
1031 $matches[3][] = '';
|
Chris@76
|
1032 $matches[4][] = '';
|
Chris@76
|
1033 $matches[5][] = '';
|
Chris@76
|
1034 $matches[6][] = '';
|
Chris@76
|
1035 $matches[7][] = $matches2[1][$ind];
|
Chris@76
|
1036 }
|
Chris@76
|
1037 }
|
Chris@76
|
1038 // Try to find all the images!
|
Chris@76
|
1039 if (!empty($matches))
|
Chris@76
|
1040 {
|
Chris@76
|
1041 $image_count_holder = array();
|
Chris@76
|
1042 foreach ($matches[0] as $key => $image)
|
Chris@76
|
1043 {
|
Chris@76
|
1044 $width = -1; $height = -1;
|
Chris@76
|
1045 $img_count++;
|
Chris@76
|
1046 // Too many images?
|
Chris@76
|
1047 if (!empty($sig_limits[3]) && $img_count > $sig_limits[3])
|
Chris@76
|
1048 {
|
Chris@76
|
1049 // If we've already had this before we only want to remove the excess.
|
Chris@76
|
1050 if (isset($image_count_holder[$image]))
|
Chris@76
|
1051 {
|
Chris@76
|
1052 $img_offset = -1;
|
Chris@76
|
1053 $rep_img_count = 0;
|
Chris@76
|
1054 while ($img_offset !== false)
|
Chris@76
|
1055 {
|
Chris@76
|
1056 $img_offset = strpos($sig, $image, $img_offset + 1);
|
Chris@76
|
1057 $rep_img_count++;
|
Chris@76
|
1058 if ($rep_img_count > $image_count_holder[$image])
|
Chris@76
|
1059 {
|
Chris@76
|
1060 // Only replace the excess.
|
Chris@76
|
1061 $sig = substr($sig, 0, $img_offset) . str_replace($image, '', substr($sig, $img_offset));
|
Chris@76
|
1062 // Stop looping.
|
Chris@76
|
1063 $img_offset = false;
|
Chris@76
|
1064 }
|
Chris@76
|
1065 }
|
Chris@76
|
1066 }
|
Chris@76
|
1067 else
|
Chris@76
|
1068 $replaces[$image] = '';
|
Chris@76
|
1069
|
Chris@76
|
1070 continue;
|
Chris@76
|
1071 }
|
Chris@76
|
1072
|
Chris@76
|
1073 // Does it have predefined restraints? Width first.
|
Chris@76
|
1074 if ($matches[6][$key])
|
Chris@76
|
1075 $matches[2][$key] = $matches[6][$key];
|
Chris@76
|
1076 if ($matches[2][$key] && $sig_limits[5] && $matches[2][$key] > $sig_limits[5])
|
Chris@76
|
1077 {
|
Chris@76
|
1078 $width = $sig_limits[5];
|
Chris@76
|
1079 $matches[4][$key] = $matches[4][$key] * ($width / $matches[2][$key]);
|
Chris@76
|
1080 }
|
Chris@76
|
1081 elseif ($matches[2][$key])
|
Chris@76
|
1082 $width = $matches[2][$key];
|
Chris@76
|
1083 // ... and height.
|
Chris@76
|
1084 if ($matches[4][$key] && $sig_limits[6] && $matches[4][$key] > $sig_limits[6])
|
Chris@76
|
1085 {
|
Chris@76
|
1086 $height = $sig_limits[6];
|
Chris@76
|
1087 if ($width != -1)
|
Chris@76
|
1088 $width = $width * ($height / $matches[4][$key]);
|
Chris@76
|
1089 }
|
Chris@76
|
1090 elseif ($matches[4][$key])
|
Chris@76
|
1091 $height = $matches[4][$key];
|
Chris@76
|
1092
|
Chris@76
|
1093 // If the dimensions are still not fixed - we need to check the actual image.
|
Chris@76
|
1094 if (($width == -1 && $sig_limits[5]) || ($height == -1 && $sig_limits[6]))
|
Chris@76
|
1095 {
|
Chris@76
|
1096 $sizes = url_image_size($matches[7][$key]);
|
Chris@76
|
1097 if (is_array($sizes))
|
Chris@76
|
1098 {
|
Chris@76
|
1099 // Too wide?
|
Chris@76
|
1100 if ($sizes[0] > $sig_limits[5] && $sig_limits[5])
|
Chris@76
|
1101 {
|
Chris@76
|
1102 $width = $sig_limits[5];
|
Chris@76
|
1103 $sizes[1] = $sizes[1] * ($width / $sizes[0]);
|
Chris@76
|
1104 }
|
Chris@76
|
1105 // Too high?
|
Chris@76
|
1106 if ($sizes[1] > $sig_limits[6] && $sig_limits[6])
|
Chris@76
|
1107 {
|
Chris@76
|
1108 $height = $sig_limits[6];
|
Chris@76
|
1109 if ($width == -1)
|
Chris@76
|
1110 $width = $sizes[0];
|
Chris@76
|
1111 $width = $width * ($height / $sizes[1]);
|
Chris@76
|
1112 }
|
Chris@76
|
1113 elseif ($width != -1)
|
Chris@76
|
1114 $height = $sizes[1];
|
Chris@76
|
1115 }
|
Chris@76
|
1116 }
|
Chris@76
|
1117
|
Chris@76
|
1118 // Did we come up with some changes? If so remake the string.
|
Chris@76
|
1119 if ($width != -1 || $height != -1)
|
Chris@76
|
1120 {
|
Chris@76
|
1121 $replaces[$image] = '[img' . ($width != -1 ? ' width=' . round($width) : '') . ($height != -1 ? ' height=' . round($height) : '') . ']' . $matches[7][$key] . '[/img]';
|
Chris@76
|
1122 }
|
Chris@76
|
1123
|
Chris@76
|
1124 // Record that we got one.
|
Chris@76
|
1125 $image_count_holder[$image] = isset($image_count_holder[$image]) ? $image_count_holder[$image] + 1 : 1;
|
Chris@76
|
1126 }
|
Chris@76
|
1127 if (!empty($replaces))
|
Chris@76
|
1128 $sig = str_replace(array_keys($replaces), array_values($replaces), $sig);
|
Chris@76
|
1129 }
|
Chris@76
|
1130 }
|
Chris@76
|
1131 // Try to fix disabled tags.
|
Chris@76
|
1132 if (!empty($disabledTags))
|
Chris@76
|
1133 {
|
Chris@76
|
1134 $sig = preg_replace('~\[(?:' . implode('|', $disabledTags) . ').+?\]~i', '', $sig);
|
Chris@76
|
1135 $sig = preg_replace('~\[/(?:' . implode('|', $disabledTags) . ')\]~i', '', $sig);
|
Chris@76
|
1136 }
|
Chris@76
|
1137
|
Chris@76
|
1138 $sig = strtr($sig, array("\n" => '<br />'));
|
Chris@76
|
1139 if ($sig != $row['signature'])
|
Chris@76
|
1140 $changes[$row['id_member']] = $sig;
|
Chris@76
|
1141 }
|
Chris@76
|
1142 if ($smcFunc['db_num_rows']($request) == 0)
|
Chris@76
|
1143 $done = true;
|
Chris@76
|
1144 $smcFunc['db_free_result']($request);
|
Chris@76
|
1145
|
Chris@76
|
1146 // Do we need to delete what we have?
|
Chris@76
|
1147 if (!empty($changes))
|
Chris@76
|
1148 {
|
Chris@76
|
1149 foreach ($changes as $id => $sig)
|
Chris@76
|
1150 $smcFunc['db_query']('', '
|
Chris@76
|
1151 UPDATE {db_prefix}members
|
Chris@76
|
1152 SET signature = {string:signature}
|
Chris@76
|
1153 WHERE id_member = {int:id_member}',
|
Chris@76
|
1154 array(
|
Chris@76
|
1155 'id_member' => $id,
|
Chris@76
|
1156 'signature' => $sig,
|
Chris@76
|
1157 )
|
Chris@76
|
1158 );
|
Chris@76
|
1159 }
|
Chris@76
|
1160
|
Chris@76
|
1161 $_GET['step'] += 50;
|
Chris@76
|
1162 if (!$done)
|
Chris@76
|
1163 pauseSignatureApplySettings();
|
Chris@76
|
1164 }
|
Chris@76
|
1165 }
|
Chris@76
|
1166
|
Chris@76
|
1167 $context['signature_settings'] = array(
|
Chris@76
|
1168 'enable' => isset($sig_limits[0]) ? $sig_limits[0] : 0,
|
Chris@76
|
1169 'max_length' => isset($sig_limits[1]) ? $sig_limits[1] : 0,
|
Chris@76
|
1170 'max_lines' => isset($sig_limits[2]) ? $sig_limits[2] : 0,
|
Chris@76
|
1171 'max_images' => isset($sig_limits[3]) ? $sig_limits[3] : 0,
|
Chris@76
|
1172 'allow_smileys' => isset($sig_limits[4]) && $sig_limits[4] == -1 ? 0 : 1,
|
Chris@76
|
1173 'max_smileys' => isset($sig_limits[4]) && $sig_limits[4] != -1 ? $sig_limits[4] : 0,
|
Chris@76
|
1174 'max_image_width' => isset($sig_limits[5]) ? $sig_limits[5] : 0,
|
Chris@76
|
1175 'max_image_height' => isset($sig_limits[6]) ? $sig_limits[6] : 0,
|
Chris@76
|
1176 'max_font_size' => isset($sig_limits[7]) ? $sig_limits[7] : 0,
|
Chris@76
|
1177 );
|
Chris@76
|
1178
|
Chris@76
|
1179 // Temporarily make each setting a modSetting!
|
Chris@76
|
1180 foreach ($context['signature_settings'] as $key => $value)
|
Chris@76
|
1181 $modSettings['signature_' . $key] = $value;
|
Chris@76
|
1182
|
Chris@76
|
1183 // Make sure we check the right tags!
|
Chris@76
|
1184 $modSettings['bbc_disabled_signature_bbc'] = $disabledTags;
|
Chris@76
|
1185
|
Chris@76
|
1186 // Saving?
|
Chris@76
|
1187 if (isset($_GET['save']))
|
Chris@76
|
1188 {
|
Chris@76
|
1189 checkSession();
|
Chris@76
|
1190
|
Chris@76
|
1191 // Clean up the tag stuff!
|
Chris@76
|
1192 $bbcTags = array();
|
Chris@76
|
1193 foreach (parse_bbc(false) as $tag)
|
Chris@76
|
1194 $bbcTags[] = $tag['tag'];
|
Chris@76
|
1195
|
Chris@76
|
1196 if (!isset($_POST['signature_bbc_enabledTags']))
|
Chris@76
|
1197 $_POST['signature_bbc_enabledTags'] = array();
|
Chris@76
|
1198 elseif (!is_array($_POST['signature_bbc_enabledTags']))
|
Chris@76
|
1199 $_POST['signature_bbc_enabledTags'] = array($_POST['signature_bbc_enabledTags']);
|
Chris@76
|
1200
|
Chris@76
|
1201 $sig_limits = array();
|
Chris@76
|
1202 foreach ($context['signature_settings'] as $key => $value)
|
Chris@76
|
1203 {
|
Chris@76
|
1204 if ($key == 'allow_smileys')
|
Chris@76
|
1205 continue;
|
Chris@76
|
1206 elseif ($key == 'max_smileys' && empty($_POST['signature_allow_smileys']))
|
Chris@76
|
1207 $sig_limits[] = -1;
|
Chris@76
|
1208 else
|
Chris@76
|
1209 $sig_limits[] = !empty($_POST['signature_' . $key]) ? max(1, (int) $_POST['signature_' . $key]) : 0;
|
Chris@76
|
1210 }
|
Chris@76
|
1211
|
Chris@76
|
1212 $_POST['signature_settings'] = implode(',', $sig_limits) . ':' . implode(',', array_diff($bbcTags, $_POST['signature_bbc_enabledTags']));
|
Chris@76
|
1213
|
Chris@76
|
1214 // Even though we have practically no settings let's keep the convention going!
|
Chris@76
|
1215 $save_vars = array();
|
Chris@76
|
1216 $save_vars[] = array('text', 'signature_settings');
|
Chris@76
|
1217
|
Chris@76
|
1218 saveDBSettings($save_vars);
|
Chris@76
|
1219 redirectexit('action=admin;area=featuresettings;sa=sig');
|
Chris@76
|
1220 }
|
Chris@76
|
1221
|
Chris@76
|
1222 $context['post_url'] = $scripturl . '?action=admin;area=featuresettings;save;sa=sig';
|
Chris@76
|
1223 $context['settings_title'] = $txt['signature_settings'];
|
Chris@76
|
1224
|
Chris@76
|
1225 $context['settings_message'] = '<p class="centertext">' . sprintf($txt['signature_settings_warning'], $context['session_id'], $context['session_var']) . '</p>';
|
Chris@76
|
1226
|
Chris@76
|
1227 prepareDBSettingContext($config_vars);
|
Chris@76
|
1228 }
|
Chris@76
|
1229
|
Chris@76
|
1230 // Just pause the signature applying thing.
|
Chris@76
|
1231 function pauseSignatureApplySettings()
|
Chris@76
|
1232 {
|
Chris@76
|
1233 global $context, $txt, $sig_start;
|
Chris@76
|
1234
|
Chris@76
|
1235 // Try get more time...
|
Chris@76
|
1236 @set_time_limit(600);
|
Chris@76
|
1237 if (function_exists('apache_reset_timeout'))
|
Chris@76
|
1238 @apache_reset_timeout();
|
Chris@76
|
1239
|
Chris@76
|
1240 // Have we exhausted all the time we allowed?
|
Chris@76
|
1241 if (time() - array_sum(explode(' ', $sig_start)) < 3)
|
Chris@76
|
1242 return;
|
Chris@76
|
1243
|
Chris@76
|
1244 $context['continue_get_data'] = '?action=admin;area=featuresettings;sa=sig;apply;step=' . $_GET['step'] . ';' . $context['session_var'] . '=' . $context['session_id'];
|
Chris@76
|
1245 $context['page_title'] = $txt['not_done_title'];
|
Chris@76
|
1246 $context['continue_post_data'] = '';
|
Chris@76
|
1247 $context['continue_countdown'] = '2';
|
Chris@76
|
1248 $context['sub_template'] = 'not_done';
|
Chris@76
|
1249
|
Chris@76
|
1250 // Specific stuff to not break this template!
|
Chris@76
|
1251 $context[$context['admin_menu_name']]['current_subsection'] = 'sig';
|
Chris@76
|
1252
|
Chris@76
|
1253 // Get the right percent.
|
Chris@76
|
1254 $context['continue_percent'] = round(($_GET['step'] / $context['max_member']) * 100);
|
Chris@76
|
1255
|
Chris@76
|
1256 // Never more than 100%!
|
Chris@76
|
1257 $context['continue_percent'] = min($context['continue_percent'], 100);
|
Chris@76
|
1258
|
Chris@76
|
1259 obExit();
|
Chris@76
|
1260 }
|
Chris@76
|
1261
|
Chris@76
|
1262 // Show all the custom profile fields available to the user.
|
Chris@76
|
1263 function ShowCustomProfiles()
|
Chris@76
|
1264 {
|
Chris@76
|
1265 global $txt, $scripturl, $context, $settings, $sc, $smcFunc;
|
Chris@76
|
1266 global $modSettings, $sourcedir;
|
Chris@76
|
1267
|
Chris@76
|
1268 $context['page_title'] = $txt['custom_profile_title'];
|
Chris@76
|
1269 $context['sub_template'] = 'show_custom_profile';
|
Chris@76
|
1270
|
Chris@76
|
1271 // What about standard fields they can tweak?
|
Chris@76
|
1272 $standard_fields = array('icq', 'msn', 'aim', 'yim', 'location', 'gender', 'website', 'posts', 'warning_status');
|
Chris@76
|
1273 // What fields can't you put on the registration page?
|
Chris@76
|
1274 $context['fields_no_registration'] = array('posts', 'warning_status');
|
Chris@76
|
1275
|
Chris@76
|
1276 // Are we saving any standard field changes?
|
Chris@76
|
1277 if (isset($_POST['save']))
|
Chris@76
|
1278 {
|
Chris@76
|
1279 checkSession();
|
Chris@76
|
1280
|
Chris@76
|
1281 // Do the active ones first.
|
Chris@76
|
1282 $disable_fields = array_flip($standard_fields);
|
Chris@76
|
1283 if (!empty($_POST['active']))
|
Chris@76
|
1284 {
|
Chris@76
|
1285 foreach ($_POST['active'] as $value)
|
Chris@76
|
1286 if (isset($disable_fields[$value]))
|
Chris@76
|
1287 unset($disable_fields[$value]);
|
Chris@76
|
1288 }
|
Chris@76
|
1289 // What we have left!
|
Chris@76
|
1290 $changes['disabled_profile_fields'] = empty($disable_fields) ? '' : implode(',', array_keys($disable_fields));
|
Chris@76
|
1291
|
Chris@76
|
1292 // Things we want to show on registration?
|
Chris@76
|
1293 $reg_fields = array();
|
Chris@76
|
1294 if (!empty($_POST['reg']))
|
Chris@76
|
1295 {
|
Chris@76
|
1296 foreach ($_POST['reg'] as $value)
|
Chris@76
|
1297 if (in_array($value, $standard_fields) && !isset($disable_fields[$value]))
|
Chris@76
|
1298 $reg_fields[] = $value;
|
Chris@76
|
1299 }
|
Chris@76
|
1300 // What we have left!
|
Chris@76
|
1301 $changes['registration_fields'] = empty($reg_fields) ? '' : implode(',', $reg_fields);
|
Chris@76
|
1302
|
Chris@76
|
1303 if (!empty($changes))
|
Chris@76
|
1304 updateSettings($changes);
|
Chris@76
|
1305 }
|
Chris@76
|
1306
|
Chris@76
|
1307 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
1308
|
Chris@76
|
1309 $listOptions = array(
|
Chris@76
|
1310 'id' => 'standard_profile_fields',
|
Chris@76
|
1311 'title' => $txt['standard_profile_title'],
|
Chris@76
|
1312 'base_href' => $scripturl . '?action=admin;area=featuresettings;sa=profile',
|
Chris@76
|
1313 'get_items' => array(
|
Chris@76
|
1314 'function' => 'list_getProfileFields',
|
Chris@76
|
1315 'params' => array(
|
Chris@76
|
1316 true,
|
Chris@76
|
1317 ),
|
Chris@76
|
1318 ),
|
Chris@76
|
1319 'columns' => array(
|
Chris@76
|
1320 'field' => array(
|
Chris@76
|
1321 'header' => array(
|
Chris@76
|
1322 'value' => $txt['standard_profile_field'],
|
Chris@76
|
1323 'style' => 'text-align: left;',
|
Chris@76
|
1324 ),
|
Chris@76
|
1325 'data' => array(
|
Chris@76
|
1326 'db' => 'label',
|
Chris@76
|
1327 'style' => 'width: 60%;',
|
Chris@76
|
1328 ),
|
Chris@76
|
1329 ),
|
Chris@76
|
1330 'active' => array(
|
Chris@76
|
1331 'header' => array(
|
Chris@76
|
1332 'value' => $txt['custom_edit_active'],
|
Chris@76
|
1333 ),
|
Chris@76
|
1334 'data' => array(
|
Chris@76
|
1335 'function' => create_function('$rowData', '
|
Chris@76
|
1336 $isChecked = $rowData[\'disabled\'] ? \'\' : \' checked="checked"\';
|
Chris@76
|
1337 $onClickHandler = $rowData[\'can_show_register\'] ? sprintf(\'onclick="document.getElementById(\\\'reg_%1$s\\\').disabled = !this.checked;"\', $rowData[\'id\']) : \'\';
|
Chris@76
|
1338 return sprintf(\'<input type="checkbox" name="active[]" id="active_%1$s" value="%1$s" class="input_check"%2$s%3$s />\', $rowData[\'id\'], $isChecked, $onClickHandler);
|
Chris@76
|
1339 '),
|
Chris@76
|
1340 'style' => 'width: 20%; text-align: center;',
|
Chris@76
|
1341 ),
|
Chris@76
|
1342 ),
|
Chris@76
|
1343 'show_on_registration' => array(
|
Chris@76
|
1344 'header' => array(
|
Chris@76
|
1345 'value' => $txt['custom_edit_registration'],
|
Chris@76
|
1346 ),
|
Chris@76
|
1347 'data' => array(
|
Chris@76
|
1348 'function' => create_function('$rowData', '
|
Chris@76
|
1349 $isChecked = $rowData[\'on_register\'] && !$rowData[\'disabled\'] ? \' checked="checked"\' : \'\';
|
Chris@76
|
1350 $isDisabled = $rowData[\'can_show_register\'] ? \'\' : \' disabled="disabled"\';
|
Chris@76
|
1351 return sprintf(\'<input type="checkbox" name="reg[]" id="reg_%1$s" value="%1$s" class="input_check"%2$s%3$s />\', $rowData[\'id\'], $isChecked, $isDisabled);
|
Chris@76
|
1352 '),
|
Chris@76
|
1353 'style' => 'width: 20%; text-align: center;',
|
Chris@76
|
1354 ),
|
Chris@76
|
1355 ),
|
Chris@76
|
1356 ),
|
Chris@76
|
1357 'form' => array(
|
Chris@76
|
1358 'href' => $scripturl . '?action=admin;area=featuresettings;sa=profile',
|
Chris@76
|
1359 'name' => 'standardProfileFields',
|
Chris@76
|
1360 ),
|
Chris@76
|
1361 'additional_rows' => array(
|
Chris@76
|
1362 array(
|
Chris@76
|
1363 'position' => 'below_table_data',
|
Chris@76
|
1364 'value' => '<input type="submit" name="save" value="' . $txt['save'] . '" class="button_submit" />',
|
Chris@76
|
1365 'style' => 'text-align: right;',
|
Chris@76
|
1366 ),
|
Chris@76
|
1367 ),
|
Chris@76
|
1368 );
|
Chris@76
|
1369 createList($listOptions);
|
Chris@76
|
1370
|
Chris@76
|
1371 $listOptions = array(
|
Chris@76
|
1372 'id' => 'custom_profile_fields',
|
Chris@76
|
1373 'title' => $txt['custom_profile_title'],
|
Chris@76
|
1374 'base_href' => $scripturl . '?action=admin;area=featuresettings;sa=profile',
|
Chris@76
|
1375 'default_sort_col' => 'field_name',
|
Chris@76
|
1376 'no_items_label' => $txt['custom_profile_none'],
|
Chris@76
|
1377 'items_per_page' => 25,
|
Chris@76
|
1378 'get_items' => array(
|
Chris@76
|
1379 'function' => 'list_getProfileFields',
|
Chris@76
|
1380 'params' => array(
|
Chris@76
|
1381 false,
|
Chris@76
|
1382 ),
|
Chris@76
|
1383 ),
|
Chris@76
|
1384 'get_count' => array(
|
Chris@76
|
1385 'function' => 'list_getProfileFieldSize',
|
Chris@76
|
1386 ),
|
Chris@76
|
1387 'columns' => array(
|
Chris@76
|
1388 'field_name' => array(
|
Chris@76
|
1389 'header' => array(
|
Chris@76
|
1390 'value' => $txt['custom_profile_fieldname'],
|
Chris@76
|
1391 'style' => 'text-align: left;',
|
Chris@76
|
1392 ),
|
Chris@76
|
1393 'data' => array(
|
Chris@76
|
1394 'function' => create_function('$rowData', '
|
Chris@76
|
1395 global $scripturl;
|
Chris@76
|
1396
|
Chris@76
|
1397 return sprintf(\'<a href="%1$s?action=admin;area=featuresettings;sa=profileedit;fid=%2$d">%3$s</a><div class="smalltext">%4$s</div>\', $scripturl, $rowData[\'id_field\'], $rowData[\'field_name\'], $rowData[\'field_desc\']);
|
Chris@76
|
1398 '),
|
Chris@76
|
1399 'style' => 'width: 62%;',
|
Chris@76
|
1400 ),
|
Chris@76
|
1401 'sort' => array(
|
Chris@76
|
1402 'default' => 'field_name',
|
Chris@76
|
1403 'reverse' => 'field_name DESC',
|
Chris@76
|
1404 ),
|
Chris@76
|
1405 ),
|
Chris@76
|
1406 'field_type' => array(
|
Chris@76
|
1407 'header' => array(
|
Chris@76
|
1408 'value' => $txt['custom_profile_fieldtype'],
|
Chris@76
|
1409 'style' => 'text-align: left;',
|
Chris@76
|
1410 ),
|
Chris@76
|
1411 'data' => array(
|
Chris@76
|
1412 'function' => create_function('$rowData', '
|
Chris@76
|
1413 global $txt;
|
Chris@76
|
1414
|
Chris@76
|
1415 $textKey = sprintf(\'custom_profile_type_%1$s\', $rowData[\'field_type\']);
|
Chris@76
|
1416 return isset($txt[$textKey]) ? $txt[$textKey] : $textKey;
|
Chris@76
|
1417 '),
|
Chris@76
|
1418 'style' => 'width: 15%;',
|
Chris@76
|
1419 ),
|
Chris@76
|
1420 'sort' => array(
|
Chris@76
|
1421 'default' => 'field_type',
|
Chris@76
|
1422 'reverse' => 'field_type DESC',
|
Chris@76
|
1423 ),
|
Chris@76
|
1424 ),
|
Chris@76
|
1425 'active' => array(
|
Chris@76
|
1426 'header' => array(
|
Chris@76
|
1427 'value' => $txt['custom_profile_active'],
|
Chris@76
|
1428 ),
|
Chris@76
|
1429 'data' => array(
|
Chris@76
|
1430 'function' => create_function('$rowData', '
|
Chris@76
|
1431 global $txt;
|
Chris@76
|
1432
|
Chris@76
|
1433 return $rowData[\'active\'] ? $txt[\'yes\'] : $txt[\'no\'];
|
Chris@76
|
1434 '),
|
Chris@76
|
1435 'style' => 'width: 8%; text-align: center;',
|
Chris@76
|
1436 ),
|
Chris@76
|
1437 'sort' => array(
|
Chris@76
|
1438 'default' => 'active DESC',
|
Chris@76
|
1439 'reverse' => 'active',
|
Chris@76
|
1440 ),
|
Chris@76
|
1441 ),
|
Chris@76
|
1442 'placement' => array(
|
Chris@76
|
1443 'header' => array(
|
Chris@76
|
1444 'value' => $txt['custom_profile_placement'],
|
Chris@76
|
1445 ),
|
Chris@76
|
1446 'data' => array(
|
Chris@76
|
1447 'function' => create_function('$rowData', '
|
Chris@76
|
1448 global $txt;
|
Chris@76
|
1449
|
Chris@76
|
1450 return $txt[\'custom_profile_placement_\' . (empty($rowData[\'placement\']) ? \'standard\' : ($rowData[\'placement\'] == 1 ? \'withicons\' : \'abovesignature\'))];
|
Chris@76
|
1451 '),
|
Chris@76
|
1452 'style' => 'width: 8%; text-align: center;',
|
Chris@76
|
1453 ),
|
Chris@76
|
1454 'sort' => array(
|
Chris@76
|
1455 'default' => 'placement DESC',
|
Chris@76
|
1456 'reverse' => 'placement',
|
Chris@76
|
1457 ),
|
Chris@76
|
1458 ),
|
Chris@76
|
1459 'show_on_registration' => array(
|
Chris@76
|
1460 'header' => array(
|
Chris@76
|
1461 'value' => $txt['modify'],
|
Chris@76
|
1462 ),
|
Chris@76
|
1463 'data' => array(
|
Chris@76
|
1464 'sprintf' => array(
|
Chris@76
|
1465 'format' => '<a href="' . $scripturl . '?action=admin;area=featuresettings;sa=profileedit;fid=%1$s">' . $txt['modify'] . '</a>',
|
Chris@76
|
1466 'params' => array(
|
Chris@76
|
1467 'id_field' => false,
|
Chris@76
|
1468 ),
|
Chris@76
|
1469 ),
|
Chris@76
|
1470 'style' => 'width: 15%; text-align: center;',
|
Chris@76
|
1471 ),
|
Chris@76
|
1472 ),
|
Chris@76
|
1473 ),
|
Chris@76
|
1474 'form' => array(
|
Chris@76
|
1475 'href' => $scripturl . '?action=admin;area=featuresettings;sa=profileedit',
|
Chris@76
|
1476 'name' => 'customProfileFields',
|
Chris@76
|
1477 ),
|
Chris@76
|
1478 'additional_rows' => array(
|
Chris@76
|
1479 array(
|
Chris@76
|
1480 'position' => 'below_table_data',
|
Chris@76
|
1481 'value' => '<input type="submit" name="new" value="' . $txt['custom_profile_make_new'] . '" class="button_submit" />',
|
Chris@76
|
1482 'style' => 'text-align: right;',
|
Chris@76
|
1483 ),
|
Chris@76
|
1484 ),
|
Chris@76
|
1485 );
|
Chris@76
|
1486 createList($listOptions);
|
Chris@76
|
1487 }
|
Chris@76
|
1488
|
Chris@76
|
1489 function list_getProfileFields($start, $items_per_page, $sort, $standardFields)
|
Chris@76
|
1490 {
|
Chris@76
|
1491 global $txt, $modSettings, $smcFunc;
|
Chris@76
|
1492
|
Chris@76
|
1493 $list = array();
|
Chris@76
|
1494
|
Chris@76
|
1495 if ($standardFields)
|
Chris@76
|
1496 {
|
Chris@76
|
1497 $standard_fields = array('icq', 'msn', 'aim', 'yim', 'location', 'gender', 'website', 'posts', 'warning_status');
|
Chris@76
|
1498 $fields_no_registration = array('posts', 'warning_status');
|
Chris@76
|
1499 $disabled_fields = isset($modSettings['disabled_profile_fields']) ? explode(',', $modSettings['disabled_profile_fields']) : array();
|
Chris@76
|
1500 $registration_fields = isset($modSettings['registration_fields']) ? explode(',', $modSettings['registration_fields']) : array();
|
Chris@76
|
1501
|
Chris@76
|
1502 foreach ($standard_fields as $field)
|
Chris@76
|
1503 $list[] = array(
|
Chris@76
|
1504 'id' => $field,
|
Chris@76
|
1505 'label' => isset($txt['standard_profile_field_' . $field]) ? $txt['standard_profile_field_' . $field] : (isset($txt[$field]) ? $txt[$field] : $field),
|
Chris@76
|
1506 'disabled' => in_array($field, $disabled_fields),
|
Chris@76
|
1507 'on_register' => in_array($field, $registration_fields) && !in_array($field, $fields_no_registration),
|
Chris@76
|
1508 'can_show_register' => !in_array($field, $fields_no_registration),
|
Chris@76
|
1509 );
|
Chris@76
|
1510 }
|
Chris@76
|
1511 else
|
Chris@76
|
1512 {
|
Chris@76
|
1513 // Load all the fields.
|
Chris@76
|
1514 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1515 SELECT id_field, col_name, field_name, field_desc, field_type, active, placement
|
Chris@76
|
1516 FROM {db_prefix}custom_fields
|
Chris@76
|
1517 ORDER BY {raw:sort}
|
Chris@76
|
1518 LIMIT {int:start}, {int:items_per_page}',
|
Chris@76
|
1519 array(
|
Chris@76
|
1520 'sort' => $sort,
|
Chris@76
|
1521 'start' => $start,
|
Chris@76
|
1522 'items_per_page' => $items_per_page,
|
Chris@76
|
1523 )
|
Chris@76
|
1524 );
|
Chris@76
|
1525 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1526 $list[] = $row;
|
Chris@76
|
1527 $smcFunc['db_free_result']($request);
|
Chris@76
|
1528 }
|
Chris@76
|
1529
|
Chris@76
|
1530 return $list;
|
Chris@76
|
1531 }
|
Chris@76
|
1532
|
Chris@76
|
1533 function list_getProfileFieldSize()
|
Chris@76
|
1534 {
|
Chris@76
|
1535 global $smcFunc;
|
Chris@76
|
1536
|
Chris@76
|
1537 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1538 SELECT COUNT(*)
|
Chris@76
|
1539 FROM {db_prefix}custom_fields',
|
Chris@76
|
1540 array(
|
Chris@76
|
1541 )
|
Chris@76
|
1542 );
|
Chris@76
|
1543
|
Chris@76
|
1544 list ($numProfileFields) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
1545 $smcFunc['db_free_result']($request);
|
Chris@76
|
1546
|
Chris@76
|
1547 return $numProfileFields;
|
Chris@76
|
1548 }
|
Chris@76
|
1549
|
Chris@76
|
1550 // Edit some profile fields?
|
Chris@76
|
1551 function EditCustomProfiles()
|
Chris@76
|
1552 {
|
Chris@76
|
1553 global $txt, $scripturl, $context, $settings, $sc, $smcFunc;
|
Chris@76
|
1554
|
Chris@76
|
1555 // Sort out the context!
|
Chris@76
|
1556 $context['fid'] = isset($_GET['fid']) ? (int) $_GET['fid'] : 0;
|
Chris@76
|
1557 $context[$context['admin_menu_name']]['current_subsection'] = 'profile';
|
Chris@76
|
1558 $context['page_title'] = $context['fid'] ? $txt['custom_edit_title'] : $txt['custom_add_title'];
|
Chris@76
|
1559 $context['sub_template'] = 'edit_profile_field';
|
Chris@76
|
1560
|
Chris@76
|
1561 // Load the profile language for section names.
|
Chris@76
|
1562 loadLanguage('Profile');
|
Chris@76
|
1563
|
Chris@76
|
1564 if ($context['fid'])
|
Chris@76
|
1565 {
|
Chris@76
|
1566 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1567 SELECT
|
Chris@76
|
1568 id_field, col_name, field_name, field_desc, field_type, field_length, field_options,
|
Chris@76
|
1569 show_reg, show_display, show_profile, private, active, default_value, can_search,
|
Chris@76
|
1570 bbc, mask, enclose, placement
|
Chris@76
|
1571 FROM {db_prefix}custom_fields
|
Chris@76
|
1572 WHERE id_field = {int:current_field}',
|
Chris@76
|
1573 array(
|
Chris@76
|
1574 'current_field' => $context['fid'],
|
Chris@76
|
1575 )
|
Chris@76
|
1576 );
|
Chris@76
|
1577 $context['field'] = array();
|
Chris@76
|
1578 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1579 {
|
Chris@76
|
1580 if ($row['field_type'] == 'textarea')
|
Chris@76
|
1581 @list ($rows, $cols) = @explode(',', $row['default_value']);
|
Chris@76
|
1582 else
|
Chris@76
|
1583 {
|
Chris@76
|
1584 $rows = 3;
|
Chris@76
|
1585 $cols = 30;
|
Chris@76
|
1586 }
|
Chris@76
|
1587
|
Chris@76
|
1588 $context['field'] = array(
|
Chris@76
|
1589 'name' => $row['field_name'],
|
Chris@76
|
1590 'desc' => $row['field_desc'],
|
Chris@76
|
1591 'colname' => $row['col_name'],
|
Chris@76
|
1592 'profile_area' => $row['show_profile'],
|
Chris@76
|
1593 'reg' => $row['show_reg'],
|
Chris@76
|
1594 'display' => $row['show_display'],
|
Chris@76
|
1595 'type' => $row['field_type'],
|
Chris@76
|
1596 'max_length' => $row['field_length'],
|
Chris@76
|
1597 'rows' => $rows,
|
Chris@76
|
1598 'cols' => $cols,
|
Chris@76
|
1599 'bbc' => $row['bbc'] ? true : false,
|
Chris@76
|
1600 'default_check' => $row['field_type'] == 'check' && $row['default_value'] ? true : false,
|
Chris@76
|
1601 'default_select' => $row['field_type'] == 'select' || $row['field_type'] == 'radio' ? $row['default_value'] : '',
|
Chris@76
|
1602 'options' => strlen($row['field_options']) > 1 ? explode(',', $row['field_options']) : array('', '', ''),
|
Chris@76
|
1603 'active' => $row['active'],
|
Chris@76
|
1604 'private' => $row['private'],
|
Chris@76
|
1605 'can_search' => $row['can_search'],
|
Chris@76
|
1606 'mask' => $row['mask'],
|
Chris@76
|
1607 'regex' => substr($row['mask'], 0, 5) == 'regex' ? substr($row['mask'], 5) : '',
|
Chris@76
|
1608 'enclose' => $row['enclose'],
|
Chris@76
|
1609 'placement' => $row['placement'],
|
Chris@76
|
1610 );
|
Chris@76
|
1611 }
|
Chris@76
|
1612 $smcFunc['db_free_result']($request);
|
Chris@76
|
1613 }
|
Chris@76
|
1614
|
Chris@76
|
1615 // Setup the default values as needed.
|
Chris@76
|
1616 if (empty($context['field']))
|
Chris@76
|
1617 $context['field'] = array(
|
Chris@76
|
1618 'name' => '',
|
Chris@76
|
1619 'colname' => '???',
|
Chris@76
|
1620 'desc' => '',
|
Chris@76
|
1621 'profile_area' => 'forumprofile',
|
Chris@76
|
1622 'reg' => false,
|
Chris@76
|
1623 'display' => false,
|
Chris@76
|
1624 'type' => 'text',
|
Chris@76
|
1625 'max_length' => 255,
|
Chris@76
|
1626 'rows' => 4,
|
Chris@76
|
1627 'cols' => 30,
|
Chris@76
|
1628 'bbc' => false,
|
Chris@76
|
1629 'default_check' => false,
|
Chris@76
|
1630 'default_select' => '',
|
Chris@76
|
1631 'options' => array('', '', ''),
|
Chris@76
|
1632 'active' => true,
|
Chris@76
|
1633 'private' => false,
|
Chris@76
|
1634 'can_search' => false,
|
Chris@76
|
1635 'mask' => 'nohtml',
|
Chris@76
|
1636 'regex' => '',
|
Chris@76
|
1637 'enclose' => '',
|
Chris@76
|
1638 'placement' => 0,
|
Chris@76
|
1639 );
|
Chris@76
|
1640
|
Chris@76
|
1641 // Are we saving?
|
Chris@76
|
1642 if (isset($_POST['save']))
|
Chris@76
|
1643 {
|
Chris@76
|
1644 checkSession();
|
Chris@76
|
1645
|
Chris@76
|
1646 // Everyone needs a name - even the (bracket) unknown...
|
Chris@76
|
1647 if (trim($_POST['field_name']) == '')
|
Chris@76
|
1648 fatal_lang_error('custom_option_need_name');
|
Chris@76
|
1649 $_POST['field_name'] = $smcFunc['htmlspecialchars']($_POST['field_name']);
|
Chris@76
|
1650 $_POST['field_desc'] = $smcFunc['htmlspecialchars']($_POST['field_desc']);
|
Chris@76
|
1651
|
Chris@76
|
1652 // Checkboxes...
|
Chris@76
|
1653 $show_reg = isset($_POST['reg']) ? (int) $_POST['reg'] : 0;
|
Chris@76
|
1654 $show_display = isset($_POST['display']) ? 1 : 0;
|
Chris@76
|
1655 $bbc = isset($_POST['bbc']) ? 1 : 0;
|
Chris@76
|
1656 $show_profile = $_POST['profile_area'];
|
Chris@76
|
1657 $active = isset($_POST['active']) ? 1 : 0;
|
Chris@76
|
1658 $private = isset($_POST['private']) ? (int) $_POST['private'] : 0;
|
Chris@76
|
1659 $can_search = isset($_POST['can_search']) ? 1 : 0;
|
Chris@76
|
1660
|
Chris@76
|
1661 // Some masking stuff...
|
Chris@76
|
1662 $mask = isset($_POST['mask']) ? $_POST['mask'] : '';
|
Chris@76
|
1663 if ($mask == 'regex' && isset($_POST['regex']))
|
Chris@76
|
1664 $mask .= $_POST['regex'];
|
Chris@76
|
1665
|
Chris@76
|
1666 $field_length = isset($_POST['max_length']) ? (int) $_POST['max_length'] : 255;
|
Chris@76
|
1667 $enclose = isset($_POST['enclose']) ? $_POST['enclose'] : '';
|
Chris@76
|
1668 $placement = isset($_POST['placement']) ? (int) $_POST['placement'] : 0;
|
Chris@76
|
1669
|
Chris@76
|
1670 // Select options?
|
Chris@76
|
1671 $field_options = '';
|
Chris@76
|
1672 $newOptions = array();
|
Chris@76
|
1673 $default = isset($_POST['default_check']) && $_POST['field_type'] == 'check' ? 1 : '';
|
Chris@76
|
1674 if (!empty($_POST['select_option']) && ($_POST['field_type'] == 'select' || $_POST['field_type'] == 'radio'))
|
Chris@76
|
1675 {
|
Chris@76
|
1676 foreach ($_POST['select_option'] as $k => $v)
|
Chris@76
|
1677 {
|
Chris@76
|
1678 // Clean, clean, clean...
|
Chris@76
|
1679 $v = $smcFunc['htmlspecialchars']($v);
|
Chris@76
|
1680 $v = strtr($v, array(',' => ''));
|
Chris@76
|
1681
|
Chris@76
|
1682 // Nada, zip, etc...
|
Chris@76
|
1683 if (trim($v) == '')
|
Chris@76
|
1684 continue;
|
Chris@76
|
1685
|
Chris@76
|
1686 // Otherwise, save it boy.
|
Chris@76
|
1687 $field_options .= $v . ',';
|
Chris@76
|
1688 // This is just for working out what happened with old options...
|
Chris@76
|
1689 $newOptions[$k] = $v;
|
Chris@76
|
1690
|
Chris@76
|
1691 // Is it default?
|
Chris@76
|
1692 if (isset($_POST['default_select']) && $_POST['default_select'] == $k)
|
Chris@76
|
1693 $default = $v;
|
Chris@76
|
1694 }
|
Chris@76
|
1695 $field_options = substr($field_options, 0, -1);
|
Chris@76
|
1696 }
|
Chris@76
|
1697
|
Chris@76
|
1698 // Text area has default has dimensions
|
Chris@76
|
1699 if ($_POST['field_type'] == 'textarea')
|
Chris@76
|
1700 $default = (int) $_POST['rows'] . ',' . (int) $_POST['cols'];
|
Chris@76
|
1701
|
Chris@76
|
1702 // Come up with the unique name?
|
Chris@76
|
1703 if (empty($context['fid']))
|
Chris@76
|
1704 {
|
Chris@76
|
1705 $colname = $smcFunc['substr'](strtr($_POST['field_name'], array(' ' => '')), 0, 6);
|
Chris@76
|
1706 preg_match('~([\w\d_-]+)~', $colname, $matches);
|
Chris@76
|
1707
|
Chris@76
|
1708 // If there is nothing to the name, then let's start out own - for foreign languages etc.
|
Chris@76
|
1709 if (isset($matches[1]))
|
Chris@76
|
1710 $colname = $initial_colname = 'cust_' . strtolower($matches[1]);
|
Chris@76
|
1711 else
|
Chris@76
|
1712 $colname = $initial_colname = 'cust_' . mt_rand(1, 999);
|
Chris@76
|
1713
|
Chris@76
|
1714 // Make sure this is unique.
|
Chris@76
|
1715 // !!! This may not be the most efficient way to do this.
|
Chris@76
|
1716 $unique = false;
|
Chris@76
|
1717 for ($i = 0; !$unique && $i < 9; $i ++)
|
Chris@76
|
1718 {
|
Chris@76
|
1719 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1720 SELECT id_field
|
Chris@76
|
1721 FROM {db_prefix}custom_fields
|
Chris@76
|
1722 WHERE col_name = {string:current_column}',
|
Chris@76
|
1723 array(
|
Chris@76
|
1724 'current_column' => $colname,
|
Chris@76
|
1725 )
|
Chris@76
|
1726 );
|
Chris@76
|
1727 if ($smcFunc['db_num_rows']($request) == 0)
|
Chris@76
|
1728 $unique = true;
|
Chris@76
|
1729 else
|
Chris@76
|
1730 $colname = $initial_colname . $i;
|
Chris@76
|
1731 $smcFunc['db_free_result']($request);
|
Chris@76
|
1732 }
|
Chris@76
|
1733
|
Chris@76
|
1734 // Still not a unique colum name? Leave it up to the user, then.
|
Chris@76
|
1735 if (!$unique)
|
Chris@76
|
1736 fatal_lang_error('custom_option_not_unique');
|
Chris@76
|
1737 }
|
Chris@76
|
1738 // Work out what to do with the user data otherwise...
|
Chris@76
|
1739 else
|
Chris@76
|
1740 {
|
Chris@76
|
1741 // Anything going to check or select is pointless keeping - as is anything coming from check!
|
Chris@76
|
1742 if (($_POST['field_type'] == 'check' && $context['field']['type'] != 'check')
|
Chris@76
|
1743 || (($_POST['field_type'] == 'select' || $_POST['field_type'] == 'radio') && $context['field']['type'] != 'select' && $context['field']['type'] != 'radio')
|
Chris@76
|
1744 || ($context['field']['type'] == 'check' && $_POST['field_type'] != 'check'))
|
Chris@76
|
1745 {
|
Chris@76
|
1746 $smcFunc['db_query']('', '
|
Chris@76
|
1747 DELETE FROM {db_prefix}themes
|
Chris@76
|
1748 WHERE variable = {string:current_column}
|
Chris@76
|
1749 AND id_member > {int:no_member}',
|
Chris@76
|
1750 array(
|
Chris@76
|
1751 'no_member' => 0,
|
Chris@76
|
1752 'current_column' => $context['field']['colname'],
|
Chris@76
|
1753 )
|
Chris@76
|
1754 );
|
Chris@76
|
1755 }
|
Chris@76
|
1756 // Otherwise - if the select is edited may need to adjust!
|
Chris@76
|
1757 elseif ($_POST['field_type'] == 'select' || $_POST['field_type'] == 'radio')
|
Chris@76
|
1758 {
|
Chris@76
|
1759 $optionChanges = array();
|
Chris@76
|
1760 $takenKeys = array();
|
Chris@76
|
1761 // Work out what's changed!
|
Chris@76
|
1762 foreach ($context['field']['options'] as $k => $option)
|
Chris@76
|
1763 {
|
Chris@76
|
1764 if (trim($option) == '')
|
Chris@76
|
1765 continue;
|
Chris@76
|
1766
|
Chris@76
|
1767 // Still exists?
|
Chris@76
|
1768 if (in_array($option, $newOptions))
|
Chris@76
|
1769 {
|
Chris@76
|
1770 $takenKeys[] = $k;
|
Chris@76
|
1771 continue;
|
Chris@76
|
1772 }
|
Chris@76
|
1773 }
|
Chris@76
|
1774
|
Chris@76
|
1775 // Finally - have we renamed it - or is it really gone?
|
Chris@76
|
1776 foreach ($optionChanges as $k => $option)
|
Chris@76
|
1777 {
|
Chris@76
|
1778 // Just been renamed?
|
Chris@76
|
1779 if (!in_array($k, $takenKeys) && !empty($newOptions[$k]))
|
Chris@76
|
1780 $smcFunc['db_query']('', '
|
Chris@76
|
1781 UPDATE {db_prefix}themes
|
Chris@76
|
1782 SET value = {string:new_value}
|
Chris@76
|
1783 WHERE variable = {string:current_column}
|
Chris@76
|
1784 AND value = {string:old_value}
|
Chris@76
|
1785 AND id_member > {int:no_member}',
|
Chris@76
|
1786 array(
|
Chris@76
|
1787 'no_member' => 0,
|
Chris@76
|
1788 'new_value' => $newOptions[$k],
|
Chris@76
|
1789 'current_column' => $context['field']['colname'],
|
Chris@76
|
1790 'old_value' => $option,
|
Chris@76
|
1791 )
|
Chris@76
|
1792 );
|
Chris@76
|
1793 }
|
Chris@76
|
1794 }
|
Chris@76
|
1795 //!!! Maybe we should adjust based on new text length limits?
|
Chris@76
|
1796 }
|
Chris@76
|
1797
|
Chris@76
|
1798 // Do the insertion/updates.
|
Chris@76
|
1799 if ($context['fid'])
|
Chris@76
|
1800 {
|
Chris@76
|
1801 $smcFunc['db_query']('', '
|
Chris@76
|
1802 UPDATE {db_prefix}custom_fields
|
Chris@76
|
1803 SET
|
Chris@76
|
1804 field_name = {string:field_name}, field_desc = {string:field_desc},
|
Chris@76
|
1805 field_type = {string:field_type}, field_length = {int:field_length},
|
Chris@76
|
1806 field_options = {string:field_options}, show_reg = {int:show_reg},
|
Chris@76
|
1807 show_display = {int:show_display}, show_profile = {string:show_profile},
|
Chris@76
|
1808 private = {int:private}, active = {int:active}, default_value = {string:default_value},
|
Chris@76
|
1809 can_search = {int:can_search}, bbc = {int:bbc}, mask = {string:mask},
|
Chris@76
|
1810 enclose = {string:enclose}, placement = {int:placement}
|
Chris@76
|
1811 WHERE id_field = {int:current_field}',
|
Chris@76
|
1812 array(
|
Chris@76
|
1813 'field_length' => $field_length,
|
Chris@76
|
1814 'show_reg' => $show_reg,
|
Chris@76
|
1815 'show_display' => $show_display,
|
Chris@76
|
1816 'private' => $private,
|
Chris@76
|
1817 'active' => $active,
|
Chris@76
|
1818 'can_search' => $can_search,
|
Chris@76
|
1819 'bbc' => $bbc,
|
Chris@76
|
1820 'current_field' => $context['fid'],
|
Chris@76
|
1821 'field_name' => $_POST['field_name'],
|
Chris@76
|
1822 'field_desc' => $_POST['field_desc'],
|
Chris@76
|
1823 'field_type' => $_POST['field_type'],
|
Chris@76
|
1824 'field_options' => $field_options,
|
Chris@76
|
1825 'show_profile' => $show_profile,
|
Chris@76
|
1826 'default_value' => $default,
|
Chris@76
|
1827 'mask' => $mask,
|
Chris@76
|
1828 'enclose' => $enclose,
|
Chris@76
|
1829 'placement' => $placement,
|
Chris@76
|
1830 )
|
Chris@76
|
1831 );
|
Chris@76
|
1832
|
Chris@76
|
1833 // Just clean up any old selects - these are a pain!
|
Chris@76
|
1834 if (($_POST['field_type'] == 'select' || $_POST['field_type'] == 'radio') && !empty($newOptions))
|
Chris@76
|
1835 $smcFunc['db_query']('', '
|
Chris@76
|
1836 DELETE FROM {db_prefix}themes
|
Chris@76
|
1837 WHERE variable = {string:current_column}
|
Chris@76
|
1838 AND value NOT IN ({array_string:new_option_values})
|
Chris@76
|
1839 AND id_member > {int:no_member}',
|
Chris@76
|
1840 array(
|
Chris@76
|
1841 'no_member' => 0,
|
Chris@76
|
1842 'new_option_values' => $newOptions,
|
Chris@76
|
1843 'current_column' => $context['field']['colname'],
|
Chris@76
|
1844 )
|
Chris@76
|
1845 );
|
Chris@76
|
1846 }
|
Chris@76
|
1847 else
|
Chris@76
|
1848 {
|
Chris@76
|
1849 $smcFunc['db_insert']('',
|
Chris@76
|
1850 '{db_prefix}custom_fields',
|
Chris@76
|
1851 array(
|
Chris@76
|
1852 'col_name' => 'string', 'field_name' => 'string', 'field_desc' => 'string',
|
Chris@76
|
1853 'field_type' => 'string', 'field_length' => 'string', 'field_options' => 'string',
|
Chris@76
|
1854 'show_reg' => 'int', 'show_display' => 'int', 'show_profile' => 'string',
|
Chris@76
|
1855 'private' => 'int', 'active' => 'int', 'default_value' => 'string', 'can_search' => 'int',
|
Chris@76
|
1856 'bbc' => 'int', 'mask' => 'string', 'enclose' => 'string', 'placement' => 'int',
|
Chris@76
|
1857 ),
|
Chris@76
|
1858 array(
|
Chris@76
|
1859 $colname, $_POST['field_name'], $_POST['field_desc'],
|
Chris@76
|
1860 $_POST['field_type'], $field_length, $field_options,
|
Chris@76
|
1861 $show_reg, $show_display, $show_profile,
|
Chris@76
|
1862 $private, $active, $default, $can_search,
|
Chris@76
|
1863 $bbc, $mask, $enclose, $placement,
|
Chris@76
|
1864 ),
|
Chris@76
|
1865 array('id_field')
|
Chris@76
|
1866 );
|
Chris@76
|
1867 }
|
Chris@76
|
1868
|
Chris@76
|
1869 // As there's currently no option to priorize certain fields over others, let's order them alphabetically.
|
Chris@76
|
1870 $smcFunc['db_query']('alter_table_boards', '
|
Chris@76
|
1871 ALTER TABLE {db_prefix}custom_fields
|
Chris@76
|
1872 ORDER BY field_name',
|
Chris@76
|
1873 array(
|
Chris@76
|
1874 'db_error_skip' => true,
|
Chris@76
|
1875 )
|
Chris@76
|
1876 );
|
Chris@76
|
1877 }
|
Chris@76
|
1878 // Deleting?
|
Chris@76
|
1879 elseif (isset($_POST['delete']) && $context['field']['colname'])
|
Chris@76
|
1880 {
|
Chris@76
|
1881 checkSession();
|
Chris@76
|
1882
|
Chris@76
|
1883 // Delete the user data first.
|
Chris@76
|
1884 $smcFunc['db_query']('', '
|
Chris@76
|
1885 DELETE FROM {db_prefix}themes
|
Chris@76
|
1886 WHERE variable = {string:current_column}
|
Chris@76
|
1887 AND id_member > {int:no_member}',
|
Chris@76
|
1888 array(
|
Chris@76
|
1889 'no_member' => 0,
|
Chris@76
|
1890 'current_column' => $context['field']['colname'],
|
Chris@76
|
1891 )
|
Chris@76
|
1892 );
|
Chris@76
|
1893 // Finally - the field itself is gone!
|
Chris@76
|
1894 $smcFunc['db_query']('', '
|
Chris@76
|
1895 DELETE FROM {db_prefix}custom_fields
|
Chris@76
|
1896 WHERE id_field = {int:current_field}',
|
Chris@76
|
1897 array(
|
Chris@76
|
1898 'current_field' => $context['fid'],
|
Chris@76
|
1899 )
|
Chris@76
|
1900 );
|
Chris@76
|
1901 }
|
Chris@76
|
1902
|
Chris@76
|
1903 // Rebuild display cache etc.
|
Chris@76
|
1904 if (isset($_POST['delete']) || isset($_POST['save']))
|
Chris@76
|
1905 {
|
Chris@76
|
1906 checkSession();
|
Chris@76
|
1907
|
Chris@76
|
1908 $request = $smcFunc['db_query']('', '
|
Chris@76
|
1909 SELECT col_name, field_name, field_type, bbc, enclose, placement
|
Chris@76
|
1910 FROM {db_prefix}custom_fields
|
Chris@76
|
1911 WHERE show_display = {int:is_displayed}
|
Chris@76
|
1912 AND active = {int:active}
|
Chris@76
|
1913 AND private != {int:not_owner_only}
|
Chris@76
|
1914 AND private != {int:not_admin_only}',
|
Chris@76
|
1915 array(
|
Chris@76
|
1916 'is_displayed' => 1,
|
Chris@76
|
1917 'active' => 1,
|
Chris@76
|
1918 'not_owner_only' => 2,
|
Chris@76
|
1919 'not_admin_only' => 3,
|
Chris@76
|
1920 )
|
Chris@76
|
1921 );
|
Chris@76
|
1922
|
Chris@76
|
1923 $fields = array();
|
Chris@76
|
1924 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
1925 {
|
Chris@76
|
1926 $fields[] = array(
|
Chris@76
|
1927 'colname' => strtr($row['col_name'], array('|' => '', ';' => '')),
|
Chris@76
|
1928 'title' => strtr($row['field_name'], array('|' => '', ';' => '')),
|
Chris@76
|
1929 'type' => $row['field_type'],
|
Chris@76
|
1930 'bbc' => $row['bbc'] ? '1' : '0',
|
Chris@76
|
1931 'placement' => !empty($row['placement']) ? $row['placement'] : '0',
|
Chris@76
|
1932 'enclose' => !empty($row['enclose']) ? $row['enclose'] : '',
|
Chris@76
|
1933 );
|
Chris@76
|
1934 }
|
Chris@76
|
1935 $smcFunc['db_free_result']($request);
|
Chris@76
|
1936
|
Chris@76
|
1937 updateSettings(array('displayFields' => serialize($fields)));
|
Chris@76
|
1938 redirectexit('action=admin;area=featuresettings;sa=profile');
|
Chris@76
|
1939 }
|
Chris@76
|
1940 }
|
Chris@76
|
1941
|
Chris@76
|
1942 function ModifyPruningSettings($return_config = false)
|
Chris@76
|
1943 {
|
Chris@76
|
1944 global $txt, $scripturl, $sourcedir, $context, $settings, $sc, $modSettings;
|
Chris@76
|
1945
|
Chris@76
|
1946 // Make sure we understand what's going on.
|
Chris@76
|
1947 loadLanguage('ManageSettings');
|
Chris@76
|
1948
|
Chris@76
|
1949 $context['page_title'] = $txt['pruning_title'];
|
Chris@76
|
1950
|
Chris@76
|
1951 $config_vars = array(
|
Chris@76
|
1952 // Even do the pruning?
|
Chris@76
|
1953 // The array indexes are there so we can remove/change them before saving.
|
Chris@76
|
1954 'pruningOptions' => array('check', 'pruningOptions'),
|
Chris@76
|
1955 '',
|
Chris@76
|
1956 // Various logs that could be pruned.
|
Chris@76
|
1957 array('int', 'pruneErrorLog', 'postinput' => $txt['days_word']), // Error log.
|
Chris@76
|
1958 array('int', 'pruneModLog', 'postinput' => $txt['days_word']), // Moderation log.
|
Chris@76
|
1959 array('int', 'pruneBanLog', 'postinput' => $txt['days_word']), // Ban hit log.
|
Chris@76
|
1960 array('int', 'pruneReportLog', 'postinput' => $txt['days_word']), // Report to moderator log.
|
Chris@76
|
1961 array('int', 'pruneScheduledTaskLog', 'postinput' => $txt['days_word']), // Log of the scheduled tasks and how long they ran.
|
Chris@76
|
1962 array('int', 'pruneSpiderHitLog', 'postinput' => $txt['days_word']), // Log of the scheduled tasks and how long they ran.
|
Chris@76
|
1963 // If you add any additional logs make sure to add them after this point. Additionally, make sure you add them to the weekly scheduled task.
|
Chris@76
|
1964 // Mod Developers: Do NOT use the pruningOptions master variable for this as SMF Core may overwrite your setting in the future!
|
Chris@76
|
1965 );
|
Chris@76
|
1966
|
Chris@76
|
1967 if ($return_config)
|
Chris@76
|
1968 return $config_vars;
|
Chris@76
|
1969
|
Chris@76
|
1970 // We'll need this in a bit.
|
Chris@76
|
1971 require_once($sourcedir . '/ManageServer.php');
|
Chris@76
|
1972
|
Chris@76
|
1973 // Saving?
|
Chris@76
|
1974 if (isset($_GET['save']))
|
Chris@76
|
1975 {
|
Chris@76
|
1976 checkSession();
|
Chris@76
|
1977
|
Chris@76
|
1978 $savevar = array(
|
Chris@76
|
1979 array('text', 'pruningOptions')
|
Chris@76
|
1980 );
|
Chris@76
|
1981
|
Chris@76
|
1982 if (!empty($_POST['pruningOptions']))
|
Chris@76
|
1983 {
|
Chris@76
|
1984 $vals = array();
|
Chris@76
|
1985 foreach ($config_vars as $index => $dummy)
|
Chris@76
|
1986 {
|
Chris@76
|
1987 if (!is_array($dummy) || $index == 'pruningOptions')
|
Chris@76
|
1988 continue;
|
Chris@76
|
1989
|
Chris@76
|
1990 $vals[] = empty($_POST[$dummy[1]]) || $_POST[$dummy[1]] < 0 ? 0 : (int) $_POST[$dummy[1]];
|
Chris@76
|
1991 }
|
Chris@76
|
1992 $_POST['pruningOptions'] = implode(',', $vals);
|
Chris@76
|
1993 }
|
Chris@76
|
1994 else
|
Chris@76
|
1995 $_POST['pruningOptions'] = '';
|
Chris@76
|
1996
|
Chris@76
|
1997 saveDBSettings($savevar);
|
Chris@76
|
1998 redirectexit('action=admin;area=logs;sa=pruning');
|
Chris@76
|
1999 }
|
Chris@76
|
2000
|
Chris@76
|
2001 $context['post_url'] = $scripturl . '?action=admin;area=logs;save;sa=pruning';
|
Chris@76
|
2002 $context['settings_title'] = $txt['pruning_title'];
|
Chris@76
|
2003 $context['sub_template'] = 'show_settings';
|
Chris@76
|
2004
|
Chris@76
|
2005 // Get the actual values
|
Chris@76
|
2006 if (!empty($modSettings['pruningOptions']))
|
Chris@76
|
2007 @list ($modSettings['pruneErrorLog'], $modSettings['pruneModLog'], $modSettings['pruneBanLog'], $modSettings['pruneReportLog'], $modSettings['pruneScheduledTaskLog'], $modSettings['pruneSpiderHitLog']) = explode(',', $modSettings['pruningOptions']);
|
Chris@76
|
2008 else
|
Chris@76
|
2009 $modSettings['pruneErrorLog'] = $modSettings['pruneModLog'] = $modSettings['pruneBanLog'] = $modSettings['pruneReportLog'] = $modSettings['pruneScheduledTaskLog'] = $modSettings['pruneSpiderHitLog'] = 0;
|
Chris@76
|
2010
|
Chris@76
|
2011 prepareDBSettingContext($config_vars);
|
Chris@76
|
2012 }
|
Chris@76
|
2013
|
Chris@76
|
2014 // If you have a general mod setting to add stick it here.
|
Chris@76
|
2015 function ModifyGeneralModSettings($return_config = false)
|
Chris@76
|
2016 {
|
Chris@76
|
2017 global $txt, $scripturl, $context, $settings, $sc, $modSettings;
|
Chris@76
|
2018
|
Chris@76
|
2019 $config_vars = array(
|
Chris@76
|
2020 // Mod authors, add any settings UNDER this line. Include a comma at the end of the line and don't remove this statement!!
|
Chris@76
|
2021 );
|
Chris@76
|
2022
|
Chris@76
|
2023 // Make it even easier to add new settings.
|
Chris@76
|
2024 call_integration_hook('integrate_general_mod_settings', array(&$config_vars));
|
Chris@76
|
2025
|
Chris@76
|
2026 if ($return_config)
|
Chris@76
|
2027 return $config_vars;
|
Chris@76
|
2028
|
Chris@76
|
2029 $context['post_url'] = $scripturl . '?action=admin;area=modsettings;save;sa=general';
|
Chris@76
|
2030 $context['settings_title'] = $txt['mods_cat_modifications_misc'];
|
Chris@76
|
2031
|
Chris@76
|
2032 // No removing this line you, dirty unwashed mod authors. :p
|
Chris@76
|
2033 if (empty($config_vars))
|
Chris@76
|
2034 {
|
Chris@76
|
2035 $context['settings_save_dont_show'] = true;
|
Chris@76
|
2036 $context['settings_message'] = '<div class="centertext">' . $txt['modification_no_misc_settings'] . '</div>';
|
Chris@76
|
2037
|
Chris@76
|
2038 return prepareDBSettingContext($config_vars);
|
Chris@76
|
2039 }
|
Chris@76
|
2040
|
Chris@76
|
2041 // Saving?
|
Chris@76
|
2042 if (isset($_GET['save']))
|
Chris@76
|
2043 {
|
Chris@76
|
2044 checkSession();
|
Chris@76
|
2045
|
Chris@76
|
2046 $save_vars = $config_vars;
|
Chris@76
|
2047
|
Chris@76
|
2048 // This line is to help mod authors do a search/add after if you want to add something here. Keyword: FOOT TAPPING SUCKS!
|
Chris@76
|
2049 saveDBSettings($save_vars);
|
Chris@76
|
2050
|
Chris@76
|
2051 // This line is to help mod authors do a search/add after if you want to add something here. Keyword: I LOVE TEA!
|
Chris@76
|
2052 redirectexit('action=admin;area=modsettings;sa=general');
|
Chris@76
|
2053 }
|
Chris@76
|
2054
|
Chris@76
|
2055 // This line is to help mod authors do a search/add after if you want to add something here. Keyword: RED INK IS FOR TEACHERS AND THOSE WHO LIKE PAIN!
|
Chris@76
|
2056 prepareDBSettingContext($config_vars);
|
Chris@76
|
2057 }
|
Chris@76
|
2058
|
Chris@76
|
2059 ?> |