#!/usr/bin/perl

#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);

# Dateiflock
use Fcntl qw(:DEFAULT :flock);

# Benötige Konfigurationsdatei einbinden
require "misc/adpw.pl";
require "config.pl";
require "library.pl";

$clicker = "click.pl";



my $action = param('action');
if ($action eq ""){&view}
elsif ($action eq "eintragen"){&eintragen}
elsif ($action eq "save"){&save}
elsif ($action eq "anmeldesave"){&anmeldesave}
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Link ansehen
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub view {

if (-e "misc/lock.lock") {
wartung();
exit;
}


my $type = param('typ');
my $kt = param('kt');

# Linkdatenbank der Kategorie lesen
open(DATEN,"<linksdat/$type.dat") or fehler("Konnte Datei linksdat/$type.dat nicht lesen.");
flock(DATEN, 2);
@ldb = <DATEN>;
flock(DATEN, 8);
close(DATEN);

# Kategoriendaten lesen
open(KATEGORIE,"kategorien/kategorie.dat");
flock(KATEGORIE, 2);
@kat = <KATEGORIE>;
flock(KATEGORIE, 8);
close(KATEGORIE);



header();
laylink();
print qq~
<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
    <td width=\"50%\">Kategorienauswahl</td>
    <td width=\"50%\"><form action="view.pl" method="GET">
	
~;

print "<select class=\"field\" name=\"typ\">\n";
foreach $kat (@kat) {
chomp($kat);
($id,$kattitel,$katdesc,$counter) = split(/\|/, $kat);
print "<option value=\"$id\">$kattitel\n";
}
print "</SELECT>\n";

print "<input class=\"button1\" type=\"submit\" value=\"GO\">\n";


print qq~	
</td></form>
</tr>
<tr>
    <td colspan="2" class="titel"><b>Link</b></td>
    
</tr>
~;


$zahl = 0;
$treffer = 0;
foreach $record (@ldb) {
chomp($record);
($rn,$hn,$url,$ht,$dt,$co) = split (/\|/,$record);
$treffer = 1;
$zahl++;

if ($zahl =~ /[0,2,4,6,8]$/) {
$bgcolor = "bga";
}
else {
$bgcolor = "bgb"; 
}

print "<tr><td colspan=\"2\" class=\"$bgcolor\"><a class=\"ll\" href=\"$clicker?id=$rn&typ=$type\" target=\"_blank\">$hn</a><br>$ht</tr> ";
print "<tr><td class=\"darker\">Eingetragen am: $dt</td><td class=\"darker\"><a class=\"emp\" href=\"javascript:auf('empfehlen.pl?link=$url&text=$ht')\">Link empfehlen</a> - Hits: $co</td></tr> ";
}
if ($treffer == 0){
print "<tr><td colspan=\"2\">Sorry, hier ist noch kein Eintrag vorhanden</td></tr> ";
}


print qq~
</table>
<br>
<a href="mylinks.pl">Zurück zu den Kategorien</a> | <a href="view.pl?action=eintragen&typ=$type&kt=$kt">Link eintragen</a><br>
</font>
~;

footer();
exit;
}


# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Link eintragen
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub eintragen {

if (-e "misc/lock.lock") {
wartung();
exit;
}

my $type = param('typ');
my $kt = param('kt');

header();
laylink();
print qq~

<form action="view.pl" method="POST">
<input type="hidden" name="action" value="anmeldesave">
<input type="hidden" name="typ" value="$type">


<b><font color="#FF0000">Link anmelden - wird durch Admin freigeschaltet</font></b><br><br>


<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td colspan="2" class="darker">Link eintragen</td>
</tr>
<tr>
<td colspan="2"><b>Kategorie: $kt</b></td>
</tr>
<tr>
<td>Link URL (max. 150 Zeichen)</td><td><input class="field" type="Text" name="url" size="40" maxlength="150"></td>
</tr>
<tr>
<td>Homepagename (max. 150 Zeichen)</td><td><input class="field" type="Text" name="hpname" size="40" maxlength="150"></td>
</tr>
<tr>
<td>Beschreibung (max. 300 Zeichen)</td><td><input class="field" type="Text" name="text" size="40" maxlength="300"></td>
</tr>
<tr>
<td colspan="2"><b>Bitte alle Felder ausf&uuml;llen, unvollst&auml;ndige oder unrichtige Eintr&auml;ge werden gel&ouml;scht.</b></td>
</tr>
<tr>
<td colspan="2" class="darker" align="center"><input class="button" type="submit" value="Link anmelden">
&nbsp;&nbsp;&nbsp;<input  class="button" type="reset" value="Abbrechen">
</td>
</tr>
</table>
</form>

<a href="mylinks.pl">Zurück zu den Kategorien</a> | <a href="view.pl?action=eintragen&typ=$type&kt=$kt">Link eintragen</a><br><br>





<form action="view.pl" method="POST">
<input type="hidden" name="action" value="save">
<input type="hidden" name="typ" value="$type">


<b>Link sofort eintragen - nur für Administrator</b><br><br>


<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td colspan="2" class="darker">Link eintragen</td>
</tr>
<tr>
<td colspan="2"><b>Kategorie: $kt</b></td>
</tr>
<tr>
<td>Link URL</td><td><input class="field" type="Text" name="url" size="40"></td>
</tr>
<tr>
<td>Homepagename</td><td><input class="field" type="Text" name="hpname" size="40"></td>
</tr>
<tr>
<td>Beschreibung</td><td><input class="field" type="Text" name="text" size="40"></td>
</tr>
<tr>
<td colspan="2" class="darker">Adminpasswort</td>
</tr>
<tr>
<td>Admin PW</td><td><input class="field" type="password" name="password" size="40"></td>
</tr>
<tr>
<td colspan="2" class="darker" align="center"><input class="button" type="submit" value="Link eintragen">
&nbsp;&nbsp;&nbsp;<input  class="button" type="reset" value="Abbrechen">
</td>
</tr>
</table>
</form>

<a href="mylinks.pl">Zurück zu den Kategorien</a> | <a href="view.pl?action=eintragen&typ=$type&kt=$kt">Link eintragen</a><br>
~;

footer();
exit;
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Link eintragen
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub save {

if (-e "misc/lock.lock") {
wartung();
exit;
}

my $password = param('password');

if ($password eq $adminpass) {

$rn = join '', ("1".."9","a".."z","A".."Z",0..9)[map {rand 36} 0..9]; 
$rn = substr($rn, 0, 10);


my $type = param('typ');
my $url = param('url');
my $hpname = param('hpname');
my $text = param('text');
&datumsausgabe;

open (FILE, ">>linksdat/$type.dat");
flock (FILE, 2);
print FILE "$rn|$hpname|$url|$text|$datum_tag_mon|0\n";
flock (FILE, 8);
close FILE;

open(DATEN, "<kategorien/kategorie.dat"); 
flock(DATEN,2);
while(<DATEN> ){
(@resultate) =split(/\|/, $_);
if ($resultate[0] eq "$id"){
push(@new, "$id|$kat|$text|$hit\n");
} else {
push(@new,$_);
}
}
close(DATEN);

open(NEUEDATEN, ">kategorien/kategorie.dat"); 
flock(NEUEDATEN,2); 
print NEUEDATEN @new;
close(NEUEDATEN);

# Kategorienlinkzaehler hochzaehlen
open(DATEI,"+<kategorien/kategorie.dat");
flock(DATEI, 2);
@dateiinhalt = <DATEI>;
seek(DATEI,0,0);
foreach $eintraege (@dateiinhalt) { 
chomp($eintraege);
($id,$katrub,$kattext,$count)=split(/\|/,$eintraege);
if ($type eq $id) {
$count++;
print DATEI "$id|$katrub|$kattext|$count\n";
} else {
print DATEI "$eintraege\n";
}
}
flock(DATEI, 8);
close(DATEI);

open(DATEI,"+<misc/counter.dat");
flock(DATEI, 2);
$clicks = <DATEI>;
seek(DATEI,0,0);
$clicks++;
print DATEI "$clicks";
flock(DATEI, 8);
close(DATEI);
chmod(0666, "misc/counter.dat");



header();
laylink();
require "config.pl";
print qq~
<b></b><br>

<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td colspan="2" class=\"darker\">Dieser Eintrag wurde gespeichert:</td>
</tr>
<tr>
<td>Homepagename:</td><td>$hpname</td>
</tr>
<tr>
<td>Homepage URL:</td><td>$url</td>
</tr>
<tr>
<td>Beschreibung:</td><td>$text</td>
</tr>

</table>


<a href="mylinks.pl">Zurück zu den Kategorien</a> | <a href="view.pl?action=eintragen&typ=$type&kt=$kt">Link eintragen</a> | <a href="view.pl?typ=$type">Linkkategorie</a><br>
~;

footer();
} else {
&fehlerseite;
}
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Link eintragen
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub anmeldesave {

if (-e "misc/lock.lock") {
wartung();
exit;
}

if (!-e "kategorien/newlink.dat") {
open(ANM,">kategorien/newlink.dat") || die "Kann Datei newlink.dat nicht öffnen\n";  
close(ANM);
chmod(0666, "kategorien/newlink.dat");
}

$rn = join '', ("1".."9","a".."z","A".."Z",0..9)[map {rand 36} 0..9]; 
$rn = substr($rn, 0, 10);


my $type = param('typ');
my $url = param('url');
my $hpname = param('hpname');
my $text = param('text');
&datumsausgabe;

open (FILE, ">>kategorien/newlink.dat");
flock (FILE, 2);
print FILE "$type|$rn|$hpname|$url|$text|$datum_tag_mon|0\n";
flock (FILE, 8);
close FILE;

header();
laylink();
require "config.pl";

open (MAIL, "|$mailprog -t") || die $!;
print MAIL "To: $adminemail\n";
print MAIL "From: $adminemail\n";
print MAIL "Subject: Neuer Link eingetragen!\n\n";
print MAIL "Hallo,\n";
print MAIL "Es wurde ein neuer Link hinzugefuegt bei:\n";
print MAIL "$scripturl/mylinks.pl\n";
print MAIL "==================================\n";
print MAIL "HP-Name: $hpname\n";
print MAIL "URL: $url\n";
print MAIL "Text: $text\n";
print MAIL "Zum freischalten oder loeschen benutzen Sie bitte diesen Link:\n";
print MAIL "$scripturl/admin.pl?un=$admin&pw=$adminpass\n";
print MAIL "==================================\n\n";
print MAIL "Gesendet um: $datum\n";
close(MAIL);





print qq~
<b></b><br>

<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td colspan="2" class=\"darker\">Dieser Eintrag wurde gespeichert:</td>
</tr>
<tr>
<td>Homepagename:</td><td>$hpname</td>
</tr>
<tr>
<td>Homepage URL:</td><td>$url</td>
</tr>
<tr>
<td>Beschreibung:</td><td>$text</td>
</tr>

</table>


<a href="mylinks.pl">Zurück zu den Kategorien</a> | <a href="view.pl?action=eintragen&typ=$type">Link eintragen</a> | <a href="view.pl?typ=$type">Linkkategorie</a><br>
~;

footer();

}


# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Passwort falsch Subroutine
# - - - - - - - - - - - - - - - - - - - - - - - - - - #

sub fehlerseite {

header();
laylink();
print qq~
<table cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td colspan="2" class=\"darker\">Fehler festgestellt:</td>
</tr>
<tr>
<td colspan="2">Die eingegebenen Daten stimmen nicht!<br><br>
Bitte gehen Sie <a href="javascript:history.go(-1)" onMouseOver="self.status=document.referrer;return true">zurück</a>
<br><br>
</td>
</tr>
</table>
~;

footer();
exit;
}


# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Wartungsmodus 
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub wartung {

header();
laylink();
print qq~
<table cellspacing="2" cellpadding="4" border="0" width="600">
<tr>
<td colspan="2" class=\"darker\">Fehler festgestellt:</td>
</tr>
<tr>
<td colspan="2">Das Programm befindet sich im Wartungsmodus. Bitte versuchen Sie es in ein paar Minuten nocheinmal.<br><br>
Bitte gehen Sie <a href="javascript:history.go(-1)" onMouseOver="self.status=document.referrer;return true">zurück</a>
<br><br>
</td>
</tr>
</table>
~;

footer();
exit;
}


# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Ende
# - - - - - - - - - - - - - - - - - - - - - - - - - - #