From 2ad1a8bc0cc74ab98f0255657edcc53e54841680 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 May 2013 11:39:36 +0200 Subject: [PATCH] =?UTF-8?q?Revert=20"Update=20accelerator=20changes=20from?= =?UTF-8?q?=20J=C3=B6rn-Ingo=20Weigert."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 5cf2c339680b6922a08ebf1d44dab5c90ba2d5d4. Conflicts: html/html/themes/ipfire/include/functions.pl html/html/themes/maniac/include/functions.pl langs/de/cgi-bin/de.pl langs/en/cgi-bin/en.pl --- config/rootfiles/core/68/filelists/files | 30 - html/cgi-bin/updatexlrator.cgi | 2527 +++++++++-------- html/html/images/updbooster/updxl-globe.gif | Bin 0 -> 1124 bytes html/html/images/updbooster/updxl-gr.gif | Bin 0 -> 898 bytes .../html/images/updbooster/updxl-led-blue.gif | Bin 0 -> 158 bytes .../html/images/updbooster/updxl-led-gray.gif | Bin 0 -> 158 bytes .../images/updbooster/updxl-led-green.gif | Bin 0 -> 898 bytes html/html/images/updbooster/updxl-led-red.gif | Bin 0 -> 898 bytes .../images/updbooster/updxl-led-yellow.gif | Bin 0 -> 158 bytes html/html/images/updbooster/updxl-rd.gif | Bin 0 -> 898 bytes .../images/updbooster/updxl-src-adobe.gif | Bin 1135 -> 1000 bytes .../updbooster/updxl-src-ageofconan.gif | Bin 1171 -> 0 bytes .../images/updbooster/updxl-src-avira.gif | Bin 1127 -> 1045 bytes .../images/updbooster/updxl-src-curse.gif | Bin 1090 -> 0 bytes .../images/updbooster/updxl-src-diabloiii.gif | Bin 979 -> 0 bytes .../images/updbooster/updxl-src-eveonline.gif | Bin 411 -> 0 bytes .../images/updbooster/updxl-src-google.gif | Bin 586 -> 0 bytes .../images/updbooster/updxl-src-ipfire.gif | Bin 1036 -> 0 bytes .../images/updbooster/updxl-src-kaspersky.gif | Bin 628 -> 996 bytes .../images/updbooster/updxl-src-mozilla.gif | Bin 1092 -> 0 bytes .../images/updbooster/updxl-src-nvidia.gif | Bin 1000 -> 0 bytes .../images/updbooster/updxl-src-opera.gif | Bin 1016 -> 0 bytes .../images/updbooster/updxl-src-secunia.gif | Bin 316 -> 0 bytes .../images/updbooster/updxl-src-swtor.gif | Bin 1101 -> 0 bytes html/html/images/updbooster/updxl-src-wot.gif | Bin 114 -> 0 bytes html/html/images/updbooster/updxl-src-wow.gif | Bin 1111 -> 0 bytes html/html/images/updbooster/updxl-yl.gif | Bin 0 -> 158 bytes .../html/themes/ipfire/images/updxl-icons.gif | Bin 2358 -> 0 bytes html/html/themes/ipfire/include/functions.pl | 111 +- html/html/themes/ipfire/include/upxlr.css | 384 --- html/html/themes/maniac/images/Thumbs.db | Bin 0 -> 13312 bytes .../html/themes/maniac/images/updxl-icons.gif | Bin 2358 -> 0 bytes html/html/themes/maniac/include/functions.pl | 206 +- html/html/themes/maniac/include/upxlr.css | 390 --- langs/de/cgi-bin/de.pl | 21 +- langs/en/cgi-bin/en.pl | 19 +- 36 files changed, 1519 insertions(+), 2169 deletions(-) create mode 100644 html/html/images/updbooster/updxl-globe.gif create mode 100644 html/html/images/updbooster/updxl-gr.gif create mode 100644 html/html/images/updbooster/updxl-led-blue.gif create mode 100644 html/html/images/updbooster/updxl-led-gray.gif create mode 100644 html/html/images/updbooster/updxl-led-green.gif create mode 100644 html/html/images/updbooster/updxl-led-red.gif create mode 100644 html/html/images/updbooster/updxl-led-yellow.gif create mode 100644 html/html/images/updbooster/updxl-rd.gif delete mode 100644 html/html/images/updbooster/updxl-src-ageofconan.gif delete mode 100644 html/html/images/updbooster/updxl-src-curse.gif delete mode 100644 html/html/images/updbooster/updxl-src-diabloiii.gif delete mode 100644 html/html/images/updbooster/updxl-src-eveonline.gif delete mode 100644 html/html/images/updbooster/updxl-src-google.gif delete mode 100644 html/html/images/updbooster/updxl-src-ipfire.gif delete mode 100644 html/html/images/updbooster/updxl-src-mozilla.gif delete mode 100644 html/html/images/updbooster/updxl-src-nvidia.gif delete mode 100644 html/html/images/updbooster/updxl-src-opera.gif delete mode 100644 html/html/images/updbooster/updxl-src-secunia.gif delete mode 100644 html/html/images/updbooster/updxl-src-swtor.gif delete mode 100644 html/html/images/updbooster/updxl-src-wot.gif delete mode 100644 html/html/images/updbooster/updxl-src-wow.gif create mode 100644 html/html/images/updbooster/updxl-yl.gif delete mode 100644 html/html/themes/ipfire/images/updxl-icons.gif delete mode 100644 html/html/themes/ipfire/include/upxlr.css create mode 100644 html/html/themes/maniac/images/Thumbs.db delete mode 100644 html/html/themes/maniac/images/updxl-icons.gif delete mode 100644 html/html/themes/maniac/include/upxlr.css diff --git a/config/rootfiles/core/68/filelists/files b/config/rootfiles/core/68/filelists/files index c96e7cfa0..794039d08 100644 --- a/config/rootfiles/core/68/filelists/files +++ b/config/rootfiles/core/68/filelists/files @@ -4,39 +4,9 @@ etc/modprobe.d/blacklist srv/web/ipfire/cgi-bin/connections.cgi srv/web/ipfire/cgi-bin/ovpnmain.cgi srv/web/ipfire/cgi-bin/services.cgi -srv/web/ipfire/cgi-bin/updatexlrator.cgi -srv/web/ipfire/html/images/updbooster/updxl-src-adobe.gif -srv/web/ipfire/html/images/updbooster/updxl-src-ageofconan.gif -srv/web/ipfire/html/images/updbooster/updxl-src-apple.gif -srv/web/ipfire/html/images/updbooster/updxl-src-avast.gif -srv/web/ipfire/html/images/updbooster/updxl-src-avg.gif -srv/web/ipfire/html/images/updbooster/updxl-src-avira.gif -srv/web/ipfire/html/images/updbooster/updxl-src-curse.gif -srv/web/ipfire/html/images/updbooster/updxl-src-diabloiii.gif -srv/web/ipfire/html/images/updbooster/updxl-src-eveonline.gif -srv/web/ipfire/html/images/updbooster/updxl-src-google.gif -srv/web/ipfire/html/images/updbooster/updxl-src-ipfire.gif -srv/web/ipfire/html/images/updbooster/updxl-src-kaspersky.gif -srv/web/ipfire/html/images/updbooster/updxl-src-linux.gif -srv/web/ipfire/html/images/updbooster/updxl-src-microsoft.gif -srv/web/ipfire/html/images/updbooster/updxl-src-mozilla.gif -srv/web/ipfire/html/images/updbooster/updxl-src-nvidia.gif -srv/web/ipfire/html/images/updbooster/updxl-src-opera.gif -srv/web/ipfire/html/images/updbooster/updxl-src-secunia.gif -srv/web/ipfire/html/images/updbooster/updxl-src-swtor.gif -srv/web/ipfire/html/images/updbooster/updxl-src-symantec.gif -srv/web/ipfire/html/images/updbooster/updxl-src-trendmicro.gif -srv/web/ipfire/html/images/updbooster/updxl-src-unknown.gif -srv/web/ipfire/html/images/updbooster/updxl-src-windows.gif -srv/web/ipfire/html/images/updbooster/updxl-src-wot.gif -srv/web/ipfire/html/images/updbooster/updxl-src-wow.gif srv/web/ipfire/html/themes/ipfire/include/style.css -srv/web/ipfire/html/themes/ipfire/include/upxlr.css srv/web/ipfire/html/themes/ipfire/include/functions.pl -srv/web/ipfire/html/themes/ipfire/images/updxl-icons.gif srv/web/ipfire/html/themes/maniac/include/style.css -srv/web/ipfire/html/themes/maniac/include/upxlr.css -srv/web/ipfire/html/themes/maniac/images/updxl-icons.gif srv/web/ipfire/html/include/jquery-1.9.1.min.js usr/bin/locale usr/local/bin/consort.sh diff --git a/html/cgi-bin/updatexlrator.cgi b/html/cgi-bin/updatexlrator.cgi index 42362c273..df77a86af 100644 --- a/html/cgi-bin/updatexlrator.cgi +++ b/html/cgi-bin/updatexlrator.cgi @@ -36,8 +36,8 @@ use strict; # enable only the following on debugging purpose -use warnings; # no warnings 'once';# 'redefine', 'uninitialized'; -use CGI::Carp 'fatalsToBrowser'; +#use warnings; no warnings 'once';# 'redefine', 'uninitialized'; +#use CGI::Carp 'fatalsToBrowser'; use IO::Socket; @@ -45,6 +45,7 @@ require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; +my %color = (); my %checked=(); my %selected=(); my %netsettings=(); @@ -55,8 +56,6 @@ my %dlinfo=(); my $id=0; my @dfdata=(); my $dfstr=''; -my $dudata=''; -my $dustr=''; my @updatelist=(); my @sources=(); my $sourceurl=''; @@ -64,7 +63,6 @@ my $vendorid=''; my $uuid=''; my $status=0; my $updatefile=''; -my $cachefile=''; my $shortname=''; my $time=''; my $filesize=0; @@ -80,11 +78,11 @@ my $cachehits=0; my $efficiency='0.0'; my @vendors=(); my %vendorstats=(); -my %vendimg = (); -my $repository = '/var/updatecache/'; -my $webhome = '/srv/web/ipfire/html'; -my $webimgdir = '/images/updbooster'; +my $repository = "/var/updatecache/"; +my $webhome = "/srv/web/ipfire/html"; +my $hintcolour = '#FFFFCC'; +my $colourgray = '#808080'; my $sfUnknown='0'; my $sfOk='1'; @@ -93,7 +91,7 @@ my $sfNoSource='3'; my $not_accessed_last=''; -my @errormessages=(); +my $errormessage=''; my @repositorylist=(); my @repositoryfiles=(); @@ -105,6 +103,7 @@ my @metadata=(); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); $xlratorsettings{'ACTION'} = ''; $xlratorsettings{'ENABLE_LOG'} = 'off'; @@ -117,1305 +116,1451 @@ $xlratorsettings{'FULL_AUTOSYNC'} = 'off'; $xlratorsettings{'NOT_ACCESSED_LAST'} = 'month1'; $xlratorsettings{'REMOVE_NOSOURCE'} = 'off'; $xlratorsettings{'REMOVE_OUTDATED'} = 'off'; -$xlratorsettings{'REMOVE_UNKNOWN'} = 'off'; -$xlratorsettings{'REMOVE_TODELETE'} = 'off'; -$xlratorsettings{'TODELETE'} = 'off'; -$xlratorsettings{'show'} = ''; +$xlratorsettings{'REMOVE_OBSOLETE'} = 'off'; &Header::getcgihash(\%xlratorsettings); -# ------------------------------------------------------ -# Check if some ACTION is required -# ------------------------------------------------------ +$xlratorsettings{'EXTENDED_GUI'} = ''; -if ($xlratorsettings{'ACTION'} eq $Lang::tr{'save'}) - { &chksettings('save',\@errormessages); - $xlratorsettings{'show'} = 'settings'; - } -elsif ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr save and restart'}) - { &chksettings('saverestart',\@errormessages); - $xlratorsettings{'show'} = 'settings'; - } -elsif ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr cancel download'}) - { &canceldownload($xlratorsettings{'ID'}); - $xlratorsettings{'show'} = 'overview'; - } -elsif (($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr purge'}) - && (($xlratorsettings{'REMOVE_UNKNOWN'} eq 'on') - || ($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') - || ($xlratorsettings{'REMOVE_OUTDATED'} eq 'on') - || ($xlratorsettings{'REMOVE_TODELETE'} eq 'on'))) - { &delolddata(); - $xlratorsettings{'show'} = 'maintenance'; - } - -# ------------------------------------------------------ -# ACTION Check - End -# ------------------------------------------------------ - -$not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'}; -undef($xlratorsettings{'NOT_ACCESSED_LAST'}); - -if (-e "${General::swroot}/updatexlrator/settings") { - &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); +if ($xlratorsettings{'ACTION'} eq "$Lang::tr{'updxlrtr statistics'} >>") +{ + $xlratorsettings{'EXTENDED_GUI'} = 'statistics'; } -if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') { $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; } +if ($xlratorsettings{'ACTION'} eq "$Lang::tr{'updxlrtr maintenance'} >>") +{ + $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; +} -if ($xlratorsettings{'show'} eq 'overview') { $xlratorsettings{'EXTENDED_GUI'} = 'overview'; } -elsif ($xlratorsettings{'show'} eq 'statistics') { $xlratorsettings{'EXTENDED_GUI'} = 'statistics'; } -elsif ($xlratorsettings{'show'} eq 'settings') { $xlratorsettings{'EXTENDED_GUI'} = 'settings'; } -elsif ($xlratorsettings{'show'} eq 'maintenance') { $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; } -else { $xlratorsettings{'EXTENDED_GUI'} = $xlratorsettings{'VIEW_SETTING'}?$xlratorsettings{'VIEW_SETTING'}:'overview'; } +if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr purge'}) +{ + $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; -&initvendimg; + if (($xlratorsettings{'REMOVE_OBSOLETE'} eq 'on') || ($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') || ($xlratorsettings{'REMOVE_OUTDATED'} eq 'on')) + { + undef (@sources); + undef @repositoryfiles; + foreach (<$repository/*>) + { + if (-d $_) + { + unless (/^$repository\/download$/) { push(@sources,$_); } + } + } + + foreach (@sources) + { + @updatelist=<$_/*>; + $vendorid = substr($_,rindex($_,"/")+1); + foreach(@updatelist) + { + $uuid = substr($_,rindex($_,"/")+1); + if (-e "$_/source.url") + { + open (FILE,"$_/source.url"); + $sourceurl=; + close FILE; + chomp($sourceurl); + $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); + $updatefile = "$vendorid/$uuid/$updatefile"; + push(@repositoryfiles,$updatefile); + } + } + } + + foreach (@repositoryfiles) + { + ($vendorid,$uuid,$updatefile) = split('/'); + + if (-e "$repository/$vendorid/$uuid/status") + { + open (FILE,"$repository/$vendorid/$uuid/status"); + @metadata = ; + close FILE; + chomp(@metadata); + $status = $metadata[-1]; + } + + if (-e "$repository/$vendorid/$uuid/access.log") + { + open (FILE,"$repository/$vendorid/$uuid/access.log"); + @metadata = ; + close FILE; + chomp(@metadata); + $lastaccess = $metadata[-1]; + } + + if (($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') && ($status == $sfNoSource)) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if (($xlratorsettings{'REMOVE_OUTDATED'} eq 'on') && ($status == $sfOutdated)) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if ($xlratorsettings{'REMOVE_OBSOLETE'} eq 'on') + { + if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'week') && ($lastaccess < (time - 604800))) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month1') && ($lastaccess < (time - 2505600))) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month3') && ($lastaccess < (time - 7516800))) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month6') && ($lastaccess < (time - 15033600))) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'year') && ($lastaccess < (time - 31536000))) + { + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } + } + } + } +} + +if ($xlratorsettings{'ACTION'} eq $Lang::tr{'save'}) +{ + if (!($xlratorsettings{'MAX_DISK_USAGE'} =~ /^\d+$/) || ($xlratorsettings{'MAX_DISK_USAGE'} < 1) || ($xlratorsettings{'MAX_DISK_USAGE'} > 100)) + { + $errormessage = $Lang::tr{'updxlrtr invalid disk usage'}; + goto ERROR; + } + if (($xlratorsettings{'MAX_DOWNLOAD_RATE'} ne '') && ((!($xlratorsettings{'MAX_DOWNLOAD_RATE'} =~ /^\d+$/)) || ($xlratorsettings{'MAX_DOWNLOAD_RATE'} < 1))) + { + $errormessage = $Lang::tr{'updxlrtr invalid download rate'}; + goto ERROR; + } + + &savesettings; +} + +if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr save and restart'}) +{ + if (!($xlratorsettings{'MAX_DISK_USAGE'} =~ /^\d+$/) || ($xlratorsettings{'MAX_DISK_USAGE'} < 1) || ($xlratorsettings{'MAX_DISK_USAGE'} > 100)) + { + $errormessage = $Lang::tr{'updxlrtr invalid disk usage'}; + goto ERROR; + } + if (($xlratorsettings{'MAX_DOWNLOAD_RATE'} ne '') && ((!($xlratorsettings{'MAX_DOWNLOAD_RATE'} =~ /^\d+$/)) || ($xlratorsettings{'MAX_DOWNLOAD_RATE'} < 1))) + { + $errormessage = $Lang::tr{'updxlrtr invalid download rate'}; + goto ERROR; + } + if ((!(-e "${General::swroot}/proxy/enable")) && (!(-e "${General::swroot}/proxy/enable_blue"))) + { + $errormessage = $Lang::tr{'updxlrtr web proxy service required'}; + goto ERROR; + } + if (!($proxysettings{'ENABLE_UPDXLRATOR'} eq 'on')) + { + $errormessage = $Lang::tr{'updxlrtr not enabled'}; + goto ERROR; + } + + &savesettings; + + system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); +} + +if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'}) +{ + $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; + + $updatefile = $xlratorsettings{'ID'}; + + unless ($updatefile =~ /^download\//) + { + ($vendorid,$uuid,$updatefile) = split('/',$updatefile); + if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } + } +} + +if (($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr cancel download'}) || ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'})) +{ + $updatefile = $xlratorsettings{'ID'}; + + if ($updatefile =~ /^download\//) + { + ($uuid,$vendorid,$updatefile) = split('/',$updatefile); + + if (-e "$repository/download/$vendorid/$updatefile.info") + { + &General::readhash("$repository/download/$vendorid/$updatefile.info", \%dlinfo); + + $id = &getPID("\\s${General::swroot}/updatexlrator/bin/download\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\\s\\d\\s\\d\$"); + if ($id) { system("/bin/kill -9 $id"); } + $id = &getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$"); + if ($id) { system("/bin/kill -9 $id"); } + + system("rm $repository/download/$vendorid/$updatefile.info"); + } + + if (-e "$repository/download/$vendorid/$updatefile") + { + system("rm $repository/download/$vendorid/$updatefile"); + } + } + +} + +$not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'}; +undef($xlratorsettings{'NOT_ACCESSED_LAST'}); + +if (-e "${General::swroot}/updatexlrator/settings") +{ + &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); +} + +if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') +{ + $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; +} + +ERROR: + +$checked{'ENABLE_LOG'}{'off'} = ''; +$checked{'ENABLE_LOG'}{'on'} = ''; +$checked{'ENABLE_LOG'}{$xlratorsettings{'ENABLE_LOG'}} = "checked='checked'"; +$checked{'PASSIVE_MODE'}{'off'} = ''; +$checked{'PASSIVE_MODE'}{'on'} = ''; +$checked{'PASSIVE_MODE'}{$xlratorsettings{'PASSIVE_MODE'}} = "checked='checked'"; +$checked{'LOW_DOWNLOAD_PRIORITY'}{'off'} = ''; +$checked{'LOW_DOWNLOAD_PRIORITY'}{'on'} = ''; +$checked{'LOW_DOWNLOAD_PRIORITY'}{$xlratorsettings{'LOW_DOWNLOAD_PRIORITY'}} = "checked='checked'"; +$checked{'ENABLE_AUTOCHECK'}{'off'} = ''; +$checked{'ENABLE_AUTOCHECK'}{'on'} = ''; +$checked{'ENABLE_AUTOCHECK'}{$xlratorsettings{'ENABLE_AUTOCHECK'}} = "checked='checked'"; +$checked{'FULL_AUTOSYNC'}{'off'} = ''; +$checked{'FULL_AUTOSYNC'}{'on'} = ''; +$checked{'FULL_AUTOSYNC'}{$xlratorsettings{'FULL_AUTOSYNC'}} = "checked='checked'"; +$checked{'REMOVE_NOSOURCE'}{'off'} = ''; +$checked{'REMOVE_NOSOURCE'}{'on'} = ''; +$checked{'REMOVE_NOSOURCE'}{$xlratorsettings{'REMOVE_NOSOURCE'}} = "checked='checked'"; +$checked{'REMOVE_OUTDATED'}{'off'} = ''; +$checked{'REMOVE_OUTDATED'}{'on'} = ''; +$checked{'REMOVE_OUTDATED'}{$xlratorsettings{'REMOVE_OUTDATED'}} = "checked='checked'"; +$checked{'REMOVE_OBSOLETE'}{'off'} = ''; +$checked{'REMOVE_OBSOLETE'}{'on'} = ''; +$checked{'REMOVE_OBSOLETE'}{$xlratorsettings{'REMOVE_OBSOLETE'}} = "checked='checked'"; + + +$selected{'AUTOCHECK_SCHEDULE'}{'daily'} = ''; +$selected{'AUTOCHECK_SCHEDULE'}{'weekly'} = ''; +$selected{'AUTOCHECK_SCHEDULE'}{'monthly'} = ''; +$selected{'AUTOCHECK_SCHEDULE'}{$xlratorsettings{'AUTOCHECK_SCHEDULE'}} = "selected='selected'"; + +$selected{'NOT_ACCESSED_LAST'}{'week'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month1'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month3'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month6'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'year'} = ''; +$selected{'NOT_ACCESSED_LAST'}{$xlratorsettings{'NOT_ACCESSED_LAST'}} = "selected='selected'"; # ---------------------------------------------------- -# Start Page Output +# Settings dialog # ---------------------------------------------------- &Header::showhttpheaders(); -&Header::openpage($Lang::tr{'updxlrtr configuration'}, 1, '' ); -&Header::openbigbox('100%', 'left', '', scalar(@errormessages)); -# ===================================================================================== -# CACHE OVERVIEW -# ===================================================================================== +&Header::openpage($Lang::tr{'updxlrtr configuration'}, 1, ''); -if ($xlratorsettings{'EXTENDED_GUI'} eq 'overview') { - &Header::openbox('100%', 'left', $Lang::tr{'updxlrtr cache overview'}); - &printfrmview(); - &printerrormsgs(\@errormessages); - &printtbldiskusage ($Lang::tr{'updxlrtr disk usage'},\$repository); - &initdownloaddata(\@downloadfiles); - &printtbldownloads(\@downloadfiles); - &Header::closebox(); - } +&Header::openbigbox('100%', 'left', '', $errormessage); +if ($errormessage) { + &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); + print "$errormessage \n"; + &Header::closebox(); +} + +print "
\n"; + +&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr update accelerator'}"); + +print < + + $Lang::tr{'updxlrtr common settings'} + + + $Lang::tr{'updxlrtr enable log'}: + + + + + + $Lang::tr{'updxlrtr passive mode'}: + + $Lang::tr{'updxlrtr max disk usage'}: + % + + +
+ + + + + + + + + +
$Lang::tr{'updxlrtr performance options'}
$Lang::tr{'updxlrtr low download priority'}:$Lang::tr{'updxlrtr max download rate'}: * +
+
+ + + + + + + + + + + + + + + + +
$Lang::tr{'updxlrtr source checkup'}
$Lang::tr{'updxlrtr enable autocheck'}:$Lang::tr{'updxlrtr source checkup schedule'}: + +
$Lang::tr{'updxlrtr full autosync'}:  
+
+ + + + + +END +; + +print" \n"; + +print" \n"; + +print < +
 >' "; } +print "/>>' "; } +print "/>
