#!/usr/bin/perl -w
#<TITLE>What's new</TITLE>
#<META name="description" content="indexer.pl reads meta tags and spuis some html">
# read: http://www.teleport.com/~merlyn/WebTechniques/col06.html
# use strict;
use File::Find;use Date::Manip;
use lib "/usr/src/libwww-perl-5.00/lib";
use HTML::Entities;
use Getopt::Long;
$:=1;
$ddns="kwark.penguinpowered.com";
srand (time() ^ ($$ + ($$<< 15 )) );
use vind;

# --cat categories   : wich catergories to print 
# --style test|full  : spui style
&GetOptions("cat=s" => \$cat,
	    "style=s" => \$style,
	    "foot=s" => \$foot,
#	    "site=s" => \$site{'id'},
	    "sort=s" => \$sort,
	    "limit=i" => \$limit,
	    "top=s" => \$itop,
#	    "suffix=i" => \$suffix,
	    );



if ($cat){
     $F = new vind;
    $F->{top}="/www/Sites/";
    $F->{top}=$itop if ($itop);
    $F->{ext}="\.html";
    $F->{prune}="\.xvpics|Small";
    $bsite = $ENV{DOCUMENT_URI} ;
    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->dofind;
    *fn=$F->{fnames};
    foreach $id (@fn){
	*page = &getHME($id);
    }
    &spuicat($cat);
}


if ($sort && !($ENV{_} =~ /channel$/)){
    $F = new vind;
    $F->{top}="/www/Sites/";
    $F->{top}=$itop if ($itop);
    $F->{ext}="\.html";
    $F->{prune}="\.xvpics|Small";
    $bsite = $ENV{DOCUMENT_URI} ;
    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->dofind;
    *fn=$F->{fnames};
    foreach $id (@fn){
	*page = &getHME($id);
    }
    if ($sort eq "category"){
	@id=@fn;
	&spuii;
	exit 1;
    }
    &spuisort($sort);
}

if ($ENV{_}=~ /plaatjesjs$/){
    use Image::Size;
    $F = new vind;
    $bsite = $ENV{DOCUMENT_URI} ;
    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->{top}="/www/Sites/";
    $F->{top}=$itop if ($itop); 
    $F->{prune}="XML|.stamps|Small";
    $F->{ext}="gif|jpg";
    $F->dofind;
    *fn=$F->{fnames};
    my $cnt="0";
    foreach $id (@fn){
	if ($id =~ m!\.jpg|\.gif!){
	    print <<GROK;
array [$cnt] = "$F->{$id}{'ru'}"
GROK
	$cnt++;
	}
    }
}

if ($ENV{_}=~ /channel$/){
    $F = new vind;
    $F->{top}="/www/Sites/";
    $F->{top}=$itop if ($itop);
    $F->{ext}="\.html";
    $F->{prune}="\.xvpics|Small";
#    $bsite = $ENV{DOCUMENT_URI} ;
#    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->dofind;
    *fn=$F->{fnames};
    foreach $id (@fn){
	*page = &getHME($id);
    }
    print &spuixmlsort($sort);
}

if ($ENV{_} =~ /upload$/){
      $F = new vind;
      $F->{top}="/www/Sites/";
      $F->{ext}=".";
      $F->{prune}=".stamps|.xvpics";
      $F->dofind;
      $R = new vind;
      $R->{top}="/www/Remote/";
      $R->{ext}=".";
       $R->{prune}=".stamps|.xvpics";
      $R->dofind;
      *fn=$F->{fnames};
      foreach $id (@fn){
	  $rid = $id;
	  $rid =~ s!/www/Sites/!/www/Remote/!;
	  if ( $F->{$id}{whend} gt  $R->{$rid}{whend}){
	      my ($kur)="";
	      ($kur) = $id =~ m!/www/Sites/(.+)!gi;
	      `webget http://kwark.ow.nl/Sites/$kur > /www/Remote/$kur`;
	      `echo put $rid public_html/$F->{$id}{sru} >> /www/batch/FTP`;
	      my ($RSdiff)= $F->{$id}{whend} - $R->{$rid}{whend};
	      print <<GROK;
$id  $RSdiff seconds
put $rid public_html/$F->{$id}{sru}  
GROK
}
      }
  }


