#!/usr/bin/perl 
#<head><title>gfx.pl</title>
#<meta name="category" content="pl,perl">
#<meta name="description" content="A scriptje to look naar plaatjes.">
#<meta name="begun" content="1900">
#</head>

package lsgfx;

$|++;
use vars qw($G $L $ddns $ee $rr $ii $debug $mpc @text $stukjehead);
$G="/Gfx";
$G="/x/gfx.pl";
$L="/www/gfx";
use strict;
use jip;
$ddns=ddns();
use Date::Manip;
use CGI qw(:standard :html3);
use File::Find;

my $Q = new CGI;
$debug=$Q->param('debug');

print $Q->header(-type=>'text/html',
                 -expires=>'-1day');  
&maingfx($Q);

sub maingfx{
    my ($Q)=shift;
    my $Qself=$Q->self_url;
    my $Qselfs=$Q->url;
#    my ($Qselfu)=$Qselfs =~ m!http://[\w|\.]+/(.+)!;
#    print $Qselfu,lastaccess($Qselfu);
    my ($ufile)=$Qself =~ m!$Qselfs/(.*)!i;
    my $type=$Q->param('type');
    
    $ufile =~ s/\?.*//;
    unless ($Qself =~ /include/ || $type eq 'rss') {
	print htmlhead($ufile);
    }
 
    print $Qself,br,$Qselfs,br if $debug;
    print "ufile: $ufile <br>" if $debug;
    my $file="$L/$ufile";

    my $num=$Q->param('num');

    #number
    $num="199" unless ($num);

    print "num: $num<br>" if $debug;

    if (-d $file){
	if ($Q->param('latest')){
	    showlatest($file,$ufile);
	}
	elsif ($Q->param('type')){
	   # print "type:$type",br;
	    print lsrss($file,$ufile,$num) if ($type eq 'rss');
	}else{
	    print lsgfx($file,$ufile,$num);
	}
    }else{
	print "nie goed", lsgfx($file,$ufile,$num);
    }
    print "(i:$ii e:$ee r:$rr)"	if ($debug);
    unless ($Qself =~ /include/ ||  $type eq 'rss' ) {
	my $check=htmlcheck($Qself);
#	my $last=lastaccess($ufile);
	my $last="";
	$last="<h3>last access</h3>$last" if $last;
	my $voet=voet("lsgfx");
	print <<GROK;
  <div class="foot">
	  $last
	  $voet
  </div>
 </body>
</html>
GROK
}
}


sub htmlhead{
    my ($ufile)=@_;
    my $r = <<GROK;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
 <head>
  <title>Kwark &gt; Plaatjes &gt; $ufile</title>
  <link rel="stylesheet" href="/css/kwark.css" type="text/css">
 </head>
 <body>
GROK
    $r;
}


sub lsrss{
    my ($file,$ufile,$num)=@_; 
    my $items=lsrssitems($file,$ufile,$num);
    my $r=<<GROK;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"  "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">

<channel>
<title>Jip kijkt</title>
<link>http://www.kwark.org/Gfx/2002/</link>
<description>Laatst door Jip gemaakte plaatjes.</description>
<language>nl</language>
$items
</channel>
</rss>
GROK
    $r;
}

sub lsrssitems{
    my ($file,$ufile,$num)=@_; 
    my (%when,@names);
    %when=getfiles($file);
    @names = sort { $when{$b} <=> $when{$a}; } keys %when;
    my $cnt="0";
    my $ret;
    foreach my $tt (@names){
	print br,$cnt," ",$when{$tt},$tt,br if $debug;

	next unless $tt;
	
	return $ret if ($cnt > $num);

	my ($file,$dir,$name,$des,$time);
	$name=$tt;
	$name= s!/www/gfx/!!;
	($name)= $tt =~ m!/www/gfx/(.+)\.jpg!i;

	next unless $name;

	($dir,$file)= $tt =~ m!/www/gfx/(.*)/(.*\..*)!;
#	print $dir,$file;
	$des=imgdes($tt);
	$des=~ s!\n!<br>!;	

	$des = "no description" unless $des;

	next if ($des =~ /no\sdescription/);

	$ufile=$tt;
	$ufile=~ s!/www/gfx/!/Gfx/!;
	my ($tit)= $des =~ m!Title: (.*)?<br>!;
	$tit=$des unless ($tit);
	$tit=$ufile unless ($tit);
	$tit=mkclean($tit);
	$tit=~ s!<br>!!gics;
	$ret.= <<GROK;
  <item>
   <title>$tit</title>
   <link>http://www.kwark.org$ufile</link>
  </item>
GROK
    $cnt++;
    }
}

