From 5cf2c339680b6922a08ebf1d44dab5c90ba2d5d4 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 29 Apr 2013 13:13:07 +0200 Subject: [PATCH] =?utf8?q?Update=20accelerator=20changes=20from=20J=C3=B6r?= =?utf8?q?n-Ingo=20Weigert.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Conflicts: config/rootfiles/core/68/filelists/files --- config/rootfiles/core/68/filelists/files | 30 + html/cgi-bin/updatexlrator.cgi | 2425 ++++++++--------- html/html/images/updbooster/updxl-globe.gif | Bin 1124 -> 0 bytes html/html/images/updbooster/updxl-gr.gif | Bin 898 -> 0 bytes .../html/images/updbooster/updxl-led-blue.gif | Bin 158 -> 0 bytes .../html/images/updbooster/updxl-led-gray.gif | Bin 158 -> 0 bytes .../images/updbooster/updxl-led-green.gif | Bin 898 -> 0 bytes html/html/images/updbooster/updxl-led-red.gif | Bin 898 -> 0 bytes .../images/updbooster/updxl-led-yellow.gif | Bin 158 -> 0 bytes html/html/images/updbooster/updxl-rd.gif | Bin 898 -> 0 bytes .../images/updbooster/updxl-src-adobe.gif | Bin 1000 -> 1135 bytes .../updbooster/updxl-src-ageofconan.gif | Bin 0 -> 1171 bytes .../images/updbooster/updxl-src-avira.gif | Bin 1045 -> 1127 bytes .../images/updbooster/updxl-src-curse.gif | Bin 0 -> 1090 bytes .../images/updbooster/updxl-src-diabloiii.gif | Bin 0 -> 979 bytes .../images/updbooster/updxl-src-eveonline.gif | Bin 0 -> 411 bytes .../images/updbooster/updxl-src-google.gif | Bin 0 -> 586 bytes .../images/updbooster/updxl-src-ipfire.gif | Bin 0 -> 1036 bytes .../images/updbooster/updxl-src-kaspersky.gif | Bin 996 -> 628 bytes .../images/updbooster/updxl-src-mozilla.gif | Bin 0 -> 1092 bytes .../images/updbooster/updxl-src-nvidia.gif | Bin 0 -> 1000 bytes .../images/updbooster/updxl-src-opera.gif | Bin 0 -> 1016 bytes .../images/updbooster/updxl-src-secunia.gif | Bin 0 -> 316 bytes .../images/updbooster/updxl-src-swtor.gif | Bin 0 -> 1101 bytes html/html/images/updbooster/updxl-src-wot.gif | Bin 0 -> 114 bytes html/html/images/updbooster/updxl-src-wow.gif | Bin 0 -> 1111 bytes html/html/images/updbooster/updxl-yl.gif | Bin 158 -> 0 bytes .../html/themes/ipfire/images/updxl-icons.gif | Bin 0 -> 2358 bytes html/html/themes/ipfire/include/functions.pl | 122 +- html/html/themes/ipfire/include/upxlr.css | 384 +++ html/html/themes/maniac/images/Thumbs.db | Bin 13312 -> 0 bytes .../html/themes/maniac/images/updxl-icons.gif | Bin 0 -> 2358 bytes html/html/themes/maniac/include/functions.pl | 214 +- html/html/themes/maniac/include/upxlr.css | 390 +++ langs/de/cgi-bin/de.pl | 23 +- langs/en/cgi-bin/en.pl | 22 +- 36 files changed, 2131 insertions(+), 1479 deletions(-) delete mode 100644 html/html/images/updbooster/updxl-globe.gif delete mode 100644 html/html/images/updbooster/updxl-gr.gif delete mode 100644 html/html/images/updbooster/updxl-led-blue.gif delete mode 100644 html/html/images/updbooster/updxl-led-gray.gif delete mode 100644 html/html/images/updbooster/updxl-led-green.gif delete mode 100644 html/html/images/updbooster/updxl-led-red.gif delete mode 100644 html/html/images/updbooster/updxl-led-yellow.gif delete mode 100644 html/html/images/updbooster/updxl-rd.gif create mode 100644 html/html/images/updbooster/updxl-src-ageofconan.gif create mode 100644 html/html/images/updbooster/updxl-src-curse.gif create mode 100644 html/html/images/updbooster/updxl-src-diabloiii.gif create mode 100644 html/html/images/updbooster/updxl-src-eveonline.gif create mode 100644 html/html/images/updbooster/updxl-src-google.gif create mode 100644 html/html/images/updbooster/updxl-src-ipfire.gif create mode 100644 html/html/images/updbooster/updxl-src-mozilla.gif create mode 100644 html/html/images/updbooster/updxl-src-nvidia.gif create mode 100644 html/html/images/updbooster/updxl-src-opera.gif create mode 100644 html/html/images/updbooster/updxl-src-secunia.gif create mode 100644 html/html/images/updbooster/updxl-src-swtor.gif create mode 100644 html/html/images/updbooster/updxl-src-wot.gif create mode 100644 html/html/images/updbooster/updxl-src-wow.gif delete mode 100644 html/html/images/updbooster/updxl-yl.gif create mode 100644 html/html/themes/ipfire/images/updxl-icons.gif create mode 100644 html/html/themes/ipfire/include/upxlr.css delete mode 100644 html/html/themes/maniac/images/Thumbs.db create mode 100644 html/html/themes/maniac/images/updxl-icons.gif create 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 bfd674665..46ea0b839 100644 --- a/config/rootfiles/core/68/filelists/files +++ b/config/rootfiles/core/68/filelists/files @@ -4,9 +4,39 @@ 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/local/bin/consort.sh var/ipfire/backup/include diff --git a/html/cgi-bin/updatexlrator.cgi b/html/cgi-bin/updatexlrator.cgi index df77a86af..42362c273 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,7 +45,6 @@ require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; -my %color = (); my %checked=(); my %selected=(); my %netsettings=(); @@ -56,6 +55,8 @@ my %dlinfo=(); my $id=0; my @dfdata=(); my $dfstr=''; +my $dudata=''; +my $dustr=''; my @updatelist=(); my @sources=(); my $sourceurl=''; @@ -63,6 +64,7 @@ my $vendorid=''; my $uuid=''; my $status=0; my $updatefile=''; +my $cachefile=''; my $shortname=''; my $time=''; my $filesize=0; @@ -78,11 +80,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 $hintcolour = '#FFFFCC'; -my $colourgray = '#808080'; +my $repository = '/var/updatecache/'; +my $webhome = '/srv/web/ipfire/html'; +my $webimgdir = '/images/updbooster'; my $sfUnknown='0'; my $sfOk='1'; @@ -91,7 +93,7 @@ my $sfNoSource='3'; my $not_accessed_last=''; -my $errormessage=''; +my @errormessages=(); my @repositorylist=(); my @repositoryfiles=(); @@ -103,7 +105,6 @@ 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'; @@ -116,1451 +117,1305 @@ $xlratorsettings{'FULL_AUTOSYNC'} = 'off'; $xlratorsettings{'NOT_ACCESSED_LAST'} = 'month1'; $xlratorsettings{'REMOVE_NOSOURCE'} = 'off'; $xlratorsettings{'REMOVE_OUTDATED'} = 'off'; -$xlratorsettings{'REMOVE_OBSOLETE'} = 'off'; +$xlratorsettings{'REMOVE_UNKNOWN'} = 'off'; +$xlratorsettings{'REMOVE_TODELETE'} = 'off'; +$xlratorsettings{'TODELETE'} = 'off'; +$xlratorsettings{'show'} = ''; &Header::getcgihash(\%xlratorsettings); -$xlratorsettings{'EXTENDED_GUI'} = ''; - -if ($xlratorsettings{'ACTION'} eq "$Lang::tr{'updxlrtr statistics'} >>") -{ - $xlratorsettings{'EXTENDED_GUI'} = 'statistics'; -} - -if ($xlratorsettings{'ACTION'} eq "$Lang::tr{'updxlrtr maintenance'} >>") -{ - $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; -} - -if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr purge'}) -{ - $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; - - 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"); } - } - } - } - } -} +# ------------------------------------------------------ +# Check if some ACTION is required +# ------------------------------------------------------ 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; -} + { &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'; + } -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; - } +# ------------------------------------------------------ +# ACTION Check - End +# ------------------------------------------------------ - &savesettings; +$not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'}; +undef($xlratorsettings{'NOT_ACCESSED_LAST'}); - system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); +if (-e "${General::swroot}/updatexlrator/settings") { + &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); } -if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'}) -{ - $xlratorsettings{'EXTENDED_GUI'} = 'maintenance'; +if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') { $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; } - $updatefile = $xlratorsettings{'ID'}; +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'; } - unless ($updatefile =~ /^download\//) - { - ($vendorid,$uuid,$updatefile) = split('/',$updatefile); - if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } - } -} +&initvendimg; -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); +# ---------------------------------------------------- +# Start Page Output +# ---------------------------------------------------- - if (-e "$repository/download/$vendorid/$updatefile.info") - { - &General::readhash("$repository/download/$vendorid/$updatefile.info", \%dlinfo); +&Header::showhttpheaders(); +&Header::openpage($Lang::tr{'updxlrtr configuration'}, 1, '' ); +&Header::openbigbox('100%', 'left', '', scalar(@errormessages)); - $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"); } +# ===================================================================================== +# CACHE OVERVIEW +# ===================================================================================== - system("rm $repository/download/$vendorid/$updatefile.info"); - } +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(); + } - if (-e "$repository/download/$vendorid/$updatefile") - { - system("rm $repository/download/$vendorid/$updatefile"); - } - } +# ===================================================================================== +# CACHE STATISTICS +# ===================================================================================== -} +if ($xlratorsettings{'EXTENDED_GUI'} eq 'statistics') { + &Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache statistics'}"); + &printfrmview(); + &printerrormsgs(\@errormessages); + &initcachestats(); + &printcachestatistics(); + &Header::closebox(); + } -$not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'}; -undef($xlratorsettings{'NOT_ACCESSED_LAST'}); +# ===================================================================================== +# CACHE MAINTENANCE +# ===================================================================================== -if (-e "${General::swroot}/updatexlrator/settings") -{ - &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); -} +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{'NOT_ACCESSED_LAST'} eq '') -{ - $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; -} +# ===================================================================================== +# CACHE SETTINGS +# ===================================================================================== -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'"; +if ($xlratorsettings{'EXTENDED_GUI'} eq 'settings') { + &Header::openbox('100%', 'left', $Lang::tr{'updxlrtr cache settings'}); + &printfrmview(); + &printerrormsgs(\@errormessages); + &initfrmsettings(); + &printfrmsettings(); + &Header::closebox(); + } # ---------------------------------------------------- -# Settings dialog +# End Page Output # ---------------------------------------------------- +&Header::closebigbox(); +&Header::closepage(); -&Header::showhttpheaders(); - -&Header::openpage($Lang::tr{'updxlrtr configuration'}, 1, ''); - -&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 Form to switch view +# ------------------------------------------------------------------- -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'}:  
-
- - - - - +sub printfrmview { + print < +
+$Lang::tr{'updxlrtr current view'}: END ; - -print"
\n"; - -print" \n"; - -print < -
 >' "; } -print "/>>' "; } -print "/>
+ 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; +} -&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 Error Messages - printerrormsgs(\@errormsgs) +# ------------------------------------------------------------------- +sub printerrormsgs { + my $errmsgs_ref = shift; + unless (@$errmsgs_ref == 0) { + &Header::openbox('100%', 'left', ''); print < - $Lang::tr{'updxlrtr current downloads'} - - - - - - - - - - - - - - - +
$Lang::tr{'error messages'}
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"; - } +# ------------------------------------------------------------------- +# Initialize Downloaddata +# ------------------------------------------------------------------- - $shortname = substr($updatefile,rindex($updatefile,"/")+1); - $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i; +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); + } + } + } +} - $filesize = $dlinfo{'REMOTESIZE'}; - 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - $dlinfo{'VENDORID'} = ucfirst $vendorid; +# ------------------------------------------------------------------- +# Print pending Downloadlist +# ------------------------------------------------------------------- - print < $dlinfo{'VENDORID'}  - - - - + + + + + + + + + + + + + + + + +END +; + &printtbldldata($dllist_ref); + 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{  "; + foreach (@$errmsgs_ref) { print "$_
"; } + undef(@$errmsgs_ref); + print "\t\t\t\n"; + &Header::closebox(); + } +} - if (($vendorid ne '') && (-e "$webhome/images/updbooster/updxl-src-$vendorid.gif")) - { - print "" . ucfirst $vendorid . " 
$shortname $filesize  $filedate  +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 ; - my $percent="0%"; - if ($dlinfo{'REMOTESIZE'} && $size_updatefile) - { - $percent=int(100 / ($dlinfo{'REMOTESIZE'} / $size_updatefile))."%"; - } - print $percent; &percentbar($percent); - print < - -
- - - -
+ &printlegenddownload(); + print <
END ; - } - - print "\n
\n\n"; - &printlegenddownload(); - print "
\n"; - - &Header::closebox(); - } } -# ===================================================================================== -# CACHE STATISTICS -# ===================================================================================== -if ($xlratorsettings{'EXTENDED_GUI'} eq 'statistics') -{ - -# ---------------------------------------------------- -# Get statistics -# ---------------------------------------------------- +# ------------------------------------------------------------------- +# Print Download Files - printdlfiles(\@dlfiles) +# ------------------------------------------------------------------- -@sources=(); -foreach (<$repository/*>) -{ - if (-d $_) - { - unless ((/^$repository\/download$/) || (/^$repository\/lost\+found$/)) { push(@sources,$_); } - } +sub printtbldldata { + my $dlfiles_ref = shift; + unless (@$dlfiles_ref) + { print "\n".$Lang::tr{'updxlrtr no pending downloads attime'}."\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 ''.ucfirst $dlinfo{'VENDORID'}."\n"; } + else { print ''.ucfirst $dlinfo{'VENDORID'}."\n"; } + print <$shortname +$filesize +$filedate + +END +; + &percentbar($percent); + print < + +
+
+ + + +
+
+ + +END +; + $id += 1; + } + } } -@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; +# ------------------------------------------------------------------- +# 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); } } -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 +# Print 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'} +sub printcachestatistics { + if ($numfiles) { + $filesize = &format_size($filesize); + $cachedtraffic = &format_size($cachedtraffic); + 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 -; - -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 < - - - - - + + END ; - -if ($numfiles) -{ + &printtblstatdata(\@vendors); print < -
$Lang::tr{'updxlrtr cache dir'}$Lang::tr{'size'}$Lang::tr{'used'}$Lang::tr{'free'}$Lang::tr{'percentage'}
[$repository]$size$used$free +
+ + +++++++ + + + + + + + + + + + + + + + - -
$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 ; -&percentbar($percent); -print < -$percent
+ &printlegendstatus(); + 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"; } +sub printtblstatdata { + my $vendlst_ref = shift; + my $vendorid; + $id = 0; + unless (@$vendlst_ref) { print "\n\n\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"; + foreach (@$vendlst_ref) { + $vendorid = $_; + unless ($vendorstats{$vendorid . "_files"}) { next; } + print "\t\n"; + if ($vendimg{$vendorid}) + { print "\t\t\n"; } + else { print "\t\t\n"; } + print "\t\t\n"; + unless ($vendorstats{$vendorid."_filesize"}) { $vendorstats{$vendorid."_filesize"} = '0'; } + print "\t\t\n"; + unless ($vendorstats{$vendorid."_cachehits"}) { $vendorstats{$vendorid."_cachehits"} = '0'; } + print "\t\t\n"; + print "\t\t\n"; + print "\t\t\n"; + print "\t\t\n"; + print "\t\t\n"; + print "\t\n"; + $id += 1; } - 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"; + } } +# ------------------------------------------------------------------- +# Initialize Repositorydata +# ------------------------------------------------------------------- -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'}     
$Lang::tr{'updxlrtr empty repository'}.
 "; - - if ($vendorid =~ /^Adobe$/i) - { - print "Adobe  Adobe  Microsoft  Symantec  Linux  Trend Micro  Apple  Avast  Avira  AVG  IPFire 
