<?

//
// (C) 2006,2007,2008 by Folke Ashberg <folke@ashberg.de>
//  
// .htaccess:
//
// RewriteEngine On
// RewriteCond %{SCRIPT_FILENAME} !.*/fotos/[^/]*\.(php|phps|css|html|jpg|gif|png|zip)$
// RewriteRule .   index.php
//
//


$uri=$_SERVER["REQUEST_URI"];
$httpdir=dirname($_SERVER["SCRIPT_NAME"]);
$uri=substr($uristrlen($httpdir));
if (
$uri[strlen($uri)-1]=="/"$uri=substr($uri,1,-1);
if (
$uri[0]=="/"$uri=substr($uri,1);
$realdir=dirname(__FILE__);

if (isset(
$_GET["edit"])){
    
$doedit=1;
}
if (isset(
$_POST["editpost"])){
    
$writeinfo=$_POST['files'];
    
$doedit="write";
}
if (isset(
$_COOKIE["size"])){
    
$thumbsize=(int)$_COOKIE["size"];
}
if (isset(
$_GET["size"])){
    
$thumbsize=(int)$_GET["size"];
    
setcookie("size"$thumbsize);
}
if (!
$thumbsize || $thumbsize<|| $thumbsize>3$thumbsize=2;

function 
print_header($title$subtitle=false){
    global 
$httpdir;
    if (
$subtitle===false$subtitle=$title;
    
header("Content-type: text/html; charset=utf-8");
    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="copyright" content="Folke Ashberg" />
<style type="text/css" media="screen">
html {
}
body {
    margin: 0; padding: 0;
    font-family: 'Trebuchet ms', 'Tahoma', 'Verdana', 'Georgia', 'Arial', sans-serif;
    font-size: 11px;
    text-align: center;

}
a, a:link, a:visited { 
    color:#336699; 
    font-weight:normal; 
    text-decoration:none;
}
a:active, a:hover { 
    color: #336699; 
    font-weight:normal; 
    text-decoration:underline; 
}
p {
    margin: 0px 0px 8px 0px;
    padding: 0px;
}
#header {
    width: 100%;
    text-align: left;
    padding: 0; margin: 0;
}
#header div {
    padding: 1em 3em;
    border: 1px solid #D1D1D1;
    background-color: #E9E9E9;
    letter-spacing: 2px;
    font-size: 14px;
    font-weight: bolder;

}
#footer {
    clear: both;
}
.thumb {
    float: left;
}
.thumb1 {
    width:  250px;
    height: 250px;
}
.thumb2 {
    width:  450px;
    height: 450px;
}
.thumb3 {
    width:  650px;
    height: 650px;
}
.thumb, .pic {
    padding-top: 20px;
}
.thumb img, .pic img {
    padding:4px;
    background:#E9E9E9;
    border:1px solid #D1D1D1;   
}
.thumb a:hover img, .pic a:hover img {
    border: 1px solid #D1D1D1;
    background: yellow;
}
.thumb p, .pic p {
    padding-top: 0.75em;
}
#sizes {
    margin: 4px;
}
.prevcurnext {
    padding-top: 0.75em;
    padding-bottom: 0.75em;

}
.prevcurnext > span {
    padding-left:  3em;
    padding-right: 3em;
    min-width: 10em;
}
</style>
<title><?=$title;?></title>
</head>
<body>
<div id="header"><div><?=$subtitle;?></div></div>
<?
}

function 
print_footer(){
    global 
$httpdir;
?>
<div id="footer">
    &copy; <?=strftime("%Y");?> by <B>Folke Ashberg</B> - <a href="http://www.ashberg.de/">www.ashberg.de</a><br />
    Created with: <i><a href="<?=$httpdir;?>/index.phps">"Easy and Secure Gallery"</a></i> by <a href="http://www.ashberg.de/">Folke Ashberg</a>
</div>

</body>
</html>
<?
}

function 
makeurl($in){
    return 
str_replace("%2F""/"urlencode($in));
}

function 
readinfo($dir){
    
$f=$dir."/.info";
    if (!
is_readable($f)){
    return Array();
    }
    if (!
$fp=fopen($f"r")) return Array();
    
$out=Array();
    while (!
feof($fp)){
    
$l=fgets($fp);
    
$x=explode(" "$l2);
    
$out[trim($x[0])]=trim($x[1]);
    }
    
fclose($fp);
    return 
$out;
    
}

