Files
tilman.de/www/Metainformationen/Kram/index.php
T
2011-10-26 10:11:42 +02:00

509 lines
15 KiB
PHP

<!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>