+sub printcurrentfiles
+{
+ my $title = shift;
+ my @files = @_;
+
+ print <<END
+<table>
+<tr><td class='boldbase'><b>$Lang::tr{'updxlrtr current files'}</b></td></tr>
+</table>
+<table width='100%'>
+<colgroup span='2' width='2%'></colgroup>
+<colgroup span='1' width='0*'></colgroup>
+<colgroup span='4' width='5%'></colgroup>
+<colgroup span='1' width='2%'></colgroup>
+<tr>
+ <td class='base' align='center'> </td>
+ <td class='base' align='center'> </td>
+ <td class='base' align='center'><i>$Lang::tr{'updxlrtr filename'}</i></td>
+ <td class='base' align='center'><i>$Lang::tr{'updxlrtr filesize'}</i></td>
+ <td class='base' align='center'><i>$Lang::tr{'date'}</i></td>
+ <td class='base' align='center'><img src='/images/reload.gif' alt='$Lang::tr{'updxlrtr last access'}' /></td>
+ <td class='base' align='center'><img src='/images/updbooster/updxl-globe.gif' alt='$Lang::tr{'updxlrtr last checkup'}' /></td>
+ <td class='base' align='center'> </td>
+</tr>
+END
+;
+ $id = 0;
+ foreach $updatefile (@files)
+ {
+ $updatefile =~ s/.*:separator://;
+ my $size_updatefile = 0;
+ my $mtime = 0;
+ if(-e "$repository/$updatefile") {
+ $size_updatefile = (-s "$repository/$updatefile");
+ $mtime = &getmtime("$repository/$updatefile");
+ }
+
+ $id++;
+ if ($id % 2) {
+ print "<tr bgcolor='$Header::table1colour'>\n"; }
+ else {
+ print "<tr bgcolor='$Header::table2colour'>\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 = <FILE>;
+ 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 = <FILE>;
+ 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 = <FILE>;
+ close(FILE);
+ chomp @metadata;
+ $status = $metadata[-1];
+ }
+ } else {
+ ($uuid,$vendorid,$shortname) = split('/',$updatefile);
+ $status = $sfOutdated;
+ }
+
+ print "\t\t<td align='center' nowrap='nowrap'> ";
+ if ($status == $sfUnknown)
+ {
+ print "<img src='/images/updbooster/updxl-led-gray.gif' alt='$Lang::tr{'updxlrtr condition unknown'}' /> </td>\n";
+ }
+ if ($status == $sfOk)
+ {
+ print "<img src='/images/updbooster/updxl-led-green.gif' alt='$Lang::tr{'updxlrtr condition ok'}' /> </td>\n";
+ }
+ if ($status == $sfNoSource)
+ {
+ print "<img src='/images/updbooster/updxl-led-yellow.gif' alt='$Lang::tr{'updxlrtr condition nosource'}' /> </td>\n";
+ }
+ if (($status == $sfOutdated) && (!($updatefile =~ /^download\//i)))
+ {
+ print "<img src='/images/updbooster/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' /> </td>\n";
+ }
+ if (($status == $sfOutdated) && ($updatefile =~ /^download\//i))
+ {
+ print "<img src='/images/updbooster/updxl-led-blue.gif' alt='$Lang::tr{'updxlrtr condition download'}' /> </td>\n";
+ }
+
+ print "\t\t<td align='center' nowrap='nowrap'> ";
+ if ($vendorid =~ /^Adobe$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-adobe.gif' alt='Adobe'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Microsoft$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-windows.gif' alt='Microsoft'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Symantec$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-symantec.gif' alt='Symantec'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Linux$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-linux.gif' alt='Linux'}' /> </td>\n";
+ } elsif ($vendorid =~ /^TrendMicro$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-trendmicro.gif' alt='Trend Micro'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Apple$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-apple.gif' alt='Apple'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Avast$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-avast.gif' alt='Avast'}' /> </td>\n";
+ } elsif ($vendorid =~ /^Avira$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-avira.gif' alt='Avira' /> </td>\n";
+ } elsif ($vendorid =~ /^AVG$/i)
+ {
+ print "<img src='/images/updbooster/updxl-src-avg.gif' alt='AVG' /> </td>\n";
+ } elsif ($vendorid =~ /^Ipfire$/i)
+ {
+ print "<img src='/images/IPFire.png' width='18' height='18' alt='IPFire' /> </td>\n";
+ }
+ else
+ {
+ if (-e "/srv/web/ipfire/html/images/updbooster/updxl-src-" . $vendorid . ".gif")
+ {
+ print "<img src='/images/updbooster/updxl-src-" . $vendorid . ".gif' alt='" . ucfirst $vendorid . "' /> </td>\n";
+ } else {
+ print "<img src='/images/updbooster/updxl-src-unknown.gif' alt='" . ucfirst $vendorid . "' /> </td>\n";
+ }
+ }
+
+ $shortname = substr($updatefile,rindex($updatefile,"/")+1);
+ $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i;
+
+print <<END
+ <td class='base' align='left' title='cache:/$updatefile'><a href="/updatecache/$updatefile">$shortname</a></td>
+ <td class='base' align='right' nowrap='nowrap'> $filesize </td>
+ <td class='base' align='center' nowrap='nowrap'> $filedate </td>
+ <td class='base' align='center' nowrap='nowrap'> $lastaccess </td>
+ <td class='base' align='center' nowrap='nowrap'> $lastcheck </td>
+ <td align='center'>
+ <form method='post' name='frma$id' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='image' name='$Lang::tr{'updxlrtr remove file'}' src='/images/delete.gif' title='$Lang::tr{'updxlrtr remove file'}' alt='$Lang::tr{'updxlrtr remove file'}' />
+ <input type='hidden' name='ID' value='$updatefile' />
+ <input type='hidden' name='ACTION' value='$Lang::tr{'updxlrtr remove file'}' />
+ </form>
+ </td>
+ </tr>
+END
+;
+ }
+
+ print "</table>\n";
+
+}
+
+# -------------------------------------------------------------------
+
+sub printlegenddownload
+{
+ print <<END
+ <tr>
+ <td class='boldbase'> <b>$Lang::tr{'legend'}:</b></td>
+ <td class='base'> </td>
+ <td><img src='/images/updbooster/updxl-led-blue.gif' alt='$Lang::tr{'updxlrtr condition download'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition download'}</td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td><img src='/images/updbooster/updxl-led-gray.gif' alt='$Lang::tr{'updxlrtr condition suspended'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition suspended'}</td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td><img src='/images/delete.gif' alt='$Lang::tr{'updxlrtr cancel download'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr cancel download'}</td>
+ </tr>
+END
+;
+}
+
+# -------------------------------------------------------------------
+
+sub printlegendicons
+{
+ print <<END
+
+
+
+ <tr>
+ <td class='boldbase'> <b>$Lang::tr{'legend'}:</b></td>
+ <td class='base'> </td>
+ <td><img src='/images/reload.gif' alt='$Lang::tr{'updxlrtr last access'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr last access'}</td>
+ <td class='base'> </td>
+ <td><img src='/images/updbooster/updxl-globe.gif' alt='$Lang::tr{'updxlrtr last checkup'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr last checkup'}</td>
+ <td class='base'> </td>
+ <td><img src='/images/delete.gif' alt='$Lang::tr{'updxlrtr remove file'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr remove file'}</td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ </tr>
+END
+;
+}
+
+# -------------------------------------------------------------------
+
+sub printlegendstatus
+{
+ print <<END
+ <tr>
+ <td class='base'> $Lang::tr{'status'}:</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-led-green.gif' alt='$Lang::tr{'updxlrtr condition ok'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition ok'}</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-led-yellow.gif' alt='$Lang::tr{'updxlrtr condition nosource'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition nosource'}</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition outdated'}</td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+
+ <td class='base'> </td>
+ </tr>
+ <tr>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-led-blue.gif' alt='$Lang::tr{'updxlrtr condition download'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition download'}</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-led-gray.gif' alt='$Lang::tr{'updxlrtr condition unknown'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr condition unknown'}</td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td class='base'> </td>
+
+ <td class='base'> </td>
+ </tr>
+END
+;
+}
+
+# -------------------------------------------------------------------
+
+sub printlegendsource
+{
+ print <<END
+ <tr>
+
+
+
+ <td class='base'> $Lang::tr{'updxlrtr source'}:</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-adobe.gif' alt='Adobe' /></td>
+ <td class='base'>Adobe</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-apple.gif' alt='Apple' /></td>
+ <td class='base'>Apple</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-avast.gif' alt='Avast' /></td>
+ <td class='base'>Avast</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-linux.gif' alt='Linux' /></td>
+ <td class='base'>Linux</td>
+ </tr>
+ <tr>
+ <td colspan='13'></td>
+ </tr>
+ <tr>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-windows.gif' alt='Microsoft' /></td>
+ <td class='base'>Microsoft</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-symantec.gif' alt='Symantec' /></td>
+ <td class='base'>Symantec</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-trendmicro.gif' alt='Trend Micro' /></td>
+ <td class='base'>Trend Micro</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/IPFire.png' width='18' height='18' alt='IPFire' /></td>
+ <td class='base'>IPFire</td>
+ </tr>
+ <tr>
+ <td class='base'> </td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-avira.gif' alt='Avira' /></td>
+ <td class='base'>Avira</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-avg.gif' alt='AVG' /></td>
+ <td class='base'>AVG</td>
+ <td class='base'> </td>
+ <td align='center'><img src='/images/updbooster/updxl-src-unknown.gif' alt='$Lang::tr{'updxlrtr other'}' /></td>
+ <td class='base'>$Lang::tr{'updxlrtr other'}</td>
+ <td class='base'> </td>
+ <td align='center'></td>
+ <td class='base'> </td>
+ </tr>
+
+END
+;
+
+}
+
+# -------------------------------------------------------------------
+
+sub printlegendspacer
+{
+ print <<END
+ <tr>
+ <td colspan='13'> <br></td>
+ </tr>
+END
+;
+}
+
+# -------------------------------------------------------------------
+