#!/usr/local/gnu/bin/perl

$|=1;

#
# erzeugt eine Liste aller persoenlichen Homepages
#
@EXCLUDE_USERS = (
  "ainf",
  "binf",
  "blaxxun",
  "cb",
  "cg",
  "cgprakt",
  "cinf",
  "db",
  "dbm5",
  "dbp",
  "dbs",
  "famulus",
  "graph",
  "ipal",
  "japi",
  "java",
  "mas2tex",
  "mm",
  "mmp",
  "mmprakt",
  "nn",
  "oracle",
  "pa",
  "robot",
  "robotik",
  "se",
  "se1",
  "soft",
  "sp",
  "sypro",
  "tsa",
  "vcprakt",
  "www",
  "wwwfs"
);
@ANONYMOUS_USERS =(
);
$HTMLFILE = "/home/www/pub/userlist.php";
$HTMLURL  = "/userlist.php";

print "Content-Type: text/html\n";
print "\n";
print "<HTML>\n";
print "<HEAD>\n";
print "  <TITLE>Index f&uuml;r pers&ouml;nliche Homepages erzeugen</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n\n";
print "<H1>Index f&uuml;r pers&ouml;nliche Homepages erzeugen</H1>\n\n";
print "<P>Der Vorgang dauert einige Sekunden, bitte warten ...</P>\n";
print "<UL>\n";

