F:\WEBSITES\testbed\zipped\yabb_svn_new\branches\2.5.2\cgi-bin\yabb2\Admin\Backup.pl F:\WEBSITES\testbed\zipped\yabb_svn_new\trunk\cgi-bin\yabb2\Admin\Backup.pm
############################################################################### ###############################################################################
# Backup.pl                                                                   # # Backup.pm                                                                   #
  # $Date: 01.05.16 $                                                           #
############################################################################### ###############################################################################
# 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.6.12                                                 #
# Packaged:       October 21, 2012                                            # # Packaged:       January 5, 2016                                             #
# 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-2016 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.                      #
############################################################################### ###############################################################################
  # Many thanks to AK108 (http://fkp.jkcsi.com/)                                #
  # for his contribution to the YaBB community                                  #
  ###############################################################################
  # use strict;
  # use warnings;
  # no warnings qw(uninitialized once redefine);
  use CGI::Carp qw(fatalsToBrowser);
  use English '-no_match_vars';
  our $VERSION = '2.6.12';
   
# Many thanks to AK108 (http://fkp.jkcsi.com/) for his contibution to the YaBB community  $backuppmver = 'YaBB 2.6.12 $Revision: 1710 $'; 
  if ( $action eq 'detailedversion' ) { return 1; }
$backupplver = 'YaBB 2.5.2 $Revision: 1.0 $';  
if ($action eq 'detailedversion') { return 1; }  
   
# Add in support for Archive::Tar in the Modules directory and binaries in different places # Add in support for Archive::Tar in the Modules directory and binaries in different places
@ENVpaths = split(/\:/, $ENV{'PATH'});  @ENVpaths = split /\:/xsm, $ENV{'PATH'}; 
   
&LoadLanguage('Backup');  LoadLanguage('Backup'); 
$yytitle = $backup_txt{1}; $yytitle     = $backup_txt{1};
$action_area = 'backupsettings'; $action_area = 'backupsettings';
   
my $curtime = CORE::time; # None of that Time::HiRes stuff my $curtime = CORE::time;    # None of that Time::HiRes stuff
   
my %dirs = ( my %dirs = (
       'src' => "Admin/ $backup_txt{'and'} Sources/",    'src'  => "Admin/ $backup_txt{'and'} Sources/",
       'bo' => "Boards/",     'bo'   => 'Boards/', 
       'lan' => "Languages/ $backup_txt{'and'} Help/",    'lan'  => "Languages/ $backup_txt{'and'} Help/",
       'mem' => "Members/",     'mem'  => 'Members/', 
       'mes' => "Messages/",     'mes'  => 'Messages/', 
       'temp' => "Templates/ $backup_txt{10}",    'temp' => "Templates/ $backup_txt{10}",
       'var' => "Variables/",     'var'  => 'Variables/', 
       'html' => "yabbfiles",     'html' => 'yabbfiles', 
       'upld' => "yabbfiles/Attachments $backup_txt{'and'} yabbfiles/avatars/UserAvatars",     'upld' => "yabbfiles/Attachments, yabbfiles/PMAttachments, $backup_txt{'and'} yabbfiles/avatars", 
       ); );
   
&is_admin_or_gmod;  is_admin_or_gmod(); 
   
