#!/usr/bin/perl
##################################################################
$VERSION = '4.00'; $SCRIPT = 'webring.pl';
require '/var/www/clients/client51/web110/web/cgi-local/co_lib.pl';
##################################################################
# Variablen definieren
$User = 			'/var/www/clients/client51/web110/web/webring/data/user.txt';
$WR = 				'../webring/index.php';
$CGI = 				$ENV{'SCRIPT_NAME'};
$BUTTON = 			'http://www.we-love-country.de/_plates/WebRing_rechts.gif';
$title = 			'We-Love-Country WebRing';
$mailprogram = 			'/usr/sbin/sendmail';
$lock_verzeichniss = 		"/var/www/clients/client51/web110/web/LOCK";
$logpath = 			"/var/www/clients/client51/web110/web/webring/log/";
$webring_email_adresse = 	'webring@we-love-country.de';

# Module
use CGI;
my $cgi = new CGI;


##################################################################
# Programmablauf
##################################################################
&parameter_einlesen;
&id_pruefen;

if ($ENV{'QUERY_STRING'} eq ""){; print "Location: $WR\n\n"; exit; };
if (($ENV{'HTTP_REFERER'} eq "http://www.onlinetrans.com/link.cgi") && ($ENV{'ID=86&Shares=next5'} eq "")){; print "Location: $WR\n\n"; exit; };

