<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
  TODO:
  - Löschbestätigung mit Passwort als 2. Schritt
  - Ursprünglichen Dateinamen in der Liste zeigen (erfordert neue Tabellenspalte)
  - Refactoring
-->

<?php

// Das ist das Passwort zum Löschen von Dateien
$passwort = 'rep ist toll';

// Das ist die Dateiliste. Bitte keine Änderungen vornehmen!
/* Filelist:
aTest.txt//Beschreibung1
bTest.txt//Beschreibung2
cTest.txt//Beschreibung3
:Filelist */

?>


<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    
    <style type="text/css">
    <!--
      body        { font-family: "Trebuchet MS", Georgia, serif; }
      a           { color:#0000CC; }
      table       { border-collapse: collapse; }
      th          { text-align: left; background-color:#EEEEEE; font-size: 80%; }
      
      .menu       { font-size: 80%; }
      .smallsize       { font-size: 80%; }
    -->
    </style>
    
    <title>Öffentliches Recht</title>
    
  </head>
  <body>

<?php // Hilfsfunktionen
  
  $totalFiles = 0;
  $totalFileSize = 0;
  
  function readFileList() {
    
    global $totalFiles;
    global $totalFileSize;
    $lines = file('index.php');
    
    if ($lines) {
      
      $i = 0;
      
      while ((!strstr(substr($lines[$i],0,14), "* Filelist:")) and ($i <= count($lines))) // Lies bis zur Dateiliste
      {
        $i++;
      }
      
      if (strstr(substr($lines[$i],0,14), "* Filelist:")) {
        
        // Dateiliste aus index.php lesen
        $i++;
        $j = 0;
        
        while (!strstr(substr($lines[$i+$j],0,14), ":Filelist *")) {
          
          $liste[$j] = explode("//", $lines[$i+$j]);
          $liste[$j][1] = preg_replace("/\r|\n/s", "", $liste[$j][1]); // Zeilenumbruch hinter Beschreibung entfernen
          
          /*
          $descPos = strpos($lines[$i+$j], '//');
          $liste[$j][0] = substr($lines[$i+$j], 0, $descPos);
          
          // Zeilenumbruch hinter Beschreibung entfernen
          $liste[$j][1] = preg_replace("/\r|\n/s", "", substr($lines[$i+$j], $descPos+2));
          */
          
          $liste[$j][2] = filesize($liste[$j][0]);
          
          $totalFiles++;
          $totalFileSize += $liste[$j][2];
          
          $j++;
        }
        return $liste;
      }
      else {
        return false;
      }  
    }
  }
    
  function getSizeAsString($size) {
    if ($size < 2) {
      return $size." Byte";
    }
    else if ($size < 1024) {
      return $size." Bytes";
    }
    else if ($size < 1048576) {
      return round(($size/1024), 2)." KB";
    }
    else {
      return round(($size/1048576), 2)." MB";
    }
  }
    
  function convertFilename($str) {
    $out = $str;
    $ersetzungen[chr(167)] = "P.";       // Spezielle Juristen-Ersetzung: Paragraphenzeichen
    $ersetzungen[chr(196)] = "Ae";
    $ersetzungen[chr(214)] = "Oe";
    $ersetzungen[chr(220)] = "Ue";
    $ersetzungen[chr(223)] = "ss";
    $ersetzungen[chr(228)] = "ae";
    $ersetzungen[chr(246)] = "oe";
    $ersetzungen[chr(252)] = "ue";
    $out = strtr($out,$ersetzungen);
    $out = eregi_replace("[^[:alnum:]_\.-]","_",$out);  // TODO: mit preg_replace() ersetzen
    return $out;
  }
  
?>

<?php
  
  //-- Hinzufügen ------------------------------------------------------------------------------------
  
  if ($_GET['action'] == 'add') {
    
    echo "<p class=\"menu\"><a href=\"index.php\">zurück zur Liste</a></p>\n";

    // massive Login-Versuche abblocken
    sleep(1);
    
    // Passwort checken
    if ($_POST['passwort'] == $passwort) {
      
      $already_exists = file_exists($_FILES['datei']['name']);
      
      if (($already_exists) and (!$overwrite == "on"))  {
        echo "<p><b>Fehler:</b> Datei mit Namen <i>" . htmlspecialchars($_FILES['datei']['name']) . "</i> ist bereits vorhanden. (Überschreiben abgeschaltet.)</p>\n";
      }
      else {
      
        $filename = convertFilename($_FILES['datei']['name']);
        
        if (move_uploaded_file($_FILES['datei']['tmp_name'], $filename)) {
          
          echo "<p>Die Datei <i>" . htmlspecialchars($_FILES['datei']['name']) . "</i> wurde übertragen.</p>\n";
          
          $liste = readFileList();
          
          if ($liste !== false) {
            
            if ($liste !== NULL) {
              foreach($liste as $v) $s[] = $v[0];
              $idx = array_search($filename, $s);
            }
            
// FUNKY!
            if (gettype($idx) == 'integer') {                   // Dateiname bereits in Liste enthalten
              
              $lines = file('index.php');
              
              if ($lines) {
                
                $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen
                $i = 0;
                
                while (!strstr(substr($lines[$i],0,14), "* Filelist:")) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                while (!strstr(substr($lines[$i], 0, strpos($lines[$i], '//')), $filename)) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                $i++;
                fputs($fp, $filename."//".$_POST['beschreibung']."\n");
                
                while ($i < count($lines)) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                fclose($fp);
                
                echo "<p>Tabelleneintrag wurde aktualisiert.</p>\n";
              }
              else {
                echo "<p><b>Fehler:</b> <i>index.php</i> wurde nicht gefunden!</p>\n";
              }
            }
            else {                                              // Dateiname noch nicht in Liste enthalten
              
              $lines = file('index.php');
              
              if ($lines) {
                
                $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen
                $i = 0;
                
                while (!strstr(substr($lines[$i],0,14), "* Filelist:")) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                while (!strstr($lines[$i], "*/")) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                fputs($fp, $filename."//".$_POST['beschreibung']."\n");
                
                while ($i < count($lines)) {
                  fputs($fp, $lines[$i]);
                  $i++;
                }
                
                fclose($fp);
                echo "<p>Tabelleneintrag wurde erzeugt.</p>\n";
              }
              else {
                echo "<p><b>Fehler:</b> <i>index.php</i> wurde nicht gefunden!</p>\n";
              }
            }
          }
          else {
            echo "<p><b>Fehler:</b> Liste mit Dateien konnte nicht gefunden werden.</p>\n";
          }
          
        }
        else {
           echo "<p><b>Fehler:</b> Datei konnte nicht übertragen werden!</p>\n";
           echo "<p>\n";
           print_r($_FILES);
           echo "\n</p>\n";
        }      
      }
    }
    else {  // Passwort falsch
      echo "<p><b>Fehler:</b> Falsches Passwort!</p>\n";
    }
  }

  //-- Passwortabfrage vor Löschen -------------------------------------------------------------------
  
  else if ($_GET['action'] == 'deleteCheck') {
    
    echo "<p class=\"menu\"><a href=\"index.php\">zurück zur Liste</a></p>\n";
    
    if (isset($_REQUEST['delButton'])) {
      
      echo "<div style=\"margin:2em\">\n";
      echo "  <b>Auswahl löschen:</b><br>\n";
      echo "  <form action=\"index.php?action=delete\" method=\"post\">\n";
      echo "    <table>\n";
      
      reset($_REQUEST['delButton']);
      foreach ($_REQUEST['delButton'] as $idx => $filename) {
        echo "      <tr>\n";
        echo "        <td>".$filename."</td>\n";
        echo "        <td align=\"right\"><input type=\"checkbox\" name=\"delButton[]\" value=\"".$filename."\" checked /></td>\n";
        echo "      </tr>\n";
      }
      
      echo "      <tr>\n";
      echo "        <td colspan=\"2\">\n";
      echo "          <br><br>\n";
      echo "          &nbsp;&nbsp;<span class=\"menu\">Passwort:</span>\n";
      echo "          <input name=\"passwort\" type=\"password\" size=\"10\" /><br>\n";
      echo "        </td>\n";
      echo "      </tr>\n";
      echo "      <tr>\n";
      echo "        <td  class=\"menu\" colspan=\"2\" align=\"right\">\n";
      echo "          <input type=\"submit\" value=\"";
                      if (count($_REQUEST['delButton']) > 1) {
                        echo "Dateien löschen\" />\n";
                      }
                      else {
                        echo "Datei löschen\" />\n";
                      }
      echo "        </td>\n";
      echo "      </tr>\n";
      echo "    </table>\n";
      echo "  </form>\n";
      echo "</div>\n";
      
    } else {
      echo "<p><b>Fehler:</b> Keine Datei ausgewählt.</p>\n";
    }
    
  }

  //-- Löschen ---------------------------------------------------------------------------------------

  else if ($_GET['action'] == 'delete') {
    
    echo "<p class=\"menu\"><a href=\"index.php\">zurück zur Liste</a></p>\n";

    // massive Login-Versuche abblocken
    sleep(1);
    
    // Passwort checken
    if ($_POST['passwort'] == $passwort) {
      
      if (isset($_REQUEST['delButton'])) {
  
        reset($_REQUEST['delButton']);
  
        foreach ($_REQUEST['delButton'] as $idx => $filename) {
        
          echo "<p>Lösche <i>$filename</i>...</p>\n";
          unlink($filename);
          
          $lines = file('index.php');
          
          if ($lines) {
            
            $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen
            $i = 0;
            
            while (!strstr(substr($lines[$i],0,14), "* Filelist:")) {
              fputs($fp, $lines[$i]);
              $i++;
            }
            
            while (!strstr(substr($lines[$i], 0, strpos($lines[$i], '//')), $filename)) {
              fputs($fp, $lines[$i]);
              $i++;
            }
            
            $i++;
            
            while ($i < count($lines)) {
              fputs($fp, $lines[$i]);
              $i++;
            }
            
            fclose($fp);
            echo "<p>Tabelleneintrag wurde entfernt.</p>\n";
          }
          else {
            echo "<p><b>Fehler:</b> <i>index.php</i> wurde nicht gefunden!</p>\n";
          }
        }
      }
      else {
        echo "<p><b>Fehler:</b> Keine Dateien ausgewählt.</p>\n";
      }
    }
    else {  // Passwort falsch
      echo "<p><b>Fehler:</b> Falsches Passwort!</p>\n";
    }
  }

  //-- Anzeigen --------------------------------------------------------------------------------------

  else {
?>
  
  <p class="menu"><a href="../index.html">zurück zur Startseite</a></p>
  
  <div align="center">
    <form action="index.php?action=deleteCheck" method="post">
    
    <table cellspacing="5" cellpadding="5" border="1">
      <tr>
        <th><a href="index.php?action=<?php if (($_GET['action'] == 'ascByName') || ($_GET['action'] == '')) echo "descByName"; else echo 'ascByName';?>">Datei</a></th>
        <th><a href="index.php?action=<?php if ($_GET['action'] == 'ascByDescription') echo "descByDescription"; else echo 'ascByDescription';?>">Beschreibung</a></th>
        <th><a href="index.php?action=<?php if ($_GET['action'] == 'ascBySize') echo "descBySize"; else echo 'ascBySize';?>">Größe</a></th>
        <th>Auswahl</th>
      </tr>
<?php
  
    $liste = readFileList();

    if ($liste !== false) {
      
      if (isset($liste)) {
      
        // Liste sortieren
        if ($_GET['action'] == 'ascByDescription') {
          foreach($liste as $v) $s[] = $v[1];
          array_multisort($s, SORT_ASC, $liste);
        }
        else if ($_GET['action'] == 'descByDescription') {
          foreach($liste as $v) $s[] = $v[1];
          array_multisort($s, SORT_DESC, $liste);
        }
        else if ($_GET['action'] == 'ascBySize') {
          foreach($liste as $v) $s[] = $v[2];
          array_multisort($s, SORT_ASC, $liste);
        }
        else if ($_GET['action'] == 'descBySize') {
          foreach($liste as $v) $s[] = $v[2];
          array_multisort($s, SORT_DESC, $liste);
        }
        else if ($_GET['action'] == 'descByName') {
          foreach($liste as $v) $s[] = $v[0];
          array_multisort($s, SORT_DESC, $liste);
        }
        else {
          sort($liste);
        }
        
        // Liste ausgeben
        foreach ($liste as $eintrag) {
          echo "      <tr>\n";
          echo "        <td><a href=\"". $eintrag[0] ."\">". $eintrag[0] ."</a></td>\n";
          echo "        <td>".$eintrag[1]."</td>\n";
          echo "        <td align=\"right\"><span class=\"smallsize\">".getSizeAsString($eintrag[2])."</span></td>\n";
          echo "        <td align=\"center\"><input type=\"checkbox\" name=\"delButton[]\" value=\"".$eintrag[0]."\" /></td>\n";
          echo "      </tr>\n";
        }
      }
      
    }
    else {
      echo "<p><b>Fehler:</b> Liste mit Dateien konnte nicht gefunden werden.</p>\n";
    }

?>
      <tr>
        <td class="menu" colspan="4" align="right">
            <input type="submit" value="Ausgewählte Dateien löschen" style="font-size:105%" />
        </td>
      </tr>
      <tr>
        <td colspan="4" align="center" class="smallsize">
          <?php echo $totalFiles; ?> Dateien, <?php echo getSizeAsString($totalFileSize); ?><br>
          <span style="font-size: 80%">Lister v2.9j</span>
        </td>
      </tr>
    </table>
      
    </form>      
  </div>
    
  <div align="center">
    <table cellspacing="5" cellpadding="5" border="1">
      <tr>
        <td colspan="4">
          <div style="padding:8px">
            <div class="menu">Datei hinzufügen:</div>
            <form action="index.php?action=add" method="post" enctype="multipart/form-data">
              <table border="0" cellpadding="2" class="menu">
                <tr>
                  <td>
                    Datei:
                  </td>
                  <td>
                    <input name="datei" type="file" />
                  </td>
                </tr>
                <tr>
                  <td>
                    Beschreibung:
                  </td>
                  <td>
                    <input name="beschreibung" type="text" size="30" />
                  </td>
                </tr>
                <tr>
                  <td></td>
                  <td>
                    <input type="checkbox" name="overwrite" /><span style="font-size:small">bereits vorhandene überschreiben</span>
                  </td>
                </tr>
                <tr>
                  <td>
                    Passwort:
                  </td>
                  <td>
                    <input name="passwort" type="password" size="10" />
                  </td>
                </tr>
                <tr>
                  <td colspan="2" align="right" class="menu">
                    <input type="submit" value="Datei hochladen" />
                  </td>
                </tr>
              </table>
            </form>
          </div>
        </td>
      </tr>
    </table>
  </div>

<?php
  }
?>

    <div style="position: absolute; top: 8px; right: 5px;">
      <a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-html40" alt="Valid HTML 4.0!" height="31" width="88"></a>
    </div>
  </body>
</html>