sub backupsettings { sub backupsettings {
   my ($module, $command, $tarcompress1, $tarcompress2, $allchecked, $item, %pathchecklist, %methodchecklist, $presetjavascriptcode, $file, @backups, $newcommand, $style, $disabledtext, $input);     my ( 
         $module,        $command,         $tarcompress1,
   $yymain .= qq~<b>$backup_txt{33} $INFO{'backupspendtime'} $backup_txt{34}</b><br /><br />~ if $INFO{'backupspendtime'};         $tarcompress2,  $allchecked,      $item, 
   $yymain .= qq~<font color="green"><b>$backup_txt{'mailsuccess'}</b></font><br /><br />~ if $INFO{'mailinfo'} == 1;         %pathchecklist, %methodchecklist, $presetjavascriptcode, 
   $yymain .= qq~<font color="red"><b>$backup_txt{'mailfail'}</b></font><br /><br />~ if $INFO{'mailinfo'} == -1;         $file,          @backups,         $newcommand, 
         $style,         $disabledtext,    $input
   if (@backup_paths == 8) { $allchecked = 'checked="checked" '; }     ); 
   
   # Yes, my checklists are really hashes. Oh well.     if ( $INFO{'backupspendtime'} ) { 
   foreach $item (@backup_paths) { $pathchecklist{$item} = 'checked="checked" '; }         $yymain .= 
   $methodchecklist{$backupmethod} = 'checked="checked" ';  qq~<b>$backup_txt{33} $INFO{'backupspendtime'} $backup_txt{34}</b><br /><br />~; 
   $methodchecklist{$compressmethod} = 'checked="checked" ';     } 
     if ( $INFO{'mailinfo'} == 1 ) {
   # domodulecheck if we have a checked value         $yymain .= 
   $presetjavascriptcode = qq~    domodulecheck("$backupmethod", 'init');~;  qq~<span class="good"><b>$backup_txt{'mailsuccess'}</b></span><br /><br />~; 
     }
   # Javascript to make the behavior of the form buttons work better     if ( $INFO{'mailinfo'} == -1 ) { 
   $yymain .= qq~         $yymain .= 
<script type="text/javascript">  qq~<span class="important"><b>$backup_txt{'mailfail'}</b></span><br /><br />~; 
<!--     } 
   function checkYaBB () {  
       // See if the check all box should be checked or unchecked.     # Yes, my checklists are really hashes. Oh well. 
       // It should be checked only if all the other boxes are checked.     foreach my $item (@backup_paths) { 
       if (document.backupsettings.YaBB_bo.checked && document.backupsettings.YaBB_mes.checked && document.backupsettings.YaBB_mem.checked && document.backupsettings.YaBB_temp.checked && document.backupsettings.YaBB_lan.checked && document.backupsettings.YaBB_var.checked && document.backupsettings.YaBB_src.checked && document.backupsettings.YaBB_html.checked && document.backupsettings.YaBB_upld.checked) {         $pathchecklist{$item} = 'checked="checked" '; 
           document.backupsettings.YaBB_ALL.checked = 1;     } 
       } else {     if ( @backup_paths == 9 ) { $allchecked = 'checked="checked" '; } 
           document.backupsettings.YaBB_ALL.checked = 0;  
       }     $methodchecklist{$backupmethod}   = 'checked="checked" '; 
   }     $methodchecklist{$compressmethod} = 'checked="checked" '; 
   
   function masscheckYaBB (toggleboxstate) {     # domodulecheck if we have a checked value 
       if(!toggleboxstate) { // Uncheck all     $presetjavascriptcode = qq~ domodulecheck("$backupmethod", 'init');~; 
           checkstate = 0;  
       } else if(toggleboxstate) { // Check all     # Javascript to make the behavior of the form buttons work better 
           checkstate = 1;     $yymain .= qq~ 
       }  <script type="text/javascript"> 
       document.backupsettings.YaBB_bo.checked = checkstate;    function checkYaBB () { 
       document.backupsettings.YaBB_mes.checked = checkstate;         // See if the check all box should be checked or unchecked. 
       document.backupsettings.YaBB_mem.checked = checkstate;         // It should be checked only if all the other boxes are checked. 
       document.backupsettings.YaBB_temp.checked = checkstate;         if (document.backupsettings.YaBB_bo.checked && document.backupsettings.YaBB_mes.checked && document.backupsettings.YaBB_mem.checked && document.backupsettings.YaBB_temp.checked && document.backupsettings.YaBB_lan.checked && document.backupsettings.YaBB_var.checked && document.backupsettings.YaBB_src.checked && document.backupsettings.YaBB_html.checked && document.backupsettings.YaBB_upld.checked) { 
       document.backupsettings.YaBB_lan.checked = checkstate;             document.backupsettings.YaBB_ALL.checked = 1; 
       document.backupsettings.YaBB_var.checked = checkstate;         } else { 
       document.backupsettings.YaBB_src.checked = checkstate;             document.backupsettings.YaBB_ALL.checked = 0; 
       document.backupsettings.YaBB_html.checked = checkstate;         } 
       document.backupsettings.YaBB_upld.checked = checkstate;     } 
   }  
     function masscheckYaBB (toggleboxstate) {
   function domodulecheck (module, initstate) {         if(!toggleboxstate) { // Uncheck all 
       if(module == "Archive::Tar") {             checkstate = 0; 
           for(i = 0; document.getElementsByName("tarmodulecompress")[i]; i++) {         } else if(toggleboxstate) { // Check all 
               document.getElementsByName("tarmodulecompress")[i].disabled = false;             checkstate = 1; 
           }        }
           if(!initstate) {         document.backupsettings.YaBB_bo.checked = checkstate; 
               document.getElementsByName("tarmodulecompress")[0].checked = true;         document.backupsettings.YaBB_mes.checked = checkstate; 
           }         document.backupsettings.YaBB_mem.checked = checkstate; 
       } else {         document.backupsettings.YaBB_temp.checked = checkstate; 
           for(i = 0; document.getElementsByName("tarmodulecompress")[i]; i++) {         document.backupsettings.YaBB_lan.checked = checkstate; 
               document.getElementsByName("tarmodulecompress")[i].disabled = true;         document.backupsettings.YaBB_var.checked = checkstate; 
           }         document.backupsettings.YaBB_src.checked = checkstate; 
       }         document.backupsettings.YaBB_html.checked = checkstate; 
         document.backupsettings.YaBB_upld.checked = checkstate;
       if(module == "/tar") {     } 
           for(i = 0; document.getElementsByName("bintarcompress")[i]; i++) {  
               document.getElementsByName("bintarcompress")[i].disabled = false;     function domodulecheck (module, initstate) { 
           }         if(module == "Archive::Tar") { 
           if(!initstate) {            for(i = 0; document.getElementsByName("tarmodulecompress")[i]; i++) {
               document.getElementsByName("bintarcompress")[0].checked = true;                 document.getElementsByName("tarmodulecompress")[i].disabled = false; 
           }            }
       } else {            if(!initstate) {
           for(i = 0; document.getElementsByName("bintarcompress")[i]; i++) {                 document.getElementsByName("tarmodulecompress")[0].checked = true; 
               document.getElementsByName("bintarcompress")[i].disabled = true;             } 
           }         } else { 
       }             for(i = 0; document.getElementsByName("tarmodulecompress")[i]; i++) { 
   }                 document.getElementsByName("tarmodulecompress")[i].disabled = true; 
-->             } 
</script>         } 
<form action="$adminurl?action=backupsettings2" method="post" name="backupsettings">  
<div class="bordercolor" style="padding: 0px; width: 99%; margin-left: 0px; margin-right: auto;">         if(module == "$backupprogusr/tar") { 
  <table width="100%" cellspacing="1" cellpadding="4">             for(i = 0; document.getElementsByName("bintarcompress")[i]; i++) { 
    <tr valign="middle">                 document.getElementsByName("bintarcompress")[i].disabled = false; 
      <td align="left" class="titlebg">             } 
        <img src="$imagesdir/preferences.gif" alt="" border="0" /><b>$backup_txt{1}</b>             if(!initstate) { 
      </td>                 document.getElementsByName("bintarcompress")[0].checked = true; 
    </tr>~;             } 
         } else {
   if(!$backupsettingsloaded) {            for(i = 0; document.getElementsByName("bintarcompress")[i]; i++) {
       $yymain .= qq~                 document.getElementsByName("bintarcompress")[i].disabled = true; 
    <tr valign="middle">             } 
      <td align="left" class="catbg">         } 
        <b>$backup_txt{2}</b>     } 
      </td>  </script> 
    </tr>  <form action="$adminurl?action=backupsettings2" method="post" name="backupsettings" onsubmit="savealert()" accept-charset="$yymycharset"> 
    <tr valign="middle">     <div class="bordercolor rightboxdiv"> 
      <td align="left">     <table class="border-space pad-cell" style="margin-bottom: .5em;"> 
        <!-- Empty td for a spacer -->         <tr> 
      </td>             <td class="titlebg">$admin_img{'prefimg'} <b>$backup_txt{1}</b></td> 
    </tr>~;        </tr>~;
   }  
     if ( !$backupsettingsloaded ) {
   $yymain .= qq~         $yymain .= qq~<tr> 
    <tr valign="middle">             <td class="catbg"><b>$backup_txt{2}</b></td> 
      <td align="left" class="windowbg">         </tr><tr> 
        $backup_txt{3}             <td>&nbsp;</td> 
      </td>         </tr>~; 
    </tr>     } 
    <tr valign="middle">  
      <td align="left" class="catbg">     $yymain .= qq~<tr> 
        <b>$backup_txt{4}</b>             <td class="windowbg">$backup_txt{3}</td> 
      </td>         </tr><tr> 
    </tr>             <td class="catbg"><b>$backup_txt{4}</b></td> 
    <tr valign="middle">         </tr><tr> 
      <td align="left" class="windowbg">            <td class="windowbg">
        <input type="checkbox" name="YaBB_ALL" id="YaBB_ALL" value="1" onclick="masscheckYaBB(this.checked)" $allchecked/> <label for="YaBB_ALL">$backup_txt{5}<br />                <input type="checkbox" name="YaBB_ALL" id="YaBB_ALL" value="1" onclick="masscheckYaBB(this.checked)" $allchecked /> <label for="YaBB_ALL">$backup_txt{5}<br />
        $backup_txt{6}</label>                $backup_txt{6}</label>
      </td>            </td>
    </tr>         </tr><tr> 
    <tr valign="middle">             <td class="windowbg2"> 
      <td align="left" class="windowbg2">                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_src" id="YaBB_src" value="1" $pathchecklist{'src'}/> <label for="YaBB_src">Admin/ $backup_txt{'and'} Sources/ $backup_txt{13}</label> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_src" id="YaBB_src" value="1" $pathchecklist{'src'}/> <label for="YaBB_src">Admin/ $backup_txt{'and'} Sources/ $backup_txt{13}</label>             </td> 
      </td>         </tr><tr> 
    </tr>             <td class="windowbg2"> 
    <tr valign="middle">                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_bo" id="YaBB_bo" value="1" $pathchecklist{'bo'}/> <label for="YaBB_bo">Boards/ $backup_txt{7}</label> 
      <td align="left" class="windowbg2">             </td> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_bo" id="YaBB_bo" value="1" $pathchecklist{'bo'}/> <label for="YaBB_bo">Boards/ $backup_txt{7}</label>         </tr><tr> 
      </td>             <td class="windowbg2"> 
    </tr>                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_lan" id="YaBB_lan" value="1" $pathchecklist{'lan'}/> <label for="YaBB_lan">Languages/ $backup_txt{'and'} Help/ $backup_txt{11}</label> 
    <tr valign="middle">             </td> 
      <td align="left" class="windowbg2">         </tr><tr> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_lan" id="YaBB_lan" value="1" $pathchecklist{'lan'}/> <label for="YaBB_lan">Languages/ $backup_txt{'and'} Help/ $backup_txt{11}</label>             <td class="windowbg2"> 
      </td>                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_mem" id="YaBB_mem" value="1" $pathchecklist{'mem'}/> <label for="YaBB_mem">Members/ $backup_txt{9}</label> 
    </tr>             </td> 
    <tr valign="middle">         </tr><tr> 
      <td align="left" class="windowbg2">            <td class="windowbg2">
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_mem" id="YaBB_mem" value="1" $pathchecklist{'mem'}/> <label for="YaBB_mem">Members/ $backup_txt{9}</label>                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_mes" id="YaBB_mes" value="1" $pathchecklist{'mes'}/> <label for="YaBB_mes">Messages/ $backup_txt{8}</label> 
      </td>            </td>
    </tr>         </tr><tr> 
    <tr valign="middle">             <td class="windowbg2"> 
      <td align="left" class="windowbg2">                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_temp" id="YaBB_temp" value="1" $pathchecklist{'temp'}/> <label for="YaBB_temp">Templates/ $backup_txt{10} $backup_txt{'10a'}</label> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_mes" id="YaBB_mes" value="1" $pathchecklist{'mes'}/> <label for="YaBB_mes">Messages/ $backup_txt{8}</label>             </td> 
      </td>         </tr><tr> 
    </tr>             <td class="windowbg2"> 
    <tr valign="middle">                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_var" id="YaBB_var" value="1" $pathchecklist{'var'}/> <label for="YaBB_var">Variables/ $backup_txt{12}</label> 
      <td align="left" class="windowbg2">             </td> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_temp" id="YaBB_temp" value="1" $pathchecklist{'temp'}/> <label for="YaBB_temp">Templates/ $backup_txt{10} $backup_txt{'10a'}</label>         </tr><tr> 
      </td>             <td class="windowbg2"> 
    </tr>                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_html" id="YaBB_html" value="1" $pathchecklist{'html'}/> <label for="YaBB_html">yabbfiles $backup_txt{14}</label> 
    <tr valign="middle">             </td> 
      <td align="left" class="windowbg2">         </tr><tr> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_var" id="YaBB_var" value="1" $pathchecklist{'var'}/> <label for="YaBB_var">Variables/ $backup_txt{12}</label>             <td class="windowbg2"> 
      </td>                 <input type="checkbox" onclick="checkYaBB()" name="YaBB_upld" id="YaBB_upld" value="1" $pathchecklist{'upld'}/> <label for="YaBB_upld">yabbfiles/Attachments, yabbfiles/PMAttachments, $backup_txt{'and'} yabbfiles/avatars $backup_txt{'14a'}</label> 
    </tr>             </td> 
    <tr valign="middle">         </tr><tr> 
      <td align="left" class="windowbg2">             <td class="catbg"><b>$backup_txt{15}</b></td> 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_html" id="YaBB_html" value="1" $pathchecklist{'html'}/> <label for="YaBB_html">yabbfiles $backup_txt{14}</label>         </tr><tr> 
      </td>             <td class="windowbg">$backup_txt{16}</td> 
    </tr>         </tr>~; 
    <tr valign="middle">  
      <td align="left" class="windowbg2">     # Make a list of modules that we can use with Tar::Archive 
        <input type="checkbox" onclick="checkYaBB()" name="YaBB_upld" id="YaBB_upld" value="1" $pathchecklist{'upld'}/> <label for="YaBB_upld">yabbfiles/Attachments $backup_txt{'and'} yabbfiles/avatars/UserAvatars $backup_txt{'14a'}</label>     $tarcompress1 = qq~<tr> 
      </td>             <td class="windowbg"> 
    </tr>                 <input type="radio" name="tarmodulecompress" id="tarmodulecompress" value="none" $methodchecklist{'none'}/> <label for="tarmodulecompress">$backup_txt{17}</label> 
    <tr valign="middle">             </td> 
      <td align="left" class="catbg">         </tr>~; 
        <b>$backup_txt{15}</b>  
      </td>     my $label_id; 
    </tr>     foreach my $module (qw(Compress::Zlib IO::Compress::Bzip2)) { 
    <tr valign="middle">         $label_id++; 
      <td align="left" class="windowbg">         $input = 
        $backup_txt{16}  qq~name="tarmodulecompress" id="label_$label_id" value="$module" $methodchecklist{$module}~; 
      </td>         eval "use $module();"; 
    </tr>~;         if ($@) { 
             $input        = qq~disabled="disabled" id="label_$label_id"~;
   # Make a list of modules that we can use with Tar::Archive             $style        = q~backup-disabled~; 
   $tarcompress1 = qq~             $disabledtext = $backup_txt{41}; 
    <tr valign="middle">         } 
      <td align="left" class="windowbg">         else { 
        <input type="radio" name="tarmodulecompress" id="tarmodulecompress" value="none" $methodchecklist{'none'}/> <label for="tarmodulecompress">$backup_txt{17}</label>             ( $style, $disabledtext ) = ( q{}, q{} ); 
      </td>         } 
    </tr>~;         $tarcompress1 .= qq~<tr> 
             <td class="windowbg $style">
   my $label_id;                 <input type="radio" $input/> <label for="label_$label_id">$module $backup_txt{18} $disabledtext</label> 
   foreach $module (qw(Compress::Zlib Compress::Bzip2)) {             </td> 
       $label_id++;         </tr>~; 
       $input = qq~name="tarmodulecompress" id="label_$label_id" value="$module" $methodchecklist{$module}~;     } 
       eval "use $module();";  
       if ($@) {     $tarcompress1 .= q~<tr> 
           $input = qq~disabled="disabled"~;             <td class="windowbg">&nbsp;</td> 
           $style = qq~style="font-style:italic; color:grey"~;         </tr>~; 
           $disabledtext = $backup_txt{41};  
       } else {     # Make a list of compression commands we can use with /usr/bin/tar 
           ($style,$disabledtext) = ('','');     $tarcompress2 = qq~<tr> 
       }             <td class="windowbg"> 
       $tarcompress1 .= qq~                 <input type="radio" name="bintarcompress" id="bintarcompress" value="none" $methodchecklist{'none'}/> <label for="bintarcompress">$backup_txt{17}</label> 
    <tr valign="middle">             </td> 
      <td align="left" class="windowbg" $style>         </tr>~; 
        <input type="radio" $input/> <label for="label_$label_id">$module $backup_txt{18} $disabledtext</label>  
      </td>     foreach my $command ( "$backupprogbin/gzip", "$backupprogbin/bzip2" ) { 
    </tr>~;         $label_id++; 
   }         $input = 
  qq~name="bintarcompress" id="label_$label_id" value="$command" $methodchecklist{$command}~;
   $tarcompress1 .= qq~         $newcommand = CheckPath($command); 
    <tr valign="middle">         if ( !$newcommand ) { 
      <td align="left" class="windowbg">             $input        = qq~disabled="disabled" id="label_$label_id"~; 
        &nbsp;             $style        = q~backup-disabled~; 
      </td>             $disabledtext = $backup_txt{41}; 
    </tr>~;             $newcommand   = $command; 
         }
   # Make a list of compression commands we can use with /usr/bin/tar         else { 
   $tarcompress2 = qq~             ( $style, $disabledtext ) = ( q{}, q{} ); 
    <tr valign="middle">         } 
      <td align="left" class="windowbg">         $tarcompress2 .= qq~<tr> 
        <input type="radio" name="bintarcompress" id="bintarcompress" value="none" $methodchecklist{'none'}/> <label for="bintarcompress">$backup_txt{17}</label>             <td class="windowbg $style"> 
      </td>                 <input type="radio" $input/> <label for="label_$label_id">$newcommand $backup_txt{18} $disabledtext</label> 
    </tr>~;             </td> 
         </tr>~;
   foreach $command (qw( gzip bzip2)) {     } 
       $label_id++;  
       $input = qq~name="bintarcompress" id="label_$label_id" value="$command" $methodchecklist{$command}~;     $tarcompress2 .= q~<tr> 
       $newcommand = &CheckPath($command);             <td class="windowbg">&nbsp;</td> 
       if (!$newcommand) {         </tr>~; 
           $input = qq~disabled="disabled"~;  
           $style = qq~style="font-style:italic; color:grey"~;  # Display the commands we can use for compression 
           $disabledtext = $backup_txt{41};  # Non-translated here, as I doubt there are words to describe "tar" in another language 
           $newcommand = $command;     $input = 
       } else {  qq~name="backupmethod" id="backupmethod1" value="$backupprogusr/tar" onclick="domodulecheck('$backupprogusr/tar')" $methodchecklist{"$backupprogusr/tar"}~; 
           ($style,$disabledtext) = ('','');     $newcommand = CheckPath("$backupprogusr/tar"); 
       }     if ($newcommand) { 
       $tarcompress2 .= qq~         if ( 
    <tr valign="middle">             ak_system( 
      <td align="left" class="windowbg" $style>                 "tar -cf $vardir/backuptest.$curtime.tar ./$yyexec.$yyext") 
        <input type="radio" $input/> <label for="label_$label_id">$newcommand $backup_txt{18} $disabledtext</label>           ) 
      </td>         { 
    </tr>~;             ( $style, $disabledtext ) = ( q{}, q{} ); 
   }             unlink "$vardir/backuptest.$curtime.tar"; 
         }
   $tarcompress2 .= qq~         else { 
    <tr valign="middle">             $input        = qq~disabled="disabled" id="backupmethod1"~; 
      <td align="left" class="windowbg">             $style        = q~backup-disabled~; 
        &nbsp;             $disabledtext = ": Tar $backup_txt{31}: $!. $backup_txt{32} " 
      </td>               . ( $CHILD_ERROR >> 8 ); 
    </tr>~;         } 
     }
   # Display the commands we can use for compression     else { 
   # Non-translated here, as I doubt there are words to describe "tar" in another language         $input        = qq~disabled="disabled" id="backupmethod1"~; 
   $input = qq~name="backupmethod" id="backupmethod1" value="/tar" onclick="domodulecheck('/tar')" $methodchecklist{'/tar'}~;         $style        = q~backup-disabled~; 
   $newcommand = &CheckPath('/tar');         $disabledtext = $backup_txt{41}; 
   if ($newcommand) {     } 
       if (&ak_system("tar -cf $vardir/backuptest.$curtime.tar ./$yyexec.$yyext")) {     $yymain .= qq~<tr> 
           ($style,$disabledtext) = ('','');             <td class="windowbg2"><label for="backupprogusr">$backup_txt{'path1'}</label> <input id="backupprogusr" type="text" value="$backupprogusr" size="20" name="backupprogusr" /> 
           unlink("$vardir/backuptest.$curtime.tar");                 <br /><label for="backupprogbin">$backup_txt{'path2'}</label> <input id="backupprogbin" type="text" value="$backupprogbin" size="20" name="backupprogbin" /> 
       } else {                 <br />$backup_txt{'path3'} 
           $input = qq~disabled="disabled"~;             </td> 
           $style = qq~style="font-style:italic; color:grey"~;         </tr><tr> 
           $disabledtext = ": Tar $backup_txt{31}: $!. $backup_txt{32} " . ($? >> 8);             <td class="windowbg2 $style"> 
       }                 <input type="radio" $input/> <label for="backupmethod1">Tar ($newcommand) $disabledtext</label> 
   } else {             </td> 
       $input = qq~disabled="disabled"~;         </tr>$tarcompress2~; 
       $style = qq~style="font-style:italic; color:grey"~;  
       $disabledtext = $backup_txt{41};     $input = 
   }  qq~name="backupmethod" id="backupmethod2" value="$backupprogusr/zip" onclick="domodulecheck('$backupprogusr/zip')" $methodchecklist{"$backupprogusr/zip"}~; 
   $yymain .= qq~     $newcommand = CheckPath("$backupprogusr/zip"); 
    <tr valign="middle">     if ($newcommand) { 
      <td align="left" class="windowbg2" $style>         if ( 
        <input type="radio" $input/> <label for="backupmethod1">Tar ($newcommand) $disabledtext</label>             ak_system( 
      </td>                 "zip -gq $vardir/backuptest.$curtime.zip ./$yyexec.$yyext") 
    </tr>$tarcompress2~;           ) 
         {
   $input = qq~name="backupmethod" id="backupmethod2" value="/zip" onclick="domodulecheck('/zip')" $methodchecklist{'/zip'}~;             ( $style, $disabledtext ) = ( q{}, q{} ); 
   $newcommand = &CheckPath('/zip');             unlink "$vardir/backuptest.$curtime.zip"; 
   if ($newcommand) {         } 
       if (&ak_system("zip -gq $vardir/backuptest.$curtime.zip ./$yyexec.$yyext")) {        else {
           ($style,$disabledtext) = ('','');             $input        = qq~disabled="disabled" id="backupmethod2"~; 
           unlink("$vardir/backuptest.$curtime.zip");             $style        = q~backup-disabled~; 
       } else {             $disabledtext = ": Zip $backup_txt{31}: $!. $backup_txt{32} " 
           $input = qq~disabled="disabled"~;               . ( $CHILD_ERROR >> 8 ); 
           $style = qq~style="font-style:italic; color:grey"~;         } 
           $disabledtext = ": Zip $backup_txt{31}: $!. $backup_txt{32} " . ($? >> 8);     } 
       }     else { 
   } else {         $input        = qq~disabled="disabled" id="backupmethod2"~; 
       $input = qq~disabled="disabled"~;         $style        = q~backup-disabled~; 
       $style = qq~style="font-style:italic; color:grey"~;         $disabledtext = $backup_txt{41}; 
       $disabledtext = $backup_txt{41};     } 
   }     $yymain .= qq~<tr> 
   $yymain .= qq~             <td class="windowbg2 $style"> 
    <tr valign="middle">                 <input type="radio" $input/> <label for="backupmethod2">Zip ($newcommand) $disabledtext</label> 
      <td align="left" class="windowbg2" $style>             </td> 
        <input type="radio" $input/> <label for="backupmethod2">Zip ($newcommand) $disabledtext</label>         </tr><tr> 
      </td>             <td class="windowbg">&nbsp;</td> 
    </tr>         </tr>~; 
    <tr valign="middle">  
      <td align="left" class="windowbg">     # Display the modules that we can use 
        &nbsp;     foreach my $module (qw(Archive::Tar Archive::Zip)) { 
      </td>         $i++; 
    </tr>~;         $input = 
  qq~name="backupmethod" id="backupmethod3_$i" value="$module" onclick="domodulecheck('$module')" $methodchecklist{$module}~;
   # Display the modules that we can use         eval "use $module();"; 
   foreach $module (qw(Archive::Tar Archive::Zip)) {        if ($@) {
       $i++;             $input        = qq~disabled="disabled" id="backupmethod3_$i"~; 
       $input = qq~name="backupmethod" id="backupmethod3_$i" value="$module" onclick="domodulecheck('$module')" $methodchecklist{$module}~;             $style        = q~backup-disabled~; 
       eval "use $module();";             $disabledtext = $backup_txt{41}; 
       if ($@) {         } 
           $input = qq~disabled="disabled"~;         else { 
           $style = qq~style="font-style:italic; color:grey"~;             ( $style, $disabledtext ) = ( q{}, q{} ); 
           $disabledtext = $backup_txt{41};         } 
       } else {         $yymain .= qq~<tr> 
           ($style,$disabledtext) = ('','');             <td class="windowbg2 $style"> 
       }                 <input type="radio" $input/> <label for="backupmethod3_$i">$module $disabledtext</label> 
       $yymain .= qq~             </td> 
    <tr valign="middle">         </tr>~; 
      <td align="left" class="windowbg2" $style>         if ( $module eq 'Archive::Tar' ) { $yymain .= $tarcompress1; } 
        <input type="radio" $input/> <label for="backupmethod3_$i">$module $disabledtext</label>     } 
      </td>  
    </tr>~;     # Last but not least, the submit button and the $backupdir path. 
       if ($module eq 'Archive::Tar') { $yymain .= $tarcompress1; }     $backupdir ||= "$boarddir/Backups"; 
   }     if ( $backupdir =~ s/^\.\///xsm ) { 
         $ENV{'SCRIPT_FILENAME'} =~ /(.*\/)/xsm;
   # Last but not least, the submit button and the $backupdir path.         $backupdir = "$1$backupdir"; 
   $backupdir ||= "$boarddir/Backups";     } 
   if ($backupdir =~ s|^\./||) {     $yymain .= qq~<tr> 
       $ENV{'SCRIPT_FILENAME'} =~ /(.*\/)/;             <td class="catbg"><b>$backup_txt{19}</b></td> 
       $backupdir = "$1$backupdir";         </tr><tr> 
   }             <td class="windowbg2"> 
   $yymain .= qq~                 <label for="backupdir">$backup_txt{'19a'}</label>: <input type="text" name="backupdir" id="backupdir" value="$backupdir" size="80" /> 
    <tr valign="middle">             </td> 
      <td align="left" class="catbg">         </tr><tr> 
        <b>$backup_txt{19}</b>             <td class="catbg"><b>$backup_txt{'19b'}</b></td> 
      </td>         </tr><tr> 
    </tr>             <td class="windowbg2"> 
    <tr valign="middle">                 <label for="rememberbackup">$backup_txt{'19c'}</label> <input type="text" name="rememberbackup" id="rememberbackup" value="~ 
      <td align="left" class="windowbg2">       . ( $rememberbackup / 86_400 ) 
        <label for="backupdir">$backup_txt{'19a'}</label>: <input type="text" name="backupdir" id="backupdir" value="$backupdir" size="80"/>       . qq~" size="3"/> <label for="rememberbackup">$backup_txt{'19d'}</label> 
      </td>            </td>
    </tr>        </tr>
    <tr valign="middle">     </table> 
      <td align="left" class="catbg">     </div> 
        <b>$backup_txt{'19b'}</b>     <div class="bordercolor rightboxdiv"> 
      </td>     <table class="border-space pad-cell"> 
    </tr>         <tr> 
    <tr valign="middle">             <th class="titlebg">$admin_img{'prefimg'} $admin_txt{'10'}</th> 
      <td align="left" class="windowbg2">         </tr><tr> 
        <label for="rememberbackup">$backup_txt{'19c'}</label> <input type="text" name="rememberbackup" id="rememberbackup" value="~ . ($rememberbackup / 86400) . qq~" size="3"/> <label for="rememberbackup">$backup_txt{'19d'}</label>             <td class="catbg center"> 
      </td>                 <input type="submit" value="$backup_txt{20}" class="button" /> 
    </tr>             </td> 
    <tr valign="middle">         </tr> 
      <td align="center" class="catbg">     </table> 
        <input type="submit" name="submit" value="$backup_txt{20}" class="button" />     </div> 
      </td>  </form>
    </tr>  <script type="text/javascript"> 
  </table>  