+END +; + +&Header::closebox(); + +print "\n"; + +# ---------------------------------------------------- +# List pending downloads - if any +# ---------------------------------------------------- + +if (($xlratorsettings{'EXTENDED_GUI'} ne 'statistics') && ($xlratorsettings{'EXTENDED_GUI'} ne 'maintenance')) +{ + @downloadlist = <$repository/download/*>; + + undef(@downloadfiles); + foreach (@downloadlist) + { + if (-d) + { + my @filelist = <$_/*>; + $vendorid = substr($_,rindex($_,"/")+1); + foreach(@filelist) + { + next if(/\.info$/); + $updatefile = substr($_,rindex($_,"/")+1); + $updatefile .= ":download/$vendorid/$updatefile"; + $updatefile = " ".$updatefile; + push(@downloadfiles, $updatefile); + } + } + } + + if (@downloadfiles) + { + &Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr pending downloads'}"); + + print < + $Lang::tr{'updxlrtr current downloads'} + + + + + + + + + + + + + + + +END +; + $id = 0; + foreach $updatefile (@downloadfiles) + { + $updatefile =~ s/.*://; + my $size_updatefile = 0; + my $mtime = 0; + if(-e "$repository/$updatefile") { + $size_updatefile = (-s "$repository/$updatefile"); + $mtime = &getmtime("$repository/$updatefile"); + } + if (-e "$repository/$updatefile.info") { + &General::readhash("$repository/$updatefile.info", \%dlinfo); + } else { + undef(%dlinfo); + } + + $id++; + if ($id % 2) { + print "\n"; } + else { + print "\n"; } + + $filesize = $size_updatefile; + 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; + + my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); + $DAYdt = sprintf ("%.02d",$DAYdt); + $MONTHdt = sprintf ("%.02d",$MONTHdt+1); + $YEARdt = sprintf ("%.04d",$YEARdt+1900); + $filedate = $YEARdt."-".$MONTHdt."-".$DAYdt; + + ($uuid,$vendorid,$shortname) = split('/',$updatefile); + + print "\t\t\n"; + } else { + print "$Lang::tr{ \n"; + } + + print "\t\t\n"; + } else { + print "" . ucfirst $vendorid . " \n"; + } + + $shortname = substr($updatefile,rindex($updatefile,"/")+1); + $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i; + + $filesize = $dlinfo{'REMOTESIZE'}; + 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; + $dlinfo{'VENDORID'} = ucfirst $vendorid; + + print < $dlinfo{'VENDORID'}  + + + + + +END +; + } + + print "
 $Lang::tr{'updxlrtr source'}$Lang::tr{'updxlrtr filename'}$Lang::tr{'updxlrtr filesize'}$Lang::tr{'date'}$Lang::tr{'updxlrtr progress'} 
 "; + if (&getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$")) + { + print "$Lang::tr{  "; + + if (($vendorid ne '') && (-e "$webhome/images/updbooster/updxl-src-$vendorid.gif")) + { + print "" . ucfirst $vendorid . " $shortname $filesize  $filedate  +END +; + my $percent="0%"; + if ($dlinfo{'REMOTESIZE'} && $size_updatefile) + { + $percent=int(100 / ($dlinfo{'REMOTESIZE'} / $size_updatefile))."%"; + } + print $percent; &percentbar($percent); + print < + +
+ + + +
+
\n
\n\n"; + &printlegenddownload(); + print "
\n"; + + &Header::closebox(); + } +} # ===================================================================================== # CACHE STATISTICS # ===================================================================================== -if ($xlratorsettings{'EXTENDED_GUI'} eq 'statistics') { - &Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache statistics'}"); - &printfrmview(); - &printerrormsgs(\@errormessages); - &initcachestats(); - &printcachestatistics(); - &Header::closebox(); - } +if ($xlratorsettings{'EXTENDED_GUI'} eq 'statistics') +{ + +# ---------------------------------------------------- +# Get statistics +# ---------------------------------------------------- + +@sources=(); +foreach (<$repository/*>) +{ + if (-d $_) + { + unless ((/^$repository\/download$/) || (/^$repository\/lost\+found$/)) { push(@sources,$_); } + } +} + +@vendors=(); +foreach (@sources) +{ + $vendorid=substr($_,rindex($_,'/')+1,length($_)); + push(@vendors,$vendorid); + $vendorstats{$vendorid."_filesize"} = 0; + $vendorstats{$vendorid."_requests"} = 0; + $vendorstats{$vendorid."_files"} = 0; + $vendorstats{$vendorid."_cachehits"} = 0; + $vendorstats{$vendorid."_0"} = 0; + $vendorstats{$vendorid."_1"} = 0; + $vendorstats{$vendorid."_2"} = 0; + $vendorstats{$vendorid."_3"} = 0; + @updatelist=<$_/*>; + foreach $data (@updatelist) + { + if (-e "$data/source.url") + { + open (FILE,"$data/source.url"); + $sourceurl=; + close FILE; + chomp($sourceurl); + $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); + + my $size_updatefile = 0; + if(-e "$data/$updatefile") { + $size_updatefile = (-s "$data/$updatefile"); + } + else + { + # DEBUG + #die "file not found: $data/$updatefile\n"; + } + # + # Total file size + # + $filesize += $size_updatefile; + # + # File size for this source + # + $vendorstats{$vendorid."_filesize"} += $size_updatefile; + # + # Number of requests from cache for this source + # + open (FILE,"$data/access.log"); + @requests=; + close FILE; + chomp(@requests); + $counts = @requests; + $counts--; + $vendorstats{$vendorid."_requests"} += $counts; + $cachehits += $counts; + # + # Total number of files in cache + # + $numfiles++; + # + # Number of files for this source + # + $vendorstats{$vendorid."_files"}++; + # + # Count cache status occurences + # + open (FILE,"$data/status"); + $_=; + close FILE; + chomp; + $vendorstats{$vendorid."_".$_}++; + # + # Calculate cached traffic for this source + # + $vendorstats{$vendorid."_cachehits"} += $counts * $size_updatefile; + # + # Calculate total cached traffic + # + $cachedtraffic += $counts * $size_updatefile; + + } + } +} + +if ($numfiles) { $efficiency = sprintf("%.1f", $cachehits / $numfiles); } + +1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; +1 while $cachedtraffic =~ s/^(-?\d+)(\d{3})/$1.$2/; + +# ---------------------------------------------------- +# Show statistics +# ---------------------------------------------------- + +&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache statistics'}"); + +unless ($numfiles) { print "$Lang::tr{'updxlrtr empty repository'}\n
\n"; } + +print < +$Lang::tr{'updxlrtr disk usage'} + + + + + + + + + +END +; + +open(DF,"/bin/df -h $repository|"); +@dfdata = ; +close DF; +shift(@dfdata); +chomp(@dfdata); +$dfstr = join(' ',@dfdata); +my ($device,$size,$used,$free,$percent,$mount) = split(' ',$dfstr); + +print < + + + + + + +
$Lang::tr{'updxlrtr cache dir'}$Lang::tr{'size'}$Lang::tr{'used'}$Lang::tr{'free'}$Lang::tr{'percentage'}
[$repository]$size$used$free +END +; +&percentbar($percent); +print < +$percent
+END +; + +if ($numfiles) +{ + print < + + + + + + + + + + + + + + + + + + +
$Lang::tr{'updxlrtr summary'}
$Lang::tr{'updxlrtr total files'}:$numfiles$Lang::tr{'updxlrtr total cache size'}:$filesize
$Lang::tr{'updxlrtr efficiency index'}:$efficiency$Lang::tr{'updxlrtr total data from cache'}:$cachedtraffic
+
+ + + + + + + + + + + + + + + + + + + + + + +END +; + +$id = 0; + +foreach (@vendors) +{ + $vendorid = $_; + + unless ($vendorstats{$vendorid . "_files"}) { next; } + + $id++; + if ($id % 2) { + print "\n"; } + else { + print "\n"; } + + print "\n"; + print "\n"; + } elsif ($vendorid =~ /^Microsoft$/i) + { + print "Microsoft \n"; + print "\n"; + } elsif ($vendorid =~ /^Symantec$/i) + { + print "Symantec \n"; + print "\n"; + } elsif ($vendorid =~ /^Linux$/i) + { + print "Linux \n"; + print "\n"; + } elsif ($vendorid =~ /^TrendMicro$/i) + { + print "Trend Micro \n"; + print "\n"; + } elsif ($vendorid =~ /^Apple$/i) + { + print "Apple \n"; + print "\n"; + } elsif ($vendorid =~ /^Avast$/i) + { + print "Avast \n"; + print "\n"; + } elsif ($vendorid =~ /^Avira$/i) + { + print "Avira \n"; + print "\n"; + } elsif ($vendorid =~ /^AVG$/i) + { + print "AVG \n"; + print "\n"; + } elsif ($vendorid =~ /^Ipfire$/i) + { + print "IPFire \n"; + print "\n"; + } else + { + if (-e "/srv/web/ipfire/html/images/updbooster/updxl-src-" . $vendorid . ".gif") + { + print "" . ucfirst $vendorid . " \n"; + } else { + print "" . ucfirst $vendorid . " \n"; + } + print "\n"; + } + + print "\n"; + + unless ($vendorstats{$vendorid."_filesize"}) { $vendorstats{$vendorid."_filesize"} = '0'; } + 1 while $vendorstats{$vendorid."_filesize"} =~ s/^(-?\d+)(\d{3})/$1.$2/; + print "\n"; + + unless ($vendorstats{$vendorid."_cachehits"}) { $vendorstats{$vendorid."_cachehits"} = '0'; } + 1 while $vendorstats{$vendorid."_cachehits"} =~ s/^(-?\d+)(\d{3})/$1.$2/; + print "\n"; + + print "\n"; + + print "\n"; + + print "\n"; + + print "\n"; + + print "\n"; + print "\n"; +} + +print "
$Lang::tr{'updxlrtr statistics by source'}
$Lang::tr{'updxlrtr source'} $Lang::tr{'updxlrtr files'} $Lang::tr{'updxlrtr cache size'} $Lang::tr{'updxlrtr data from cache'}     
 "; + + if ($vendorid =~ /^Adobe$/i) + { + print "Adobe  Adobe  Microsoft  Symantec  Linux  Trend Micro  Apple  Avast  Avira  AVG  IPFire  " . ucfirst $vendorid . " "; + printf "%5d", $vendorstats{$vendorid."_files"}; + print " "; + printf "%15s", $vendorstats{$vendorid."_filesize"}; + print " "; + printf "%15s", $vendorstats{$vendorid."_cachehits"}; + print " "; + printf "%5d", $vendorstats{$vendorid."_1"}; + print "  "; + printf "%5d", $vendorstats{$vendorid."_3"}; + print "  "; + printf "%5d", $vendorstats{$vendorid."_2"}; + print "  "; + printf "%5d", $vendorstats{$vendorid."_0"}; + print "   
\n"; + +print < + + + + + + + + + + + + + + + + + +
  $Lang::tr{'legend'}: $Lang::tr{$Lang::tr{'updxlrtr condition ok'}   $Lang::tr{$Lang::tr{'updxlrtr condition nosource'}   $Lang::tr{$Lang::tr{'updxlrtr condition outdated'}   $Lang::tr{$Lang::tr{'updxlrtr condition unknown'}   
+END +; + +} + +&Header::closebox(); + +} # ===================================================================================== # CACHE MAINTENANCE # ===================================================================================== -if ($xlratorsettings{'EXTENDED_GUI'} eq 'maintenance') { - &Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache maintenance'}"); - &printfrmview(); - &printerrormsgs(\@errormessages); - &initfrmmaintenance(); - &inittblreposdata(); - &printfrmmaintenance('withfiles', \@repositoryfiles); - &Header::closebox(); - } +if ($xlratorsettings{'EXTENDED_GUI'} eq 'maintenance') +{ -# ===================================================================================== -# CACHE SETTINGS -# ===================================================================================== - -if ($xlratorsettings{'EXTENDED_GUI'} eq 'settings') { - &Header::openbox('100%', 'left', $Lang::tr{'updxlrtr cache settings'}); - &printfrmview(); - &printerrormsgs(\@errormessages); - &initfrmsettings(); - &printfrmsettings(); - &Header::closebox(); - } # ---------------------------------------------------- -# End Page Output +# File list dialog # ---------------------------------------------------- -&Header::closebigbox(); -&Header::closepage(); -# ------------------------------------------------------------------- -# Print Form to switch view -# ------------------------------------------------------------------- +&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache maintenance'}"); -sub printfrmview { - print < -
-$Lang::tr{'updxlrtr current view'}: -END -; - if ($xlratorsettings{'EXTENDED_GUI'} eq 'overview') - { print "\n"; } - else - { print "\n"; } - - if ($xlratorsettings{'EXTENDED_GUI'} eq 'statistics') - { print "\n"; } - else - { print "\n"; } - - if ($xlratorsettings{'EXTENDED_GUI'} eq 'maintenance') - { print "\n"; } - else - { print "\n"; } - - if ($xlratorsettings{'EXTENDED_GUI'} eq 'settings') - { print "\n"; } - else - { print "\n"; } - print < - -END -; - return; -} +@sources= <$repository/download/*>; -# ------------------------------------------------------------------- -# Print Error Messages - printerrormsgs(\@errormsgs) -# ------------------------------------------------------------------- - -sub printerrormsgs { - my $errmsgs_ref = shift; - unless (@$errmsgs_ref == 0) { - &Header::openbox('100%', 'left', ''); - print <$Lang::tr{'error messages'}
-END -; - foreach (@$errmsgs_ref) { print "$_
"; } - undef(@$errmsgs_ref); - print "\t\t\t\n"; - &Header::closebox(); +undef @repositoryfiles; +foreach (@sources) +{ + if (-d) + { + @updatelist = <$_/*>; + $vendorid = substr($_,rindex($_,"/")+1); + foreach(@updatelist) + { + next if(/\.info$/); + $updatefile = substr($_,rindex($_,"/")+1); + $updatefile .= ":download/$vendorid/$updatefile"; + $updatefile = " ".$updatefile; + push(@repositoryfiles,$updatefile); + } } } -# ------------------------------------------------------------------- -# Initialize Downloaddata -# ------------------------------------------------------------------- - -sub initdownloaddata { - @downloadlist = <$repository/download/*>; - my $updfile; - my $dlfiles_ref = shift; - undef(@$dlfiles_ref); - foreach (@downloadlist) { - if (-d) { - my @filelist = <$_/*>; - $vendorid = substr($_,rindex($_,"/")+1); - foreach(@filelist) { - next if(/\.info$/); - $updfile = substr($_,rindex($_,"/")+1); - $updfile .= ":download/$vendorid/$updfile"; - $updfile = " ".$updfile; - push(@$dlfiles_ref, $updfile); - } - } - } +undef (@sources); +foreach (<$repository/*>) +{ + if (-d $_) +{ + unless (/^$repository\/download$/) { push(@sources,$_); } + } } -# ------------------------------------------------------------------- -# Print pending Downloadlist -# ------------------------------------------------------------------- +foreach (@sources) +{ + @updatelist=<$_/*>; + $vendorid = substr($_,rindex($_,"/")+1); + foreach(@updatelist) + { + $uuid = substr($_,rindex($_,"/")+1); + if (-e "$_/source.url") + { + open (FILE,"$_/source.url"); + $sourceurl=; + close FILE; + chomp($sourceurl); + $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); + $_ = $updatefile; tr/[A-Z]/[a-z]/; + $updatefile = "$_:$vendorid/$uuid/$updatefile"; + push(@repositoryfiles,$updatefile); + } + } +} -sub printtbldownloads { - my $dllist_ref = shift; - print < -$Lang::tr{'updxlrtr current downloads'} - - - $Lang::tr{'status'} - $Lang::tr{'updxlrtr source'} - $Lang::tr{'updxlrtr filename'} - $Lang::tr{'updxlrtr filesize'} - $Lang::tr{'date'} - $Lang::tr{'updxlrtr progress'} -   - - - - - -END -; - &printlegenddownload(); - print < - - - -END -; - &printtbldldata($dllist_ref); - print < +@repositoryfiles = sort(@repositoryfiles); + +unless (@repositoryfiles) { print "$Lang::tr{'updxlrtr empty repository'}\n
\n"; } + +print < +$Lang::tr{'updxlrtr disk usage'} + + + + + + + + END ; -} -# ------------------------------------------------------------------- -# Print Download Files - printdlfiles(\@dlfiles) -# ------------------------------------------------------------------- +open(DF,"/bin/df -h $repository|"); +@dfdata = ; +close DF; +shift(@dfdata); +chomp(@dfdata); +$dfstr = join(' ',@dfdata); +my ($device,$size,$used,$free,$percent,$mount) = split(' ',$dfstr); -sub printtbldldata { - my $dlfiles_ref = shift; - unless (@$dlfiles_ref) - { print "\n\n\n"; } - else { - $id = 0; - foreach $updatefile (@$dlfiles_ref) { - print "\n"; - $updatefile =~ s/.*://; - my $size_updatefile = 0; - my $mtime = 0; - - if(-e "$repository/$updatefile") { - $size_updatefile = (-s "$repository/$updatefile"); - $mtime = &getmtime("$repository/$updatefile"); - } - - if (-e "$repository/$updatefile.info") { &General::readhash("$repository/$updatefile.info", \%dlinfo); } - else { undef(%dlinfo); } - - $filesize = $size_updatefile; - 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); - my $percent = '0'; - $DAYdt = sprintf ("%.02d",$DAYdt); - $MONTHdt = sprintf ("%.02d",$MONTHdt+1); - $YEARdt = sprintf ("%.04d",$YEARdt+1900); - $filedate = $DAYdt.".".$MONTHdt.".".$YEARdt; - ($uuid,$vendorid,$shortname) = split('/',$updatefile); - $shortname = substr($updatefile,rindex($updatefile,"/")+1); - $shortname =~ s/(.*)_([\da-f]{8})*(\.(exe|cab|psf|msu)$)/$1_$2*$3/i; - unless (length($shortname) <= 50) { - my $fext = substr($shortname,rindex("$shortname",'.')); - $shortname = substr($shortname,0,44-length($fext)); - $shortname .= "[...] $fext"; - } - $filesize = $dlinfo{'REMOTESIZE'}; - 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - $dlinfo{'VENDORID'} = ucfirst $vendorid; - if ($dlinfo{'REMOTESIZE'} && $size_updatefile) { $percent = int(100 / ($dlinfo{'REMOTESIZE'} / $size_updatefile)); } - - if (&getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$")) - { print '\n"; } - else { print '\n"; } - - if ($vendimg{$vendorid}) - { print '\n"; } - else { print '\n"; } - print <$shortname - - +print < + + + + - -END -; - $id += 1; - } - } -} - -# ------------------------------------------------------------------- -# Initialize Cachestats -# ------------------------------------------------------------------- - -sub initcachestats { - @sources=(); - foreach (<$repository/*>) { - if (-d $_) { - unless ((/^$repository\/download$/) || (/^$repository\/lost\+found$/)) { push(@sources,$_); } - } - } - @vendors=(); - foreach (@sources) - { - $vendorid=substr($_,rindex($_,'/')+1,length($_)); - push(@vendors,$vendorid); - $vendorstats{$vendorid."_filesize"} = 0; - $vendorstats{$vendorid."_requests"} = 0; - $vendorstats{$vendorid."_files"} = 0; - $vendorstats{$vendorid."_cachehits"} = 0; - $vendorstats{$vendorid."_0"} = 0; - $vendorstats{$vendorid."_1"} = 0; - $vendorstats{$vendorid."_2"} = 0; - $vendorstats{$vendorid."_3"} = 0; - @updatelist=<$_/*>; - foreach $data (@updatelist) { - if (-e "$data/source.url") { - open (FILE,"$data/source.url"); - $sourceurl=; - close FILE; - chomp($sourceurl); - $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); - my $size_updatefile = 0; - if(-e "$data/$updatefile") { - $size_updatefile = (-s "$data/$updatefile"); - } - else { - # DEBUG - #die "file not found: $data/$updatefile\n"; - } - # - # Total file size - # - $filesize += $size_updatefile; - # - # File size for this source - # - $vendorstats{$vendorid."_filesize"} += $size_updatefile; - # - # Number of requests from cache for this source - # - open (FILE,"$data/access.log"); - @requests=; - close FILE; - chomp(@requests); - $counts = @requests; - $counts--; - $vendorstats{$vendorid."_requests"} += $counts; - $cachehits += $counts; - # - # Total number of files in cache - # - $numfiles++; - # - # Number of files for this source - # - $vendorstats{$vendorid."_files"}++; - # - # Count cache status occurences - # - open (FILE,"$data/status"); - $_=; - close FILE; - chomp; - $vendorstats{$vendorid."_".$_}++; - # - # Calculate cached traffic for this source - # - $vendorstats{$vendorid."_cachehits"} += $counts * $size_updatefile; - # - # Calculate total cached traffic - # - $cachedtraffic += $counts * $size_updatefile; - } - } - } - if ($numfiles) { $efficiency = sprintf("%.1f", $cachehits / $numfiles); } -} - -# ---------------------------------------------------- -# Print statistics -# ---------------------------------------------------- - -sub printcachestatistics { - if ($numfiles) { - $filesize = &format_size($filesize); - $cachedtraffic = &format_size($cachedtraffic); - print < - - - - - - - - - - - - - - - +&percentbar($percent); +print < + +
$Lang::tr{'updxlrtr cache dir'}$Lang::tr{'size'}$Lang::tr{'used'}$Lang::tr{'free'}$Lang::tr{'percentage'}
".$Lang::tr{'updxlrtr no pending downloads attime'}."
'.ucfirst $dlinfo{'VENDORID'}."'.ucfirst $dlinfo{'VENDORID'}."$filesize$filedate[$repository]$size$used$free END ; - &percentbar($percent); - print < - -
-
- - - -
-
-
$Lang::tr{'updxlrtr summary'}
$Lang::tr{'updxlrtr total files'}:$numfiles$Lang::tr{'updxlrtr total cache size'}:$filesize
$Lang::tr{'updxlrtr efficiency index'}:$efficiency$Lang::tr{'updxlrtr total data from cache'}:$cachedtraffic
$percent
-
- - ------- - - - - - - - - - - - - - - - - - -END -; - &printtblstatdata(\@vendors); + +if (@repositoryfiles) +{ print < -
$Lang::tr{'updxlrtr statistics by source'}
$Lang::tr{'updxlrtr source'}$Lang::tr{'updxlrtr files'}$Lang::tr{'updxlrtr cache size'}$Lang::tr{'updxlrtr data from cache'}
END ; - &printlegendstatus(); - print < -
-END -; -} - -sub printtblstatdata { - my $vendlst_ref = shift; - my $vendorid; - $id = 0; - unless (@$vendlst_ref) { print "\n$Lang::tr{'updxlrtr empty repository'}.\n\n"; } - else { - foreach (@$vendlst_ref) { - $vendorid = $_; - unless ($vendorstats{$vendorid . "_files"}) { next; } - print "\t\n"; - if ($vendimg{$vendorid}) - { print "\t\t". ucfirst $vendorid ."\n"; } - else { print "\t\t". ucfirst $vendorid ."\n"; } - print "\t\t"; - printf "%5d", $vendorstats{$vendorid."_files"}; - print "\n"; - unless ($vendorstats{$vendorid."_filesize"}) { $vendorstats{$vendorid."_filesize"} = '0'; } - print "\t\t"; - print &format_size($vendorstats{$vendorid."_filesize"}); - print "\n"; - unless ($vendorstats{$vendorid."_cachehits"}) { $vendorstats{$vendorid."_cachehits"} = '0'; } - print "\t\t"; - print &format_size($vendorstats{$vendorid."_cachehits"}); - print "\n"; - print "\t\t"; - printf "%5d", $vendorstats{$vendorid."_1"}; - print "\n"; - print "\t\t"; - printf "%5d", $vendorstats{$vendorid."_3"}; - print "\n"; - print "\t\t"; - printf "%5d", $vendorstats{$vendorid."_2"}; - print "\n"; - print "\t\t"; - printf "%5d", $vendorstats{$vendorid."_0"}; - print "\n"; - print "\t\n"; - $id += 1; - } - } - } -} -# ------------------------------------------------------------------- -# Initialize Repositorydata -# ------------------------------------------------------------------- - -sub inittblreposdata { - @sources = <$repository/download/*>; - undef @repositoryfiles; - foreach (@sources) { - if (-d) { - @updatelist = <$_/*>; - $vendorid = substr($_,rindex($_,"/")+1); - foreach(@updatelist) { - next if(/\.info$/); - $updatefile = substr($_,rindex($_,"/")+1); - $updatefile .= ":download/$vendorid/$updatefile"; - $updatefile = " ".$updatefile; - push(@repositoryfiles,$updatefile); - } - } - } - - undef (@sources); - foreach (<$repository/*>) { - if (-d $_) { - unless (/^$repository\/download$/) { push(@sources,$_); } - } - } - - foreach (@sources) { - @updatelist=<$_/*>; - $vendorid = substr($_,rindex($_,"/")+1); - foreach(@updatelist) { - $uuid = substr($_,rindex($_,"/")+1); - if (-e "$_/source.url") { - open (FILE,"$_/source.url"); - $sourceurl=; - close FILE; - chomp($sourceurl); - $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); - $_ = $updatefile; tr/[A-Z]/[a-z]/; - $updatefile = "$_:$vendorid/$uuid/$updatefile"; - push(@repositoryfiles,$updatefile); - } - } - } - @repositoryfiles = sort { ($a =~ /.*?:(.*\/).*?/)[0] cmp ($b =~ /.*?:(.*\/).*?/)[0] } @repositoryfiles; -} - -# ------------------------------------------------------------------- -# Initialize Cache-Maintenance Form -# ------------------------------------------------------------------- - -sub initfrmmaintenance { - $selected{'NOT_ACCESSED_LAST'}{'week'} = ''; - $selected{'NOT_ACCESSED_LAST'}{'month1'} = ''; - $selected{'NOT_ACCESSED_LAST'}{'month3'} = ''; - $selected{'NOT_ACCESSED_LAST'}{'month6'} = ''; - $selected{'NOT_ACCESSED_LAST'}{'year'} = ''; - $selected{'NOT_ACCESSED_LAST'}{$xlratorsettings{'NOT_ACCESSED_LAST'}} = "selected='selected'"; - $checked{'REMOVE_NOSOURCE'}{'off'} = ''; - $checked{'REMOVE_NOSOURCE'}{'on'} = ''; - $checked{'REMOVE_NOSOURCE'}{$xlratorsettings{'REMOVE_NOSOURCE'}} = "checked='checked'"; - $checked{'REMOVE_OUTDATED'}{'off'} = ''; - $checked{'REMOVE_OUTDATED'}{'on'} = ''; - $checked{'REMOVE_OUTDATED'}{$xlratorsettings{'REMOVE_OUTDATED'}} = "checked='checked'"; - $checked{'REMOVE_UNKNOWN'}{'off'} = ''; - $checked{'REMOVE_UNKNOWN'}{'on'} = ''; - $checked{'REMOVE_UNKNOWN'}{$xlratorsettings{'REMOVE_UNKNOWN'}} = "checked='checked'"; - $checked{'REMOVE_TODELETE'}{'off'} = ''; - $checked{'REMOVE_TODELETE'}{'on'} = ''; - $checked{'REMOVE_TODELETE'}{$xlratorsettings{'REMOVE_TODELETE'}} = "checked='checked'"; - $checked{'TODELETE'}{'off'} = ''; - $checked{'TODELETE'}{'on'} = ''; - $checked{'TODELETE'}{$xlratorsettings{'TODELETE'}} = "checked='checked'"; -} - -# ------------------------------------------------------------------- -# Print Cache-Maintenance Form - printfrmmaintenance('withfiles', \@repositoryfiles) -# ------------------------------------------------------------------- - -sub printfrmmaintenance { - my $param = shift; - my $repos_ref = shift; - my $disabled = ''; - unless (@$repos_ref) { $disabled = "disabled='disabled'"; } - print <
-
- $Lang::tr{'updxlrtr all files'} - - -  $Lang::tr{'updxlrtr all files'} + +  $Lang::tr{'updxlrtr not accessed'} + + + -
-
- $Lang::tr{'updxlrtr marked as'} ... - - - - - - - - -
-
- -
+ + + + + + +  $Lang::tr{'updxlrtr marked as'} + + $Lang::tr{ + [$Lang::tr{'updxlrtr condition nosource'}] + +  $Lang::tr{'updxlrtr marked as'} + + $Lang::tr{ + [$Lang::tr{'updxlrtr condition outdated'}] + + +
+
END ; - if ($param =~ /withfiles/i) - { &printtblrepository($Lang::tr{'updxlrtr current files'}, $repos_ref); } - print "\n"; + + &printcurrentfiles($Lang::tr{'updxlrtr current files'}, @repositoryfiles); + print "
\n\n"; + &printlegendicons(); + &printlegendspacer(); + &printlegendstatus(); + &printlegendspacer(); + &printlegendsource(); + print "
\n"; } -# ------------------------------------------------------------------- -# Print current files in repository - printreposfiles($title, \@files) +&Header::closebox(); + +} + +# ===================================================================================== + +&Header::closebigbox(); + +&Header::closepage(); + # ------------------------------------------------------------------- -sub printtblrepository { - my $title = shift; - my $files = shift; +sub printcurrentfiles +{ + my $title = shift; + my @files = @_; - print < - - ------ - - - - - - - - - - - - - - - +
$title
$Lang::tr{'status'}$Lang::tr{'updxlrtr source'}$Lang::tr{'updxlrtr filename'}$Lang::tr{'updxlrtr filesize'}$Lang::tr{'date'}
+ print < +
$Lang::tr{'updxlrtr current files'}
+ + + + + + + + + + + + + + + END ; -&printlegendicons(); -&printlegendstatus(); -&printlegendsource(); + $id = 0; + foreach $updatefile (@files) + { + $updatefile =~ s/.*://; + my $size_updatefile = 0; + my $mtime = 0; + if(-e "$repository/$updatefile") { + $size_updatefile = (-s "$repository/$updatefile"); + $mtime = &getmtime("$repository/$updatefile"); + } + + $id++; + if ($id % 2) { + print "\n"; } + else { + print "\n"; } + + $filesize = $size_updatefile; + 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; + + my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); + $DAYdt = sprintf ("%.02d",$DAYdt); + $MONTHdt = sprintf ("%.02d",$MONTHdt+1); + $YEARdt = sprintf ("%.04d",$YEARdt+1900); + $filedate = $YEARdt."-".$MONTHdt."-".$DAYdt; + + $lastaccess = "n/a"; + $lastcheck = "n/a"; + + $status = $sfUnknown; + + unless ($updatefile =~ /^download\//) + { + ($vendorid,$uuid,$shortname) = split('/',$updatefile); + + if (-e "$repository/$vendorid/$uuid/access.log") + { + open (FILE,"$repository/$vendorid/$uuid/access.log"); + @metadata = ; + close(FILE); + chomp @metadata; + + ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[-1]); + $DAYdt = sprintf ("%.02d",$DAYdt); + $MONTHdt = sprintf ("%.02d",$MONTHdt+1); + $YEARdt = sprintf ("%.04d",$YEARdt+1900); + if (($metadata[-1] =~ /^\d+/) && ($metadata[-1] >= 1)) { $lastaccess = $YEARdt."-".$MONTHdt."-".$DAYdt; } + } + if (-e "$repository/$vendorid/$uuid/checkup.log") + { + open (FILE,"$repository/$vendorid/$uuid/checkup.log"); + @metadata = ; + close(FILE); + chomp @metadata; + + ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[-1]); + $DAYdt = sprintf ("%.02d",$DAYdt); + $MONTHdt = sprintf ("%.02d",$MONTHdt+1); + $YEARdt = sprintf ("%.04d",$YEARdt+1900); + if (($metadata[-1] =~ /^\d+/) && ($metadata[-1] >= 1)) { $lastcheck = $YEARdt."-".$MONTHdt."-".$DAYdt; } + } + if (-e "$repository/$vendorid/$uuid/status") + { + open (FILE,"$repository/$vendorid/$uuid/status"); + @metadata = ; + close(FILE); + chomp @metadata; + $status = $metadata[-1]; + } + } else { + ($uuid,$vendorid,$shortname) = split('/',$updatefile); + $status = $sfOutdated; + } + + print "\t\t\n"; + } + if ($status == $sfOk) + { + print "$Lang::tr{ \n"; + } + if ($status == $sfNoSource) + { + print "$Lang::tr{ \n"; + } + if (($status == $sfOutdated) && (!($updatefile =~ /^download\//i))) + { + print "$Lang::tr{ \n"; + } + if (($status == $sfOutdated) && ($updatefile =~ /^download\//i)) + { + print "$Lang::tr{ \n"; + } + + print "\t\t\n"; + } elsif ($vendorid =~ /^Microsoft$/i) + { + print "Microsoft \n"; + } elsif ($vendorid =~ /^Symantec$/i) + { + print "Symantec \n"; + } elsif ($vendorid =~ /^Linux$/i) + { + print "Linux \n"; + } elsif ($vendorid =~ /^TrendMicro$/i) + { + print "Trend Micro \n"; + } elsif ($vendorid =~ /^Apple$/i) + { + print "Apple \n"; + } elsif ($vendorid =~ /^Avast$/i) + { + print "Avast \n"; + } elsif ($vendorid =~ /^Avira$/i) + { + print "Avira \n"; + } elsif ($vendorid =~ /^AVG$/i) + { + print "AVG \n"; + } elsif ($vendorid =~ /^Ipfire$/i) + { + print "IPFire \n"; + } + else + { + if (-e "/srv/web/ipfire/html/images/updbooster/updxl-src-" . $vendorid . ".gif") + { + print "" . ucfirst $vendorid . " \n"; + } else { + print "" . ucfirst $vendorid . " \n"; + } + } + + $shortname = substr($updatefile,rindex($updatefile,"/")+1); + $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i; + print <$shortname + + + + + - - END ; - unless (@$files) { print "\t\n\t\t\n\t\n"; } - else { - $id = 0; - foreach $updatefile (@$files) { - $updatefile =~ s/.*://; - my $size_updatefile = 0; - my $mtime = 0; - if(-e "$repository/$updatefile") { - $size_updatefile = (-s "$repository/$updatefile"); - $mtime = &getmtime("$repository/$updatefile"); - } - print "\t\n"; - $filesize = &format_size($size_updatefile); - my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); - $DAYdt = sprintf ("%.02d",$DAYdt); - $MONTHdt = sprintf ("%.02d",$MONTHdt+1); - $YEARdt = sprintf ("%.04d",$YEARdt+1900); - $filedate = $DAYdt.".".$MONTHdt.".".$YEARdt; - $lastaccess = "n/a"; - $lastcheck = "n/a"; - $status = $sfUnknown; - unless ($updatefile =~ /^download\//) { - ($vendorid,$uuid,$shortname) = split('/',$updatefile); - if (-e "$repository/$vendorid/$uuid/access.log") { - open (FILE,"$repository/$vendorid/$uuid/access.log"); - @metadata = ; - close(FILE); - chomp @metadata; - ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[-1]); - $DAYdt = sprintf ("%.02d",$DAYdt); - $MONTHdt = sprintf ("%.02d",$MONTHdt+1); - $YEARdt = sprintf ("%.04d",$YEARdt+1900); - if (($metadata[-1] =~ /^\d+/) && ($metadata[-1] >= 1)) - { $lastaccess = $DAYdt.".".$MONTHdt.".".$YEARdt; } - } - if (-e "$repository/$vendorid/$uuid/checkup.log") { - open (FILE,"$repository/$vendorid/$uuid/checkup.log"); - @metadata = ; - close(FILE); - chomp @metadata; - ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[-1]); - $DAYdt = sprintf ("%.02d",$DAYdt); - $MONTHdt = sprintf ("%.02d",$MONTHdt+1); - $YEARdt = sprintf ("%.04d",$YEARdt+1900); - if (($metadata[-1] =~ /^\d+/) && ($metadata[-1] >= 1)) - { $lastcheck = $DAYdt.".".$MONTHdt.".".$YEARdt; } - } - if (-e "$repository/$vendorid/$uuid/status") { - open (FILE,"$repository/$vendorid/$uuid/status"); - @metadata = ; - close(FILE); - chomp @metadata; - $status = $metadata[-1]; - } - } - else { - ($uuid,$vendorid,$shortname) = split('/',$updatefile); - $status = $sfOutdated; - } - - if ($status == $sfUnknown) - { print "\t\t\n"; } - elsif ($status == $sfOk) - { print "\t\t\n"; } - elsif ($status == $sfNoSource) - { print "\t\t\n"; } - elsif (($status == $sfOutdated) && (!($updatefile =~ /^download\//i))) - { print "\t\t\n"; } - elsif (($status == $sfOutdated) && ($updatefile =~ /^download\//i)) - { print "\t\t\n"; } - if ($vendimg{$vendorid}) { - print "\t\t\n"; } - else { - print "\t\t\n"; - } - $shortname = substr($updatefile,rindex($updatefile,"/")+1); - unless ($vendorid ne 'microsoft') { $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1\[...\] $2/i; } - unless (length($shortname) <= 50) { - my $fext = substr($shortname,rindex("$shortname",'.')); - $shortname = substr($shortname,0,44-length($fext)); - $shortname .= "[...] $fext"; - } - print <$shortname - - - - - + } + + print "
  $Lang::tr{'updxlrtr filename'}$Lang::tr{'updxlrtr filesize'}$Lang::tr{'date'}$Lang::tr{$Lang::tr{ 
 "; + if ($status == $sfUnknown) + { + print "$Lang::tr{  "; + if ($vendorid =~ /^Adobe$/i) + { + print "Adobe  $filesize  $filedate  $lastaccess  $lastcheck  +
+ + + +
$Lang::tr{'updxlrtr empty repository'}.
       $filesize$filedate$lastaccess$lastcheck
\n"; + +} + +# ------------------------------------------------------------------- + +sub printlegenddownload +{ + print < +   $Lang::tr{'legend'}: +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition download'} +   +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition suspended'} +   +   + $Lang::tr{ + $Lang::tr{'updxlrtr cancel download'} END -; - $id += 1; - } - } - print < - - -END ; } -# ------------------------------------------------------------------- -# cancels pending download - need updatefile(-ID) # ------------------------------------------------------------------- -sub canceldownload { - $updatefile = shift; - if ($updatefile =~ /^download\//) { - ($uuid,$vendorid,$updatefile) = split('/',$updatefile); - if (-e "$repository/download/$vendorid/$updatefile.info") { - &General::readhash("$repository/download/$vendorid/$updatefile.info", \%dlinfo); - $id = &getPID("\\s${General::swroot}/updatexlrator/bin/download\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\\s\\d\\s\\d\$"); - if ($id) { system("/bin/kill -9 $id"); } - $id = &getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$"); - if ($id) { system("/bin/kill -9 $id"); } - system("rm \"$repository/download/$vendorid/$updatefile.info\""); - } - - if (-e "$repository/download/$vendorid/$updatefile") { - system("rm \"$repository/download/$vendorid/$updatefile\""); - } - } -} - -# ------------------------------------------------------------------- -# Delete old and selected cached files -# ------------------------------------------------------------------- - -sub delolddata { - undef (@sources); - undef @repositoryfiles; - foreach (<$repository/*>) { - if (-d $_) { - unless (/^$repository\/download$/) { push(@sources,$_); } - } - } - - foreach (@sources) { - @updatelist=<$_/*>; - $vendorid = substr($_,rindex($_,"/")+1); - foreach(@updatelist) { - $uuid = substr($_,rindex($_,"/")+1); - if (-e "$_/source.url") { - open (FILE,"$_/source.url"); - $sourceurl=; - close FILE; - chomp($sourceurl); - $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); - $updatefile = "$vendorid/$uuid/$updatefile"; - push(@repositoryfiles,$updatefile); - } - } - } - - foreach (@repositoryfiles) { - ($vendorid,$uuid,$updatefile) = split('/'); - if (-e "$repository/$vendorid/$uuid/status") { - open (FILE,"$repository/$vendorid/$uuid/status"); - @metadata = ; - close FILE; - chomp(@metadata); - $status = $metadata[-1]; - } - - if (-e "$repository/$vendorid/$uuid/access.log") { - open (FILE,"$repository/$vendorid/$uuid/access.log"); - @metadata = ; - close FILE; - chomp(@metadata); - $lastaccess = $metadata[-1]; - } - - if (($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') && ($status == $sfNoSource)) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - - if (($xlratorsettings{'REMOVE_OUTDATED'} eq 'on') && ($status == $sfOutdated)) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - - if (($xlratorsettings{'REMOVE_UNKNOWN'} eq 'on') && ($status == $sfUnknown)) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - - if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'week') && ($lastaccess < (time - 604800))) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - elsif (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month1') && ($lastaccess < (time - 2505600))) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - elsif (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month3') && ($lastaccess < (time - 7516800))) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - elsif (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month6') && ($lastaccess < (time - 15033600))) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - elsif (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'year') && ($lastaccess < (time - 31536000))) { - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - - - if (($xlratorsettings{'REMOVE_TODELETE'} eq 'on') && ($xlratorsettings{'TODELETE'} ne 'off')) { - my @todelete = split(/\|/, $xlratorsettings{'TODELETE'}); - foreach (@todelete) { - unless ($_ =~ /^download\//) { - ($vendorid,$uuid,$cachefile) = split(/\//, $_); - if (-e "$repository/$vendorid/$uuid/$cachefile") { system("rm -r \"$repository/$vendorid/$uuid\""); } - } - } - } - } -} +sub printlegendicons +{ + print <$Lang::tr{'legend'}: -
    -
  • $Lang::tr{'updxlrtr condition download'}
  • -
  • $Lang::tr{'updxlrtr condition suspended'}
  • -
  • $Lang::tr{'updxlrtr cancel download'}
  • -
+ +   $Lang::tr{'legend'}: +   + $Lang::tr{ + $Lang::tr{'updxlrtr last access'} +   + $Lang::tr{ + $Lang::tr{'updxlrtr last checkup'} +   + $Lang::tr{ + $Lang::tr{'updxlrtr remove file'} +   +   +   + END ; } # ------------------------------------------------------------------- -sub printlegendicons { - print <$Lang::tr{'legend'}: -
    -
  • $Lang::tr{'updxlrtr last access'}
  • -
  • $Lang::tr{'updxlrtr last checkup'}
  • -
  • $Lang::tr{'updxlrtr remove file'}
  • -
+sub printlegendstatus +{ + print < +   $Lang::tr{'status'}: +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition ok'} +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition nosource'} +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition outdated'} +   +   + +   + + +   +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition download'} +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition unknown'} +   +   +   +   +   + +   + END ; } # ------------------------------------------------------------------- -sub printlegendstatus { - print <$Lang::tr{'status'}: -
    -
  • $Lang::tr{'updxlrtr condition ok'}
  • -
  • $Lang::tr{'updxlrtr condition nosource'}
  • -
  • $Lang::tr{'updxlrtr condition outdated'}
  • -
  • $Lang::tr{'updxlrtr condition download'}
  • -
  • $Lang::tr{'updxlrtr condition unknown'}
  • -
+sub printlegendsource +{ + print < + + + +   $Lang::tr{'updxlrtr source'}: +   + Adobe + Adobe +   + Apple + Apple +   + Avast + Avast +   + Linux + Linux + + + + + +   +   + Microsoft + Microsoft +   + Symantec + Symantec +   + Trend Micro + Trend Micro +   + IPFire + IPFire + + +   +   + Avira + Avira +   + AVG + AVG +   + $Lang::tr{ + $Lang::tr{'updxlrtr other'} +   + +   + + +END +; + +} + +# ------------------------------------------------------------------- + +sub printlegendspacer +{ + print < +  
+ END ; } # ------------------------------------------------------------------- -sub printlegendsource { - print <$Lang::tr{'updxlrtr sources'}: -
    +sub savesettings +{ + + if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'daily')) + { + system('/usr/local/bin/updxlratorctrl cron daily >/dev/null 2>&1'); + } + if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly')) + { + system('/usr/local/bin/updxlratorctrl cron weekly >/dev/null 2>&1'); + } + if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly')) + { + system('/usr/local/bin/updxlratorctrl cron monthly >/dev/null 2>&1'); + } + + # don't save those variable to the settings file, + # but we wan't to have them in the hash again after saving to file + my $obsolete = $xlratorsettings{'REMOVE_OBSOLETE'}; + my $nosource = $xlratorsettings{'REMOVE_NOSOURCE'}; + my $outdated = $xlratorsettings{'REMOVE_OUTDATED'}; + my $gui = $xlratorsettings{'EXTENDED_GUI'}; + + delete($xlratorsettings{'REMOVE_OBSOLETE'}); + delete($xlratorsettings{'REMOVE_NOSOURCE'}); + delete($xlratorsettings{'REMOVE_OUTDATED'}); + + delete($xlratorsettings{'EXTENDED_GUI'}); + + &General::writehash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); + + # put temp variables back into the hash + $xlratorsettings{'REMOVE_OBSOLETE'} = $obsolete; + $xlratorsettings{'REMOVE_NOSOURCE'} = $nosource; + $xlratorsettings{'REMOVE_OUTDATED'} = $outdated; + $xlratorsettings{'EXTENDED_GUI'} = $gui; +} + +# ------------------------------------------------------------------- + +sub percentbar +{ + my $percent = $_[0]; + my $fg = '#a0a0a0'; + my $bg = '#e2e2e2'; + + if ($percent =~ m/^(\d+)%$/ ) + { + print < + END ; - foreach my $name (sort keys %vendimg) { - if ($name =~ /^unknown$/i) { - print "\t
  • ". ucfirst $Lang::tr{$name} ."
  • \n"; + if ($percent eq "100%") { + print "" + } elsif ($percent eq "0%") { + print "" } else { - print "\t
  • ". ucfirst $name ."
  • \n"; + print "" } - } - print "
\n"; -} - -# ------------------------------------------------------------------- -# 2012-12-18: -# Seaching updbooster-image dir for all available images of format "updxl-src-.gif" -# Build a hash in format '' -> '/images/updbooster/updxl-src-.gif' - -sub initvendimg { - if (opendir(DIR, "$webhome$webimgdir")) { - my @files = grep { /updxl-src-/ } readdir(DIR); - my @vendor = (); - closedir(DIR); - foreach (@files) { - @vendor = split (/[.-]/, $_); - $vendimg{$vendor[2]} = "$webimgdir/$_"; - } - } - else { - die "updxlrtr: Can't access \"$webhome$webimgdir\". Error was: $!\n"; - } -} -# ------------------------------------------------------------------- - -sub printtbldiskusage { - my $tabletitle = shift; - my $repos_ref=shift; - print < -$tabletitle - - - $Lang::tr{'updxlrtr cache dir'} - $Lang::tr{'size'} - $Lang::tr{'updxlrtr total used'} - $Lang::tr{'updxlrtr used by'}
[$repository] - $Lang::tr{'free'} - $Lang::tr{'percentage'} - - + print < END ; - open(DF,"/bin/df -h $repository|"); - @dfdata = ; - $dudata = `/usr/bin/du -hs $repository`; - close DF; - shift(@dfdata); - chomp(@dfdata); - chomp($dudata); - $dfstr = join(' ',@dfdata); - my ($device,$size,$used,$free,$percent,$mount) = split(' ',$dfstr); - my ($duused,$tmp) = split(' ',$dudata); - print < - - [$repository] - $size - $used - $duused - $free - -END -; - &percentbar(&cpof($duused,$size),&cpof($used,$size)); - print < - - - -END -; -} - -# ------------------------------------------------------------------- -# Initialize Cache-Settings Form -# ------------------------------------------------------------------- - -sub initfrmsettings { - $checked{'ENABLE_LOG'}{'off'} = ''; - $checked{'ENABLE_LOG'}{'on'} = ''; - $checked{'ENABLE_LOG'}{$xlratorsettings{'ENABLE_LOG'}} = "checked='checked'"; - $checked{'PASSIVE_MODE'}{'off'} = ''; - $checked{'PASSIVE_MODE'}{'on'} = ''; - $checked{'PASSIVE_MODE'}{$xlratorsettings{'PASSIVE_MODE'}} = "checked='checked'"; - $checked{'LOW_DOWNLOAD_PRIORITY'}{'off'} = ''; - $checked{'LOW_DOWNLOAD_PRIORITY'}{'on'} = ''; - $checked{'LOW_DOWNLOAD_PRIORITY'}{$xlratorsettings{'LOW_DOWNLOAD_PRIORITY'}} = "checked='checked'"; - $checked{'ENABLE_AUTOCHECK'}{'off'} = ''; - $checked{'ENABLE_AUTOCHECK'}{'on'} = ''; - $checked{'ENABLE_AUTOCHECK'}{$xlratorsettings{'ENABLE_AUTOCHECK'}} = "checked='checked'"; - $checked{'FULL_AUTOSYNC'}{'off'} = ''; - $checked{'FULL_AUTOSYNC'}{'on'} = ''; - $checked{'FULL_AUTOSYNC'}{$xlratorsettings{'FULL_AUTOSYNC'}} = "checked='checked'"; - $selected{'VIEW_SETTING'}{'overview'} = ''; - $selected{'VIEW_SETTING'}{'statistics'} = ''; - $selected{'VIEW_SETTING'}{'maintenance'} = ''; - $selected{'VIEW_SETTING'}{'settings'} = ''; - $selected{'VIEW_SETTING'}{$xlratorsettings{'VIEW_SETTING'}} = "checked='checked'"; - $selected{'AUTOCHECK_SCHEDULE'}{'daily'} = ''; - $selected{'AUTOCHECK_SCHEDULE'}{'weekly'} = ''; - $selected{'AUTOCHECK_SCHEDULE'}{'monthly'} = ''; - $selected{'AUTOCHECK_SCHEDULE'}{$xlratorsettings{'AUTOCHECK_SCHEDULE'}} = "selected='selected'"; -} - -# ------------------------------------------------------------------- -# Print Cache-Settings Form -# ------------------------------------------------------------------- - -sub printfrmsettings { - print < -
- $Lang::tr{'updxlrtr standard view'} - - - - - - - - -
-
- $Lang::tr{'updxlrtr common settings'} - - - - - - -
-
- $Lang::tr{'updxlrtr performance options'} - - - - -
-
- $Lang::tr{'updxlrtr source checkup'} - - - - -
- - -
-
- - -
- -END -; -} - -# ------------------------------------------------------------------- -# chksettings([save|restart]) - Check settings and/or restart proxy -# ------------------------------------------------------------------- - -sub chksettings { - my $param = shift; - my $error_ref = shift; - if ( $param =~ /save/i ) { - if (!($xlratorsettings{'MAX_DISK_USAGE'} =~ /^\d+$/) - || ($xlratorsettings{'MAX_DISK_USAGE'} < 1) - || ($xlratorsettings{'MAX_DISK_USAGE'} > 100)) { - push(@$error_ref, $Lang::tr{'updxlrtr invalid disk usage'}); - } - if (($xlratorsettings{'MAX_DOWNLOAD_RATE'} ne '') && ((!($xlratorsettings{'MAX_DOWNLOAD_RATE'} =~ /^\d+$/)) - || ($xlratorsettings{'MAX_DOWNLOAD_RATE'} < 1))) { - push(@$error_ref, $Lang::tr{'updxlrtr invalid download rate'}); - } - unless (@$error_ref >= 1) { &savesettings; } } - if ($param =~ /restart/i ) { - if ((!(-e "${General::swroot}/proxy/enable")) && (!(-e "${General::swroot}/proxy/enable_blue"))) { - push(@$error_ref, $Lang::tr{'updxlrtr web proxy service required'}); - } - if ($proxysettings{'ENABLE_UPDXLRATOR'} ne 'on') { - push(@$error_ref, $Lang::tr{'updxlrtr not enabled'}); - } - unless (@$error_ref >= 1) { system('/usr/local/bin/squidctrl restart > /dev/null 2>&1'); } - } - unless (@$error_ref == 0) { &initfrmsettings; } -} - -# ------------------------------------------------------------------- - -sub savesettings { - if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'daily')) - { system('/usr/local/bin/updxlratorctrl cron daily >/dev/null 2>&1'); } - if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly')) - { system('/usr/local/bin/updxlratorctrl cron weekly >/dev/null 2>&1'); } - if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly')) - { system('/usr/local/bin/updxlratorctrl cron monthly >/dev/null 2>&1'); } - - # don't save those variable to the settings file, - # but we wan't to have them in the hash again after saving to file - my $obsolete = $xlratorsettings{'REMOVE_UNKNOWN'}; - my $nosource = $xlratorsettings{'REMOVE_NOSOURCE'}; - my $outdated = $xlratorsettings{'REMOVE_OUTDATED'}; - my $todelete = $xlratorsettings{'REMOVE_TODELETE'}; - my $gui = $xlratorsettings{'EXTENDED_GUI'}; - my $show = $xlratorsettings{'show'}; - - delete($xlratorsettings{'REMOVE_UNKNOWN'}); - delete($xlratorsettings{'REMOVE_NOSOURCE'}); - delete($xlratorsettings{'REMOVE_OUTDATED'}); - delete($xlratorsettings{'REMOVE_TODELETE'}); - delete($xlratorsettings{'TODELETE'}); - delete($xlratorsettings{'EXTENDED_GUI'}); - delete($xlratorsettings{'show'}); - - &General::writehash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); - - # put temp variables back into the hash - $xlratorsettings{'REMOVE_UNKNOWN'} = $obsolete; - $xlratorsettings{'REMOVE_NOSOURCE'} = $nosource; - $xlratorsettings{'REMOVE_OUTDATED'} = $outdated; - $xlratorsettings{'REMOVE_TODELETE'} = $todelete; - $xlratorsettings{'EXTENDED_GUI'} = $gui; - $xlratorsettings{'show'} = $show; -} - - -# ------------------------------------------------------------------- -# percentbar(number[, number2, number(n)) - need absolute values -# - print relative bars ([##1][##2(number2-number1)][#n-#2-#1]...) -# ------------------------------------------------------------------- - -sub percentbar { - $counts = '0'; - my $width = '-0'; # width of value bar - my $widthmax = '-0'; # overall width - my $tmp = ''; - my @tmplst; - my $sf = 1; # scale-factor - print "
"; - @_ = sort{ $a <=> $b } @_; - for (@_) { - unless ($widthmax <= 100.0) { next; }; - $width = $_-($widthmax); - $widthmax = $_; - if (($width > 0) && ($width < 1)) { $width=1; } - $tmp .= "
\n"; - $counts = $counts + 1; - } - $widthmax = sprintf("%0d",$widthmax); - if ( $widthmax < 79) { $tmp .= "$widthmax%\n"; } - else { $tmp .= "$widthmax%\n"; } - - print "\t\t$tmp
\n"; - return; -} - -# ------------------------------------------------------------------- -# Format given filesize in Bits -# into values of more human readable format like kB, MB, GB, etc -# take filesize in Bit, returns formatted string in example "xx.xx kB" -# No roundings are happened, -# so counting with the output may result in wrong values -# ------------------------------------------------------------------- - -sub format_size{ - my $fsize = shift; - - if ($fsize > 2**60) # EB: 1024 PB - { return sprintf("%.2f EB", $fsize / 2**40); } - elsif ($fsize > 2**50) # PB: 1024 TB - { return sprintf("%.2f PB", $fsize / 2**40); } - elsif ($fsize > 2**40) # TB: 1024 GB - { return sprintf("%.2f TB", $fsize / 2**40); } - elsif ($fsize > 2**30) # GB: 1024 MB - { return sprintf("%.2f GB", $fsize / 2**30); } - elsif ($fsize > 2**20) # MB: 1024 kB - { return sprintf("%.2f MB", $fsize / 2**20); } - elsif ($fsize > 2**10) # kB: 1024 B - { return sprintf("%.2f KB", $fsize / 2**10); } - else # Bytes - { return "$fsize B"; } } # ------------------------------------------------------------------- sub getmtime { - my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($_[0]); - return $mtime; + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($_[0]); + + return $mtime; } # ------------------------------------------------------------------- sub getPID { - my $pid=''; - my @psdata=`ps ax --no-heading`; + my $pid=''; + my @psdata=`ps ax --no-heading`; - foreach (@psdata) - { if (/$_[0]/) { ($pid)=/^\s*(\d+)/; } } - return $pid; -} - -# ------------------------------------------------------------------- -# Calculating Percentage of 2 Values (for percentbar) -# ------------------------------------------------------------------- - -sub cpof { - my $Value; - my $MValue; - my $result; - my $Vsize; - my $MVsize; - my $corf; - my $callme = "cpof\(value[B|K|M|G|T|P|E], maxvalue[B|K|M|G|T|P|E]\)"; - $Value = shift; - $MValue = shift; - my %cf = ('B'=>0,'K'=>1,'M'=>2,'G'=>3,'T'=>4,'P'=>5,'E'=>6); - unless ('$Value' ne '') { die "updxlrtr sub cpof: value not given: $!\n$callme"; } - unless ('$MValue' ne '') { die "updxlrtr sub cpof: maxvalue not given: $!\n$callme"; } - - unless ($Value =~ /\d+(B|K|M|G|T|P|E)/) { die "updxlrtr: cpof() - value has no size!\nPossible Values: 'number[B|K|M|G|T|P|E]'\n"; } - else { $Vsize = chop $Value; } - unless ($MValue =~ /\d+(B|K|M|G|T|P|E)/) { die "updxlrtr: cpof(): maxvalue has no size!\nPossible Values: 'number[B|K|M|G|T|P|E]'\n"; } - else { $MVsize = chop $MValue; } - - if ('$Vsize' eq '$MVsize') { $result = (100/$MValue)*$Value; } - else { - if ($Value =~ /^0\.d+/) { $corf = 1; } - else { $corf = '0'; } + foreach (@psdata) + { + if (/$_[0]/) { ($pid)=/^\s*(\d+)/; } } - my $tmp = (100/($MValue*(2**(10*$cf{$MVsize}))))*($Value*(2**(10*($cf{$Vsize}-$corf)))); - $tmp = sprintf ("%.2f", $tmp); - return $tmp; + + return $pid; } + +# ------------------------------------------------------------------- diff --git a/html/html/images/updbooster/updxl-globe.gif b/html/html/images/updbooster/updxl-globe.gif new file mode 100644 index 0000000000000000000000000000000000000000..54e49fc826c94dee6ff9c31d5919fbeb7eb9aaab GIT binary patch literal 1124 zcmX9-ZA?>V6nYu6GvbC8KO8y`OEdusXFb7#rnATA`flwF3IuVSrGbAOZl0w=GMh)W#B~mau4K2ub zM8T%8YmB-Q(C+cv62Y$0A&y$b=&cwR5?DOUU3OxX2&QOsG>UFco=|WG)yqjR%|Rzp zw+1aTt)e)kmy58b02`xd^@AmfrxBVYXFQl(yu*+4$stwCYHWg`#SbK8$V^|;)KrH06f6-%2`^>+ z80T3HqiKrnC^zN=bHG0uz$Ro(jJlIxj?q_TFl*jx9-&6Uh8Sy-uu~6I&=x>*l3FFO z#ON@U7Q{?CgC?1dQ*}n8DLq_;la!WcXbQokfn8$zWtyU3m$@Mh-I?iI8dx+M*N=gt zE|uzAF#5%`I5#_2QS=UZ;U;<3N(eEKpNQcBAv(Wnm=wwNo5Z?=KSDgZjgU>c%Q_q( z;XZQg7&&}+ox!7{4{<`u33-_iD|w4J_mJyL(nGrRf5LiQDgF!eG~I+>GA#W>PVNJ; zYz2FIN<%G)2e8`d_~9(W3&Eq}w~Jr&%_ic%kU!t@E>;5k#6 zx2&oC#O%ElIqB{}?s!|4TM98jse;Bfkvx9PQ8N&%Z|Rt;s#mf3dC4Roqos`}$qu zs-e7dADTkTcTBH-!g8wepXqb`r6mi?Q?rrVR|+<*&;2#DirlEq!d zOG~nr!k)^6dRn{NGPqU``Vzhb5nZ20TncIIbk3%ohs)3Rf9L$)_wnD(GpF0V1J$U; zA3&OvrY5JPVu3L>RV+wFsZcBcXq#i$#~`x|7|;ZSflWZ2#+^gxE!Qa|+^_;woPXKw zLI>dGB`!!Aq%EM;yk0S=)zV(EYgkXi!d zOG~nr!k)^6dRn{NGPqU``Vzhb5nZ20TncIIbk3%ohs)3Rf9L$)_wnD(GpF0V1J$U; zA3&OvrY5JPVu3L>RV+wFsZcBcXq#i$#~`x|7|;ZSflWZ2#+^gxE!Qa|+^_;woPXKw zLI>dGB`!!Aq%EM;yk0S=#ks*07DW&%i!VosxM;*hCRrBca*tj^g*7z!(u@o#uo<**w_n9 zxfQJ_5yE@54OG0!!rKar;KIy0CcdJTFn^v_X|$ctcc77|;L-4q;5}0veoBY;QhzJO z2win0s2ZeXld^70qnI<}&~a89=u%$(ki5sZe!>;cs~XW~aQn7^pt0|~qG*yt%seLw zhsM_OFc*nvDzAz}-?xl_hs6+t^q={uFi6ouk>h>GMv;;YR*?V8nhIeh4Z=4bkO3iO zRCmWAWy-=kVy16td?uWgSypyK%Eir`8%x(MGoD!lR0sybEKmoV4tE_${+n+Q=rO3f zJ?>(_Xp1~(T%bipkU6s3UXMZ!5q3y2Zh1-wW&FdKX+&Y0$3J4V23ih;&oKH7^0*CN zeUN#86XNrPt_IS>Hk+TvQy&CPgU&X5AB`4l>-uPkV<7`S&mVGUt}M`?pS8Mq4ZeOM za|xs$xSUJ`)x1&5rT#8FmcY+Ex{QT~&}1q9O*-O!NFz@VXc@5g$Cz#9%;Kd5)KcY86*tDR3=IlA?a?>cCk;$c7O6BC1%p=RZl)dJ9ZPhx| Hz+epko`N@m literal 0 HcmV?d00001 diff --git a/html/html/images/updbooster/updxl-rd.gif b/html/html/images/updbooster/updxl-rd.gif new file mode 100644 index 0000000000000000000000000000000000000000..4bce21f24140beaa1993963192a87ddafc063138 GIT binary patch literal 898 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 DZSCl- diff --git a/html/html/images/updbooster/updxl-src-diabloiii.gif b/html/html/images/updbooster/updxl-src-diabloiii.gif deleted file mode 100644 index c4f3fdf85e61cdbe24c0984f85f66513f2d16c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmZ?wbhEHb6k-r!cz%n4k%2)+K|Dr7^56AowT0OQ`h31ldW#HLnv0_zcj?a2=UAHU z=_ke>>1&=DY8$V>ogC`*|Luua`#1jocKURcmam=evnl4Y#F=XH0{R1GZM9_oZw%=S z_At{?m>T9`rz_uME8U_kc70Z)v9e^9o!Hc54`VgyH!GrT6s3JF)f~+(z;Ga}hon0bXZGp6yLJv3|~f zcBZd!7HTca*yPWDcZT!Crjl|g&i}_tBD_qpV;nQoIUU8h+AB+ZMY!J2cFFYj&X0A< ziEz2nZU1+rM^>=y!=;rodupb1xAZraKVO;kX;1OxrDdPaZu@<2_y5;>ZY-TUwXf&% zrJ3K(%z3prV|H?IV^l~%Lddehpe;2%tBd?rW&|AVOUz73nU$SZnU!#CQpEjbQFS>n zvl46qr8xbhI77s^%k;StR5>OZvfJ=*F16=aV8$aSA+#h!Kuuc2Pfj>Wj^9g;x6DXD zTTCEHm3_H3L!l}|jUnS9TZT2V3`#5vwMq;b3Jl8(8C?b0V&zzaB-otA*;YF;t+!+B z5n;9AXU#GenG&WK?yMK#Y7pYAA8e=VVXGVHsP}!cZmXqXu#b7Hr&*z=b(ot~u$z&W zvr)9Sag3*NsH2XKx}2Gcl%A%7wU(T&oY<{&5j|z83{~;zeu{oJS{~L~rg}QQHrn=< z8W~zj_U2mtwwnLx4itZ~Fmf^cXV75)0#Ke{;Ml&SGA%QwE<5R}U$5e^;ZjEEtai3Vd%O<43Y?N{&UZ<$Iqd*5D|=iFXN!{G z!C2FxjS+_)IIPa$K6l{2)?|fwvYJ_27=lH(CkRRBEWL2BZGn-y&IyggLr)Gb;EAe} zQTfo*Cgr_cEZ~Dl(!;ghSuUa+la3yD)|+cF@x-Nrk(;~y|0OPB()j3V%v1blacQB# NZ1btc|G7CBtO2=wsG diff --git a/html/html/images/updbooster/updxl-src-eveonline.gif b/html/html/images/updbooster/updxl-src-eveonline.gif deleted file mode 100644 index 12f5ffa99fe06f7e35417cce68fa50366a69d7cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmZ?wbhEHb6k-r!SSrlGCnl@oTc{sUs_m7_Cn6;zrzvCLCLkfdeDwwe^8kKH1yLn~ zJ^PO^Ffb@tg{ixyYI=AAo08!>_6PZmZl273k_ zpbLRM5@KLr+i_rif`^V2>mdh+1vz>%4?j<^;^mogMMu=A)n-q8$MoAvD>RpTM)6AZ zdQJIp*!jDUgEnvS`TIZ2`S=<%j9F!5+B&!zd-yo{^cgrOPnpul$u^VCKvzdf%1EhZ zmKdAZa@|U)MLc?mHxy!+Ijr|c97w@y@FBo1uVt@7S{fF0YKYnESX8+|K3&Xcp_KpnJ05N#7 A_y7O^ diff --git a/html/html/images/updbooster/updxl-src-google.gif b/html/html/images/updbooster/updxl-src-google.gif deleted file mode 100644 index e62e292c794e951905dee9ecf00924bd56d1495d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmZ?wbhEHb6k-r!IOfSgFF+V7*cexJGb=jxL`H=qBx_59DB7k?hS{`=(Z z-`Ai1z5V?6?U%pbe*XLZ>)(&x|9<`c_xsPkKY#!I{Raa7foLcI#h)yUTnzOLIt)Mn ziW3I*7d>#4`gCEzByvzg7vQ-{|?ZrKJVMGa5=GaI;=8Qko}*$y{L=o(u& zdCFgIW;8YD>PEAiKj<3uf98bJ1D4*oy7Pfk#k$CC~qo{S$ ahla$4nJP|`q$C|K7zA2o)iW_NSOWlCdVER% diff --git a/html/html/images/updbooster/updxl-src-ipfire.gif b/html/html/images/updbooster/updxl-src-ipfire.gif deleted file mode 100644 index 2db1276809a69c3d0e6aa7b576d063bfbaa3032b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmZ?wbhEHb6k-r!cs`2(2qeVC?F9L?q-32XI75WQB$d?cq(v(EMT`v$XGln|6Op(p zApVSB>V~jPoVC;gQOPG_Qg@`JUP(zlQjm=B_IRu=`A|#Zk(R_0UCGI=3K8MqQ+%aU z!aW~ZNW3tYd}=GP&sY43lU#aYd`fES6A!5;UdmNz@vnTOo(GF;Oj5`#$S)}%`@MQIW=wzIEqi{3%BOyb4--}1 zPgMUtLG|lo@sHERo=?(Y@ZzgOfQpIiI)s@&77#eZ+gJ-M{;<<;4rFK)ke{rKZs zJ09G*@cQoRw~vngd%Ek%%csv@y?pcL<=;1l{(rys^XHG>fBya-1tf-m;y*#>qSVBa z)D(sC%#sWRcTe8{2F0H&j9d)=8FWC|1C&u1IIb}K=ali-u;5^06Put?$cqJz)+t zEfbe|&tl>+2%5mj&YM(|GjsCO?rFk`ax)B9ED}_4ZxgYNVo7OtR>=@}D&eGZey&Q8 w%&~=!Sx$3H_&?~;{QN9oqEx`06Eij*XY148%m2VJ>6rI)ZQBwN9u5X;0C}5+)Bpeg diff --git a/html/html/images/updbooster/updxl-src-kaspersky.gif b/html/html/images/updbooster/updxl-src-kaspersky.gif index dab09a89a1b6a63e165298ba9625e972eb44b7f4..687a6c3bed5dda806175b2089555a15824c5c712 100644 GIT binary patch literal 996 zcmXw&e`phD7{|YtUei>n#M6{UVvSwt#Aa@m6f2I>#q(DPHcCO!;A%L#;8M-pQAH1% zCTFSf3^oRdB}6GV5$Qil$^4^8lqe$p;YJxUR_La<{Ls>kV`JNG@9vHY@9+2fKF{a* z!nx6ItP`(03@{SmO{!C7;))zIi=$XG%H6D=n>oBV5C>hIC9+ zfBZ?lC5H#XZ`qqwVOE}$xdASn z(!{*_U`9$x)AWf9+Za25o>tUolS%8izbO4y$=exyQ!*h4*z{xIDM6WlApkiK0zbjOq%b^; zT1qnwJ=a#RYbY7xj{+Zn$9nT!z{%GXek#h~7Jv<0ceRt5m hd|#}XT<2cB;gc&bShK_06?xg;QkS%UUPIH^_CMa_RsH|~ literal 628 zcmZ?wbhEHb6k-r!I2OqO1WZg!%*@OJ0s`XV;t~=PQc_Z~va)h=avB;M`uh4W85mwM zFuWEKc_Sh5MoQ|fs_Hv!?YDY*?@UeKSy;TYwti=CpPQSTmzVc3Fz{nY$cOOo>gwv6 znwr|$+J=UP&d$!y`T3s;3wwKeKNl7C_4U23to%}5{<)%J`t<2v>g#9Bm@#wa%rA|N z-pKw5 zp8aj^+->XEe_ya*%a$!$w{HEhY}t+-J2vjx^?k*P?<-gSShecMnl(Q*Z~h6C+P3ZI zjvdF29s9L!-_QN~f9>D@^WedshY$Zca^%<1qrZUS$B+LX2%z|rg^`P)opj`e(b2Pe@+|MbdUuxvUIw<^3zoU~blcdjan$R! zvtDCs<@aO|Zts@0D`A+J-`J8arb7yfkA!<+W?H zFpJzQ%Oc{`v_getlNv*YwZuksj&&Lw;$Ge2zI~f?xr-fycIvT61y0(p&%qGBVTT!y zY{ZPc=A1`tSWeq=FLhVZOqipXv}~6v|1wXlmLSvP&fLeH`Odp=opIw)%UE&9i|xD{ zXK{?v6*n&Fob8uAxG#G0T=!sePwTqi#e30 zIYQ`W1V>p;+NDSl{mNa}B6+Vy@m`D;z8%TEK3V5-wAhsx!Tkw3_oMh8M)6&b<+~Ou zT3VQQJ&yN!oamK!u`3DuR}#eT#&ays44zVK>{h@0e460HWVV~BVwcjDwK~q-$dJ_S zJoP9|aBfN1;|#7lnG%mOh1QmME-s7m?^yXKo$pCL=Zid^Gi8!3P31511s)gjEvZhM zUZ3%}Q2arW)Q5boSH&Xlig|3NT``|=<4Fxi;Iw`B>$xA-30lv)TQX_w^G4ohO`L9X zZ@g^gn=>W;RU6yIerdO54<}Ba@3!Lp^*)y;y*|M!-n^V4{(h$PEn<6 z>Yol+d^>FP|Db-}?SEZ2-n8HO{PU8-|BH4fuAG_j@a6PJpZ{O;{&FL!@5T3@w>QH@6o&IuPi+C161V z@0vW_&)0gR&7!ucXuc^@4iYxIwk0>4&F9MU%yzb422a?0MP1IUifw+TJzY3wPXXr^ z7nhESmKGwsMq+QmwX~PaaTUJ7*3l=M9JcTf%WILD_FC&SywwU$3#erMS;6&0Q6v5uRox$CY&ej_C9dn}Rb!#h8?jdYf0BWvaFdsel&j3khYXHRhKcK0)}3&C z&Np|=>y(H$d^W8O+8haBam8C+v;7!FZ17%s|I0b!^Sg=XOfIjUOBu)M1i zxdx0)Q$hl6kyv4st&kH|6EBl=nMf`fxk2Q@DkCXiwvgt~*$Q}DqMC>C9Kv-p1G+lB$w1rybL; zu>NM!BU0LDoK0Sugpp(*{w=;x6G}uVzBxQogG>d|i;yybkHU2#DmEmtz(!!_|3dg5 z)b}pzK;*v@cAo%zA9mhh6IFL*9v>JM`R~45;Ep(zxs~I4?j1Znq^8QhjLwG#R*J9x zz8cG?KE5DZZuovvxXR$o^BXI7>2nj+M}NNjI&@%XyW98g{?Y3TB7LTvdj70$@9aKY ze0_6nes*A=;x}JB>km&%X> z>GuXM{}8~|!M1!a_{p)`<*=+W^hzhGTC5 DXu1Ir diff --git a/html/html/images/updbooster/updxl-src-opera.gif b/html/html/images/updbooster/updxl-src-opera.gif deleted file mode 100644 index 0cbf9b6334d719ead70d82aa37688a425a130f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmZ?wbhEHb6k-r!cs_w4l%2VRg&~Wbp@oqlo0GAbiJ^#tv6_vcf}J6si@BePp^=@T znVn%O6T?(yhFMGu?HmlHysXn$7-q6COk-u3#lkS1m7$k|p^KAg0tdr%Hir2u3=3Eo zX0b8M2C`WhX0kKPWn)+h6k%s>Z@Qe=dMSbF zic))|1UJcwY?BdNry#XmUSy%V{0>El-AWR>l_i&HDeqC0J)kPHT~qm>y6i@6)x(~)ZFVSjgElZwcbZy<8vpdVUP_z8w+xH6-9iNZ|MI;2)7;|DwZx zrzQPQP5PIe@u@KTLs9O(yqy2Vh5t(m|2EYAZ>;~{+Wfz><6l?nzwXZe{r&%E&-^!M z_WwDve=T0}bLsN`OPBszv*zFW_5ZhQ`oC@a{~bI2@7we5z`_3q4*frR^#6^U|3?8; zLqPE-3nLf9e+C@}AOPhF29B!?|2btmHY{*#?3XZAGSRrW(3PFl$|&ST7oSYjzaNYx z0f7pR@f<}5jn(}fU24AEv2-k8l`+qGC2%L%-A}4H@kEEA@dp1n=DFJ>rZg?>64hdQ zxxz6xt;(%~qj=`*E5(STD>-nvL4#qppM zhY(Z!jgEy$ZI0qXY84#@8(2Abjd%{tIH1VvC?c)a!{B7l)yyT&A#z0FQKLYUvq*_U kfxw}5HlJg23XL8#HFo@G(a|{Yz@dSKA>p-}gaCsz09L|C4*&oF diff --git a/html/html/images/updbooster/updxl-src-secunia.gif b/html/html/images/updbooster/updxl-src-secunia.gif deleted file mode 100644 index fc980b13fb546d8c37cd92f5b001e81c5cb17577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmY+I1`Agi0g<+T${MkxYI}(+*zbuq`fLn4k?FcAL$Tp0Z##M5&0PT1o;&C z4EY@21-?ssSNLwK{3VoIlso))DEBC3R2{W~`iS~er9Gp)puM8Kq5b?X@NG0$=%R(c zs!y0lOFQ%ZE#BnA{(?R$#LwT0V*WGL?2LWsv)y@NU}{Y>8iM1c?cNQ0dGh*5AM)Em n_mz*7*%&oh>V^l~T2;5xC51X-qF}ArvNlS#m2@UM&_m=GKu%p3 diff --git a/html/html/images/updbooster/updxl-src-swtor.gif b/html/html/images/updbooster/updxl-src-swtor.gif deleted file mode 100644 index 13fe222b011f03a1d0cfb4852388a6ba9e0f107a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmZ?wbhEHb6k-r!cz%U}k%6JyM66g_WJRikg``lZtbn_WV7rB6n5Kw{B+tcs;bbe} z?MZw`vV{+)@lCdrR1p6}emhjdRu~OjMQ!0I}QZ&a{bb5q%hO_9>Xb~4B31boN zaz|bpLAFc{k#8NMM;fFj`EW~da>g3*KieLrE5Ws;L^|9|Y)i53^Qp?aGKE(s^Z$8X zxhkA{YLIH99q0emnxAiVxF`$vhe<6-Qtq%-I=?3Kc`@(iN|)`WMn_8}!c_S(Z6#iH zNT~~OyDRa|$T05-HuhE#zCKf}+=9DFjn7Ji`{l9La#xXjNB%!krFTSeZz)zi-6nm$ zMfpu5-?v$cXF7FuG`sDt);!o^e6riRT%WH!Qu6OER~KHE8aeK+5Roiz#RzGh>M&^! zDV`@gs>*%U`x9g{%(y?@TRbsEDMN!>TZr3`hjms6ueFj;Ym{=jiPVjG1{WtLkPCGc9hlDxY5zc5GJgyLC!0SGhf1Wcp)`^53nh$NGK$ z?=pS9-Tmink1wa)|2_@=dMoeC47vXc2eeD&|kP4%UPSNL00AgZFmU{1_|GZxBcD&tB9%i+hC}^0v$E4R4#%X-hx>(k zW#oQ1bcPA&%YD&!((G_-8Z#pcOJ~S}15JWf9Iq}2zdg_>9xb)h<-!j!BO zu`-dNc`}!^f@p*w14{=lhuRs10A}V!Ha)EniG+k826-_Ce#Hq14t&gdDvSpY9$;wZ z=8>4Qz_G!*Wrk3N0izkiAwhO-t0e~)9B5?YXSzCp;SdXp2nUx(fyaTw7H%9Mo=%_ri&@p#RoGBhM1a8>0N45Y%>V!Z diff --git a/html/html/images/updbooster/updxl-src-wot.gif b/html/html/images/updbooster/updxl-src-wot.gif deleted file mode 100644 index e76f48cc225fa4ae0e23ee0187a5737790b76a1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmZ?wbh9u|6k-r!Sjfx(1Pu)h2M!$g|Np-ZhzAm9VDfH}UwK@IYc}(uTM8;mGgr(p zWPYG}UR>_6fZdX-J$lCz4SnaYRAg^kz58r~+QQxp;nY66^UEe$oS8T2$%W;N1}h_V Q%dTGy+mPt8oq@p`0N{QsW&i*H diff --git a/html/html/images/updbooster/updxl-src-wow.gif b/html/html/images/updbooster/updxl-src-wow.gif deleted file mode 100644 index e64432e8d9bc32549879935755ec712f51d435f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1111 zcmd5*-;32n6#w4+;eJgw$L&@_EIJ#@b_`c0Q+6cD@uGPwp}}5;Fq&R!P#?Yt#rL6T zuDcIYSd5@G^aDnbx<$mbUg{-osj=8YMl4+D<tftRL=sp9T0MUH+CSNpi^ct42MZ{=|47^U5aC@7(@x-5j$gCv0x!3gA}rA5X- zmL(;G3N#XJupl{Af|@F#ve5!%JU7+88*Ij7gXD(8B&1@bRK`o z!AM$`gahexypfDDfx4z3W4E7b2%S61)ScddQUHNUQU*dH8}yR4z9hLHfMfK$Yq{49 zbyaDQK)BEvnL*|>>%`hB$nx^htsn!{RZfGPpa83A*9%txms+rrXFQ<*SiS>SxbeMm zI2Z_NxDZ?*kRmwrmGl;Z)1j6=Ee9t!qa1QF&B52ghvZ$2+DTOliKr?iLFq~f5S$9m zrLqF31SUle$v6_qv%f6+PD)NoN+}AK`A`tVY-t_`Ln)l*#@Nalqd+56wXQR%;MP`k z=tYl}RFe6B%c`d=#u{Ky6UMprLOO`n+oPkvH7tEy@C*92s$brgNPMGpPOyR)Tpk=TiCTwEh!|k&^7bczx}~OAE6vulBaz{Vhygo}DdjogVndTh-d& zvDuaP<`$X<+xMSIZP4dF8M(4FI`QB~r=;^xuQi@~Was3j>ZCe+UT%H! zENtc{-o5_9!q`^1ve-KR7MwfVZ~r9s9&UWNLe6}4?41L!W2yVaY13_adE3MH%G9{B_`#M3{CuaC*-O!NFz@VXc@5g$Cz#9%;Kd5)KcY86*tDR3=IlA?a?>cCk;$c7O6BC1%p=RZl)dJ9ZPhx| Hz+epko`N@m literal 0 HcmV?d00001 diff --git a/html/html/themes/ipfire/images/updxl-icons.gif b/html/html/themes/ipfire/images/updxl-icons.gif deleted file mode 100644 index bae5cb66338fc56d08072152a39c7d9aa7997643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl index 086ff183e..c557e8b17 100644 --- a/html/html/themes/ipfire/include/functions.pl +++ b/html/html/themes/ipfire/include/functions.pl @@ -161,7 +161,6 @@ END print < - $extrahead + - -
-
-
-
+ + + +
+
+
+
END ; } @@ -334,10 +340,12 @@ sub closepage () { $uptime =~ s/load average/$Lang::tr{'uptime load average'}/; print < -
-
-
+
+
+ +
+ +
END ; &showsubsection($menu); @@ -353,16 +361,17 @@ END ; if ($settings{'SPEED'} ne 'off') { print < - $Lang::tr{'bandwidth usage'}: +
+ $Lang::tr{'bandwidth usage'}: $Lang::tr{'incoming'}:  $Lang::tr{'outgoing'}: + END ; } print < -
-
+
+
+
END @@ -379,25 +388,25 @@ sub closebigbox sub openbox { - $width = $_[0]; - $align = $_[1]; - $caption = $_[2]; + $width = $_[0]; + $align = $_[1]; + $caption = $_[2]; - print < -
+
END ; - if ($caption) { print "

$caption

\n"; } else { print " "; } + if ($caption) { print "

$caption

\n"; } else { print " "; } } sub closebox { - print < -
- + print < +
+ END ; } diff --git a/html/html/themes/ipfire/include/upxlr.css b/html/html/themes/ipfire/include/upxlr.css deleted file mode 100644 index e7cc9fd92..000000000 --- a/html/html/themes/ipfire/include/upxlr.css +++ /dev/null @@ -1,384 +0,0 @@ -span[id^=ledgr],li#liledgr,label#lbledgr -{ - background-position:0 0; -} - -span[id^=ledbl],li#liledbl,label#lbledbl -{ - background-position:0 -20px; -} - -span[id^=ledye],li#liledye,label#lbledye -{ - background-position:0 -40px; -} - -span[id^=ledrd],li#liledrd,label#lbledrd -{ - background-position:0 -60px; -} - -span[id^=ledgy],li#liledgy,label#lbledgy -{ - background-position:0 -80px; -} - -span#rel,li#lirel -{ - background-position:0 -100px; -} - -span#glo,li#liglo -{ - background-position:0 -120px; -} - -span#del,li#lidel,label#lbdel,button[id^=del] -{ - background-position:0 -140px; -} - -span#blo,li#liblo -{ - background-position:0 -160px; -} - -#stat -{ - background-position:0 -180px; -} - -#wrench -{ - background-position:0 -200px; -} - -#set -{ - background-position:0 -220px; -} - -#oview -{ - background-position:0 -240px; -} - -.symbols -{ - background:transparent url(/themes/ipfire/images/updxl-icons.gif) no-repeat; - height:20px; - width:20px; -} - -.vendimg -{ - background-repeat:no-repeat; - height:18px; - width:18px; -} - -.noborder -{ - border:none; -} - -fieldset -{ - padding: 0 0 .5em; - margin-bottom: .5em; - border: 1px dotted #E1E1E1; - border-top: none; - border-left: none; - border-right: none; -} - -legend -{ - margin-left:0; - padding-left:0; - padding-right:.5em; - font-weight: bolder; -} - -label -{ - cursor:pointer; - padding-right:1em; -} - -label[for^=text],label[for^=select] -{ - padding-right:.2em; -} - -label.symbols -{ - display:inline-block; - min-height:20px; - padding-left:25px; - width:auto; -} - -button[id^=del] -{ - border-style:none; -} - -input:invalid -{ - border:2px solid red; -} - -input#text01 -{ - height:1em; - max-width:120px; -} - -input#text02 -{ - width:7em; -} - -input[type=submit] { - margin-right: 3em; - margin-left: 3em; -} - -output#duval -{ - display:inline-block; - min-width:2em; - text-align:right; -} - -.frmshow -{ - position:absolute; - right:0; - top:0; -} - -.frmshow fieldset -{ - display:inline-block; - position:relative; -} - -.frmshow legend -{ - display:inline-block; -} - -.frmshow legend span -{ - left:-100px; - position:absolute; - top:.2em; -} - -.frmshow button -{ - border:1px solid; - display:inline; - height:22px; - padding-left:25px; - padding-right:5px; - width:auto; - cursor: pointer; -} - -.frmshow button:disabled -{ - border:1px solid #D90000; - color:#D90000; - cursor: default; -} - -span.symbols,span.vendimg -{ - display:inline-block; -} - -caption -{ - margin-top:.5em; - font-weight:bolder; -} - -table -{ - width:100%; -} - -#diskusage td -{ - text-align:center; -} - -#summary -{ - background-color:none!important; -} - -[id^=list] thead tr th -{ - border-bottom:1px dotted #E1E1E1; -} - -th -{ - text-align:center; -} - -td,th -{ - padding:3px; -} - -tbody tr:nth-child(even) -{ - background:#D6D6D6; -} - -tbody tr:nth-child(odd) -{ - background:#F0F0F0; -} - -th span.symbols,th span.vendimg -{ - vertical-align:middle!important; -} - -th span[id^=vd].vendimg -{ - display:block; - padding-left:27px; - text-align:left!important; - width:auto; -} - -tbody tr td -{ - text-align:right; -} - -tfoot tr td -{ - border-top:1px dotted #E1E1E1; -} - -tfoot ul -{ - list-style-type:none; - margin-left:1em; - padding-left:0; -} - -li.symbols -{ - padding-left:23px; -} - -li.vendimg -{ - padding-left:25px; -} - -tfoot ul li -{ - background-repeat:no-repeat; - display:inline; - margin-bottom:.3em; - padding-right:1em; -} - -li.symbols,li.vendimg -{ - display:inline-block; - width:auto; -} - -td[id^=legend] h5 -{ - font-size:.9em; -} - -div#pbar -{ - background-color:#90EE90; - border:1px solid #a0a0a0; - height:15px; - min-width:100px; - padding-right:2px; - position:relative; - text-align:left; - width:auto; -} - -div[id^=bar] -{ - background-color:red; - border:1px solid #e2e2e2; - border-left:none; - border-right:none; - float:left; - height:13px; -} - -div#bar1 -{ - background-color:orange; -} - -div#bar2 -{ - background-color:blue; -} - -div#bar3 -{ - background-color:#FF0; -} - -span#duused -{ - color: red; - font-weight: bolder; -} - -span#free -{ - color: green; - font-weight: bolder; -} - -span#percent -{ - font-weight:bolder; - position:relative; -} - -span#max -{ - position:absolute; - right:2px; -} - -span#used -{ - color: orange; - font-weight: bolder; -} - -hr -{ - margin-bottom:1em; -} - -#errors -{ - color:#CA2F2F; - font-weight:bolder; -} \ No newline at end of file diff --git a/html/html/themes/maniac/images/Thumbs.db b/html/html/themes/maniac/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..37ec790fdd3ace817f124710d57c4e77bfb8da3a GIT binary patch literal 13312 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 b`^&fcSOP7K=f(S1Wxsu<_>(*Mw4%QQYzwiG literal 0 HcmV?d00001 diff --git a/html/html/themes/maniac/images/updxl-icons.gif b/html/html/themes/maniac/images/updxl-icons.gif deleted file mode 100644 index bae5cb66338fc56d08072152a39c7d9aa7997643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 diff --git a/html/html/themes/maniac/include/functions.pl b/html/html/themes/maniac/include/functions.pl index e072d3bc8..eea8091b0 100644 --- a/html/html/themes/maniac/include/functions.pl +++ b/html/html/themes/maniac/include/functions.pl @@ -147,7 +147,8 @@ sub openpage { - $title + $title + $extrahead END ; if ($settings{'FX'} ne 'off') { @@ -160,84 +161,87 @@ END print < - $extrahead + END ; if ($settings{'SPEED'} ne 'off') { print < - + - - + + + END ; } else { - print "\n";} +print "\n";} print < -