if ($ENV{_} =~ /foot$/){
    $ifile = "/www".$ENV{DOCUMENT_URI};
    ($ik) = $ifile =~ m!/Sites/\w+/(\w+)\.html!;
    $F = new vind;
    $bsite = $ENV{DOCUMENT_URI} ;
    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->{top}="/www/Sites/";
    $F->{prune}=".stamps|gfx|.xvpics";
    $F->{ext}="html";
    $F->dofind;
    *fn=$F->{fnames};
    foreach $id (@fn){
	*page = &getHME($id);
    }
    my(@cats) = split /,/ , $page{$ifile}{'category'};
    foreach $i (@cats){
	&spuicat($i);
    }
    print &mkfoot($ifile,$ik);
}

if ($ENV{_} =~ /plaatjes$/){
    use Image::Size;
    $F = new vind;
    $bsite = $ENV{DOCUMENT_URI} ;
    ($F->{'bsite'}) = $bsite =~ m!/Sites/(\w+)/.*!;
    $F->{top}="/www/Sites/";
    $F->{top}=$itop if ($itop); 
    $F->{prune}="XML|.stamps|Small";
    $F->{ext}="gif|jpg";
    $F->dofind;
    *fn=$F->{fnames};
    foreach $id (@fn){
	if ($id =~ m!\.jpg|\.gif!){
	    print &spuig($id);
	}
	if  ($id =~ m!\.html$!){
	    print &spuip($id);
	}
    }
}

exit 1;

#---------------------------------------------------


sub spuig{
    my ($id)=@_;
    #local ($w,$h) = &getSize($F->{$id}{'lfile'});
	local ($w,$h)=imgsize($F->{$id}{'lfile'});
#	warn ($id,$w,$h);
    my ($size) = $F->{$id}{'size'};
    my ($ico) = $F->{$id}{'ru'};
	my $retu="";
    $ico =~ s!gfx!gfx/Small!;
    $ico .= ".jpg";
    $retu .= "<br clear=\"all\" />";
    if ($w && $h){
	my ($r) = $h / $w;
	my ($ws) = "96";
	my ($hs) =  $ws * $r;
	$retu .= <<GROK;
<table>
  <tr>
  
    <td>
	<a 
	    href="$F->{$id}{'ru'}"><img 
	    src="$ico" 
	    height="$hs" width="$ws" 
	    alt="$F->{$id}{'ru'} $size" border="none"
		></a>
		
    </td>
  <td valign="bottom">
       <a href="$F->{$id}{'ru'}"><b>$F->{$id}{'sru'}</b></a><br />
  w:$w h:$h $size bytes
    </td>
  </tr>
</table>
GROK
}
    return $retu;
}
 

sub spuip{
    my ($id)=@_;
    return <<GROK;
	    site: $F->{$id}{site}
	    <a href="$F->{$id}{ru}">
		$F->{$id}{sru}</a>
		    $F->{$id}{when}
	    <br />
GROK

}



#get HtmlMetaElements
for $id (@ids){
    (*page) = &getHME(%page,$id);
}






if ($foot){
    my(@cats) = split /,/ , $page{$foot}{'category'};
    foreach $i (@cats){
	&spuicat($i);
    }
    print `/www/Casema/bin/footer.pl $foot`;
}





if  ($cat eq "all"){
    $sort ="category" unless ($sort);
    &spuii;
}
sub spuixmlsort{
     if (@_) {my ($sort)=@_;}else{my $sort="begund"};
    my @a = sort { $page{$b}{$sort} cmp $page{$a}{$sort}; } @fn;
    splice(@a, $limit) if ($limit);
    my ($id,$cl,$a,$ca);
    for $id (@a){
	*p=&getHME($id);
	my $linktitle;
    	$linktitle=$id unless ($F->{$id}{site}) ;
    	$linktitle=$F->{$id}{site}.":".$F->{$id}{rsu} if ($F->{$id}{site});
	print <<GROK;
	<item>
	    <title>$linktitle $p{$id}{'title'}</title>
	    <link>$F->{$id}{ru}</link>
        </item>
GROK
}
}