function 
writeinfo($dir$info){
    
$f=$dir."/.info";
    if (!
is_writeable($f)){
    return 
"Nicht schreibbar";
    }
    if (!
$fp=fopen($f"w")) return "Fehler beim schreiben";
    
$out=Array();
    
reset($info);
    while (list(
$n$v)=each($info)){
    
$l=fputs($fp"$n $v\n");
    }
    
fclose($fp);
    return 
"Geschrieben";
    
}


//print "URI: $uri<BR>\n";
//print "REALDIR: $realdir<BR>\n";

$do="start";
$img_dir="";
$img_file="";


//print "URI: ".($uri)."<BR>\n";

if ($uri==""){
    
$do="start";
} else if (
$uri[0]!="." && is_dir($realdir."/".$uri)){
    
$do="page_thumb";
    
$img_dir=$uri;
} else if (
ereg("/"$uri) && is_dir(dirname($realdir."/".$uri))){
    
$do="page_thumb";
    
$img_dir=dirname($uri);
    
//                12         3    45   6          7
    
if ($img_dir[0]!="." && preg_match("/^((th[123]_|mid_)(.*)|((.*)(\\.html))|(.*))$/U"basename($uri), $erg)){
    
//print "MATCH $erg[2]"; print_r($erg); print "<BR>\n";
    
$f=$erg[7];
    if (
$erg[3]) $f=$erg[3];
    if (
$erg[5]) $f=$erg[5];
    
//print "F: $f<BR>\n";
    
if (file_exists($realdir."/".$img_dir."/".$f)){
        
$img_file=$f;
        if (
$erg[6]==".html"$do="page_pic";
        elseif (
$erg[2]=="th1_"$do="thumb1";
        elseif (
$erg[2]=="th2_"$do="thumb2";
        elseif (
$erg[2]=="th3_"$do="thumb3";
        elseif (
$erg[2]=="mid_"$do="middle";
        else 
$do="pic";
    }
    
    }
}

if (
$img_dir[strlen($img_dir)-1]=="/"$img_dir=substr($img_dir,1,-1);
if (
$img_dir[0]=="/"$img_dir=substr($img_dir,1);

//print "DO: $do | IMG_DIR: $img_dir | IMG_FILE: $img_file<BR>\n";

if ($do=="start"){
    
header('HTTP/1.0 404 Not Found');
    
header("Status: 404 Not Found");
    
print_header("Fotos");
    print 
"<br /><br /><br /><u>Kein Alben-Listing erlaubt! :( / Album nicht gefunden</u><br /><br /><br />";
    
print_footer();

} else if (
$do=="page_thumb"){
    if (
$doedit=="write"$msg=writeinfo($realdir."/".$img_dir$writeinfo); else $msg="";
    
$info=readinfo($realdir."/".$img_dir);
    if (
$info['.']) $title=$info['.']; else $title=$img_dir;
    
$files=Array();
    
$d=opendir($realdir."/".$img_dir);
    while (
$f=readdir($d)){
    if (
$f[0]==".") continue;
    
$files[$f]=1;
    }
    
ksort($files);
    
reset($files);
    while (list(
$f,$v)=each($files)){
    if (isset(
$info[$f])) continue;
    
$info[$f]="";
    }
    
print_header(htmlspecialchars($title));
    print 
'<div id="sizes">Vorschaubilder: ';
    if (
$thumbsize==1) print "<b>Klein&nbsp;|&nbsp;</b>";      else print "<a href=\"./?size=1\">Klein</a>&nbsp;|&nbsp;";
    if (
$thumbsize==2) print "<b>Mittel&nbsp;|&nbsp;</b>";     else print "<a href=\"./?size=2\">Mittel</a>&nbsp;|&nbsp;";
    if (
$thumbsize==3) print "<b>Gro&szlig;</b>";              else print "<a href=\"./?size=3\">Gro&szlig;</a>";
    print 
'</div>'."\n";
    if (
$msg) print "<br /><b>".htmlspecialchars($msg)."</b><br />\n";
    if (
$doedit) print "<form action=\"./\" method=post>\n<input type=hidden name=editpost />\n";
    if (
$doedit) print "<br /><p>Folder-Title: <input type=text size=40 name=\"files[.]\" value=\"".htmlspecialchars($title)."\" /></p>\n";
    
reset($info);
    while (list(
$f,$imgtitle)=each($info)){
    if (
$f[0]==".") continue;
    if (!
eregi("^(.+)\.(jpg|png|gif|avi)$"$f)) continue;
    if (!
$files[$f]) continue;
    
$link=$httpdir."/".$img_dir."/".$f.".html";
    
$css="thumb".($thumbsize);
    
$thumb=$httpdir."/".$img_dir."/th".$thumbsize."_".$f;
    print 
"<div class=\"thumb $css\"><a href=\"".makeurl($link)."\" name=\"".htmlspecialchars($f)."\">"
        
."<img src=\"".makeurl($thumb)."\" alt=\"".htmlspecialchars($f)."\" /></a>";
    if (
$doedit) {
        print 
"<p><input type=text size=40 name=\"files[".htmlspecialchars($f)."]\" value=\"".htmlspecialchars($imgtitle)."\" /></p>\n";
    } else {
        if (
$imgtitle) print "<p>".htmlspecialchars($imgtitle)."</p>\n";
    }
    print 
"</div>\n";
    
    }
    if (
$doedit) print "<input type=submit value=\"GO\" />\n</form>\n";
    
print_footer();

} else if (
$do=="page_pic"){

    
$files=Array();
    
$d=opendir($realdir."/".$img_dir);
    while (
$f=readdir($d)){
    if (
$f[0]==".") continue;
    
$files[$f]=1;
    }
    
ksort($files);
    
reset($files);
    
$prev=false;
    
$next=false;
    while (list(
$n,$v)=each($files)){
    if (
$n===$img_file){
        if (
key($files)){
        
$next=key($files);
        }
        break;
    }
    
$prev=$n;
    }


    
$link=$httpdir."/".$img_dir."/";
    
$back=makeurl($link)."#".urlencode($img_file);
    if (
$prev){
    
$prevurl=makeurl($link).urlencode($prev).".html";
    } else {
    
$prevurl=false;
    }
    if (
$next){
    
$nexturl=makeurl($link).urlencode($next).".html";
    } else {
    
$nexturl=false;
    }
    
$back=makeurl($link)."#".urlencode($img_file);
    
$info=readinfo($realdir."/".$img_dir);
    if (
$info['.']) $imgtitle=$info['.']; else $imgtitle=$img_dir;
    
$title=htmlspecialchars($imgtitle)." || ".htmlspecialchars($img_file);
    
$subtitle="<a href=\"".$back."\">".htmlspecialchars($imgtitle)."</a> || ".htmlspecialchars($img_file);
    
print_header($title$subtitle);
    
$middle=$httpdir."/".$img_dir."/mid_".$img_file;
    
$full=$httpdir."/".$img_dir."/".$img_file;
    print 
"<div class=\"pic\">";
    print 
"<div class=\"prevcurnext\">\n";
    if (
$prev){
    print 
"<span><a href=\"".$prevurl."\">&lt;-- Zur&uuml;ck</a></span>";
    } else print 
"<span>&nbsp;</span>";
    print 
"<span>".htmlspecialchars($img_file)."</span>\n";
    if (
$next){
    print 
"<span><a href=\"".$nexturl."\">Vorw&auml;rts --&gt;</a></span>";
    } else print 
"<span>&nbsp;</span>";
    print 
"</div>\n";

    
eregi("\\.([a-z]+)$"$img_file$erg);
    
$ext=strtolower($erg[1]);
    if (
$ext=="avi"){
    
//print "<object data=\"".makeurl($full)."\" type=\"video/x-msvideo\"><embed src=\"".makeurl($full)."\" /></object>\n\n";
    
print "<img dynsrc=\"".makeurl($middle)."\" alt=\"".htmlspecialchars($img_file)."\" />\n";
    } else {
    print 
"<a href=\"".$full."\" ><img src=\"".makeurl($middle)."\" alt=\"".htmlspecialchars($img_file)."\" /></a>\n";
    }
    
$imgtitle=$info[$img_file];
    if (
$imgtitle) print "<p>".htmlspecialchars($imgtitle)."</p>\n";
    print 
"<div class=\"prevcurnext\">\n";
    if (
$prev){
    print 
"<span><a href=\"".$prevurl."\">&lt;-- Zur&uuml;ck</a></span>";
    } else print 
"<span>&nbsp;</span>";
    print 
"<span>".htmlspecialchars($img_file)."</span>\n";
    if (
$next){
    print 
"<span><a href=\"".$nexturl."\">Vorw&auml;rts --&gt;</a></span>";
    } else print 
"<span>&nbsp;</span>";
    print 
"</div>\n";
    print 
"<p><a href=\"$back\">Zur&uuml;ck zur &Uuml;bersicht</a></p>\n";
    print 
"<p><a href=\"$full\">H&ouml;here Aufl&ouml;sung</a></p>\n";
    print 
"</div>\n";
    
print_footer();

} else if (
$do=="thumb1"  || $do=="thumb2" || $do=="thumb3" || $do=="middle" || $do=="pic"){
    
$thumbnail1=$realdir."/.thumbs/".$img_dir."/th1_".$img_file.".jpg";
    
$thumbnail2=$realdir."/.thumbs/".$img_dir."/th2_".$img_file.".jpg";
    
$thumbnail3=$realdir."/.thumbs/".$img_dir."/th3_".$img_file.".jpg";
    
$middle=$realdir."/.thumbs/".$img_dir."/mid_".$img_file.".jpg";
    
$big=$realdir."/".$img_dir."/".$img_file;
    
eregi("\\.([a-z]+)$"$big$erg);
    
$ext=strtolower($erg[1]);
    
$outfile="";
    if (
$ext=="jpg" || $ext=="png" || $ext=="gif"){
    if (
           (!
file_exists($thumbnail1)) || !filesize($thumbnail1) || filemtime($big)>filemtime($thumbnail1)
        || (!
file_exists($thumbnail2)) || !filesize($thumbnail2) || filemtime($big)>filemtime($thumbnail2)
        || (!
file_exists($thumbnail3)) || !filesize($thumbnail3) || filemtime($big)>filemtime($thumbnail3)
        || (!
file_exists($middle)) || !filesize($middle) || filemtime($big)>filemtime($middle)) {
        
system("mkdir -p ".escapeshellcmd(dirname($thumbnail1)));
        
system("convert -size 800x800 ".escapeshellcmd($big)." -resize '800x800>'  -quality 85 ".escapeshellcmd($middle));
        
system("convert -size 200x200 ".escapeshellcmd($middle)." -resize '200x200'  -quality 85 -profile strip ".escapeshellcmd($thumbnail1));
        
system("convert -size 400x400 ".escapeshellcmd($middle)." -resize '400x400'  -quality 85 -profile strip ".escapeshellcmd($thumbnail2));
        
system("convert -size 600x600 ".escapeshellcmd($middle)." -resize '600x600'  -quality 85 -profile strip ".escapeshellcmd($thumbnail3));
    }
    if (
$ext=="gif"$ct="Content-type: image/gif";
    else if (
$ext=="png"$ct="Content-type: image/png";
    else 
$ct="Content-type: image/jpeg";
    if       (
$do=="thumb1"){
        
$outfile=$thumbnail1;
    } elseif (
$do=="thumb2"){
        
$outfile=$thumbnail2;
    } elseif (
$do=="thumb3"){
        
$outfile=$thumbnail3;
    } elseif (
$do=="middle"){
        
$outfile=$middle;
    } else { 
        
$outfile=$big;
    }
    } else if (
$ext=="avi"){
    if (
$do=="thumb1"){
        
$ct="Content-type: image/jpeg";
        
$outfile=$realdir."/avi1.jpg";
    } elseif (
$do=="thumb2"){
        
$ct="Content-type: image/jpeg";
        
$outfile=$realdir."/avi2.jpg";
    } elseif (
$do=="thumb3"){
        
$ct="Content-type: image/jpeg";
        
$outfile=$realdir."/avi3.jpg";

    } else { 
        
$ct="Content-type: video/x-msvideo";
        
$outfile=$big;
    }

    } else {
    print 
"?????????? unknown file type ????????";
    }
    if (
$outfile){
    if (isset(
$_SERVER['HTTP_IF_MODIFIED_SINCE'])){
        if (
filemtime($outfile) <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
        
header("HTTP/1.0 304 Not Modified");
        exit;
        }
    }
    
    
header("Content-Type: $ct");
    
header("Content-length: ".filesize($outfile));
    
header('Last-Modified: ' gmdate("D, d M Y H:i:s T"filemtime($outfile)));
    
header('Expires: ' gmdate("D, d M Y H:i:s T"filemtime($outfile)+2592000));
    
header('Pragma: Cache');
    
header('Cache-Control: max-age=2592000');
    
readfile($outfile);
    }
} else print 
"Unknown action: $do";



?>