D:\WEBSITES\testbed\cgi-bin\yabb252\zip_252\AdminIndex_08_27\AdminIndex.pl D:\WEBSITES\testbed\cgi-bin\yabb252\AdminIndex.pl
#!/usr/bin/perl -- #!/usr/bin/perl --
   
############################################################################### ###############################################################################
# AdminIndex.pl                                                               # # AdminIndex.pl                                                               #
############################################################################### ###############################################################################
# YaBB: Yet another Bulletin Board                                            # # YaBB: Yet another Bulletin Board                                            #
# Open-Source Community Software for Webmasters                               # # Open-Source Community Software for Webmasters                               #
# Version:        YaBB 2.5.2                                                  # # Version:        YaBB 2.5.2                                                  #
# Packaged:       September 30, 2012                                          # # Packaged:       September 30, 2012                                          #
# Distributed by: http://www.yabbforum.com                                    # # Distributed by: http://www.yabbforum.com                                    #
# =========================================================================== # # =========================================================================== #
# Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved.     # # Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved.     #
# Software by:  The YaBB Development Team                                     # # Software by:  The YaBB Development Team                                     #
#               with assistance from the YaBB community.                      # #               with assistance from the YaBB community.                      #
############################################################################### ###############################################################################
   
### Version Info ### ### Version Info ###
$YaBBversion = 'YaBB 2.5.2'; $YaBBversion = 'YaBB 2.5.2';
$adminindexplver = 'YaBB 2.5.2 $Revision: 1.0 $'; $adminindexplver = 'YaBB 2.5.2 $Revision: 1.1 $';
   
# use CGI::Carp qw(fatalsToBrowser); # used only for tests # use CGI::Carp qw(fatalsToBrowser); # used only for tests
   
# Make sure the module path is present # Make sure the module path is present
push(@INC, "./Modules"); push(@INC, "./Modules");
   
if ($ENV{'SERVER_SOFTWARE'} =~ /IIS/) { if ($ENV{'SERVER_SOFTWARE'} =~ /IIS/) {
   $yyIIS = 1;    $yyIIS = 1;
   $0 =~ m~(.*)(\\|/)~;    $0 =~ m~(.*)(\\|/)~;
   $yypath = $1;    $yypath = $1;
   $yypath =~ s~\\~/~g;    $yypath =~ s~\\~/~g;
   chdir($yypath);    chdir($yypath);
   push(@INC, $yypath);    push(@INC, $yypath);
} }
   
$adminscreen = 1; $adminscreen = 1;
   
$yyexec = "YaBB"; $yyexec = "YaBB";
$script_root = $ENV{'SCRIPT_FILENAME'}; $script_root = $ENV{'SCRIPT_FILENAME'};
$script_root =~ s/\/AdminIndex\.(pl|cgi)//ig; $script_root =~ s/\/AdminIndex\.(pl|cgi)//ig;
   
require "Paths.pl"; require "Paths.pl";
require "$vardir/Settings.pl"; require "$vardir/Settings.pl";
   
# Check allways for Time::HiRes # Check allways for Time::HiRes
eval { require Time::HiRes; import Time::HiRes qw(time); }; eval { require Time::HiRes; import Time::HiRes qw(time); };
$START_TIME = time(); $START_TIME = time();
   
if ($settings_file_version ne $YaBBversion) { # If upgrading if ($settings_file_version ne $YaBBversion) { # If upgrading
   require "$vardir/advsettings.txt" if -e "$vardir/advsettings.txt";    require "$vardir/advsettings.txt" if -e "$vardir/advsettings.txt";
   require "$vardir/secsettings.txt" if -e "$vardir/secsettings.txt";    require "$vardir/secsettings.txt" if -e "$vardir/secsettings.txt";
   require "$vardir/membergroups.txt" if -e "$vardir/membergroups.txt";    require "$vardir/membergroups.txt" if -e "$vardir/membergroups.txt";
} }
   
require "$sourcedir/Subs.pl"; require "$sourcedir/Subs.pl";
require "$sourcedir/System.pl"; require "$sourcedir/System.pl";
require "$sourcedir/DateTime.pl"; require "$sourcedir/DateTime.pl";
require "$sourcedir/Load.pl"; require "$sourcedir/Load.pl";
   