</div>  
</form>  
<script type="text/javascript">  
<!--  
$presetjavascriptcode $presetjavascriptcode
   
   function BackupNewest(lastbackup) {    function BackupNewest(lastbackup) {
       document.getElementsByName("backupnewest")[0].value = lastbackup;        document.getElementsByName("backupnewest")[0].value = lastbackup;
       if (!window.submitted) {        if (!window.submitted) {
           window.submitted = true;            window.submitted = true;
           document.runbackup.submit();            document.runbackup.submit();
       }        }
   }    }
//-->  </script>~; 
</script>~;  
     # Here we go again with another table. Here is the backup button area
   # Here we go again with another table. Here's the backup button area     if ($backupsettingsloaded) { 
   if ($backupsettingsloaded) {  
       # Look for the files.        # Look for the files.
       opendir(BACKUPDIR, $backupdir);         opendir BACKUPDIR, $backupdir; 
       @backups = readdir(BACKUPDIR);         @backups = readdir BACKUPDIR; 
       closedir(BACKUPDIR);         closedir BACKUPDIR; 
       #@backup_paths = qw(Admin_Sources Boards Languages Members Messages Templates Variables yabbfiles);  
         my ( $lastbackupfiletime, $filename );
       my ($lastbackupfiletime,$filename);         foreach my $file ( 
       foreach $file (map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, /(\d+)/, $_] } @backups) {             map          { $_->[0] } 
           if ($file !~ /\A(backup)(n?)\.(\d+)\.([^\.]+)\.(.+)/) { next; }            reverse sort { $a->[1] <=> $b->[1] }
           $lastbackupfiletime = $3 if !$lastbackupfiletime;             map          { [ $_, /(\d+)/xsm, $_ ] } @backups 
           my $filesize = -s "$backupdir/$file";           ) 
           $filesize = int($filesize / 1024); # Measure it in kilobytes         { 
           if ($filesize > 1024 * 4) { $filesize = int($filesize / 1024) . ' MB'; } # Measure it in megabytes             if ( $file !~ /\A(backup)(n?)\.(\d+)\.([^\.]+)\.(.+)/xsm ) { next; } 
           else { $filesize .= ' KB'; } # Label it             if ( !$lastbackupfiletime ) { $lastbackupfiletime = $3; } 
           my @dirs;             my $filesize = -s "$backupdir/$file"; 
           foreach (split(/_/, $4)) {             $filesize = int( $filesize / 1024 );    # Measure it in kilobytes 
               push(@dirs, $dirs{$_});             if ( $filesize > 1024 * 4 ) { 
           }                 $filesize = int( $filesize / 1024 ) . ' MB'; 
             }                                       # Measure it in megabytes
           $filename = "$1$2.$3.$4.$5";             else { $filesize .= ' KB'; }            # Label it 
           $filelist .= qq~          <tr><td align="left">~ . &timeformat($3) . qq~</td><td align="right">$filesize</td><td align="left">- ~ . join('<br />- ', @dirs) . qq~</td><td align="left">~ . ($2 ? "<acronym title='$backup_txt{62}'>$backup_txt{'62a'}</acronym><br />" : '') . qq~$5</td><td><a href="$adminurl?action=downloadbackup;backupid=$file">$backup_txt{60}</a></td><td><a href="$adminurl?action=emailbackup;backupid=$file">$backup_txt{52}</a></td><td><a href="$adminurl?action=runbackup;runbackup_again=$1$2.0.$4.$5">$backup_txt{61}</a><br /><a href="$adminurl?action=runbackup;runbackup_again=$filename">$backup_txt{62}</a></td><td align="center">~ . (($5 =~ /^a\.tar/|| $5 !~ /tar/) ? '-' : qq~<a href="$adminurl?action=recoverbackup1;recoverfile=$filename">$backup_txt{63}</a>~) . qq~</td><td><a href="$adminurl?action=deletebackup;backupid=$file">$backup_txt{53}</a></td></tr>\n~;             my @dirs; 
       }             foreach ( split /_/xsm, $4 ) { 
                 push @dirs, $dirs{$_};
       $filelist ||= qq~          <tr><td align="left" colspan="9"><i>$backup_txt{38}</i></td></tr>\n~;             } 
   
       $yymain .= qq~             $filename = "$1$2.$3.$4.$5"; 
