###############################################################################
# Settings_Main.pm #
# $Date: 01 Sep 2026 $ #
###############################################################################
# YaBBForum: Yet another Bulletin Board #
# Open-Source Community Software for Webmasters #
# Version: YaBBForum 3.2 #
# Packaged: December 2, 2014 #
# Distributed by: https://yabbforum.nz #
# =========================================================================== #
# Copyright (c) 2000-2026 YaBBForum (yabbforum.nz) - All Rights Reserved. #
# Software by: The YaBBForum Development Team #
# with assistance from the YaBBForum community. #
###############################################################################
# use strict;
use CGI::Carp qw(fatalsToBrowser);
use English qw(-no_match_vars);
our $VERSION = '3.2';
our $settings_mainpmver = 'YaBBForum 3.2';
if ($action eq 'detailedversion') { return 1; }
# Language requirements
LoadLanguage('Register');
$admin_images = "$yyhtml_root/Templates/Admin/default";
# Date/Time selector
# 1. Clean backslashes from $forumstart so regex can match (e.g. "30\/07\/26" -> "30/07/26")
my $clean_forumstart = $forumstart;
$clean_forumstart =~ s/\\//g;
# 2. Extract components (SWAPPED: Day is now first, Month is second)
my (
$forumstart_day, $forumstart_month, $forumstart_year,
$forumstart_hour, $forumstart_minute, $forumstart_secund
)
= $clean_forumstart =~
m/(\d{1,2})\/(\d{1,2})\/(\d{2,4}).*?(\d{1,2})\:(\d{1,2})\:(\d{1,2})/xsm;
# Fallbacks if regex doesn't capture (e.g. empty string)
$forumstart_day ||= 1;
$forumstart_month ||= 1;
$forumstart_year ||= 26; # 2-digit fallback
$forumstart_hour ||= 0;
$forumstart_minute ||= 0;
$forumstart_secund ||= 0;
# Bounds validation
if ($forumstart_day > 31) { $forumstart_day = 31; }
if ($forumstart_day < 1) { $forumstart_day = 1; }
if ($forumstart_month > 12) { $forumstart_month = 12; }
if ($forumstart_month < 1) { $forumstart_month = 1; }
# ... (Keep regex extraction at top the same) ...
# Fallback to 4 digits if empty
$forumstart_year ||= 2026;
# Expand 2-digit years to 4 digits if reading old data (e.g. "26" -> "2026")
if ( length($forumstart_year) == 2 ) {
$forumstart_year = "20" . $forumstart_year;
}
# Ensure correct zero-padding formatting
$forumstart_day = sprintf('%02d', $forumstart_day);
$forumstart_month = sprintf('%02d', $forumstart_month);
$forumstart_year = sprintf('%04d', $forumstart_year); # Enforce 4 digits
$forumstart_hour = sprintf('%02d', $forumstart_hour);
$forumstart_minute = sprintf('%02d', $forumstart_minute);
$forumstart_secund = sprintf('%02d', $forumstart_secund);
my $sel_day = q~
\n~;
my $sel_month = q~
\n~;
############
my $current_year_offset = ( gmtime(time) )[5]; # 126 for 2026
my $sel_year = qq~\n~;
##############
if ( $timeselected == 1 || $timeselected == 4 || $timeselected == 5 ) {
$all_date = qq~$sel_day $sel_month $sel_year~;
}
else { $all_date = qq~$sel_day $sel_month $sel_year~; }
my $sel_hour = qq~
\n~;
my $sel_minute = qq~
\n~;
my $sel_secund = qq~~;
my $all_time = qq~$sel_hour $sel_minute $sel_secund~;
# End time
my $mytz = $default_tz;
my $tz_select = q~';
# Language selector
opendir LNGDIR, $langdir;
my @lfilesanddirs = readdir LNGDIR;
closedir LNGDIR;
foreach my $fld (sort {lc($a) cmp lc $b} @lfilesanddirs) {
if (-e "$langdir/$fld/Main.lng") {
my $displang = $fld;
$displang =~ s/(.+?)\_(.+?)$/$1 ($2)/gism;
$drawnldirs .= qq~~;
}
}
# For improved email check
eval {
require Net::DNS;
};
my $no_imp_email = $EVAL_ERROR;
if( $no_imp_email ) {
$no_imp_email_check = qq~$admin_txt{'no_imp_email_check'}~;
$imp_email_check_dis = ' disabled="disabled"';
}
# Template selector
foreach my $curtemplate (sort{ $templateset{$a} cmp $templateset{$b} } keys %templateset) {
$drawndirs .= qq~\n~;
}
# imspam conversion
if ($imspam eq 'off') { $imspam = 0;}
$guest_view_limit ||= 15;
$imtext =~ s~
~\n~gsm;
# max / min for PM search
$enable_PMsearch =~ s/\D//igsm;
if (!$enable_PMsearch) { $enable_PMsearch = 0;}
if ($enable_PMsearch > 50) {$enable_PMsearch = 50 ;}
if ($enable_PMsearch < 5) {$enable_PMsearch = 5;}
if ($set_subjectMaxLength eq q{}) {$set_subjectMaxLength = 50;}
if ($RegReasonSymbols eq q{}) { $RegReasonSymbols = 200 ;}
if ($ML_Allowed eq q{}) { $ML_Allowed = 1;}
if ($default_userpic eq q{}) { $default_userpic = 'nn.gif';}
require Admin::ManageBoards; # needed for avatar upload settings
# Insert default if forum is being upgraded to YaBBForum 2.4
if (!$pwstrengthmeter_scores && !$pwstrengthmeter_common && !$pwstrengthmeter_minchar) {
$FORM{'pwstrengthmeter_scores'} = '10,15,30,40';
$FORM{'pwstrengthmeter_common'} = q~"123456","abcdef","password"~;
$FORM{'pwstrengthmeter_minchar'} = 3;
}
$qcksearchtype ||= 'allwords';
$qckage ||= 31;
# List of settings
@settings = (
{
name => $settings_txt{'generalforum'},
id => 'general',
items => [
{
header => $settings_txt{'generalforum'},
},
{
description => qq~~,
input_html => qq~~,
name => 'mbname',
validate => 'text',
},
{
description => qq~~,
input_html => qq~$all_date $maintxt{'107'} $all_time~,
### Custom validated.
},
{
description => qq~~,
input_html => qq~
~,
name => 'MenuType',
validate => 'number',
},
{
description => qq~~,
input_html => qq~$drawndirs~,
name => 'default_template',
validate => 'text',
},
### Style Switcher MOD START
{
description =>qq~~,,
input_html => qq~~,
name => 'templ_switcher',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~
~,
name => 'temp_switcher_allowed',
validate => 'number',
},
### Style Switcher MOD END
{
description => qq~~,
input_html => qq~$drawnldirs~,
name => 'lang',
validate => 'text',
},
{
description => qq~~,
input_html => qq~
~,
name => 'yymycharset',
validate => 'text',
},
{
description => qq~~,
input_html => qq~
~,
name => 'forumnumberformat',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'timeselected',
validate => 'number',
},
{
header => $settings_txt{'forumtime'},
},
{
description => qq~$admin_txt{'371'}~,
input_html => timeformat($date,1,0,1),
},
{
description => qq~~,
input_html => qq~~,
name => 'enabletz',
validate => 'boolean',
},
{
description => qq~~,
input_html => $tz_select,
},
### Custom validated.
{
description => qq~~,
input_html => $timeoffsetselect,
### Custom validated.
},
{
description => $dstoffsetlabel,
input_html => $dstoffsetinput,
name => 'dstoffset',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'dynamic_clock',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'timecorrection',
validate => 'fullnumber',
},
{
header => $settings_txt{'showhide'},
},
{
description => qq~~,
input_html => qq~~,
name => 'profilebutton',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'usertools',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showlatestmember',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~
~,
name => 'Show_RecentBar',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'showpageall',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'ShowBDescrip',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showmodify',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showuserpic',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showusertext',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showgenderimage',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showuserage',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showregdate',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'hide_signat_for_guests',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showallgroups',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showtopicviewers',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showtopicrepliers',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showimageinquote',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'enabletopichover',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'addtab_on',
validate => 'boolean',
},
],
},
{
name => $settings_txt{'posting'},
id => 'posting',
items => [
{
header => $settings_txt{'posting'},
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_ubbc',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showyabbcbutt',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'parseflash',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'nestedquotes',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'autolinkurls',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'checkallcaps',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'set_subjectMaxLength',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'MaxMessLen',
validate => 'number',
},
{
description =>
qq~~,
input_html =>qq~~,
name => 'AdMaxMessLen',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'fontsizemin',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'fontsizemax',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'HotTopic',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'VeryHotTopic',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxdisplay',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxmessagedisplay',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'posttools',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'threadtools',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'user_reason',
validate => 'boolean',
},
{
header => $timelocktxt{'01'},
},
{
description => qq~~,
input_html => qq~~,
name => 'tlnomodflag',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'tlnomodtime',
validate => 'number',
depends_on => ['tlnomodflag'],
},
{
description => qq~~,
input_html => qq~~,
name => 'tlnodelflag',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'tlnodeltime',
validate => 'number',
depends_on => ['tlnodelflag'],
},
{
description => qq~~,
input_html => qq~~,
name => 'tllastmodflag',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'tllastmodtime',
validate => 'number',
depends_on => ['tllastmodflag'],
},
{
header => $cutts{'8'},
},
{
description => qq~~,
input_html => qq~~,
name => 'ttsreverse',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'ttsureverse',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'tsreverse',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'cutamount',
validate => 'number',
},
{
header => $settings_txt{'poll'},
},
{
description => qq~~,
input_html => qq~~,
name => 'numpolloptions',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxpq',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxpo',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxpc',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'useraddpoll',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'ubbcpolls',
validate => 'boolean',
},
{
header => $qrb_txt{'1'},
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_quickpost',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_quickreply',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_markquote',
validate => 'boolean',
depends_on => ['enable_quickreply'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_quoteuser',
validate => 'boolean',
depends_on => ['enable_quickreply'],
},
{
description => qq~~,
input_html => qq~
~,
name => 'quoteuser_color',
validate => 'text',
depends_on => ['enable_quoteuser', 'enable_quickreply'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_quickjump',
validate => 'boolean',
depends_on => ['enable_quickpost||', 'enable_quickreply||'],
},
{
description => qq~~,
input_html => qq~~,
name => 'quick_quotelength',
validate => 'number',
depends_on => ['enable_quickjump', 'enable_quickreply'],
},
],
},
{
name => $settings_txt{'search'},
id => 'search',
items => [
{
header => $settings_txt{'search'},
},
{
description => qq~~,
input_html => qq~~,
name => 'maxsearchdisplay',
validate => 'fullnumber',
},
{
header => $settings_txt{'advsearch'},
},
{
description => qq~~,
input_html => q~~ . DrawPerms($mgadvsearch, 0) . q~~,
name => 'mgadvsearch',
validate => 'text,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'enableguestsearch',
validate => 'boolean',
},
{
header => $settings_txt{'qcksearch'},
},
{
description => qq~~,
input_html => q~~ . DrawPerms($mgqcksearch, 0) . q~~,
name => 'mgqcksearch',
validate => 'text,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'enableguestquicksearch',
validate => 'boolean',
},
{
header => $settings_txt{'qcksearchparam'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'qcksearchtype',
validate => 'text',
},
{
description => qq~~,
input_html => qq~
~,
name => 'qckage',
validate => 'number',
},
],
},
{
name => $settings_txt{'user'},
id => 'user',
items => [
{
header => $settings_txt{'guest'},
},
{
description => qq~~,
input_html => qq~~,
name => 'guestaccess',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_guestposting',
validate => 'boolean',
depends_on => ['!guestaccess'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_guestlanguage',
validate => 'boolean',
depends_on => ['!guestaccess'],
},
{
description => qq~~,
input_html => qq~~,
name => 'guest_media_disallowed',
validate => 'boolean',
depends_on => ['!guestaccess'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_guest_view_limit',
validate => 'boolean',
depends_on => ['!guestaccess'],
},
{
description => qq~~,
input_html => qq~~,
name => 'guest_view_limit',
validate => 'number',
depends_on => ['enable_guest_view_limit', '!guestaccess'],
},
{
description => qq~~,
input_html => qq~~,
name => 'guest_view_limit_block',
validate => 'boolean',
depends_on => ['enable_guest_view_limit', '!guestaccess'],
},
{
header => $settings_txt{'profile'},
},
{
description => qq~~,
input_html => qq~~,
name => 'allowpics',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'upload_useravatar',
validate => 'boolean',
depends_on => ['allowpics'],
},
{
description => $admin_txt{'747a'},
input_html => qq~$facesdir/UserAvatars
~ . ((-w "$facesdir/UserAvatars" && -d "$facesdir/UserAvatars") ? qq~$admin_txt{'163'}~ : qq~$admin_txt{'164'}~), # Non-changeable setting
},
{
description => qq~~,
input_html => q~~ . DrawPerms($upload_avatargroup, 0) . q~~,
name => 'upload_avatargroup',
validate => 'text,null',
depends_on => ['allowpics','upload_useravatar'],
},
{
description => qq~~,
input_html => qq~ KB~,
name => 'avatar_limit',
validate => 'number',
depends_on => ['allowpics','upload_useravatar'],
},
{
description => qq~~,
input_html => qq~ KB~,
name => 'avatar_dirlimit',
validate => 'number',
depends_on => ['allowpics','upload_useravatar'],
},
{
description => qq~~,
input_html => qq~~,
name => 'default_avatar',
validate => 'boolean',
depends_on => ['allowpics'],
},
{
description => qq~~,
input_html => qq~ X
~,
name => 'default_userpic',
validate => 'text,null',
depends_on => ['allowpics','default_avatar'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_notifications_N',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'NewNotificationAlert',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'allow_hide_email',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_avatars',
validate => 'boolean',
depends_on => ['showuserpic','allowpics'],
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_user_text',
validate => 'boolean',
depends_on => ['showusertext'],
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_img',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_attach_img',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_signat',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'user_hide_smilies_row',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'editGenderLimit',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'editAgeLimit',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'showage',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'emailnewpass',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'buddyListEnabled',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'defaultusertxt',
validate => 'text,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'MaxSigLen',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxfavs',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'addmemgroup_enabled',
validate => 'number',
},
{
description =>qq~~,
input_html =>qq~~,
name => 'self_del_user',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'extendedprofiles',
validate => 'boolean',
},
{
header => $settings_txt{'login'},
},
{
description => qq~~,
input_html => qq~~,
name => 'Cookie_Length',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookieusername',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookiepassword',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookiesession_name',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookietsort',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookieview',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'cookieviewtime',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'screenlogin',
validate => 'boolean',
},
{
header => $settings_txt{'registration'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'regtype',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'preregspan',
validate => 'number',
depends_on => ['regtype!=0', 'regtype!=3'],
},
{
description => qq~~,
input_html => qq~~,
name => 'emailpassword',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'emailwelcome',
validate => 'boolean',
depends_on => ['!emailpassword'],
},
{
description => qq~~,
input_html => qq~~,
name => 'name_cannot_be_userid',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~
~,
name => 'birthday_on_reg',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~
~,
name => 'gender_on_reg',
validate => 'number,null',
},
{
description => qq~~,
input_html => qq~~,
name => 'pwstrengthmeter_scores',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'pwstrengthmeter_common',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'pwstrengthmeter_minchar',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'RegReasonSymbols',
validate => 'number',
depends_on => ['regtype==1'],
},
{
description => qq~~,
input_html => qq~
~,
name => 'RegAgree',
validate => 'number',
depends_on => ['regtype!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'imp_email_check',
validate => 'boolean',
},
{
description =>
qq~~,
input_html =>
qq~~,
name => 'nomailspammer',
validate => 'boolean',
depends_on => ['regtype==1'],
},
{
header => $settings_txt{'memberlist'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'ML_Allowed',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'defaultml',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'TopAmmount',
validate => 'number',
},
{
description => qq~~,
input_html => qq~ $admin_txt{'904'} $admin_txt{'905'} $admin_txt{'903'}~,
name => 'barmaxdepend',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'showuserpicml',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'group_stars_ml',
validate => 'boolean',
},
]
},
{
name => $settings_txt{'staff'},
id => 'staff',
items => [
{
header => $settings_txt{'staff'},
},
# Multi-delete/multi-admin
{
description => qq~~,
input_html => qq~~,
name => 'mdadmin',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'mdglobal',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'mdfmod',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'mdmod',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'adminbin',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~
~,
name => 'adminview',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'gmodview',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'fmodview',
validate => 'number',
},
{
description => qq~~,
input_html => qq~
~,
name => 'modview',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_MCstatusStealth',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~
~,
name => 'bypass_lock_perm',
validate => 'text',
},
{
description => qq~~,
input_html => qq~~,
name => 'staff_reason',
validate => 'boolean',
},
{
description => qq~~,
input_html => qq~~,
name => 'maxadminlog',
validate => 'number',
},
],
},
{
name => $settings_txt{'privatemessage'},
id => 'privatemessage',
items => [
{
header => $settings_txt{'pmgeneral'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'PM_level',
validate => 'number',
},
{
description => qq~~,
input_html => qq~~,
name => 'numposts',
validate => 'number',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'imspam',
validate => 'number,null',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_PMsearch',
validate => 'number,null',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'send_welcomeim',
validate => 'boolean',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'sendname',
validate => 'text,null',
depends_on => ['PM_level!=0', 'send_welcomeim'],
},
{
description => qq~~,
input_html => qq~~,
name => 'imsubject',
validate => 'text,null',
depends_on => ['PM_level!=0', 'send_welcomeim'],
},
{
description => qq~~,
input_html => qq~~,
name => 'imtext',
validate => 'fulltext,null',
depends_on => ['PM_level!=0', 'send_welcomeim'],
},
{
header => $settings_txt{'bmessages'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'PMenableBm_level',
validate => 'number',
depends_on => ['PM_level!=0'],
},
{
header => $settings_txt{'alertmessages'},
},
{
description => qq~~,
input_html => qq~~,
name => 'PMenableGuestButton',
validate => 'boolean',
depends_on => ['PM_level!=0','$PMenableBm_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'PMenableAlertButton',
validate => 'boolean',
depends_on => ['PM_level!=0','$PMenableBm_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'PMAlertButtonGuests',
validate => 'boolean',
depends_on => ['PMenableAlertButton', 'PM_level!=0','$PMenableBm_level!=0'],
},
{
header => $settings_txt{'members'},
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_imlimit',
validate => 'boolean',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'numobox',
validate => 'number,null',
depends_on => ['enable_imlimit', 'PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'numibox',
validate => 'number,null',
depends_on => ['enable_imlimit', 'PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'numstore',
validate => 'number,null',
depends_on => ['enable_imlimit', 'PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'numdraft',
validate => 'number,null',
depends_on => ['enable_imlimit', 'PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'PMenable_cc',
validate => 'boolean',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'PMenable_bcc',
validate => 'boolean',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_notifications_PM',
validate => 'boolean',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'enable_storefolders',
validate => 'number,null',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'MaxIMMessLen',
validate => 'number',
},
{
description =>
qq~~,
input_html =>
qq~~,
name => 'AdMaxIMMessLen',
validate => 'number',
},
{
header => $settings_txt{'mycenter'},
},
{
description => qq~~,
input_html => qq~
~,
name => 'enable_MCaway',
validate => 'number',
depends_on => ['PM_level!=0'],
},
{
description => qq~~,
input_html => qq~~,
name => 'MaxAwayLen',
validate => 'number,null',
depends_on => ['enable_MCaway!=0', 'PM_level!=0'],
},
],
},
);
# Routine to save them
sub SaveSettings {
my %settings = @_;
# Validate forum_start stuff
foreach (qw(forumstart_month forumstart_day forumstart_year forumstart_hour forumstart_minute forumstart_secund)) {
$FORM{$_} =~ s/\D//gsm;
}
my $forumstart_month = $FORM{'forumstart_month'};
my $forumstart_day = $FORM{'forumstart_day'};
my $forumstart_year = $FORM{'forumstart_year'};
my $forumstart_hour = $FORM{'forumstart_hour'};
my $forumstart_minute = $FORM{'forumstart_minute'};
my $forumstart_secund = $FORM{'forumstart_secund'};
my $max_days = 31;
if($forumstart_month == 4 || $forumstart_month == 6 || $forumstart_month == 9 || $forumstart_month == 11) {
$max_days = 30;
} elsif($forumstart_month == 2 && $forumstart_year % 4 == 0 && $forumstart_year != 0) {
$max_days = 29;
} elsif($forumstart_month == 2 && ($forumstart_year % 4 != 0 || $forumstart_year == 0)) {
$max_days = 28;
}
if ($forumstart_day > $max_days) { $forumstart_day = $max_days;}
$forumstart = qq~$forumstart_day/$forumstart_month/$forumstart_year $maintxt{'107'} $forumstart_hour:$forumstart_minute:$forumstart_secund~;
# Validate Timezone
if ( $FORM{'default_tz'} eq q{-} ) {
$default_tz = 'UTC';
}
else { $default_tz = $FORM{'default_tz'}; }
$timeoffset = $FORM{'usertimesign'} =~ /^-$/sm ? q{-} : q{};
$timeoffset .= $FORM{'usertimehour'} =~ /^\d+$/sm ? $FORM{'usertimehour'} : '0';
$timeoffset .= q{.};
$timeoffset .= $FORM{'usertimemin'} =~ /^\d+$/sm ? $FORM{'usertimemin'} : '0';
# Get barmaxnumb
$settings{'barmaxnumb'} = $FORM{'barmaxnumb'};
$settings{'barmaxnumb'} =~ s/\D//gsm;
# Fix guestaccess
$settings{'guestaccess'} = !$settings{'guestaccess'} || 0;
$settings{'imtext'} =~ s/\r(?=\n*)//gxsm;
$settings{'imtext'} =~ s~\n~
~gxsm;
# Fix $pwstrengthmeter_common
$settings{'pwstrengthmeter_common'} =~ s/\x27//gxsm;
if (($settings{'set_subjectMaxLength'} < 10 && $settings{'set_subjectMaxLength'} != 0) || $settings{'set_subjectMaxLength'} > 255) { fatal_error('invalid_value', "set_subjectMaxLength ($admin_txt{'498a'})"); }
# Convert unwanted tags in Board Name
ToHTML($settings{'mbname'});
# Upload default avatar
$cur_default_userpic = $FORM{'cur_default_userpic'};
if ( $settings{'default_userpic'} ne q{} ) {
$settings{'default_userpic'} = UploadFile('default_userpic', 'Templates/Forum/default', 'png jpg jpeg gif', '250', '0');
if ( $cur_default_userpic ne 'nn.gif' ) {
unlink "$htmldir/Templates/Forum/default/$cur_default_userpic";
}
}
else {
$settings{'default_userpic'} = $cur_default_userpic;
}
# Settings.pm stuff
SaveSettingsTo('Settings.pm', %settings);
return;
}
1;