if ($error eq "FEHLER"){;
  &fehlerlauf;
  &fehler_mail;
  exit;
} else {
  if ($ACT eq "button"){;                              # BUTTON
    print "Location: $BUTTON\n\n";
    &log_exit;

  } elsif ($ACT eq "home"){;                             # HOME
    print "Location: $WR\n\n";
    &log_exit;

  } elsif ($ACT eq "back" | $ACT eq "next"){;       # NEXT/BACK
    open (USER, "$User"); @TL=<USER>; close (USER);
    @Links = (@TL[($Id+1)..$#TL], @TL[0..($Id-1)]);
    if ($ACT eq "back"){@Links = reverse @Links};
    foreach $TZ (@Links) {if ($TZ !~ /^#/) {$Zeile = $TZ;last}};
    &trennen;
    &log_exit;

  } elsif ($ACT eq "random"){;                         # RANDOM
    open (USER, "$User"); @TL=<USER>; close (USER);
    @Links = (@TL[($Id+1)..$#TL], @TL[0..($Id-1)]);
    foreach $Zeile (@Links) {;
      if ($Zeile !~ /^#/) {@Neulinks = (@Neulinks,$Zeile)};
    };
    $laenge = @Neulinks;
    srand();
    $Zeile = $Neulinks[int rand $laenge];
    &trennen;
    &log_exit;

  } elsif ($ACT eq "URL5"){;                             # URL5
    open (USER, "$User"); @TL=<USER>;close (USER);
    foreach $TZ (@TL){;if ($TZ =~ /^$Id/) {$Zeile = $TZ;last};}; 
    &trennen; 
    &log_exit;

  } elsif ($ACT eq "back5" | $ACT eq "next5"){; #BACK5/NEXT5
    &back_next_5_seite;
    &log_exit;

  } else {;                                # KEIN erkanntes ACTION
    &fehler_seite;
    &fehler_mail;
    exit;
  };
};


###########################################################
# Sub's
###########################################################

##################################
sub log_exit {;
  &datum;

  if ($ACT ne "URL5"){
    if ($Id < 10) { $Id = "00$Id";                    # ID 3-stellig
    } elsif ($Id < 100) {$Id = "0$Id";                #    erstellen
    };
  };

  if ($exID < 10) { $exID = "00$exID";            # exID 3-stellig
  } elsif ($ziel_id < 100) { $exID = "0$exID";    #      erstellen
  };

  
  if ($ACT eq "button" | $ACT eq "button_k") {;      # BUTTON-LOG
    $log_zeile = "AB;$ENV{'REMOTE_ADDR'};$zeit;$Id\n";

  } elsif ($ACT eq "home") {;                        # HOME-LOG
    $log_zeile = "In;$ENV{'REMOTE_ADDR'};$zeit;$Id\n";

  } elsif ($ACT eq "back"){;
    $log_zeile = "Lr;$ENV{'REMOTE_ADDR'};$zeit;$Id;$ziel_id\n";

  } elsif ($ACT eq "next"){;
    $log_zeile = "Lv;$ENV{'REMOTE_ADDR'};$zeit;$Id;$ziel_id\n";

  } elsif ($ACT eq "random"){;
    $log_zeile = "Lz;$ENV{'REMOTE_ADDR'};$zeit;$Id;$ziel_id\n";

  } elsif ($ACT eq "URL5"){;
    $log_zeile = "L5;$ENV{'REMOTE_ADDR'};$zeit;$exID;$Id\n";
  };
  &L_flock ("$lock_verzeichniss/wr_log.txt");
    open (LOG, ">>$logpath$file_name");
      print LOG $log_zeile;
    close (LOG);
  &L_unflock ("$lock_verzeichniss/wr_log.txt");
  exit;
};

##################################
sub datum {;
  ($t,$min,$std,$mday,$mon,$jahr,$t,$t,$t) = localtime(time);
  $zeit = ($std * 60) + $min;
  if ($mday < 10) { $mday = "0$mday"; }
  $mon = $mon + 1;   if ($mon < 10) { $mon = "0$mon"; }
  $jj = $jahr -100;  if ($jj < 10) { $jj = "0$jj"; }
  $file_name = $jj.$mon.$mday."_dayly.log";
};

##################################
sub back_next_5_seite {;
  $seitentitel = "Liste der WebRing-Teilnehmer";
  &htmlkopf;

  print "  <tr>\n";
  print "   <td width=\"29\">&nbsp;</td>\n";
  print "   <td><h2 align=\"center\">Liste der Webringmitglieder, 5 ";
  if ($ACT eq "back5") {print "vorige "};
  if ($ACT eq "next5") {print "n\&auml;chste "};
  print "</h2>\n";
  print "    </td>\n";
  print "  </tr>\n";
  print "</table>\n";
  print "<p>Hier sind die ";
  if ($ACT eq "back5") {print "vorherigen "};
  if ($ACT eq "next5") {print "n\&auml;chsten "};
  print "5 <!-- (271) --> erreichbaren aktiven WebRing-Mitgliedern aufgelistet<!-- (Stand: 24.08.2004) -->:</p>\n";
  print "<ul>\n";
  open (USER, "$User"); @TL=<USER>;close (USER);
  @Links = (@TL[($Id+1)..$#TL], @TL[0..($Id-1)]);
  if ($ACT eq "back5") {@Links = reverse @Links};
  foreach $Z (@Links) {; if ($Z !~ /^#/) {@NL = (@NL,$Z)}; };
  @Links = @NL[0..4];
  foreach $Zeile (@Links) {;
    chomp $Zeile;
    ($URL_ID, $trash, $T1, $trash, $T2) = split (/\t/,$Zeile);
    print "<li><a href=\"$CGI\?ID=$URL_ID\&Action=URL5";
    print "\&exID=$Id\">$T1</a>";
    if ($T2 ne "") {print " $T2"};
    print "\n";
  };
  print "</ul>\n";

  print "<p>Informationen zu unserem WebRing befinden sich unter dem \n";
  print "Men\&uuml;punkt <a href=\"$WR\">Webring</a>.<br>\n";
  print "Sollten sich irgendwelche weiteren Fragen oder Probleme zum\n";
  print "WebRing ergeben,<br> so sind wir \&uuml;ber die eMail-Adresse\n";
  print "<a href=\"mailto:$webring_email_adresse\">$webring_email_adresse</a>\n";
  print "erreichbar.</P>\n";

  &htmlfuss;
};

##################################
sub trennen {;
  ($ziel_id, $Link) = split (/\t/,$Zeile);
  print "Location: $Link\n\n";
};


##################################
sub fehlerlauf {;
  if ($ACT eq "button" || $ACT eq "button_k") {;
    if ($ACT eq "button") {;
      print "Location: $BUTTON\n\n";
    } else {;
      print "Location: $BUTTON_k\n\n";
    };
  } else {;
    &fehler_seite;
  };
};

##################################
sub fehler_seite {;
  $Kopfzeile = $title;
  &htmlkopf;
  print "<center><table width=\"70\%\"><tr><td align=\"left\">";
  print "<b><big>Hallo,<br>leider ist beim Aufruf ";
  print "des Webrings ein Fehler aufgetreten!</big></b><p>";
  print "<font color=\"\#FF0000\"><b>Dies liegt meist an einem ";
  print "HTML-Fehler auf der Seite, von der Sie den ";
  print "Link aufgerufen haben.</b></font><p>";
  print "Der Fehler wurde automatisch an den Webmaster ";
  print "gesendet und wir bem\&uuml;hen uns den Fehler bald ";
  print "zu beheben.<p><big>Hier geht es zur <a href=\"$WR\">";
  print "Info-Seite des Webrings</a>";
  if ($ENV{'HTTP_REFERER'} ne ""){;
    print " oder <a href=\"$ENV{'HTTP_REFERER'}\">zur\&uuml;ck ";
    print "zur vorherigen Seite</a>";
  };
  print ".</big></td></tr></table></center><br>";
  &htmlfuss;
};

##################################
sub fehler_mail {;
  open (MAIL,"|$mailprogram -t");
    print MAIL "To: $webring_email_adresse\n";
    print MAIL "From: WEBRING\n";
    print MAIL "Subject: Fehlerhafter WebRing-Aufruf\n\n";
    print MAIL "ID           = $Id\n";
    print MAIL "Action       = $ACT\n";
    print MAIL "exID         = $exID\n";
    print MAIL "HTTP_REFERER = $ENV{'HTTP_REFERER'}\n\n";
    print MAIL "QUERY_STRING = $ENV{'QUERY_STRING'}\n";
	print MAIL "$name1 - $wert1 - $name2 - $wert2\n";
  close(MAIL);
};

##################################
sub id_pruefen{;
  if (($Id !~ /\D/)&($Id >= 0)&($Id <= 999)&($Id ne "")) { 
    $error = "NEIN"; 
  } else {;
    $error = "FEHLER"; 
  };
};

##################################
sub parameter_einlesen{;
  foreach ($cgi->param){;
    $name = $_;
    $name =~ s/amp\;//g;
	
	if ($ENV{'QUERY_STRING'} =~ /%26/){;
	  ($name1, $wert1) = split(/=/,$`);
	  ($name2, $wert2) = split(/=/,$');
	  
	  if ($name1 eq "ID"){;			$Id = $wert1;
	  } elsif ($name1 eq "Id"){;	$Id = $wert1;
	  } elsif ($name1 eq "id"){;	$Id = $wert1;};
	  	  
	  if ($name2 eq "Action"){;		$ACT = $wert2;
	  } elsif ($name2 eq "action"){;$ACT = $wert2;};
      
	
	
    } elsif ($name eq "ID"){;      	$Id = $cgi->param($_);
    } elsif ($name eq "Id"){;		$Id = $cgi->param($_);
    } elsif ($name eq "id"){;		$Id = $cgi->param($_);
    
    } elsif ($name eq "Action"){;	$ACT = $cgi->param($_);
    } elsif ($name eq "action"){;	$ACT = $cgi->param($_);
    
    } elsif($name eq "exID"){;		$exID = $cgi->param($_);
    } elsif($name eq "exid"){;		$exID = $cgi->param($_);
    };
  };
};

sub htmlkopf {;
  print "Content-type: text/html\n\n";
  print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
  print "<HTML>\n";
  print "<HEAD>\n";
  print " <title>$seitentitel</title>\n";
  print " <link href=\"http://www.we-love-country.de/CSS/colors3.css\" rel=\"stylesheet\" type=\"text/css\">\n";
  print "</head>\n";
  print "<body>\n";
  print " <table border=\"0\" width=\"100%\">\n";
  print "  <tr>\n";
  print "   <td width=\"29\"><a name=\"top\"></a></td>\n";
  print "   <td width=\"796\" align=\"center\" valign=\"top\">\n";
  print "    <div align=\"center\"><img \n";
  print "src=\"http://www.we-love-country.de/_separators/transdot.gif\" width=\"1\" ";
  print "height=\"20\" align=\"top\"><img ";
  print "src=\"http://www.we-love-country.de/_headers/Webring.gif\" ";
  print "alt=\"Webring\" width=\"229\" height=\"43\"></div>\n";
  print "    </td>\n";
  print "   <td width=\"150\" ALIGN=\"RIGHT\" VALIGN=\"TOP\" ROWSPAN=\"2\">\n";
  print "    <P ALIGN=\"RIGHT\"><img ";
  print "src=\"http://www.we-love-country.de/_plates/startseite.gif\" ";
  print "width=\"131\" height=\"30\" align=\"bottom\">\n";
  print "   </td>\n";
  print "  </tr>\n";

};

sub htmlfuss {;
  print "</BODY>\n";
  print "</HTML>\n";
};