if (!open(PIPE, "ypcat passwd|")) {
  print "<LI><STRONG>Konnte Liste der User nicht bestimmen\n";
  print "(Aufruf von ypcat passwd)</STRONG>\n";
} else {
  # Alle User bestimmen und in Arrays speichern
  $next  = 0;
  $next2 = 0;
  while(<PIPE>) {
    chomp;
    @user = split(/:/,$_);
    # nur User mit Realnamen zulassen
    if($user[4] ne "") {
      if (grep(/^$user[0]$/,@ANONYMOUS_USERS) == 1) {
        # nicht personenbezogene User voranstellen
        # @DIR = </vol/html/$user[0]/*>;
        # if ($#DIR >= 0) {
	if (-r "/vol/html/$user[0]/index.html" ||
	    -r "/vol/html/$user[0]/index.html.de" ||
	    -r "/vol/html/$user[0]/index.html.en" ||
	    -r "/vol/html/$user[0]/index.php" ||
	    -r "/vol/html/$user[0]/index.php.de" ||
	    -r "/vol/html/$user[0]/index.php.en") {
          # Login- und Realname aus YellowPages
          $GROUP[$next2]      = $user[0];
          $GROUPNAME[$next2]  = $user[4];
          ++$next2;
        }
      } elsif (grep(/^$user[0]$/,@EXCLUDE_USERS) == 0) {
        # nur User, die nicht in Ausnahmeliste stehen
        # @DIR = </vol/html/$user[0]/*>;
        # if ($#DIR >= 0) {
	if (-r "/vol/html/$user[0]/index.html" ||
	    -r "/vol/html/$user[0]/index.html.de" ||
	    -r "/vol/html/$user[0]/index.html.en" ||
	    -r "/vol/html/$user[0]/index.php" ||
	    -r "/vol/html/$user[0]/index.php.de" ||
	    -r "/vol/html/$user[0]/index.php.en") {
          # Login- und Realname aus YellowPages
          $LOGIN[$next] = $user[0];
          $NAME[$next]  = $user[4];
  
          # Nachname ist letztes Wort im Namen
          @tmp = split(/ +/,$user[4]);
          $NNAME[$next] = pop @tmp;
          $VNAME[$next] = join(" ",@tmp);
          ++$next;
        }
      }
    }
  }
  close PIPE;
  print "<LI>Userliste aus YellowPages ermittelt\n";

  # Arrays nach Nachnamen sortieren
  for ($i=0 ; $i<$next ; ++$i) {
    $INDEX[$i] = $i;
  }
  @INDEX = sort {$NNAME[$a] cmp $NNAME[$b]} @INDEX;
  print "<LI>User nach Nachnamen sortiert\n";

  # Arrays nach Gruppennamen sortieren
  for ($i=0 ; $i<$next2 ; ++$i) {
    $INDEX2[$i] = $i;
  }
  @INDEX2 = sort {$GROUPNAME[$a] cmp $GROUPNAME[$b]} @INDEX2;
  print "<LI>Gruppen nach Namen sortiert\n";

  # HTML-Liste erzeugen
  $lastCapital = "";
  $USERLIST  = "<UL>\n";
  if ($next2 > 0) {
    $USERLIST .= "<li><STRONG>Nicht personenbezogene User</STRONG><UL>\n";
    for ($i=0 ; $i<$next2 ; ++$i) {
      $idx = $INDEX2[$i];
      $USERLIST .= "<LI><A HREF=\"/~$GROUP[$idx]/\">$GROUPNAME[$idx]</A>\n";
    }
    $USERLIST .= "</UL><P>\n";
  }
  for ($i=0 ; $i<$next ; ++$i) {
    $idx = $INDEX[$i];
    $capital = substr($NNAME[$idx],0,1);
    if($capital ne $lastCapital) {
      $lastCapital = $capital;
      $USERLIST .= "$lClose\n"; $lClose="</UL>";
      $USERLIST .= "<li><A NAME=\"$capital\"><STRONG>$capital</STRONG></A>\n";
      $USERLIST .= "<UL>\n";
      $CAPITALS{$capital} = 1;
    }
    $USERLIST .= "<LI><A HREF=\"/~$LOGIN[$idx]/\">$NNAME[$idx], $VNAME[$idx]</A>\n";
  }
  $USERLIST .= "</UL>\n</ul>\n";
  print "<LI>Liste aller User als HTML-Code erzeugt\n";

  # Erzeugen einer Navigationsleiste (A-Z)
  $NAVBAR = "<P align=center>[ ";
  foreach $cap (split(//,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
    if ($CAPITALS{$cap}) {
      $NAVBAR .= "$lSep<A HREF=\"#$cap\">$cap</A>";
    } else {
      $NAVBAR .= "$lSep$cap";
    }
    $lSep = " | ";
  }
  $NAVBAR .= " ]</P>";
  print "<LI>Navigationsleiste erzeugt\n";

  if (!open(FILE, ">$HTMLFILE")) {
    print "<LI><STRONG>HTML-Datei konnte nicht ge&ouml;ffnet werden\n";
    print "($HTMLFILE)</STRONG>\n";
    print "M&ouml;gliche Fehlerursache: Datei $HTMLFILE ist nicht\n";
    print "f&uuml;r den CGI-User (normalerweise nobody) beschreibbar.\n";
  } else { 
    print FILE "<?PHP\n  include(\"/home/www/php/template.inc\");\n",
	       "  startPage(\"de\", \"Pers&ouml;nliche Homepages\");\n?>\n\n";
    print FILE "Auf dieser Seite sind immer die zur Zeit verf&uuml;gbaren\n";
    print FILE "Seiten aller Mitarbeiter, Studentinnen und Studenten auf ",
	       "diesem Server aufgelistet.\n";
    print FILE "<HR>\n";
    print FILE "<P><STRONG>Achtung:<br>Alle diese Links f&uuml;hren direkt in die\n";
    print FILE "Home-Verzeichnisse der einzelnen Personen, also in die Wildnis.\n";
    print FILE "Alles, was dort zu finden ist, unterliegt keinerlei Zensur, und die\n";
    print FILE "offiziellen WWW-Administratoren haben keinen Einflu&szlig; auf die\n";
    print FILE "folgenden Seiten. Deshalb kann f&uuml;r Inhalt und Zustand der Seiten\n";
    print FILE "keinerlei Verantwortung von offizieller Seite &uuml;bernommen\n";
    print FILE "werden!</STRONG></P>\n";
    print FILE "<HR>\n";
    print FILE $NAVBAR;
    print FILE $USERLIST;
    print FILE $NAVBAR;
    print FILE "<?PHP endPage(0, 0); ?>\n";
    close FILE;

    print "<LI>PHP-Datei $HTMLFILE wurde erzeugt\n";
    print "</UL>\n";
    print "<P>Die Liste aller Homepages ist aktualisiert worden.\n";
    print "<BLOCKQUOTE>\n";
    print "  <A HREF=\"$HTMLURL\">Liste aller Homepages</A><BR>\n";
    print "  <A HREF=\"./\">Zur&uuml;ck zur Administrationsseite</A>\n";
    print "</BLOCKQUOTE>\n";
  }
}

print "</BODY>\n";
print "</HTML>\n";