sub lsgfx{
    my ($file,$ufile,$num)=@_; 
    my (%when,@names);
    print $file,$ufile if $debug;
    print hoofd('lsgfx');
    %when=getfiles($file);
    @names = sort { $when{$b} <=> $when{$a}; } keys %when;
#    splice  (@names, $num);  
    my $cnt="0";
    foreach my $tt (@names){
	
	next unless ($tt);

	print br,$cnt," ",$when{$tt},$tt,br if $debug;
	return if ($cnt > $num);
	my ($file,$dir,$name,$des,$time);
	$name=$tt;
	$name= s!/www/gfx/!!;
	($name)= $tt =~ m!/www/gfx/(.+)\.jpg!i;
	next unless $name;
	($dir,$file)= $tt =~ m!/www/gfx/(.*)/(.*\..*)!;
#	print $dir,$file;
	#$des= jpg_comment($tt);
	$des=imgdes($tt);

	$des = "no description" unless $des;


	next if ($des =~ /no\sdescription/);
	$des=~ s!\n!<br>!;	
	my $thumb=thumb($dir,$file,$des);
	$thumb =~ s!img!img align=\"left\"!;
	$time=$when{$tt};
	$time=d2hum($time);
	$ufile=$tt;
	$ufile=~ s!/www/gfx/!/Gfx/!;
	print <<GROK;
<p>

 <ul>
 <li><b><a href="$ufile">$thumb  $name</a></b></li>
 <li>$des</li>
 <li>last changed: $time</li>
 </ul>
<br clear="all">
</p>
GROK
    $cnt++;
    }
    print voet('lsgfx');
}


sub showlatest{
    my ($file,$ufile)=@_;
    my ($rfile,$i,@names,%when);
    print "directory $file",br if $debug;
    %when=getfiles($file);
    @names = sort { $when{$b} <=> $when{$a}; } keys %when;
    splice  (@names, '15');  
    foreach my $tt (@names){
	print $when{$tt},$tt,br if $debug;
    }
#    splice  (@names, '1');  
#    my $rfile=$names[rand @names];
    $rfile=$names[0];
    print "random file: $rfile ",br if $debug;
#    print %when if $debug;
    $ufile=$rfile;
    $ufile =~ s!$L/!!;
    showimg($rfile,$ufile,'latest');


}


