############################################################################### # 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~ : ~; $dstoffsetlabel = qq~~; $dstoffsetinput = qq~~, } else { DateTime->import(); DateTime::TimeZone->import(); LoadLanguage('Countries'); my @mycntry = sort { $countrytime_txt{$a} cmp $countrytime_txt{$b} } keys %countrytime_txt; for my $i ( @mycntry ) { $tz_select .= qq~~; } } $tz_select .= ''; # 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~~, 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~~, 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~~, name => 'mgadvsearch', validate => 'text,null', }, { description => qq~~, input_html => qq~~, name => 'enableguestsearch', validate => 'boolean', }, { header => $settings_txt{'qcksearch'}, }, { description => qq~~, input_html => 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~~, 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
$admin_txt{'current_img'}: $default_userpic
~, 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;