| ############################################################################### |
| ############################################################################### |
| # 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> </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"> </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"~; |
| |
| $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"> </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~; |
| |
| $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"> </td> |
| </tr> |
| </tr>~; |
| <tr valign="middle"> |
| |
| <td align="left" class="windowbg"> |
| # Display the modules that we can use |
| |
| 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'}; |
|