<br />             $filelist .= q~            <tr> 
<form action="$adminurl?action=runbackup" method="post" name="runbackup">                 <td>~ 
<input type="hidden" name="backupnewest" value="0" />               . timeformat($3) . qq~</td> 
<div class="bordercolor" style="padding: 0px; width: 99%; margin-left: 0px; margin-right: auto;">                 <td class="right">$filesize</td> 
  <table width="100%" cellspacing="1" cellpadding="4">                 <td>- ~ 
    <tr valign="middle">               . join( '<br />- ', @dirs ) . q~</td> 
      <td align="left" class="titlebg" colspan="2">                 <td>~ 
        <img src="$imagesdir/preferences.gif" alt="" border="0" /><b>$backup_txt{21}</b>               . ( 
      </td>                 $2 
    </tr>                 ? "<abbr title='$backup_txt{62}'>$backup_txt{'62a'}</abbr><br />" 
    <tr valign="middle">                 : q{} 
      <td align="left" class="windowbg2" colspan="2">               ) 
        $backup_txt{22} <tt>$backupdir</tt> $backup_txt{23}<br />               . qq~$5</td> 
        <br />                 <td><a href="$adminurl?action=downloadbackup;backupid=$file">$backup_txt{60}</a></td> 
        $backup_txt{24}                 <td><a href="$adminurl?action=emailbackup;backupid=$file">$backup_txt{52}</a></td> 
      </td>                 <td><a href="$adminurl?action=runbackup;runbackup_again=$1$2.0.$4.$5">$backup_txt{61}</a> 
    </tr>                     <br /><a href="$adminurl?action=runbackup;runbackup_again=$filename">$backup_txt{62}</a></td> 
    <tr valign="middle">                 <td class="center">~ 
      <td align="center" class="catbg" colspan="2">               . ( 
        <table width="100%"><tr><td align="center">                 ( $5 =~ /^a\.tar/xsm || $5 !~ /tar/xsm ) 
        <input type="button" name="submit1" value="$backup_txt{25}" onclick="BackupNewest(0);" class="button" />~;                 ? q{-} 
                 : qq~<a href="$adminurl?action=recoverbackup1;recoverfile=$filename">$backup_txt{63}</a>~
       if ($lastbackupfiletime && $lastbackup == $lastbackupfiletime) {               ) 
           $lastbackupfiletime = &timeformat($lastbackup,1);               . qq~</td> 
           $lastbackupfiletime =~ s/<.*?>//g;                 <td><a href="$adminurl?action=deletebackup;backupid=$file">$backup_txt{53}</a></td> 
           if ($backupmethod eq '/zip') {             </tr>~; 
#                            $lastbackupfiletime =~ s/ .+//;         } 
                       @lbt = split / /, $lastbackupfiletime;  
                       $lastbackupfiletime = join q{ }, $lbt[0],$lbt[1],$lbt[2];         $filelist ||= qq~<tr> 
                       }                 <td colspan="9"><i>$backup_txt{38}</i></td> 
           $yymain .= qq~</td></tr><tr><td align="center">             </tr>~; 
        <input type="button" name="submit2" value="$backup_txt{'25a'} $lastbackupfiletime" onclick="BackupNewest($lastbackup);" class="button" />~;  
       }         $yymain .= qq~ 
  <form action="$adminurl?action=runbackup" method="post" name="runbackup">
    $yymain .= qq~  <input type="hidden" name="backupnewest" value="0" /> 
        </td></tr></table>  <div class="bordercolor rightboxdiv"> 
      </td>  <table class="border-space pad-cell" style="margin-bottom: .5em;"> 
    </tr>     <tr> 
  </table>         <td class="titlebg" colspan="2">$admin_img{'prefimg'} <b>$backup_txt{21}</b></td> 