sub getfiles{
    my ($file)=@_;
    my %when;
    use File::Find;
    find (sub {
	return unless -f;
	return if (-d $File::Find::name);
	return if ($_ =~ /rdf/);
	return if ($File::Find::name =~ /\.xvpics/);
	return if ($File::Find::name =~ /\.html/);
	return if ($File::Find::name =~ /thumb/);
	return if ($File::Find::name =~ /\.pl$/);
	return if ($File::Find::name =~ /Small/);
	return if ($File::Find::name =~ /\.xml$/);
	return if ($File::Find::name =~ /\.yuv$/);
	return if ($File::Find::name =~ /follow\//);
	return if ($File::Find::name =~ /\.mpg$/);
	return if ($File::Find::name =~ /\.sh$/);
	$when{$File::Find::name} = (stat _)[9];
    },$file);
    return %when; 
}


sub showrandom{
    my ($file,$ufile)=@_;
    print "directory $file",br if $debug;
    my %when;
    %when=getfiles($file);
    my @names = sort { $when{$b} <=> $when{$a}; } keys %when;
    my $rfile=$names[rand @names];
    print "random file: $rfile ",br if $debug;
#    print %when if $debug;
    $ufile=$rfile;
    $ufile =~ s!$L/!!;
    showimg($rfile,$ufile,'random');
    
}



sub showdir{
    my ($file,$ufile)=@_;
    print "<div>";
    print "directory $file",br if $debug;
    print dirhead($ufile);
    opendir (DIR,$file);
    my @files=readdir DIR;
    closedir DIR;
    foreach my $i (@files){
	print direntry($ufile,$i);
    }
    print "</div>";
}
sub dirhead{
    my $i=shift;
    return <<GROK;
<h3>$i</h3>
GROK
}

sub chksize{
    my ($w,$h)=@_;
    
    while ( ($w gt 600) || ($h gt 540)){
	$w = $w * .9;
	$h = $h * .9;
    }
    return (int $w, int $h);
}

sub showimg{
    my ($file,$ufile,$random)=@_;
    my $cmd=$random;

    my $sub="";
    my $rex="";
    my $tablewidth="";
    my $xdir="";
    my ($dir,$sfile,$lowsrc);

    print "no file defined " if ($ufile eq"");
    use Image::Size;
    my ($w,$h)=imgsize($file);
    my $mesg = $w."x".$h;
    my ($pw,$ph)=chksize($w,$h);

#    my $des=jpg_comment($file);

    my $des=imgdes($file);



    $des = "" if ($des=~/LEAD/);
    $des =~ s/\n/<br>/g;

   #$tablewidth="width=\"100%\"";
   #my $adir;
   #($dir,$sfile) = $ufile =~ m!(\w*/+)*(.*)!;    
    ($sfile)= $ufile =~ m!.*/(.+\..+)$!; 
    $dir=$ufile;
    $dir=~ s!$sfile!!;
    #($dir,$sfile) = $ufile =~ m!(\w*/+)*(.*\.*)+!;
    #$dir=join "",@adir;

    $dir =~ s!/$!!g if $dir;
    $dir="" unless $dir;
    unless($sfile){
	$sfile=$dir;
	$dir="";
    }
    print "ufile $ufile dir $dir sfile $sfile",br if $debug;
    $xdir = "<a href=\"$G/$dir$sub\">$dir</a> &gt; " if $dir;
    $rex="random" if $random;
    $rex="$cmd" if $cmd;
    $sub="?" if $cmd;
    # $sub .="random=1" if $random;
    $sub.="&amp;debug=1" if $debug;
    $sub.="&amp;$cmd=1" if $cmd;
    my $extra;
    $rex="rnd" if ($rex eq 'random');
    if ($rex){
    $extra=<<GROK;
<a href="$G/$sub">$rex</a>
GROK
    }else{
	$extra=" ";
    }

    print <<GROK;

   <table class="imgblok"> 
    <tr>
     <td valign="top">
      <p class="imgtitle">
       <a href="http://$ddns/">Kwark</a> &gt;
       <a href="$G/">Gfx</a> $extra &gt;
       $xdir
       $sfile
      </p> 
     </td>
    </tr>
    <tr>
     <td>
     <a href="$G/$dir$sub"><img src="/gfx/$ufile" width="$pw" height="$ph" 
         alt="$ufile $mesg   [ k l i k   f o r   m e e r ] "
        style="border:0;"></a> 

     </td>
    </tr>
    <tr><td>$des $w x $h
	<a href="/y/jpg.pl/$ufile">.</a></td></tr>
   </table>

GROK
}

sub thumb{
    my ($dir,$file,$des)=@_;
    my ($thfile,$r);
    $dir="/$dir" if $dir;
    $thfile="ietniettoepasselijks";
    $thfile="$L/$dir/thumb-$file" unless (-r $thfile);
    $thfile="$L/$dir/Small/$file.jpg" unless (-r $thfile);
    $thfile="$L/$dir/.thumbnails/$file.png" unless (-r $thfile);

    print $thfile if $debug;
    if (-r $thfile){
	use Image::Size;
	my ($w,$h)=imgsize($thfile);
	my $lfile="$L/$dir/$file";
	print $lfile if $debug;
	my ($ow,$oh)=imgsize($lfile);
	$thfile =~ s!/www!!;
	$des=~ s/<.*?>//g;
        $r=<<GROK;
<img src="$thfile" width="$w" height="$h" 
 border="0" alt="$file ($des $ow x $oh)"
 style="padding: .5em;">
GROK
}else{
    $r=""
    }
    $r;
}

sub direntry{
    my ($dir,$file)=@_;
    my $pre="$G";
    return if ($file =~ /thumb/);
    return if ($file eq ".");
    return if ($file =~ /^\.\w+/);
    return if ($file =~ /rdf$/);
    return if ($file =~ /html$/);
    return if ($file eq 'Small');
    $dir = "$dir/" if $dir;
    $dir =~ s!//!/!;
    my $lfile="$L/$dir$file";

    my $r;
    
    my $description;
    $description = jpg_comment($lfile);

    $description = imgdes($lfile);



    $description =~ s/\n.*//g;
    $description="" if ($description eq "no description") ;
    $description="" if ($description =~ /XV/);
    $description="" if ($description =~ /LEAD/);
    $description=~ s!<.*?>!!g;
    my $thumb=thumb($dir,$file,$description);
    my $des=$thumb; 
    $des=$file unless($des);   
    $des="<b>&lt;$file&gt;</b>" if (-d $lfile);
    $des=~ s/\s*$//;
    $r =  <<GROK;

      <a href="$pre/$dir$file">$des</a>

GROK
    $r;
}





sub htmlchecktmp{
    my $i=shift;
    my $nameu=toencode($i);
    my $htmlhelp="http://www.htmlhelp.com/cgi-bin/validate.cgi?url=$nameu&amp;input=yes";
    return $htmlhelp;
}