". ucfirst $vendorid ."". ucfirst $vendorid .""; + printf "%5d", $vendorstats{$vendorid."_files"}; + print ""; + print &format_size($vendorstats{$vendorid."_filesize"}); + print ""; + print &format_size($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 "
 " . 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 -; - -} +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); + } + } + } -&Header::closebox(); + 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; } -# ===================================================================================== -# CACHE MAINTENANCE -# ===================================================================================== - -if ($xlratorsettings{'EXTENDED_GUI'} eq 'maintenance') -{ - - -# ---------------------------------------------------- -# File list dialog -# ---------------------------------------------------- - -&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr cache maintenance'}"); - -@sources= <$repository/download/*>; +# ------------------------------------------------------------------- +# Initialize Cache-Maintenance Form +# ------------------------------------------------------------------- -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); - } - } +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'"; } -undef (@sources); -foreach (<$repository/*>) -{ - if (-d $_) -{ - unless (/^$repository\/download$/) { push(@sources,$_); } - } -} +# ------------------------------------------------------------------- +# Print Cache-Maintenance Form - printfrmmaintenance('withfiles', \@repositoryfiles) +# ------------------------------------------------------------------- -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 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 marked as'} ... + + + + + + + + +
+
+ +
+END +; + if ($param =~ /withfiles/i) + { &printtblrepository($Lang::tr{'updxlrtr current files'}, $repos_ref); } + print "\n"; } -@repositoryfiles = sort(@repositoryfiles); - -unless (@repositoryfiles) { print "$Lang::tr{'updxlrtr empty repository'}\n
\n"; } +# ------------------------------------------------------------------- +# Print current files in repository - printreposfiles($title, \@files) +# ------------------------------------------------------------------- -print < -$Lang::tr{'updxlrtr disk usage'} - - - - - - - - - +sub printtblrepository { + my $title = shift; + my $files = shift; + + print < +
$Lang::tr{'updxlrtr cache dir'}$Lang::tr{'size'}$Lang::tr{'used'}$Lang::tr{'free'}$Lang::tr{'percentage'}
+ ++++++ + + + + + + + + + + + + + + + - - - - + + + END ; -&percentbar($percent); -print < - - -
$title
$Lang::tr{'status'}$Lang::tr{'updxlrtr source'}$Lang::tr{'updxlrtr filename'}$Lang::tr{'updxlrtr filesize'}$Lang::tr{'date'}
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); - +&printlegendicons(); +&printlegendstatus(); +&printlegendsource(); print < -[$repository]$size$used$free +
$percent
+ unless (@$files) { print "\t\n\t\t$Lang::tr{'updxlrtr empty repository'}.\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 + $filesize + $filedate + $lastaccess + $lastcheck + + END ; - -if (@repositoryfiles) -{ - print < -
- - - - - - - - - - - - - - - - + $id += 1; + } + } + print <
 $Lang::tr{'updxlrtr all files'} -  $Lang::tr{'updxlrtr not accessed'} - - -
-  $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 ; - - &printcurrentfiles($Lang::tr{'updxlrtr current files'}, @repositoryfiles); - print "
\n\n"; - &printlegendicons(); - &printlegendspacer(); - &printlegendstatus(); - &printlegendspacer(); - &printlegendsource(); - print "
\n"; } -&Header::closebox(); +# ------------------------------------------------------------------- +# 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\""); + } + } } -# ===================================================================================== - -&Header::closebigbox(); - -&Header::closepage(); - +# ------------------------------------------------------------------- +# Delete old and selected cached files # ------------------------------------------------------------------- -sub printcurrentfiles -{ - my $title = shift; - my @files = @_; - - print < -$Lang::tr{'updxlrtr current files'} - - - - - - - - - - - - - - - - -END -; - $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"); - } +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\""); } + } - $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; - } + 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\""); } + } - 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"; - } + + 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\""); } + } + } + } + } +} - 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 - - - - - - +sub printlegenddownload { + print <$Lang::tr{'legend'}: +
    +
  • $Lang::tr{'updxlrtr condition download'}
  • +
  • $Lang::tr{'updxlrtr condition suspended'}
  • +
  • $Lang::tr{'updxlrtr cancel download'}
  • +
END ; - } - - 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  -
- - - -
-
\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'} - +sub printlegendicons { + print <$Lang::tr{'legend'}: +
    +
  • $Lang::tr{'updxlrtr last access'}
  • +
  • $Lang::tr{'updxlrtr last checkup'}
  • +
  • $Lang::tr{'updxlrtr remove file'}
  • +
END ; } # ------------------------------------------------------------------- -sub printlegendicons -{ - print < -   $Lang::tr{'legend'}: -   - $Lang::tr{ - $Lang::tr{'updxlrtr last access'} -   - $Lang::tr{ - $Lang::tr{'updxlrtr last checkup'} -   - $Lang::tr{ - $Lang::tr{'updxlrtr remove file'} -   -   -   - +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'}
  • +
END ; } # ------------------------------------------------------------------- -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'} -   -   -   -   -   - -   - +sub printlegendsource { + print <$Lang::tr{'updxlrtr sources'}: +
    END ; + foreach my $name (sort keys %vendimg) { + if ($name =~ /^unknown$/i) { + print "\t
  • ". ucfirst $Lang::tr{$name} ."
  • \n"; + } else { + print "\t
  • ". ucfirst $name ."
  • \n"; + } + } + 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 printlegendsource -{ - print < - - - -   $Lang::tr{'updxlrtr source'}: -   - Adobe - Adobe -   - Apple - Apple -   - Avast - Avast -   - Linux - Linux - - - - +sub printtbldiskusage { + my $tabletitle = shift; + my $repos_ref=shift; + print < +$tabletitle + -   -   - Microsoft - Microsoft -   - Symantec - Symantec -   - Trend Micro - Trend Micro -   - IPFire - IPFire + $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'} + +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 < -   -   - Avira - Avira -   - AVG - AVG -   - $Lang::tr{ - $Lang::tr{'updxlrtr other'} -   - -   + [$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 printlegendspacer -{ - print < -  
- +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 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'); - } +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; } +} - # 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'}); +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; +} - delete($xlratorsettings{'EXTENDED_GUI'}); - &General::writehash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); +# ------------------------------------------------------------------- +# percentbar(number[, number2, number(n)) - need absolute values +# - print relative bars ([##1][##2(number2-number1)][#n-#2-#1]...) +# ------------------------------------------------------------------- - # 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 { + $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 percentbar -{ - my $percent = $_[0]; - my $fg = '#a0a0a0'; - my $bg = '#e2e2e2'; - - if ($percent =~ m/^(\d+)%$/ ) - { - print < - -END -; - if ($percent eq "100%") { - print "" - } elsif ($percent eq "0%") { - print "" - } else { - print "" - } - print < -END -; - } +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`; - - foreach (@psdata) - { - if (/$_[0]/) { ($pid)=/^\s*(\d+)/; } - } + my $pid=''; + my @psdata=`ps ax --no-heading`; - return $pid; + 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'; } + } + my $tmp = (100/($MValue*(2**(10*$cf{$MVsize}))))*($Value*(2**(10*($cf{$Vsize}-$corf)))); + $tmp = sprintf ("%.2f", $tmp); + return $tmp; +} diff --git a/html/html/images/updbooster/updxl-globe.gif b/html/html/images/updbooster/updxl-globe.gif deleted file mode 100644 index 54e49fc826c94dee6ff9c31d5919fbeb7eb9aaab..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1124 zc-k#fZERCz6n(K@Cs%OV4YS%`uC@r#Ie>dE=>9t z=hQt_yLDS5C6xR|2wDW}reF@T?l7&TbQGaBh_xaZWoJlAj3tG%7mOOl5lW?Cb`qM9 zZ;ygaVRMYS642`L%!^=G=>SKqVst*ng#;E4a}!Ri6u}gYUW}rflSdVtLUkeurWrVj z)U832Oe-ml>E$AmDJ0jj$fg9woNKDSE&VF8SiD*m; z^@5c4vsM{>GWO_$Q!x7FF&Ro_F0MDMVm+shX}CM8>bO?rIyma1+U$&+4Wc>XO^bAZ zLNmk7VYY}ulUG{svdtN=%4{SiObOtUmC+c~@?gD*t_*9I!NqeU3~YY1CfFIqe4=w$ znaO7E|9xNiH7H(;V85VDCA?#vz(`Q&_bAgr>c~vaX=*A%eF~Ne&?bt5L0laU4=1q4 z8CytVJHrr%4jFB_M)(dVJ;>2T2Btf(+5_eU?v^H}XIMX_l~FaFNsMSvt>Oz&DCMQB zALBf$W;9LF9p#3dU=H{%2CxBH1EcOFm}B&18O)k@&LdPySRZ2z5+2n96|@D=oTOF> zEHOGrr3EpQ&Y(%ABUGKzXi5)P;S{B18Ja>cX<(PwL7Ao~*kx{jLw9C!UIU9pMI|0b-{QOO^m`*jh1iC+4N+`I>5 z*>d*e(5E%;oKO8YRAZd_Ds=YYYj1woYFM+Y=Fk%eEd}cz?Jnn5lyC5HCruym^`3J@ z`O6wwPfp)ko}2DE%bjS+k}Ew`bfYt6H=H{6Nmu>&?>kzo8`o`6I=}1srfU!mm_Gh< zvDlJJzwnlP|ABJZ_L7*q>fV;{_8AJ=#@+4iW4SH4`4#&e_V>2?0>!Ha+7>3Z>|0~H z`b)`eQ+RI)Y~IRU*>$Wg9{K5P_p!bL{_-pI-r79H)abW=-t%Q_&k0UE&97(HQq{W?(FT# SxgPpjsXQQG-(fJ2$NvG*7Jg9x diff --git a/html/html/images/updbooster/updxl-gr.gif b/html/html/images/updbooster/updxl-gr.gif deleted file mode 100644 index f8b8ec07bfee5f97208b7d9f540a8d772bc3051e..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 898 zc-lRaQAkr!9LB%9-E@TEIC=Fx4B4VgF;GL8tAXn!SCeT8F;HlV7DZ%OaQBd3(nBns-iMic$i(5b>G$64^@Ahal!a*$2Rr%|ls zpi9i>Rld$z^u03d`+*)VRS1>8fuG=6RR@#xuu?z%`(srOrP11OD9zh-sk!8W-p;sKN@-?`ndfGjz~&ie?Iw5Jux2Mxq7A4%fe9 zU52WIa1Z0JAWll<6qkW=LV@VbNN!A$!Y0$UpsFBTAD%~x6FcVlXpdthk1*Fq{rMX! zbRf(|-MxkG5g~sCWCXaLP7P!VY_DPw2<5w>O{A9o7UUj_Y!t0d3H(sa@p`GkCQDsh z_I4wYhe3F7scsbVmIu$SD1cq!W4wp|69LCXR61P2)#s-s*==?9V&cP0MU`tY_$Hcv zAU8MM*4lmDx;M}L$USt0&d+LVN3_SSgF{vLHFWk#!-4zlo4qUHdrh95!|~&d Vm^)f22RF#@=ND}+GgS_p{0FNR?LYtk diff --git a/html/html/images/updbooster/updxl-led-blue.gif b/html/html/images/updbooster/updxl-led-blue.gif deleted file mode 100644 index 80424c931868b07eccefa299db8939e53b7d36d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 158 zc-nLKbhEHb6k!lySj4~}?=&T*?o3Nl%d&l6|NQ&&|NnmmFi`x-!pXqE%Af<{fYdT@ zBr|Yx$arj6aIl#}SSu#Np~1PGN7`)zqIEz7NG$_LG6N%r zjK_ur2b(#BwPH9F8l2mCr0wQNI6QP_lrRj_nQ&oY10#zOm&SpQ3yw3gvUSKrZd%~Z zq!m8NL^5INiJ5G+w~lmNPCYwUNAT5@n?~vlOfKD0DkryO9$Dt4>^0YGtJa|g25SJ3 CxHd!p diff --git a/html/html/images/updbooster/updxl-led-green.gif b/html/html/images/updbooster/updxl-led-green.gif deleted file mode 100644 index f8b8ec07bfee5f97208b7d9f540a8d772bc3051e..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 898 zc-lRaQAkr!9LB%9-E@TEIC=Fx4B4VgF;GL8tAXn!SCeT8F;HlV7DZ%OaQBd3(nBns-iMic$i(5b>G$64^@Ahal!a*$2Rr%|ls zpi9i>Rld$z^u03d`+*)VRS1>8fuG=6RR@#xuu?z%`(srOrP11OD9zh-sk!8W-p;sKN@-?`ndfGjz~&ie?Iw5Jux2Mxq7A4%fe9 zU52WIa1Z0JAWll<6qkW=LV@VbNN!A$!Y0$UpsFBTAD%~x6FcVlXpdthk1*Fq{rMX! zbRf(|-MxkG5g~sCWCXaLP7P!VY_DPw2<5w>O{A9o7UUj_Y!t0d3H(sa@p`GkCQDsh z_I4wYhe3F7scsbVmIu$SD1cq!W4wp|69LCXR61P2)#s-s*==?9V&cP0MU`tY_$Hcv zAU8MM*4lmDx;M}L$USt0&d+LVN3_SSgF{vLHFWk#!-4zlo4qUHdrh95!|~&d Vm^)f22RF#@=ND}+GgS_p{0FNR?LYtk diff --git a/html/html/images/updbooster/updxl-led-red.gif b/html/html/images/updbooster/updxl-led-red.gif deleted file mode 100644 index 4bce21f24140beaa1993963192a87ddafc063138..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 898 zc-l>qUr19?9LK-+k11kooHp=bgzJwf4%E<0+QW?~t&M2~F>ufnEfUGFaC^v7Svbnj zw<0X^rm!AN3+idzyG?~fJ~)WzMTlrVkCI|FI-PUxv<}?M_x$efe15;*mvh@rpE}yw zZG#Ozfruza#v=u>Kq)PVa^X+G4g#PF0*sa5uR6dFWPs2FZtcT)Q^#f12??;UjLWVn zXfTfA!axEGB8ZLYr7#f}%(%#qMJUHTc?;16Pwe**~NyF0&4CB)D8pgk)nJ_&^%XQjH=m*eHSWt94CiuvxL(l2Ze(Gzc7^W+( z7}WxlWGJh)ID%OVj+|s?{T=G-Uy|np=f_;poTd|_2e)?v2$=KEsj4nX#KLpJsM6V3 z3hylzPUJL^81oh_;7bfbNN)E}g#n5#iY%`?I)a2;OqBo2nhat&3Bq;13MKYX~4%y-M#^DpOCr&(g$3P z#{yaoWP5_0fk$KbokNEiA4G$-c$+pB5fG7S<7TN|ZlcA=sqg|tL!Eh4#SQU&ePn489X4+o{Q}-(Cs&A$ndse6Rv=Hn1*)Pfa4$ryC^s9sE v2Mygl75LV3=27+TyRP-ldEcE{=jMUv;TlXGDz&x0Bfalu8=q+vWjOX12?F61 diff --git a/html/html/images/updbooster/updxl-led-yellow.gif b/html/html/images/updbooster/updxl-led-yellow.gif deleted file mode 100644 index f7e4f9ab5bca4a83cba83a0f7bb261b8ad2bee70..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 158 zc-nLKbhEHb6k!lySj52a{|rM*Q_KJFJ^z27{PXY6|Ns9Pz(DaQ3nv2uD}xS*15(St zk<7r&A>*-O!NFz@VXc@5g$Cz#9%;Kd5)KcY86*tDR3=IlA?a?>cCk;$c7O6BC1%p=RZl)dJ9ZPhx| Hz+epko`N@m diff --git a/html/html/images/updbooster/updxl-rd.gif b/html/html/images/updbooster/updxl-rd.gif deleted file mode 100644 index 4bce21f24140beaa1993963192a87ddafc063138..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 898 zc-l>qUr19?9LK-+k11kooHp=bgzJwf4%E<0+QW?~t&M2~F>ufnEfUGFaC^v7Svbnj zw<0X^rm!AN3+idzyG?~fJ~)WzMTlrVkCI|FI-PUxv<}?M_x$efe15;*mvh@rpE}yw zZG#Ozfruza#v=u>Kq)PVa^X+G4g#PF0*sa5uR6dFWPs2FZtcT)Q^#f12??;UjLWVn zXfTfA!axEGB8ZLYr7#f}%(%#qMJUHTc?;16Pwe**~NyF0&4CB)D8pgk)nJ_&^%XQjH=m*eHSWt94CiuvxL(l2Ze(Gzc7^W+( z7}WxlWGJh)ID%OVj+|s?{T=G-Uy|np=f_;poTd|_2e)?v2$=KEsj4nX#KLpJsM6V3 z3hylzPUJL^81oh_;7bfbNN)E}g#n5#iY%`?I)a2;OqBo2nhat&3Bq;13MKYX~4%y-M#^DpOCr&(g$3P z#{yaoWP5_0fk$KbokNEiA4G$-c$+pB5fG7S<7TN|ZlcA=sqg|tL!Eh4#SQU&ePn489X4+o{Q}-(Cs&A$ndse6Rv=Hn1*)Pfa4$ryC^s9sE v2Mygl75LV3=27+TyRP-ldEcE{=jMUv;TlXGDz&x0Bfalu8=q+vWjOX12?F61 diff --git a/html/html/images/updbooster/updxl-src-adobe.gif b/html/html/images/updbooster/updxl-src-adobe.gif index ebcd551aa48ff724a0213e0caa30623728ace2be..1152105f39819f2a3d4219350373818562cf912b 100644 GIT binary patch literal 1135 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 RXJ6n%=GiFAOt=sf{RcZSN#g(j literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-avira.gif b/html/html/images/updbooster/updxl-src-avira.gif index 1ed0d816b913eb073d62db86f36a51e6aa665ca2..86e2bb77b11559ef3ae3d7e88d2e8adb75dfaee8 100644 GIT binary patch literal 1127 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 B=&b+% literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-diabloiii.gif b/html/html/images/updbooster/updxl-src-diabloiii.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4f3fdf85e61cdbe24c0984f85f66513f2d16c3f GIT binary patch literal 979 zc-nLKbhEHb6k-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 literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-eveonline.gif b/html/html/images/updbooster/updxl-src-eveonline.gif new file mode 100644 index 0000000000000000000000000000000000000000..12f5ffa99fe06f7e35417cce68fa50366a69d7cb GIT binary patch literal 411 zc-nLKbhEHb6k-r!SSrlGCnl@oTc{sUs_m7_Cn6;zrzvCLCLkfdeDwwe^8kKH1yLn~ zJ^PO^Ffb@tg{ixyYI=AAqLu>r-OER0+X_6#~e z7czkS#K5-W!2ARc9VymB4h{=)^kyD@o?ykxGv$hos8OrUp7@UGx0hCEF87S$mFo4H z^5d}ccOM6B-sJQ5f0*;}HE0;K%E+{Ja5eVuaq{Uia88~wrIC|uCYyn-j+B&fQSfuit+B$nwqp%R3f^Z?Ehf8LR;@c(V8a literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-google.gif b/html/html/images/updbooster/updxl-src-google.gif new file mode 100644 index 0000000000000000000000000000000000000000..e62e292c794e951905dee9ecf00924bd56d1495d GIT binary patch literal 586 zc-nLKbhEHb6k-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% literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-ipfire.gif b/html/html/images/updbooster/updxl-src-ipfire.gif new file mode 100644 index 0000000000000000000000000000000000000000..2db1276809a69c3d0e6aa7b576d063bfbaa3032b GIT binary patch literal 1036 zc-nLKbhEHb6k-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-1tbE+e}c|Msfi`2 zDGKG8B^e6tp1uJLia%KxxfuR4=zy{ZD5EfNTw(anDdVwW!NJBRHbJG37YiJ%Q@H+e zKH0E<-KO?{idD!*c@AyyLm`C|nf#CQNcgOI_&EJkf1ij-iHCs_Teq06mRm#s`(-xO zT)vtDj)jd(UXyv|tPE*%Jj%%tRoCP=H#c{(}We}W*DwmB&g!vCSn`KlG5(1k|FR^!b#=)T$Lc1 vV+$X%oaUDBf6$}(`B}n5sen5tW^6pp)~CUj|AAxDG4JWxwk0Aw91PX~d7FmR literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-kaspersky.gif b/html/html/images/updbooster/updxl-src-kaspersky.gif index 687a6c3bed5dda806175b2089555a15824c5c712..dab09a89a1b6a63e165298ba9625e972eb44b7f4 100644 GIT binary patch literal 628 zc-nLKbhEHb6k-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-`J8aryh>y9JvCi4rm?H<8hQHcIr5B2l7<><>4JjA5ah;_^dFCx@b*zTO>mFWlYteR=Nr ze!kCf+jnm3+;YeYD_#J!i58tWSDW;2tr66Clbr^F>GnNmzNe}ebz=~XYwjwXi~ zmy~D9^sm!}Y$kjpT$q&AxRkk=5xy3B_XixS9O9Vd^ZL}skEVW}Qcmznb4%bLSGTM# z6&2OL9>|yF@Id%ULQ0)a@xy{^gG)-J)K_ZwC?7Z&P=;Sr3P^CRg+J$S2(tqWgozXW%6M}#Z#=1jLB47wW&VayA@P_0^ zMo>*@p(MBQYBghg&2!ug+wJ8lucuQWT4Uw3UVYdZk z#l{#N3IuHgF-=Ykp7*)scTmm>8Vrs5Ik-;5e45c-vQ{CL2w?;Q7kjE)u`*1LKFeSr z$W?4HMsF5!!^NRT2Q^2U${kOb9^Hq+^!sQ>Lfx~aa)mJ%9wR?SE#*)>?gqyprh}%b zd=XB@IIqGS*c|$SlZbqU5)bB>_94(1_o*Me<~`;WCRbPMrF%iS<_C6&_S*|T zSwz;Q`nR-Od}3>OF;i^5S(jl=mem*XTSfE6&iT)Ni5)&y+X$TAlnI5__>T5xVYe!Js4D(auvvHnQb7yfkA!<+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>T30g${DDo18em7$|wkJDRG66kIsK&=|Jat5)*FgBEdzDVIt(7#v)b!)Gmd zASuD<*sW8>Wt&ved0~;?0w2wo2@Nhn2HE$NW=v$x6j|QIC6`jcsCq`$t~w<|#Damj RL&Ts;!_jd6|3eK7)&SW>4ITgh literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-nvidia.gif b/html/html/images/updbooster/updxl-src-nvidia.gif new file mode 100644 index 0000000000000000000000000000000000000000..f25c41ef83a5625a90cd223242f9dbe8c9c074eb GIT binary patch literal 1000 zc-q~Q;cF9j9EZOxzv^$>p|=>y(H$d^W8O+8haBam8C+vs7AeA@FS-$awd~K>^Lh2W z`Mi5R|Kf!7>8St&;MK3NOMr!p5BegcOJFrAy$JaZ9SlLPf#L>OEi8O`&qW7Cw7fLkP1SY<2Zgw@2$BwZ$wOGa)GxvPSvs+BA7BotXtWi-FWjso? zacP5BY@`;DY(SyI&A5Ww9ba7M^BqP=Aa65bcS8A9ZY(ntKf9+zrhg-+0}Q(MAihja z*NHxTEuxwqEv&|bB$S^f&;BGdh;Ecnwu0xDMyLR27umw^(c0D&^n@WXx&D z^ee2tne>R1_8DiBmnLB(8Hj(2FVut*5sGgP&(t7Of%GDzOyHw%orsDJi7c=Y*!jN@ z{s;BF3p)_`uY}zJz7IR^u!*X>GLH`oi~M(AE^tSj%G}EFJ@*bCA5v50UqDO_dn=J}14yY#t<>Z3njejPfnv)%3ccmL@11(80}PCb9tw|90Q zF224wH$OYDPw|^Cp7n<(rnIj@8$Zs?9vb9T9gUux?Eglmo3YkiW_az5L(AQP{&U|O z;q-e0mwyOg>tI{H7yRVd?Q&SwtuyoC2Um2xd)a#U^ZSF$XHW2@zdjheHTB1`F2k|6 DXu1Ir literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-opera.gif b/html/html/images/updbooster/updxl-src-opera.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cbf9b6334d719ead70d82aa37688a425a130f1c GIT binary patch literal 1016 zc-nLKbhEHb6k-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; zf#OdVMlOc`3_1)z0Ll{#99J3sbIN#ZSm4;$FJY==qH%GdD?6)|QOJufKAEV0KNw2_ z0u>zNIf@P%tNS~;)O@*P=~%!jW1jO$;7+o;pHy?=i4H^K4gPb?bGJ!MXSqj zg=279m!q=p1Q|`G0$vII$SD#}4nB74m1ElNP`OE^!%<4pXG(>l0jHq6b&*7h<3T45 zA*T8p9Sf7%9L0syDmn}{uyXJk@f@0QK#|!|L|Uzf!O5VjnMDXR literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-secunia.gif b/html/html/images/updbooster/updxl-src-secunia.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc980b13fb546d8c37cd92f5b001e81c5cb17577 GIT binary patch literal 316 zc-mFZK`TQ60KoD8Y8y6Vd-k@sz3siXU6zs@#}rCq$iYoHkX(=qU%<%}Z7Fith7C27 z2t_UnHE$BifrFbb;e;Li`+b3bUo0AKpAZl@h!DUO#1y8sle!)(Bh-)4FpYf%`y4_X zVG+j?j%At>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 literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-swtor.gif b/html/html/images/updbooster/updxl-src-swtor.gif new file mode 100644 index 0000000000000000000000000000000000000000..13fe222b011f03a1d0cfb4852388a6ba9e0f107a GIT binary patch literal 1101 zc-nLKbhEHb6k-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 literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-wot.gif b/html/html/images/updbooster/updxl-src-wot.gif new file mode 100644 index 0000000000000000000000000000000000000000..e76f48cc225fa4ae0e23ee0187a5737790b76a1d GIT binary patch literal 114 zc-nLKbh9u|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 literal 0 Hc-jL100001 diff --git a/html/html/images/updbooster/updxl-src-wow.gif b/html/html/images/updbooster/updxl-src-wow.gif new file mode 100644 index 0000000000000000000000000000000000000000..e64432e8d9bc32549879935755ec712f51d435f0 GIT binary patch literal 1111 zc-qZV-;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 diff --git a/html/html/themes/ipfire/images/updxl-icons.gif b/html/html/themes/ipfire/images/updxl-icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..bae5cb66338fc56d08072152a39c7d9aa7997643 GIT binary patch literal 2358 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 literal 0 Hc-jL100001 diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl index 7bf2189a8..d4f8bf794 100644 --- a/html/html/themes/ipfire/include/functions.pl +++ b/html/html/themes/ipfire/include/functions.pl @@ -161,6 +161,7 @@ END print < + $extrahead - - - - -
-
-
-
+ +
+
+
+
END ; } @@ -340,39 +334,35 @@ sub closepage () { $uptime =~ s/load average/$Lang::tr{'uptime load average'}/; print < -
- -
- -
+
+
+
+
END ; &showsubsection($menu); &showsubsubsection($menu); print < -
- -
- +
+
+ -
+
+
+
END @@ -389,25 +379,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 new file mode 100644 index 000000000..e7cc9fd92 --- /dev/null +++ b/html/html/themes/ipfire/include/upxlr.css @@ -0,0 +1,384 @@ +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 deleted file mode 100644 index 37ec790fdd3ace817f124710d57c4e77bfb8da3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 13312 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 diff --git a/html/html/themes/maniac/images/updxl-icons.gif b/html/html/themes/maniac/images/updxl-icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..bae5cb66338fc56d08072152a39c7d9aa7997643 GIT binary patch literal 2358 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 literal 0 Hc-jL100001 diff --git a/html/html/themes/maniac/include/functions.pl b/html/html/themes/maniac/include/functions.pl index 05c3b948b..2a40be216 100644 --- a/html/html/themes/maniac/include/functions.pl +++ b/html/html/themes/maniac/include/functions.pl @@ -147,8 +147,7 @@ sub openpage { - $title - $extrahead + $title END ; if ($settings{'FX'} ne 'off') { @@ -161,87 +160,84 @@ END print < + $extrahead + END ; if ($settings{'SPEED'} ne 'off') { print < - + - - + window.setTimeout("refreshInetInfo()", 3000); + } + \$(document).ready(function(){ + refreshInetInfo(); + }); + + + END ; } else { -print "\n";} + print "\n";} print < - -