############################################################################
# Digitalt fotoalbum-program (fil 1 av 3)                                  #
# Version 2 av Anders Hultman 2001.                                        #
#                                                                          #
# Programmet låter dig ha flera separata fotoalbum med samma layout.       #
# Ett fotoalbum består av en s.k. album-fil som innehåller URL:ar och      #
# bildtexter till alla bilder. Alla album-filer ska ligga i samma          #
# directory på den server som album-systemet är installerat på.            #
# Bildfilerna kan ligga på vilken server som helst, men om de ligger på    #
# server så kan man få HTML-koderna WIDTH och HEIGHT angivna automatiskt.  #
# För detta kävs dessutom att Image::Size är installerat.                  #
#                                                                          #
# Album-filerna har ändelsen .album och är textfiler uppställda på         #
# följande sätt: På första raden står albumets rubrik (till exempel        #
# "Semester 1996"). På rad två och framåt kommer URL:ar till bilderna på   #
# varsin rad. Vill man ha bildtext så skriver man ett mellanslag och       #
# därefter texten. Skrivsättet med |-tecken som användes i version 1 stöds #
# också. Exempel:                                                          #
#   /bilder/bild.jpeg Bildtext                                             #
# Om bilderna ligger på en annan server så måste URL:arna vara             #
# fullständiga (börja på http://). Ligger bilderna på samma server går     #
# det även att använda länkar som börjar på / (t.ex. /bilder/bild.jpeg).   #
# Om alla ens bilder ligger i en speciell bild-mapp (och i undermappar     #
# till den) kan man även ange sökvägar relativt den mappen. De ska då inte #
# börja på / (t.ex. bild.jpeg)                                             #
#                                                                          #
# Om du vill ha en gemensam bildtext för alla bilder så skriver du den på  #
# sista raden i album-filen, med ett #-tecken före. Det går bara att ha    #
# en rad, men den kan i gengäld vara hur lång som helst.                   #
#                                                                          #
# Om du installerar album-programmet så att det får URL:arna               #
#   http://din.server/cgi-bin/album-en (för en-i-taget-visning)            #
#   http://din.server/cgi-bin/album-al (för alla-på-en-gång-visning)       #
# och om din album-fil heter                                               #
#   semester-1996.album                                                    #
# så kommer URL:arna till ditt album bli                                   #
#   http://din.server/cgi-bin/album-en/semester-1996                       #
#   http://din.server/cgi-bin/album-al/semester-1996                       #
# Notera bruket av "falska kataloger" och att ändelsen .album inte         #
# skrivs ut.                                                               #
#                                                                          #
# Varje enskild bild i albumet får två URL:ar som leder direkt till        #
# bilden. Till exempel så får bild 17 dessa två URL:ar:                    #
#   http://din.server/cgi-bin/album-en/semester-1996?17                    #
#   http://din.server/cgi-bin/album-en/semester-1996?bild=17               #
# Dessutom kan man gå till bildens plats på alla-på-en-sidan med:          #
#   http://din.server/cgi-bin/album-al/semester-1996#17                    #
#                                                                          #
# Om du t.ex. byter namn på ett album och vill eftersända dina besökare    #
# till den nya adressen så skriver du fullständig URL (börjar på http://)  #
# med ett @-tecken framför på första raden i album-filen. Resten av filen  #
# kommer inte att läsas och kan vara tom.                                  #
#                                                                          #
############################################################################
# Konfigurering                                                            #
#                                                                          #
# Här fyller du i URI:erna till de två scripten. Ändra dessa så att de     #
# de stämmer överens med vad du kallat filerna på din server. URI:erna     #
# ska vara den del av URL:arna ovan som kommer efter datornamnet men före  #
# namnet på det enskilda albumet. Avsluta inte med /                       #

$al_uri  = "/cgi-bin/album-al"; 
$en_uri  = "/cgi-bin/album-en"; 

# Här fyller du i sökvägen till det directory på servern där dina          #
# album-filer ligger. Det ska vara en filsystems-sökväg räknad relativ     #
# från detta programs plats, eller absolut från filsystemets rot.          #
# Avsluta inte sökvägen med /                                              #

$db_dir  = "../album"; 

# Här fyller du i URI:n till din bildmapp. Det ska vara en sökväg relativt #
# DOCUMENT_ROOT. Detta är det som kommer att läggas framför ofullständiga  #
# bildadresser. Avsluta inte sökvägen med /                                #