sub spuisort{
    my ($sort)=@_;
    my @a = sort { $page{$b}{$sort} cmp $page{$a}{$sort}; } @fn;
    splice(@a, $limit) if ($limit);
    my ($id,$cl,$a,$ca);
    for $id (@a){
	my $linktitle;
    	$linktitle=$id unless ($F->{$id}{site}) ;
    	$linktitle=$F->{$id}{site}.":".$F->{$id}{rsu} if ($F->{$id}{site});
	print <<GROK;
	<b><a href="$F->{$id}{ru}">$linktitle</a>,</b>
	    $page{$id}{'description'}
	<br /><font size="-3">
	  begun: $page{$id}{'begun'}
      changed: $F->{$id}{'when'}
	</font><br />
GROK
}
}


sub spuii{
    my @a = sort { $page{$a}{$sort} cmp $page{$b}{$sort}; } @fn;
    my ($id,$cl,$a,$ca);
    $cl="ditIsGeenCategoryonzin";
    for $id (@a){
	($ca) = $page{$id}{$sort} =~ /([\w|\s|\d|\:]+),*/i;
	if  ($cl ne $ca){
	    print <<GROK;
<br clear="all" />
<table 
    align="left" width="33%"
	summary="category "
	bgcolor="yellow">
<tr><td valign="left"><b><font size="+2">$ca</font></b></td>
</tr></table><br clear="all">
GROK
}
	$cl = $ca;
	my ($started)=  &smallDate($page{$id}{'begund'});
	my ($edited)= $F->{$id}{'when'};
	print <<GROK;
	<b><a href="$F->{$id}{'ru'}">$F->{$id}{site}:$F->{$id}{rsu}</a></b>
	<br>
	    $page{$id}{'description'}<br>
	<font size="-3">
	  started: $started
    <br>  edited: $edited
	</font><br />
GROK
}
}

sub smallDate{
    my ($d)=@_;
    my ($dd)=&ParseDate($d);
    return  &UnixDate($dd,"%a %e %b %Y");
}


if ($style eq "bot"){
    &spuicat($cat);
}

if (($cat) && ($style eq "")){
    print "cat en no style";
    &spuilist($cat);
    &spuicat($cat);
}

exit 1;

sub spuilist{
    my ($cat) = @_;
    for $id (@ids){
	if ($page{$id}{'category'} =~ /$cat/i){
	print <<GROK;
	<b><a href="$id.html">$page{$id}{'title'}</a></b>
	    <br>
	    $page{$id}{'description'}
	 <font size="-3">(started: $page{$id}{'begun'}
	  edited: $page{$id}{'when'})
	     </font>
<br />

GROK
}
    print "";
}
}
sub getHMEnvt{
    my (%page,$id)=@_;
    my ($file) = $page{$id}{lfile};
    my ($headl,$title,$name,$cont);
    if (open(IN, "<$file")) {
      line: while (<IN>) {
	  $headl = $_;
	  ($name,$cont)= $headl =~ m!.*<meta\s+name=\"(.+)\"\s+content=\"(.+)\".*>!i;
	  $page{$id}{$name}=$cont if ($name);
	  ($title) = $headl =~ m!.*<title>(.+)</title>.*!i;
	  $page{$id}{"title"} = $title if ($title);
	  if ( m!</head>!i ){
	      last line;
	  }
      }
    }
    my($ddd)= $page{$id}{"begun"};
    $ddd =~ s/DST//ig;
    $page{$id}{"begund"}   = &ParseDate($ddd );
    return \%page;
}
       



sub IGNORE {			# don't notice these files
    ## $_[0] is basename, $_[1] is full path
    $_[0] =~ /^\.|~$|\.(gif|jpe?g|JPG|au|xml)$/;
}
sub PRUNE {			# don't search these dirs
    ## $_[0] is basename, $_[1] is full path
    $_[0] =~ /gfx|\.stamps|jibat|ftp|XML|sfx/;
}
sub rfind{
    my (@TOP) =		qw(/www/Casema/I/);
    my (%when);			# record of stamps
    find (sub {
	return $File::Find::prune = 1
	    if PRUNE $_, $File::Find::name;
	return if PRUNE $_, $File::Find::name;
	return unless -f;	# only files
	return if IGNORE $_, $File::Find::name;
	$when{$File::Find::name} = (stat _)[9];
    }, @TOP);
    my @fnames = sort { $when{$b} <=> $when{$a}; } keys %when;
    my ($c)=0;my (@ids);my($page);
    for $fname (@fnames){
	my ($id)=$fname =~ m!www/Casema/I/(.+)\.html!;
	($ids[$c]) = $id;
	$page{$id}{'when'} = scalar localtime $when{$fname};
	$page{$id}{'whend'} = $when{$fname};
	$page{$id}{lfile} = $fname;
	$c++;
    }
    return \@ids,\%page;
}