</div>     </tr><tr> 
</form>         <td class="windowbg2" colspan="2"> 
             $backup_txt{22} <span style="font-family: monospace;">$backupdir</span> $backup_txt{23}
<br />            <br />
             <br />
<div class="bordercolor" style="padding: 0px; width: 99%; margin-left: 0px; margin-right: auto;">             $backup_txt{24} 
  <table width="100%" cellspacing="1" cellpadding="4">         </td> 
    <tr valign="middle">     </tr> 
      <td align="left" class="titlebg" colspan="2">  </table> 
        <img src="$imagesdir/preferences.gif" alt="" border="0" /><b>$backup_txt{35}</b>  </div> 
      </td>  <div class="bordercolor rightboxdiv"> 
    </tr>  <table class="border-space pad-cell" style="margin-bottom: .5em;"> 
    <tr valign="middle">     <tr> 
      <td align="left" class="windowbg2" colspan="2">         <th class="titlebg">$admin_img{'prefimg'} $admin_txt{'10'}</th> 
        $backup_txt{37} <i>${$uid.$username}{'email'}</i> $backup_txt{'37a'}<br />     </tr><tr> 
        $backup_txt{36} <tt>$backupdir</tt>         <td class="catbg center"> 
        <table border="1" cellspacing="1" cellpadding="4">             <input type="button" name="submit1" value="$backup_txt{25}" onclick="BackupNewest(0);" class="button" />~; 
         <tr><td align="center">$backup_txt{70}</td><td align="center">$backup_txt{71}</td><td align="center">$backup_txt{72}</td><td align="center">$backup_txt{73}</td><td align="center" colspan="5">$backup_txt{74}</td></tr>         if ( $lastbackupfiletime && $lastbackup == $lastbackupfiletime ) { 
         $filelist             $lastbackupfiletime = timeformat( $lastbackup, 1 ); 
        </table>             $lastbackupfiletime =~ s/<.*?>//gxsm; 
      </td>             if ( $backupmethod eq "$backupprogusr/zip" ) { 
    </tr>                 @lbt = split / /sm, $lastbackupfiletime; 
  </table>                 $lastbackupfiletime = join q{ }, $lbt[0], $lbt[1], $lbt[2]; 
</div>~;             } 
   }             $yymain .= qq~ 
             <div style="margin-top: .5em;"><input type="button" name="submit2" value="$backup_txt{'25a'} $lastbackupfiletime" onclick="BackupNewest($lastbackup);" class="button" /></div>~;
         }
         $yymain .= qq~
         </td>
     </tr>
  </table>
  </div>
  </form>
  <div class="bordercolor rightboxdiv">
  <table class="border-space pad-cell" style="margin-bottom: .5em;">
     <tr>
         <td class="titlebg" colspan="2">$admin_img{'prefimg'} <b>$backup_txt{35}</b></td>
     </tr><tr>
         <td class="windowbg2" colspan="2">
             $backup_txt{37} <i>${$uid.$username}{'email'}</i> $backup_txt{'37a'}<br />
             $backup_txt{36} <span style="font-family: monospace;">$backupdir</span>
             <table class="border-space pad-cell border">
                 <tr>
                     <td class="center">$backup_txt{70}</td>
                     <td class="center">$backup_txt{71}</td>
                     <td class="center">$backup_txt{72}</td>
                     <td class="center">$backup_txt{73}</td>
                     <td class="center" colspan="5">$backup_txt{74}</td>
                 </tr>
                 $filelist
             </table>
         </td>
     </tr>
  </table>
  </div>~;
     }
   
   &AdminTemplate;     AdminTemplate(); 
     return;
} }
   