&LoadCookie;       # Load the user's cookie (or set to guest) &LoadCookie;       # Load the user's cookie (or set to guest)
&LoadUserSettings; # Load user settings &LoadUserSettings; # Load user settings
&WriteLog;         # write into the logfile &WriteLog;         # write into the logfile
&WhatTemplate;     # Figure out which template to be using. &WhatTemplate;     # Figure out which template to be using.
&WhatLanguage;     # Figure out which language file we should be using! &WhatLanguage;     # Figure out which language file we should be using!
   
if ($debug) { require "$sourcedir/Debug.pl"; } if ($debug) { require "$sourcedir/Debug.pl"; }
if ($referersecurity) { &referer_check; } # Check if the action is allowed from an external domain if ($referersecurity) { &referer_check; } # Check if the action is allowed from an external domain
   
require "$sourcedir/Security.pl"; require "$sourcedir/Security.pl";
&banning;          # Check for banned people &banning;          # Check for banned people
   
$maintenance = 2 if !$maintenance && -e "$vardir/maintenance.lock"; $maintenance = 2 if !$maintenance && -e "$vardir/maintenance.lock";
   
# some maintenance stuff will stop after $max_process_time # some maintenance stuff will stop after $max_process_time
# in seconds, than the browser will call the script again # in seconds, than the browser will call the script again
# until all is done. Don't put it too high or you will run # until all is done. Don't put it too high or you will run
# into server or browser timeout. # into server or browser timeout.
$max_process_time = 20; $max_process_time = 20;
   
$action = $INFO{'action'}; $action = $INFO{'action'};
$SIG{__WARN__} = sub { &admin_fatal_error("error_occurred","@_"); }; $SIG{__WARN__} = sub { &admin_fatal_error("error_occurred","@_"); };
eval { &yymain; }; eval { &yymain; };
if ($@) { &admin_fatal_error("untrapped",":<br />$@"); } if ($@) { &admin_fatal_error("untrapped",":<br />$@"); }
   
sub yymain { sub yymain {
   # Choose what to do based on the form action    # Choose what to do based on the form action
   if ($maintenance && $action eq 'login2') { require "$sourcedir/LogInOut.pl"; &Login2; }    if ($maintenance && $action eq 'login2') { require "$sourcedir/LogInOut.pl"; &Login2; }
   
   # Do Sessions Checking    # Do Sessions Checking
   if (!$iamguest && $sessions == 1 && $sessionvalid != 1) {    if (!$iamguest && $sessions == 1 && $sessionvalid != 1) {
       $yySetLocation = qq~$scripturl?action=revalidatesession~;        $yySetLocation = qq~$scripturl?action=revalidatesession~;
       &redirectexit;        &redirectexit;
   }    }
   
   # Other users can do nothing here.    # Other users can do nothing here.
   if (!$iamadmin && !$iamgmod) {    if (!$iamadmin && !$iamgmod) {
       if ($maintenance) { require "$sourcedir/LogInOut.pl"; &InMaintenance; }        if ($maintenance) { require "$sourcedir/LogInOut.pl"; &InMaintenance; }
       $yySetLocation = qq~$scripturl~;        $yySetLocation = qq~$scripturl~;
       &redirectexit;        &redirectexit;
   }    }
   
   if ($iamgmod) {    if ($iamgmod) {
       require "$vardir/gmodsettings.txt";        require "$vardir/gmodsettings.txt";
       if (!$allow_gmod_admin) {        if (!$allow_gmod_admin) {
           $yySetLocation = qq~$scripturl~;            $yySetLocation = qq~$scripturl~;
           &redirectexit;            &redirectexit;
       }        }
   }    }
   
   if ($action ne "") {    if ($action ne "") {
       if ($action eq $randaction) {        if ($action eq $randaction) {
           require "$sourcedir/Decoder.pl"; &convert;            require "$sourcedir/Decoder.pl"; &convert;
       } else {        } else {
           require "$admindir/AdminSubList.pl";            require "$admindir/AdminSubList.pl";
           if ($director{$action}) {            if ($director{$action}) {
               my @act = split(/&/, $director{$action});                my @act = split(/&/, $director{$action});
               if ($action =~ /^ext_/) {                if ($action =~ /^ext_/) {
                   require "$sourcedir/$act[0]";                    require "$sourcedir/$act[0]";
               } else {                } else {
                   require "$admindir/$act[0]";                    require "$admindir/$act[0]";
               }                }
               &{$act[1]};                &{$act[1]};
           } else {            } else {
               require "$admindir/Admin.pl";                require "$admindir/Admin.pl";
               &Admin;                &Admin;
           }            }
       }        }
   } else {    } else {
       &TrackAdminLogins;        &TrackAdminLogins;
       require "$admindir/Admin.pl";        require "$admindir/Admin.pl";
       &Admin;        &Admin;
   }    }
} }
   
