#!/usr/bin/perl -w

#$htdocsdir="c:\\httpd\\HtDocs\\hot_int";                     #rootverzeichnis der http-dokumente auf dem webserver, angabe betriebssystemspezifisch (mit / oder \)
$htdocsdir="/var/www/vhosts/tga-annaberg.de/web_users/tgadownload";
$exploredirroot="/~tgadownload/data/";                     #startverzeichnis des zu durchsuchenden verzeichnisbaumes (immer mit /)
$javascriptdir="/javascripts/tree/";                #pfad des javascripts/stylesheets ausgehend von $htdocsdir (immer mit /)
$TageNew=28;                                        #Anzahl Tage, für die ein Dokument als neu/geändert markiert wird
$akttime=time;

#use Win32::OLE;
$useshortnames="no";


print << "endeperl";
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>destroydrop &amp;raquo; JavaScripts &amp;raquo Tree</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

endeperl

print "<LINK REL=\"StyleSheet\" HREF=\"".$javascriptdir."tree.css\" TYPE=\"text/css\">";
print "<SCRIPT TYPE=\"text/javascript\" SRC=\"".$javascriptdir."tree.js\"></SCRIPT>";

print << "endeperl";

<SCRIPT TYPE="text/javascript">
    <!--
    var Tree = new Array;
    // nodeId | parentNodeId | nodeName | nodeUrl

endeperl

$exploredir = $htdocsdir.$exploredirroot;         #für DOS/Windows / erstezen durch \ im Startpfad
$exploredir ="/var/www/vhosts/tga-annaberg.de/web_users/tgadownload/data/"; 

#bestimme OS und setze OS-abhängige Funktionen/Zeichen
if (($^O =~ "bsd") or ($^O =~ "linux") or ($^O =~ "solaris"))
{ $OldDir = `pwd`;
  $SLASH = '/';
}
if (($^O =~ "dos") or ($^O =~ "MSWin32"))
{ $OldDir = `cd`;
  $SLASH = '\\';
  if ($^O =~ "MSWin32")
  {
    $shorthtdocsdir=Win32::GetShortPathName($htdocsdir);
    $shorthtdocsdir =~ s/\\/\\\\/g;                #zur verwendung in regulären ausdrücken \ durch \\ ersetzen
  }
  $exploredir =~ s/\//$SLASH/g;
}
$DotDot = '..';
if ($^O =~ "MacOS") { $DotDot = "::" }

$treenr=0;                                          #initialisiere node-number

$searchpattern="*";                                 #suche alle dokumente
$format="baum";
$onlynew="no";
chdir($exploredir);                                 #wechsle in startverzeichnis
&explore($treenr,$exploredirroot);                  #rekursives durchsuchen des verzeichnisbaumes

$searchpattern="*";                             #suche alle pdf dokumente
$format="liste";
$onlynew="yes";
chdir($exploredir);                                 #wechsle in startverzeichnis
print "Tree[".$treenr."]  = \"".($treenr + 1)."|0|geänderte Dokumente|\"\n"; #erzeuge starteintrag für liste geänderte dokumente
$treenr+=1;
&explore($treenr,$exploredirroot);                  #rekursives durchsuchen des verzeichnisbaumes


sub explore
{ my $parentNodeId=$_[0];                           #parentNodeID auf übergeordnete nodeID setzen
  my $aktdir=$_[1];                                 #merken aktuelles verzeichnis


  foreach $filename (glob($searchpattern))          #für alle gefundenen dateien einen tree-eintrag erzeugen
  {
    if ((-f $filename))                             #Tree[n] = "nodeId | parentNodeId | nodeName | nodeUrl"
    {
      @filestatus=stat($filename);
      my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
          $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(@filestatus[9]);
      $Monat+=1;
      $Jahrestag+=1;
      $Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
      $Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
      $Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
      $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
      $Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
      $Jahr+=1900;
      
      if ($useshortnames eq "yes")
      {
        $longname=$htdocsdir.$aktdir.$filename;
        $longname =~ s/\//$SLASH/g;                 #alle / in \ wandeln
        $shortname=Win32::GetShortPathName($longname);
        $shortname =~ s/$shorthtdocsdir//;          #entferne htdocsverzeichnis aus pfad
        $shortname =~ s/\\/\//g;                    #wandle \ in / im pfad für url
      } else
      { $shortname=$aktdir.$filename."?time=".$akttime;
      }
      if (@filestatus[9] > (time - (60 * 60 * 24 * $TageNew)))
      { $FileIsNew="1";
      } else
      { $FileIsNew="0";
      }
      if ($onlynew eq "no" || $FileIsNew eq "1")
      {
        $caption=$filename." vom ".$Monatstag.".".$Monat.".".$Jahr;
        $caption=~ s/^[0-9][0-9][0-9] //;                         #nummerierung entfernen
        if ($onlynew eq "yes") { $FileIsNew="0"; }    #wenn nur neue dokumente gelistet, kennzeichnung für neues dokument rücksetzen
        if ($format eq "baum")
        { #baumdarstellung der dokumente entsprechend pfad
          $caption =~ s/\.pdf//;                      #entferne dateityp (pdf) aus dateinamen
          print "Tree[".$treenr."]  = \"".($treenr+1)."|".$parentNodeId."|".$caption."|".$shortname."|".$FileIsNew."\"\n";
          $treenr+=1;
        } else
        { #listendarstellung der formblätter
          @dokument = split(/\// ,$aktdir);
          @dokument[-1] =~ s/^[0-9][0-9][0-9] //;                 #entferne nummerierung aus verzeichnisnamen
          $caption =~ s/\.pdf//;                       #entferne dateityp (pdf) aus dateinamen
          print "Tree[".$treenr."]  = \"".($treenr+1)."|".$parentNodeId."|".@dokument[-1]." - ".$caption."|".$shortname."|".$FileIsNew."\"\n";
          $treenr+=1;
        }
      }
    }
  }
  foreach $filename (glob("*"))                      #für alle gefundenen unterverzeichnisse treeeintrag und rekursiver aufruf
  {
    if (-d $filename)
    { if ($format eq "baum")
      { #verzeichnisbaum mit ausgeben
        $caption=$filename;
        $caption=~ s/^[0-9][0-9][0-9] //;                         #nummerierung entfernen
        print "Tree[".$treenr."]  = \"".($treenr+1)."|".$parentNodeId."|".$caption."||\"\n";
        $treenr+=1;
        chdir ($filename);
        &explore($treenr,$aktdir.$filename."/");
        chdir ($DotDot);
      } else
      { #bei listenform nur verzeichniswechsel ohne listeneintrag
        chdir ($filename);
        &explore($parentNodeId,$aktdir.$filename."/");
        chdir ($DotDot);
      }
    }
  }
}



print << "endeperl";

    //-->
  </SCRIPT></HEAD>
<BODY>



<PRE>
<DIV ID="tree">
<SCRIPT TYPE="text/javascript">
<!--
  createTree(Tree,0,0,"TGA Annaberg Downloads");
//-->
</SCRIPT>
</DIV></PRE></BODY></HTML>

endeperl