sub backupsettings2 { sub backupsettings2 {
   $backupmethod = $FORM{'backupmethod'};    $backupmethod = $FORM{'backupmethod'};
   $compressmethod = $FORM{'bintarcompress'} || $FORM{'tarmodulecompress'} || 'none';     $compressmethod = 
          $FORM{'bintarcompress'}
   # Handle the paths.       || $FORM{'tarmodulecompress'} 
   @backup_paths = ();       || 'none'; 
   if ($FORM{'YaBB_ALL'}) { # handle the magic select all checkbox so Javascript can be disabled and it still work  
       @backup_paths = qw(src bo lan mem mes temp var html upld);     # Handle the paths. 
   } else {     @backup_paths = (); 
       foreach (qw(src bo lan mem mes temp var html upld)) {     if ( $FORM{'YaBB_ALL'} ) 
           if ($FORM{'YaBB_'.$_}) { push(@backup_paths, $_); }     { # handle the magic select all checkbox so Javascript can be disabled and it still work 
       }         @backup_paths = qw(src bo lan mem mes temp var html upld); 
   }    }
     else {
   &check_backup_settings;         foreach (qw(src bo lan mem mes temp var html upld)) { 
             if ( $FORM{ 'YaBB_' . $_ } ) { push @backup_paths, $_; }
   # Set $backupdir         } 
   if (!-w $FORM{'backupdir'}) { &admin_fatal_error("","$backup_txt{42} '$FORM{'backupdir'}'. $backup_txt{43}"); }    }
   
   $backupdir = $FORM{'backupdir'};     check_backup_settings(); 
   $lastbackup = 0; # reset when saving settings new  
   &print_BackupSettings;     # Set $backupdir 
     if ( !-w $FORM{'backupdir'} ) {
   # Set $rememberbackup for alert into Settings.pl         fatal_error( q{}, 
   if ($rememberbackup != $FORM{'rememberbackup'}) {             "$backup_txt{42} '$FORM{'backupdir'}'. $backup_txt{43}" ); 
       $rememberbackup = $FORM{'rememberbackup'};     } 
       fopen(SETTINGS, "$vardir/Settings.pl");  
       @settings = <SETTINGS>;     $backupdir     = $FORM{'backupdir'}; 
       fclose(SETTINGS);     $backupprogusr = $FORM{'backupprogusr'}; 
       for ($i = 0; $i < @settings; $i++) {     $backupprogbin = $FORM{'backupprogbin'} || '/usr/bin'; 
           if ($settings[$i] =~ /\$rememberbackup = \d+;/) {  
               $rememberbackup = 0 if !$rememberbackup;     $lastbackup = 0;    # reset when saving settings new 
               $rememberbackup *= 86400; # days in seconds     print_BackupSettings(); 
               $settings[$i] =~ s/\$rememberbackup = \d+;/\$rememberbackup = $rememberbackup;/;  
           }     # Set $rememberbackup for alert into Settings.pm 
       }     if ( $rememberbackup != $FORM{'rememberbackup'} ) { 
       # if \$rememberbackup = is not allready in Settings.pl         $rememberbackup = $FORM{'rememberbackup'}; 
       if ($rememberbackup && $rememberbackup == $FORM{'rememberbackup'}) {         fopen( SETTINGS, "$vardir/Settings.pm" ); 
           $rememberbackup *= 86400; # days in seconds         @settings = <SETTINGS>; 
           unshift(@settings, "\$rememberbackup = $rememberbackup;\n");         fclose(SETTINGS); 
       }         for my $i ( 0 .. ( @settings - 1 ) ) { 
       fopen(SETTINGS, ">$vardir/Settings.pl");             if ( $settings[$i] =~ /\$rememberbackup = \d+;/sm ) { 
       print SETTINGS @settings;                 if ( !$rememberbackup ) { $rememberbackup = 0; } 
       fclose(SETTINGS);                 $rememberbackup *= 86_400;    # days in seconds 
   }                 $settings[$i] =~ 
  s/\$rememberbackup = \d+;/\$rememberbackup = $rememberbackup;/sm;
   $yySetLocation = qq~$adminurl?action=backupsettings~;             } 
   &redirectexit;         } 
   
         # if \$rememberbackup = is not already in Settings.pm
         if ( $rememberbackup && $rememberbackup == $FORM{'rememberbackup'} ) {
             $rememberbackup *= 86_400;        # days in seconds
             unshift @settings, "\$rememberbackup = $rememberbackup;\n";
         }
         fopen( SETTINGS, ">$vardir/Settings.pm" );
         print {SETTINGS} @settings or croak "$croak{'print'} SETTINGS";
         fclose(SETTINGS);
     }
   
     $yySetLocation = qq~$adminurl?action=backupsettings~;
     redirectexit();
     return;
} }
   