sub ParseNavArray { sub ParseNavArray {
   foreach $element (@_) {    foreach $element (@_) {
   
       chomp $element;        chomp $element;
       ($action_to_take, $vistext, $whatitdoes, $isheader) = split(/\|/, $element);        ($action_to_take, $vistext, $whatitdoes, $isheader) = split(/\|/, $element);
   
       if ($action_area eq $action_to_take) {        if ($action_area eq $action_to_take) {
           $currentclass = "class=\"current\"";            $currentclass = "class=\"current\"";
       } else {        } else {
           $currentclass = "";            $currentclass = "";
       }        }
   
       if ($isheader) {        if ($isheader) {
           $started_ul = 1;            $started_ul = 1;
           $leftmenu .= qq~        <h3><a href="javascript:toggleList('$isheader')" title="$whatitdoes">$vistext</a></h3>            $leftmenu .= qq~        <h3><a href="javascript:toggleList('$isheader')" title="$whatitdoes">$vistext</a></h3>
         <ul id="$isheader">          <ul id="$isheader">
~; ~;
           next;            next;
       }        }
   
       if ($iamgmod && $gmod_access{$action_to_take} ne "on") {        if ($iamgmod && $gmod_access{$action_to_take} ne "on") {
           next;            next;
       }        }
   
       if ($action_to_take ne "#") {        if ($action_to_take ne "#") {
           $leftmenu .= qq~            $leftmenu .= qq~
           <li><a href="$adminurl?action=$action_to_take" title="$whatitdoes" $currentclass>$vistext</a></li>~;            <li><a href="$adminurl?action=$action_to_take" title="$whatitdoes" $currentclass>$vistext</a></li>~;
       } else {        } else {
           $leftmenu .= qq~            $leftmenu .= qq~
           <li><a name="none" title="none">$vistext</a></li>~;            <li><a name="none" title="none">$vistext</a></li>~;
       }        }
   }    }
   
   if ($started_ul) {    if ($started_ul) {
       $leftmenu .= qq~        $leftmenu .= qq~
         </ul>          </ul>
~; ~;
   }    }
} }
   
sub AdmImgLoc { sub AdmImgLoc {
   if (!-e "$forumstylesdir/$useimages/$_[0]") { $thisimgloc = qq~img src="$forumstylesurl/default/$_[0]"~; }    if (!-e "$forumstylesdir/$useimages/$_[0]") { $thisimgloc = qq~img src="$forumstylesurl/default/$_[0]"~; }
   else { $thisimgloc = qq~img src="$imagesdir/$_[0]"~; }    else { $thisimgloc = qq~img src="$imagesdir/$_[0]"~; }
   return $thisimgloc;    return $thisimgloc;
} }
   
sub AdmImgLoc2 { sub AdmImgLoc2 {
   if (!-e "$forumstylesdir/$useimages/$_[0]") { $thisimgloc = qq~$forumstylesurl/default/$_[0]~; }    if (!-e "$forumstylesdir/$useimages/$_[0]") { $thisimgloc = qq~$forumstylesurl/default/$_[0]~; }
   else { $thisimgloc = qq~$imagesdir/$_[0]~; }    else { $thisimgloc = qq~$imagesdir/$_[0]~; }
   return $thisimgloc;    return $thisimgloc;
} }
   