#---------------------------------------------------


#my @names = sort { $title{$b} cmp $title{$a}; } keys %title;
#my @names = sort { $category{$b} cmp $category{$a}; } keys %category;
#splice(@names, $catcount);
#my @names = sort { $category{$a} cmp $category{$b}; } keys %category;

sub rcolor {
	$color = "#";
	$color .= sprintf "%2lx", rand(64);
	$color .= sprintf "%2lx", rand(64);
	$color .= sprintf "%2lx", rand(64);
	$color =~ s/ /0/g;
	return $color;
}
sub rbcolor {
	$bcolor="#";
	$bcolor .= sprintf "%2lx", rand(128) + 128;
	$bcolor .= sprintf "%2lx", rand(128) + 128;
	$bcolor .= sprintf "%2lx", rand(128) + 128;
	$bcolor =~ s/ /0/g;
	return $bcolor;
}

sub printcat{
    my ($cat) = @_;
    print "Meer $cat.<br>";
    for $id (@ids){
	if ($page{$id}{'category'} =~ /$cat/i){ 
	    print <<GROK;
	    <h3><a href="$id.html">$page{$id}{'DC.title'}</a></h3>
		$page{$id}{'description'}
	    <br>
	      begun: $page{$id}{'begun'}
	    <br>
	      changed: $page{$id}{'when'}
	    <br>
GROK
}
    }
}


#  my $url = encode_entities TRANSFORM $name;
 
sub getSize{
    my ($f) = @_;
    if ($f =~ /gif$/){
	local ($w,$h) = &GifChk($f);
    }
    if ($f =~ /[jpg|jpeg]$/) {
	local ($w,$h) = &JpgChk($f);
    }
    return ($w,$h);
}
# (free software, copyright Louis-David Mitterrand, 1996, mito@zoom.com)

sub GifChk {
    my ($w,$h,$d,$e);
    open(GIF, $_[0]) || die "Can't open $_[0]\n";
    seek(GIF,6,0);
    read(GIF,$d,4);
    return ($w, $h) = (($e = unpack("c2", pack("s", 1))) == 1 ?   unpack("s2", $d) : unpack("v2", $d));
}


sub JpgChk {
    my ($a, $b, @a, @b, @r);
    open(JPG,$_[0]) || die "Can't open $_[0]\n";
    while ($b != 0xc0 && $b != 0xc2) { read(JPG,$a,1); $b = unpack("C", $a); }
    seek(JPG,3,1);
    for (0..3) { read(JPG,$a[$_],1); $b[$_] = unpack("C", $a[$_]); }
    for (0,2) { $r[$_] = ($b[$_] << 8) + $b[$_ + 1]; }
    return ($r[2], $r[0]);
}



sub getHME{
    my ($file) = @_;
    my ($headl,$title,$name,$cont);
    if (open(IN, "<$file")) {
      line: while (<IN>) {
	  $headl = $_;
	  ($name,$cont)= $headl =~ m!.*<meta\s+name=\"(.+)\"\s+content=\"(.+)\".*>!i;
	  $page{$file}{$name}=$cont if ($name);
	  ($title) = $headl =~ m!.*<title>(.+)</title>.*!gi;
	  $page{$file}{"title"} = $title if ($title);
	  if ( m!</head>!i ){
	      last line;
	  }
      }
    }
    my($ddd)= $page{$file}{"begun"};
    $ddd =~ s/DST//ig;
    $page{$file}{"begund"}   = &ParseDate($ddd );
    return \%page;
}



sub spuicat{
    my ($cat) = @_;
    print <<GROK;
<table  summary="meer meer " border="0" width="75%">
<tr><td>
<font size="+1"><b>Meer $cat.</b>
</font>
</td></tr>
GROK
    for $id (@fn){
	if ($page{$id}{'category'} =~ /$cat/i){ 
	    print <<GROK;
 <tr><td>
   <b>$F->{$id}{'site'}:<a href="$F->{$id}{'ru'}"
   >$F->{$id}{'rsu'}</a>
   </b>
   $page{$id}{'description'}
 </td></tr>
GROK
}
}
print "</table>\n";
	

}