sub check_backup_settings { sub check_backup_settings {
   if (!@backup_paths) { &admin_fatal_error("","$backup_txt{3}"); }    if ( !@backup_paths ) { fatal_error( q{}, "$backup_txt{3}" ); }
   
   if (!$backupmethod) { &admin_fatal_error("","$backup_txt{29} ''"); }    if ( !$backupmethod ) { fatal_error( q{}, "$backup_txt{29}" ); }
   
   if ($backupmethod =~ /::/) { # It's a module, test-require it    if ( $backupmethod =~ /::/xsm ) {    # It is a module, test-require it
       eval "use $backupmethod();";        eval "use $backupmethod();";
       if ($@) { &admin_fatal_error("","$backup_txt{39} $backupmethod $backup_txt{41}"); }         if ($@) { 
   } else {             fatal_error( q{}, "$backup_txt{39} $backupmethod $backup_txt{41}" ); 
       my $newcommand = &CheckPath($backupmethod);         } 
       if (!$newcommand) { &admin_fatal_error("","$backup_txt{40} $backupmethod $backup_txt{41}"); }    }
   }     else { 
         my $newcommand = CheckPath($backupmethod);
   # If we're using /usr/bin/tar, check for the compression method.         if ( !$newcommand ) { 
   if ($backupmethod eq '/tar' && $compressmethod ne 'none') {             fatal_error( q{}, "$backup_txt{40} $backupmethod $backup_txt{41}" ); 
       my $newcommand = &CheckPath($compressmethod);         } 
       if (!$newcommand) { &admin_fatal_error("","$backup_txt{40} $compressmethod $backup_txt{41}"); }    }
   }  
   # If we're using Archive::Tar, check for the compression method.    # If we are using $backupprogusr/tar, check for the compression method.
   elsif ($backupmethod eq 'Archive::Tar' && $compressmethod ne 'none') {    if ( $backupmethod eq "$backupprogusr/tar" && $compressmethod ne 'none' ) {
       eval "use $compressmethod();";         my $newcommand = CheckPath($compressmethod); 
       if ($@) { &admin_fatal_error("","$backup_txt{39} $compressmethod $backup_txt{41}"); }         if ( !$newcommand ) { 
   } else {             fatal_error( q{}, 
       $compressmethod = 'none';                 "$backup_txt{40} $compressmethod $backup_txt{41}" ); 
   }        }
     }
   
     # If we are using Archive::Tar, check for the compression method.
     elsif ( $backupmethod eq 'Archive::Tar' && $compressmethod ne 'none' ) {
         eval "use $compressmethod();";
         if ($@) {
             fatal_error( q{},
                 "$backup_txt{39} $compressmethod $backup_txt{41}" );
         }
     }
     else {
         $compressmethod = 'none';
     }
     return;
} }
   