sub AdminTemplate { sub AdminTemplate {
   $admin_template = ${ $uid . $username }{'template'};    $admin_template = ${ $uid . $username }{'template'};
   if (!-d "$adminstylesdir/$admin_template" || $admin_template eq "") { $admin_template = "default"; }    if (!-d "$adminstylesdir/$admin_template" || $admin_template eq "") { $admin_template = "default"; }
   
   $adminstyle = qq~<link rel="stylesheet" href="$adminstylesurl/$admin_template.css" type="text/css" />~;    $adminstyle = qq~<link rel="stylesheet" href="$adminstylesurl/$admin_template.css" type="text/css" />~;
   $adminstyle =~ s~$admin_template\/~~g;    $adminstyle =~ s~$admin_template\/~~g;
   
   $adminimages = qq~$adminstylesurl/$admin_template~;    $adminimages = qq~$adminstylesurl/$admin_template~;
   $adminimages =~ s~$admin_template\/~~g;    $adminimages =~ s~$admin_template\/~~g;
   require "$templatesdir/$admin_template/AdminCentre.template";    require "$templatesdir/$admin_template/AdminCentre.template";
   require "$vardir/gmodsettings.txt";    require "$vardir/gmodsettings.txt";
   
   @forum_settings = (    @forum_settings = (
   "|$admintxt{'a1_title'}|$admintxt{'a1_label'} - $admintxt{'34'}|a1",    "|$admintxt{'a1_title'}|$admintxt{'a1_label'} - $admintxt{'34'}|a1",
   "newsettings;page=main|$admintxt{'a1_sub1'}|$admintxt{'a1_label1'}|",    "newsettings;page=main|$admintxt{'a1_sub1'}|$admintxt{'a1_label1'}|",
   "newsettings;page=advanced|$admintxt{'a1_sub2'}|$admintxt{'a1_label2'}|",    "newsettings;page=advanced|$admintxt{'a1_sub2'}|$admintxt{'a1_label2'}|",
   "editpaths|$admintxt{'a1_sub3'}|$admintxt{'a1_label3'}|",    "editpaths|$admintxt{'a1_sub3'}|$admintxt{'a1_label3'}|",
   "editbots|$admintxt{'a1_sub4'}|$admintxt{'a1_label4'}|",    "editbots|$admintxt{'a1_sub4'}|$admintxt{'a1_label4'}|",
   );    );
   if ($extendedprofiles) {    if ($extendedprofiles) {
       splice(@forum_settings,3,0,"ext_admin|$admintxt{'a1_sub_ex'}|$admintxt{'a1_label_ex'}|")        splice(@forum_settings,3,0,"ext_admin|$admintxt{'a1_sub_ex'}|$admintxt{'a1_label_ex'}|")
   }    }
   
   @general_controls = (    @general_controls = (
   "|$admintxt{'a2_title'}|$admintxt{'a2_label'} - $admintxt{'34'}|a2",    "|$admintxt{'a2_title'}|$admintxt{'a2_label'} - $admintxt{'34'}|a2",
   "newsettings;page=news|$admintxt{'a2_sub1'}|$admintxt{'a2_label1'}|",    "newsettings;page=news|$admintxt{'a2_sub1'}|$admintxt{'a2_label1'}|",
   "smilies|$admintxt{'a2_sub2'}|$admintxt{'a2_label2'}|",    "smilies|$admintxt{'a2_sub2'}|$admintxt{'a2_label2'}|",
   "setcensor|$admintxt{'a2_sub3'}|$admintxt{'a2_label3'}|",    "setcensor|$admintxt{'a2_sub3'}|$admintxt{'a2_label3'}|",
   "modagreement|$admintxt{'a2_sub4'}|$admintxt{'a2_label4'}|",    "modagreement|$admintxt{'a2_sub4'}|$admintxt{'a2_label4'}|",
   "gmodaccess|$admintxt{'a2_sub5'}|$admintxt{'a2_label5'}|",    "gmodaccess|$admintxt{'a2_sub5'}|$admintxt{'a2_label5'}|",
   );    );
   
   @security_settings = (    @security_settings = (
   "|$admintxt{'a3_title'}|$admintxt{'a3_label'} - $admintxt{'34'}|a3",    "|$admintxt{'a3_title'}|$admintxt{'a3_label'} - $admintxt{'34'}|a3",
   "newsettings;page=security|$admintxt{'a3_sub2'}|$admintxt{'a3_label2'}|",    "newsettings;page=security|$admintxt{'a3_sub2'}|$admintxt{'a3_label2'}|",
   "referer_control|$admintxt{'a3_sub1'}|$admintxt{'a3_label1'}|",    "referer_control|$admintxt{'a3_sub1'}|$admintxt{'a3_label1'}|",
   "setup_guardian|$admintxt{'a3_sub3'}|$admintxt{'a3_label3'}|",    "setup_guardian|$admintxt{'a3_sub3'}|$admintxt{'a3_label3'}|",
   "newsettings;page=antispam|$admintxt{'a3_sub4'}|$admintxt{'a3_label4'}|",    "newsettings;page=antispam|$admintxt{'a3_sub4'}|$admintxt{'a3_label4'}|",
     "spam_questions|$admintxt{'a3_sub6'}|$admintxt{'a3_label6'}|",  
   );    );
   
   @forum_controls = (    @forum_controls = (
   "|$admintxt{'a4_title'}|$admintxt{'a4_label'} - $admintxt{'34'}|a4",    "|$admintxt{'a4_title'}|$admintxt{'a4_label'} - $admintxt{'34'}|a4",
   "managecats|$admintxt{'a4_sub1'}|$admintxt{'a4_label1'}|",    "managecats|$admintxt{'a4_sub1'}|$admintxt{'a4_label1'}|",
   "manageboards|$admintxt{'a4_sub2'}|$admintxt{'a4_label2'}|",    "manageboards|$admintxt{'a4_sub2'}|$admintxt{'a4_label2'}|",
   "helpadmin|$admintxt{'a4_sub3'}|$admintxt{'a4_label3'}|",    "helpadmin|$admintxt{'a4_sub3'}|$admintxt{'a4_label3'}|",
   "editemailtemplates|$admintxt{'a4_sub4'}|$admintxt{'a4_label4'}|",    "editemailtemplates|$admintxt{'a4_sub4'}|$admintxt{'a4_label4'}|",
   );    );
   
   @forum_layout = (    @forum_layout = (
   "|$admintxt{'a5_title'}|$admintxt{'a5_label'} - $admintxt{'34'}|a5",    "|$admintxt{'a5_title'}|$admintxt{'a5_label'} - $admintxt{'34'}|a5",
   "modskin|$admintxt{'a5_sub1'}|$admintxt{'a5_label1'}|",    "modskin|$admintxt{'a5_sub1'}|$admintxt{'a5_label1'}|",
   "modcss|$admintxt{'a5_sub2'}|$admintxt{'a5_label2'}|",    "modcss|$admintxt{'a5_sub2'}|$admintxt{'a5_label2'}|",
   "modtemp|$admintxt{'a5_sub3'}|$admintxt{'a5_label3'}|",    "modtemp|$admintxt{'a5_sub3'}|$admintxt{'a5_label3'}|",
   );    );
   
   @member_controls = (    @member_controls = (
   "|$admintxt{'a6_title'}|$admintxt{'a6_label'} - $admintxt{'34'}|a6",    "|$admintxt{'a6_title'}|$admintxt{'a6_label'} - $admintxt{'34'}|a6",
   "addmember|$admintxt{'a6_sub1'}|$admintxt{'a6_label1'}|",    "addmember|$admintxt{'a6_sub1'}|$admintxt{'a6_label1'}|",
   "viewmembers|$admintxt{'a6_sub2'}|$admintxt{'a6_label2'}|",    "viewmembers|$admintxt{'a6_sub2'}|$admintxt{'a6_label2'}|",
   "modmemgr|$admintxt{'a6_sub3'}|$admintxt{'a6_label3'}|",    "modmemgr|$admintxt{'a6_sub3'}|$admintxt{'a6_label3'}|",
   "mailing|$admintxt{'a6_sub4'}|$admintxt{'a6_label4'}|",    "mailing|$admintxt{'a6_sub4'}|$admintxt{'a6_label4'}|",
   "ipban|$admintxt{'a6_sub5'}|$admintxt{'a6_label5'}|",    "ipban|$admintxt{'a6_sub5'}|$admintxt{'a6_label5'}|",
   "setreserve|$admintxt{'a6_sub6'}|$admintxt{'a6_label6'}|",    "setreserve|$admintxt{'a6_sub6'}|$admintxt{'a6_label6'}|",
   );    );
   
   @maintence_controls = (    @maintence_controls = (
   "|$admintxt{'a7_title'}|$admintxt{'a7_label'} - $admintxt{'34'}|a7",    "|$admintxt{'a7_title'}|$admintxt{'a7_label'} - $admintxt{'34'}|a7",
   "newsettings;page=maintenance|$admin_txt{'67'}|$admin_txt{'67'}|",    "newsettings;page=maintenance|$admin_txt{'67'}|$admin_txt{'67'}|",
   "rebuildmesindex|$admintxt{'a7_sub2a'}|$admintxt{'a7_label2a'}|",    "rebuildmesindex|$admintxt{'a7_sub2a'}|$admintxt{'a7_label2a'}|",
   "boardrecount|$admintxt{'a7_sub2'}|$admintxt{'a7_label2'}|",    "boardrecount|$admintxt{'a7_sub2'}|$admintxt{'a7_label2'}|",
   "rebuildmemlist|$admintxt{'a7_sub4'}|$admintxt{'a7_label4'}|",    "rebuildmemlist|$admintxt{'a7_sub4'}|$admintxt{'a7_label4'}|",
   "membershiprecount|$admintxt{'a7_sub3'}|$admintxt{'a7_label3'}|",    "membershiprecount|$admintxt{'a7_sub3'}|$admintxt{'a7_label3'}|",
   "rebuildmemhist|$admintxt{'a7_sub4a'}|$admintxt{'a7_label4a'}|",    "rebuildmemhist|$admintxt{'a7_sub4a'}|$admintxt{'a7_label4a'}|",
   "rebuildnotifications|$admintxt{'a7_sub4b'}|$admintxt{'a7_label4b'}|",    "rebuildnotifications|$admintxt{'a7_sub4b'}|$admintxt{'a7_label4b'}|",
   "clean_log|$admintxt{'a7_sub1'}|$admintxt{'a7_label1'}|",    "clean_log|$admintxt{'a7_sub1'}|$admintxt{'a7_label1'}|",
   "deleteoldthreads|$admintxt{'a7_sub5'}|$admintxt{'a7_label5'}|",    "deleteoldthreads|$admintxt{'a7_sub5'}|$admintxt{'a7_label5'}|",
   "manageattachments|$admintxt{'a7_sub6'}|$admintxt{'a7_label6'}|",    "manageattachments|$admintxt{'a7_sub6'}|$admintxt{'a7_label6'}|",
   "backupsettings|$admintxt{'a3_sub5'}|$admintxt{'a3_label5'}|",    "backupsettings|$admintxt{'a3_sub5'}|$admintxt{'a3_label5'}|",
   );    );
   
   @forum_stats = (    @forum_stats = (
   "|$admintxt{'a8_title'}|$admintxt{'a8_label'} - $admintxt{'34'}|a8",    "|$admintxt{'a8_title'}|$admintxt{'a8_label'} - $admintxt{'34'}|a8",
   "detailedversion|$admintxt{'a8_sub1'}|$admintxt{'a8_label1'}|",    "detailedversion|$admintxt{'a8_sub1'}|$admintxt{'a8_label1'}|",
   "stats|$admintxt{'a8_sub2'}|$admintxt{'a8_label2'}|",    "stats|$admintxt{'a8_sub2'}|$admintxt{'a8_label2'}|",
   "showclicks|$admintxt{'a8_sub3'}|$admintxt{'a8_label3'}|",    "showclicks|$admintxt{'a8_sub3'}|$admintxt{'a8_label3'}|",
   "errorlog|$admintxt{'a8_sub4'}|$admintxt{'a8_label4'}|",    "errorlog|$admintxt{'a8_sub4'}|$admintxt{'a8_label4'}|",
   "view_reglog|$admintxt{'a8_sub5'}|$admintxt{'a8_label5'}|",    "view_reglog|$admintxt{'a8_sub5'}|$admintxt{'a8_label5'}|",
   );    );
   
   @boardmod_mods = (    @boardmod_mods = (
   "|$admintxt{'a9_title'}|$admintxt{'a9_label'} - $admintxt{'34'}|a9",    "|$admintxt{'a9_title'}|$admintxt{'a9_label'} - $admintxt{'34'}|a9",
   "modlist|$mod_list{'6'}|$mod_list{'7'}|",    "modlist|$mod_list{'6'}|$mod_list{'7'}|",
   );    );
   
   # To add new items for your mods settings, add a new row below here, pushing    # To add new items for your mods settings, add a new row below here, pushing
   # your item onto the @boardmod_mods array. Example below:    # your item onto the @boardmod_mods array. Example below:
   #   $my_mod = "action_to_take|Name_Displayed|Tooltip_Title|";    #   $my_mod = "action_to_take|Name_Displayed|Tooltip_Title|";
   #   push (@boardmod_mods, "$my_mod");    #   push (@boardmod_mods, "$my_mod");
   # before the first pipe character is the action that will appear in the URL    # before the first pipe character is the action that will appear in the URL
   # Next is the text that is displayed in the admin centre    # Next is the text that is displayed in the admin centre
   # Finally, you have the tooltip text, necessary for XHTML compliance    # Finally, you have the tooltip text, necessary for XHTML compliance
   
   # Also note, you should pick a unique name instead of "$my_mod".    # Also note, you should pick a unique name instead of "$my_mod".
   # If you mod is called "SuperMod For Doing Cool Things"    # If you mod is called "SuperMod For Doing Cool Things"
   # You could use "$SuperMod_CoolThings"    # You could use "$SuperMod_CoolThings"
   
### BOARDMOD ANCHOR ### ### BOARDMOD ANCHOR ###
   $reg_question_mod = "reg_question|$mod_list{'reg_question'}|$mod_list{'reg_question1'}|";    
   push (@boardmod_mods, "$reg_question_mod");    
### END BOARDMOD ANCHOR ### ### END BOARDMOD ANCHOR ###
   
   &ParseNavArray(@forum_settings);    &ParseNavArray(@forum_settings);
   &ParseNavArray(@general_controls);    &ParseNavArray(@general_controls);
   &ParseNavArray(@security_settings);    &ParseNavArray(@security_settings);
   &ParseNavArray(@forum_controls);    &ParseNavArray(@forum_controls);
   &ParseNavArray(@forum_layout);    &ParseNavArray(@forum_layout);
   &ParseNavArray(@member_controls);    &ParseNavArray(@member_controls);
   &ParseNavArray(@maintence_controls);    &ParseNavArray(@maintence_controls);
   &ParseNavArray(@forum_stats);    &ParseNavArray(@forum_stats);
   &ParseNavArray(@boardmod_mods);    &ParseNavArray(@boardmod_mods);
   
   $topmenu_one  = qq~<a href="$boardurl/$yyexec.$yyext">$admintxt{'15'}</a>~;    $topmenu_one  = qq~<a href="$boardurl/$yyexec.$yyext">$admintxt{'15'}</a>~;
   $topmenu_two  = qq~<a href="$adminurl">$admintxt{'33'}</a>~;    $topmenu_two  = qq~<a href="$adminurl">$admintxt{'33'}</a>~;
   $topmenu_tree = qq~<a href="$scripturl?action=help;section=admin">$admintxt{'35'}</a>~;    $topmenu_tree = qq~<a href="$scripturl?action=help;section=admin">$admintxt{'35'}</a>~;
   $topmenu_four = qq~<a href="http://www.yabbforum.com">$admintxt{'36'}</a>~;    $topmenu_four = qq~<a href="http://www.yabbforum.com">$admintxt{'36'}</a>~;
   
   if ($maintenance) {    if ($maintenance) {
       $yyadmin_alert .= qq~<br /><span style="font-size: 12px; background-color: #FFFF33;"><b>$load_txt{'616'}</b></span><br /><br />~;        $yyadmin_alert .= qq~<br /><span style="font-size: 12px; background-color: #FFFF33;"><b>$load_txt{'616'}</b></span><br /><br />~;
   }    }
   if ($iamadmin && $rememberbackup) {    if ($iamadmin && $rememberbackup) {
       if ($lastbackup && $date > $rememberbackup + $lastbackup) {        if ($lastbackup && $date > $rememberbackup + $lastbackup) {
           require "$sourcedir/DateTime.pl";            require "$sourcedir/DateTime.pl";
           $yyadmin_alert .= qq~<br /><span style="font-size: 12px; background-color: #FFFF33;"><b>$load_txt{'617'} ~ . &timeformat($lastbackup) . qq~</b></span>~;            $yyadmin_alert .= qq~<br /><span style="font-size: 12px; background-color: #FFFF33;"><b>$load_txt{'617'} ~ . &timeformat($lastbackup) . qq~</b></span>~;
       }        }
   }    }
   
   &print_output_header;    &print_output_header;
   
   my $yytitle = qq~$admin_txt{'208'}: $yytitle~;    my $yytitle = qq~$admin_txt{'208'}: $yytitle~;
   $header =~ s/({|<)yabb title(}|>)/$yytitle/g;    $header =~ s/({|<)yabb title(}|>)/$yytitle/g;
   $header =~ s/({|<)yabb style(}|>)/$adminstyle/g;    $header =~ s/({|<)yabb style(}|>)/$adminstyle/g;
   $header =~ s/({|<)yabb charset(}|>)/$yycharset/g;    $header =~ s/({|<)yabb charset(}|>)/$yycharset/g;
   $header =~ s/({|<)yabb javascript(}|>)/$yyjavascript/g;         $header =~ s/({|<)yabb javascript(}|>)/$yyjavascript/g;     
   
   $leftmenutop =~ s/({|<)yabb images(}|>)/$adminimages/g;    $leftmenutop =~ s/({|<)yabb images(}|>)/$adminimages/g;
   $leftmenutop =~ s/({|<)yabb maintenance(}|>)/$yyadmin_alert/g;    $leftmenutop =~ s/({|<)yabb maintenance(}|>)/$yyadmin_alert/g;
   $topnav      =~ s/({|<)yabb topmenu_one(}|>)/$topmenu_one/;    $topnav      =~ s/({|<)yabb topmenu_one(}|>)/$topmenu_one/;
   $topnav      =~ s/({|<)yabb topmenu_two(}|>)/$topmenu_two/;    $topnav      =~ s/({|<)yabb topmenu_two(}|>)/$topmenu_two/;
   $topnav      =~ s/({|<)yabb topmenu_tree(}|>)/$topmenu_tree/;    $topnav      =~ s/({|<)yabb topmenu_tree(}|>)/$topmenu_tree/;
   $topnav      =~ s/({|<)yabb topmenu_four(}|>)/$topmenu_four/;    $topnav      =~ s/({|<)yabb topmenu_four(}|>)/$topmenu_four/;
   
   &Debug if $debug;    &Debug if $debug;
   $mainbody =~ s/({|<)yabb main(}|>)/$yymain/g;    $mainbody =~ s/({|<)yabb main(}|>)/$yymain/g;
   $mainbody =~ s/({|<)yabb_admin debug(}|>)/$yydebug/g;    $mainbody =~ s/({|<)yabb_admin debug(}|>)/$yydebug/g;
   
   $mainbody =~ s~img src\=\"$imagesdir\/(.+?)\"~&AdmImgLoc($1)~eisg;    $mainbody =~ s~img src\=\"$imagesdir\/(.+?)\"~&AdmImgLoc($1)~eisg;
   $mainbody =~ s~img src\=\&quot\;$imagesdir\/(.+?)\&quot;~"img src\=\&quot;" . &AdmImgLoc2($1) . "\&quot;"~eisg; # For the template editing Javascript images    $mainbody =~ s~img src\=\&quot\;$imagesdir\/(.+?)\&quot;~"img src\=\&quot;" . &AdmImgLoc2($1) . "\&quot;"~eisg; # For the template editing Javascript images
   
   $output = $header . $leftmenutop . $leftmenu . $leftmenubottom . $topnav . $mainbody;    $output = $header . $leftmenutop . $leftmenu . $leftmenubottom . $topnav . $mainbody;
   
   &print_HTML_output_and_finish;    &print_HTML_output_and_finish;
} }
   
sub TrackAdminLogins { sub TrackAdminLogins {
   if (-e "$vardir/adminlog.txt") {    if (-e "$vardir/adminlog.txt") {
       fopen(ADMINLOG, "$vardir/adminlog.txt");        fopen(ADMINLOG, "$vardir/adminlog.txt");
       @adminlog = <ADMINLOG>;        @adminlog = <ADMINLOG>;
       fclose(ADMINLOG);        fclose(ADMINLOG);
   }    }
   fopen(ADMINLOG, ">$vardir/adminlog.txt");    fopen(ADMINLOG, ">$vardir/adminlog.txt");
   print ADMINLOG qq~$username|$user_ip|$date\n~;    print ADMINLOG qq~$username|$user_ip|$date\n~;
   for ($i = 0; $i < 4; $i++) {    for ($i = 0; $i < 4; $i++) {
       if ($adminlog[$i]) {        if ($adminlog[$i]) {
           chomp $adminlog[$i];            chomp $adminlog[$i];
           print ADMINLOG qq~$adminlog[$i]\n~;            print ADMINLOG qq~$adminlog[$i]\n~;
       }        }
   }    }
   fclose(ADMINLOG);    fclose(ADMINLOG);
} }