#!/usr/bin/perl
# written 08.04.08 02:00 ;)

use Cwd; # get current working directory, core util
use Time::Piece;
use strict;

my $file_good_mask = '\.(s?html?|png|jpe?g|css|txt|js)$';
my $file_bad_mask = '^\.|HEADER';
my $dir_good_mask  = '.';
my $dir_bad_mask = '^\.|old|dev$|go';
my $homepage_dir = '/srv/www/technikum29';
my $compare_changelog_time = (stat("$homepage_dir/CHANGELOG.txt"))[9];
my @master_dirs = qw/de en shared/;
sub linkfile {
	my $dir = getcwd;
	$dir =~ s#$homepage_dir#http://www.technikum29.de/#o;
	return "<a href=\"$dir/$_[0]\">$_[0]</a>";
}

sub formattime {
	my $stamp = shift;
	my $type = ($stamp > $compare_changelog_time) ? "newer" : "older"; # im Vergleich zu Changelog-Aktualität
	return "<span class=\"$type\">".localtime($stamp)->strftime("%d.%m.%Y %T")."</span>";
}

print <<HEAD;
Content-Type: text/html
X-Generator: Svens Lastmod-Programm 08.04.08

<html>
<head>
  <title>technikum29 Dateienstatus</title>
  <link rel="stylesheet" href="/src/private.design/style.css" type="text/css">
  <style type="text/css">
     .newer,.older { 
        display: block;
        float: right;
     }
     .newer { font-weight: bold; }
     li { 
         clear:both;
     }
     
     li.even { }
     li.odd { background-color: #f8f8f8;}
     
     ol { /* etwas primitive struktur... */
         border-left: 1px dashed #484848;
     }
     ol#master { border:none; }
  </style>
</head>
<body>
<h1><a href="/"><span>technikum29: </span></a><strong>Changelog</strong></h1>

<h2>Letzte Änderungen der technikum29-Dateien</h2>

<p>Im Folgenden sind alle Dateien der Homepage, deren Änderungen 
<a href="/changelog">im Changelog</a> protokolliert werden (sollten), mit
dem Datum ihrer letzten Änderung aufgeführt. Liegt dies vor der neusten
protokollierten Version im Changelog, dann ist es <u>dick</u> gedruckt.
Dies deutet darauf hin, dass der Changelog zur Zeit veraltet ist.
Für weitergehende Informationen siehe auch die
<a href="svn-status.php">SVN-Statusausgaben</a></p>

<ul id="master">
HEAD

chdir($homepage_dir);

my $x = 0; # gesamtdateienzähler für even/odd
for (@master_dirs) {
	ls($_);
}

sub ls {
	# lists dir or prints error
	my $d = shift;
	my $t = shift; # tab count, nicht so wichtig
	unless(opendir(DIR, $d)) {
		print "<li>$d: $!\n</li>";
		return;
	}

	chdir $d;
	my @files = grep { -f && /$file_good_mask/oi && !/$file_bad_mask/io } readdir(DIR);
	rewinddir(DIR);
	my @dirs = grep { -d && /$dir_good_mask/io && !/$dir_bad_mask/io } readdir(DIR);
	print "\t" x $t, "<li><b>$d</b><ol>\n";
	foreach (@files) { 
		print "\t" x ($t+1), "<li class=\"",($x++ % 2 == 0 ? "even" : "odd" ),"\">", formattime((stat)[9]), linkfile($_),"</li>\n";
	}
	$t++;
	ls($_, $t) for(@dirs);
	print "\t" x --$t, "</ol></li>\n";
	chdir '..';

	closedir DIR;
}

print "\n\n</ul>";
print "<p>Insgesamt <b>$x Dateien</b></p>";