sub print_BackupSettings { sub print_BackupSettings {
   my @newpaths;    my @newpaths;
   foreach my $path (qw(src bo lan mem mes temp var html upld)) {    foreach my $path (qw(src bo lan mem mes temp var html upld)) {
       foreach (@backup_paths) {        foreach (@backup_paths) {
           if ($_ eq $path) { push(@newpaths, $path); last; }            if ( $_ eq $path ) { push @newpaths, $path; last; }
       }        }
   }    }
   @backup_paths = @newpaths;    @backup_paths         = @newpaths;
   $backupsettingsloaded = 1;    $backupsettingsloaded = 1;
   
   require "$admindir/NewSettings.pl";     require Admin::NewSettings; 
   &SaveSettingsTo('Settings.pl');     SaveSettingsTo('Settings.pm'); 
     return;
} }
   
# This routine actually does the backup. # This routine actually does the backup.
sub runbackup { sub runbackup {
   my(@settings, $prevmainsetting, $prevmaintext, $newmaintext, %pathconvert);     my ( @settings, %pathconvert ); 
   
   if ($INFO{'runbackup_again'}) {  
       &admin_fatal_error("","$backup_txt{32} \$INFO{'runbackup_again'}=$INFO{'runbackup_again'}") if $INFO{'runbackup_again'} !~ /^backup/;  
   
       my @again = split(/\./, $INFO{'runbackup_again'});     if ( $INFO{'runbackup_again'} ) { 
       $FORM{'backupnewest'} = $again[1];         fatal_error( q{}, 
       @backup_paths = split(/_/, $again[2]);             "$backup_txt{32} \$INFO{'runbackup_again'}=$INFO{'runbackup_again'}" 
       if ($again[3] eq 'a') {         ) if $INFO{'runbackup_again'} !~ /^backup/xsm; 
           $backupmethod = $again[4] eq 'tar' ? 'Archive::Tar' : 'Archive::Zip';  
           $compressmethod = $again[5] ? ($again[5] eq 'gz' ? 'Compress::Zlib' : 'Compress::Bzip2') : 'none';         my @again = split /\./xsm, $INFO{'runbackup_again'}; 
       } else {         $FORM{'backupnewest'} = $again[1]; 
           $backupmethod = $again[3] eq 'tar' ? '/tar' : '/zip';         @backup_paths = split /_/xsm, $again[2]; 
           $compressmethod = $again[4] ? ($again[4] eq 'gz' ? '/gzip' : '/bzip2') : 'none';         if ( $again[3] eq 'a' ) { 
       }             $backupmethod = 
       &check_backup_settings;               $again[4] eq 'tar' ? 'Archive::Tar' : 'Archive::Zip'; 
   }             $compressmethod = 
               $again[5]
   my $backuptime = $INFO{'backuptime'} || time();               ? ( $again[5] eq 'gz' ? 'Compress::Zlib' : 'Compress::Bzip2' ) 
               : 'none';
   my $time_to_jump = time() + $max_process_time;         } 
         else {
   $curtime = $INFO{'curtime'} || $curtime;             $backupmethod = 
   $FORM{'backupnewest'} ||= $INFO{'backupnewest'};