sub mkfoot{
    my ($ifile,$ik)=@_;
    my ($id)=$ifile;
    $Isite=$F->{$id}{site};
    $Isite =~ tr/A-Z/a-z/;
    my ($uenc)= &webify($F->{$id}{aru});
    my ($babelfish) = "http://babelfish.altavista.digital.com/cgi-bin/translate?urltext=";
    $babelfish .= $uenc;
    $babelfish .= "%2ehtml&amp;language=en";
    my ($validate) = "http://validator.w3.org/check?uri=";
    $validate .= $uenc;
    #$validate .= ".html";
    my ($altal) = "http://www.altavista.digital.com/cgi-bin/query?pg=q&amp;what=web&amp;fmt=.&amp;q=link%3A";
    $altal .= $uenc;
    $altal .= "&amp;r=&amp;d0=&amp;d1=";
    $name= $F->{$id}{rsu};
    $sname = $name;
    $sname =~ s/-//gi;
    if ($sname eq "index"){
	$sname=$Isite;
    }
    my $gist="http://$ddns/tv/gist?id=$sname&amp;action=show";
    $f =<<GROK;
<!--  begin footer for: $sname 
      see http://www.casema.net/~jip/perl.html for more info
-->
<br clear="all">
<p align="right"><a href="http://www.opencontent.org/home.shtml"
 ><font size="-3">All rights reserved.</font></a>
<br><a href="http://www.opencontent.org/opl.shtml"
 ><font size="-3">All</font></a><font size="-3"><a 
 href="mailto:pip\@dds.nl?subject=copywrong $name"> wrongs </a></font><a 
 href="http://www.opencontent.org/opl.shtml"><font 
 size="-3">reversed.</font></a></p>

<table summary="voet " width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr>
  <td align="left" width="40%">
   <font size="-2">
   <a 
	href="$altal"
	onMouseOver="window.status='Search for pages linking to $name.html' ; return true" 
   >Page </A><a href="$validate"
	onMouseOver="window.status='Validate this page.' ; return true"
   >by </a><a 
	href="mailto:pip\@dds.nl?subject=This ~/jip/$name.html thingie is wowzers!"
	onMouseOver="window.status='Mail me about $name.html' ; return true"    
>Jip</A>

 <br>
 <a href="$babelfish"
  onMouseOver="window.status='Try babelfish on this page.' ; return true"
      >Page</a> started: $page{$id}{begun}
 <br>
 <a href="http://$ddns/bord/wwwboard.html"
  onMouseOver="window.status='View my bord.' ; return true"	
      >Last modified</A>: $F->{$id}{when}
 <img src="http://$ddns/htbin/ip.gif" width=1 height=1 alt="my ip">
 <br>
 </font>
</td>
<td align="center" valign="bottom" width="20%">
 <font size="-2">
 <a href="http://www.casema.net/~jip/siteindex.html"
     onMouseOver="window.status='Index of Kwark inc.' ; return true"
	 target="_top"
 >Index</a>
 <a href="$gist">Comments</a>
 </font>
</td>
<td align="right" width="40%">
<a 
	href="http://www.nedstat.nl/cgi-bin/viewstat?name=jip$sname"
	onMouseOver="window.status='Nedstat statistics for $sname.html';return true"
><img src="http://www.nedstat.nl/cgi-bin/nedstat.gif?name=jip$sname" border=0
align="right" width="32" height="32" alt="NedStat"></a>



      <script language="JavaScript" type="text/javascript">
      <!--
      document.write("<img src=\\"http://www.nedstat.nl/cgi-bin/referstat.gif?name=jip$sname&refer="+escape(top.document.referrer)+"\\" width=1 height=1 alt=\\"R\\">");
      // -->
      </script>


</td></tr></table>
<!-- end footer for: $name -->
GROK
	return $f;
}

sub webify {
    my ($i)=@_;
    $i =~ s!/!%2f!g;
    $i =~ s!:!%3a!g;
    $i =~ s!\.!%2e!g;
    $i =~ s!~!%7e!g;
    $i;
}