$bild_uri = "/bilder";

# Här fyller du i URI:n till din innehållssida. Detta är en del av min     #
# layout och kanske inte används om du anpassar utseendet till din sajt.   #

$toc_url = "/bilder/";

# Det var all konfigurering som är nödvändig för att programmet ska        #
# fungera. I själva koden finns dock en hel del layout-detaljer            #
# som du kan ändra om du vill.                                             #
# OBS! Om du inte har Image::Size installerat på din server måste du ta    #
# bort de rader som anropar Image::Size (dessa anges i koden).             #
############################################################################
# Globala konstanter (ändra ej dessa)

$al_url  = "$al_uri$ENV{'PATH_INFO'}";
$en_url  = "$en_uri$ENV{'PATH_INFO'}";

############################################################################
# Subrutin som öppnar album-filen och sätter globala variabler

sub read_album {
  open(FIL, $db_dir.$ENV{'PATH_INFO'}.".album") || &fel_404($db_dir.$ENV{'PATH_INFO'}.".album");
  @bild = (<FIL>);
  close (FIL);
  chop (@bild);

  $title = $bild[0];
  $title =~ s/<([^>]|\n)*>//g;

  $antal = @bild;
  $antal--;
  if ($bild[$antal] =~ /^\#/) {
    $bild[$antal] = substr($bild[$antal],1);
    $antal--;
  }

  ### Funktion för eftersändning
  if ($bild[0] =~ /^\@/) {
    # Om första raden är @ och en url så ska man hänvisas dit
    $url = substr($bild[0],1);
    print "Location: $url";
    print "?$ENV{'QUERY_STRING'}" if ($ENV{'QUERY_STRING'});
    print "\n\n";
    exit(0);
  }
}

# $title är för användning som html-title
# $bild[0] är titeln obehandlad
# $bild[1..$antal] är url + bildtext för resp bild
# $bild[$antal] är en gemensam bildtext
# $antal är antalet bilder

############################################################################
# Subrutin som returnerar bildens URL och bildtext
# Argument 0 ska vara bildens nummer inom albumet

sub url_text {
  my $url; 
  my $bildtext;
  my $serv;
  if ($bild[$_[0]] =~ /\|/) {
    ($url,$bildtext) = split(/\|/,$bild[$_[0]]);
  } 
  elsif ($bild[$_[0]] =~ / /) {
    $url = substr($bild[$_[0]],0,index($bild[$_[0]]," "));
    $bildtext = substr($bild[$_[0]],index($bild[$_[0]]," ")+1);
  } else {
    $url = $bild[$_[0]];
  }

  if ($url =~ /^http\:\/\//) { $serv = "remote"; }
  elsif ($url =~ /^\//)      { $serv = "local"; }
  else {
	$url = "$bild_uri/$url";
    $serv = "local";  
  }
  ($url,$bildtext,$serv);
}

############################################################################
# Subrutin som visar ett felmeddelande om begärd sida inte finns

sub fel_404 {
  print "Status: 404 Finns inte, syns inte\n";
  print "Content-type: text/html\n\n";
  print "<HTML>\n<head>\n";
  print "<TITLE>404 Finns inte</TITLE>\n";
  print "</HEAD>\n",'<BODY BGCOLOR="#FFFFFF" TEXT="#003300">',"\n";
  print '<table width="100%">',"\n<tr><td>";

# Här hämtar jag in en snutt HTML-kod från filen "logo.include" för
# att visa min logotype och en länk till min förstasida.
# Avkommentera följande rader om du vill ha en liknande funktion.
# open (LOGO,"logo.include");
# print while (<LOGO>);
# close (LOGO);

  print '<td><td align="right">',
        '<a href="',$toc_url,'">',
        "Bilder</a><br>\n";
  print '<tr><td valign="top" bgcolor="#CCCCFF" colspan="3"><big><strong>',
        "Efterfrågad sida finns inte</strong></big>\n<tr>\n<td>\n";
  print "<br><br>\n<tt>[HTTP error 404]</tt>\n</table>\n</BODY>\n</HTML>\n";
  exit(0);
}

############################################################################
# Subrutin som läser in POST-data

sub GetCGIinput {
  my $buffer; my @pairs; my $pair; my $name; my $value;
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  @pairs = split(/&/, $buffer);
  foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
  }
}

############################################################################

1;
