und zwar habe ich einen newsscrpit laufen der auch wunderbar funktioniert.
Code: Select all
#!/usr/bin/perl
use CGI ':standard';
use CGI::Carp 'fatalsToBrowser';
use CGI::Cookie;
require "news_cfg.pl";
my @allow = ('','News Code erlaubt<br>keine Bilder','News Code erlaubt','HTML erlaubt');
sub news_code {
my $datum = &get_date($_[7]); # Datum
my $code = $_[0];
$x = $_[8];
$x =~ s/<br>//ig;
$code =~ s/#MAIL#/$_[4]/eig;
$code =~ s/#MAIL([0-9]+)#/substr($_[4],0,$1)/eig;
$code =~ s/#NAME#/$_[3]/eig;
$code =~ s/#NAME([0-9]+)#/substr($_[3],0,$1)/eig;
$code =~ s/#DATUM#/$datum/eig;
$code =~ s/#TEXT#/$_[8]/eig;
$code =~ s/#TEXT([0-9]+)(N?)#/substr($2?$x:$_[8],0,$1)/eig;
$code =~ s/#SYMB#/"<img src="$symb_url/".$_[6]."">"/eig if($_[6]);
$code =~ s/#SYMB#//ig;
$code =~ s/#ID#/$_[1]/eig;
$code =~ s/#BETREFF#/$_[5]/eig;
$code =~ s/#BETREFF([0-9]+)#/substr($_[5],0,$1)/eig;
for (my $fx=1;$fx<6;$fx++) {
$code =~ s/#F$fx#/$_[8+$fx]/eig;
if ($_[8+$fx]) {
$code =~ s/#IFF$fx#//eig;
$code =~ s/#/IFF$fx#//eig;
} else {
$code =~ s/#IFF$fx#.*?#/IFF$fx#//eigs;
};
};
return $code;
};
sub eingabe_form {
my $code = $form_template;
$code =~ s/#NAME#/textfield(-name=>'u', -size=>10)/eig;
$code =~ s/#PASS#/password_field(-name=>'p', -size=>10)/eig;
$code =~ s/#MAIL#/ textfield(-name=>'m', -size=>60)/eig;
$code =~ s/#BETREFF#/textfield(-name=>'s', -size=>60)/eig;
$code =~ s/#F1#/textfield(-name=>'f1', -size=>60)/eig;
$code =~ s/#F2#/textfield(-name=>'f2', -size=>60)/eig;
$code =~ s/#F3#/textfield(-name=>'f3', -size=>60)/eig;
$code =~ s/#F4#/textfield(-name=>'f4', -size=>60)/eig;
$code =~ s/#F5#/textfield(-name=>'f5', -size=>60)/eig;
if ($symb_akt) {
my $symb="";
opendir(D, $symb_path) or die $!;
my @symb = grep { (-f $symb_path."/".$_) && ($_ =~ /.(jpg|gif|png|jpeg)$/) && ($_ ne "ok.gif") } readdir(D);
closedir(D);
param('y', $symb[0]) if ((!param('y')) && ($symb[0]));
foreach(@symb) {
$symb .= "<input type="radio" name="y" value="$_"";
$symb .=" checked" if ($_ eq param('y'));
$symb .= "><img src="$symb_url/$_"> ";
};
$code =~ s/#SYMB#/$symb/eig;
};
$code =~ s/#TEXT#/textarea(-name=>'t', -cols=>60, -rows=>15, -wrap=>'virtual')/eig;
$code =~ s/#TEXTSTAT#/($_[0]==1)?"HTML erlaubt":$allow[$secur_mode]/eig;
my $newscodehlp="";
if (($secur_mode>0) && ($secur_mode<3)) {
$newscodehlp = "<font size=-2><br><b>NewsCode:</b> [b]<b>Fett</b>[/b] , [i]<i>Kursiv</i>[/i] , [u]<u>Unterstrichen</u>[/u]";
$newscodehlp .= " , [br] neue Zeile , [p]Absatz[/p] , [z]Zentriert[/z]";
$newscodehlp .= "<br>URL: [url]http://www.name.de[/url] oder [url=http//www.name.de]Linktext[/url] , ";
$newscodehlp .= "E-Mail: [email]mail@name.de[/email] oder [email=mail@name.de]E-Mail[/email]<br>";
$newscodehlp .= "Bilder: [img=http://www.name.de/bild.gif]" if ($secur_mode==2);
$newscodehlp .= "</font>";
};
$code =~ s/#TEXTHELP#/$newscodehlp/eig;
$code =~ s/#SENDEN#/submit(-value=>'Eintragen')/eig;
$code .= hidden(-name=>'a');
return $code;
};
sub get_date {
my ($sec,$min,$h,$tag,$mon,$jahr,$wday, $yday,$isdst) = localtime($_[0]+$time_offset*60*60);
$mon++; $jahr+=1900; $h = sprintf("%02d", $h); $min = sprintf("%02d", $min);$sec = sprintf("%02d", $sec);
my $mon2 = sprintf("%02d", $mon);
my $tag2 = sprintf("%02d", $tag);
my @tag_k=('So','Mo','Di','Mi','Do','Fr','Sa');
my @tag_l=('Sonntag','Montag', 'Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
my @mon_k=('.','Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Nov','Dez');
my @mon_l=('.','Januar','Februar','März','April','Mai','Juni','Juli','August', 'September','Oktober','November','Dezember');
my $dat = $datformat;
$dat =~ s/#t2/$tag2/eig;
$dat =~ s/#t/$tag/eig;
$dat =~ s/#wk/$tag_k[$wday]/eig;
$dat =~ s/#wl/$tag_l[$wday]/eig;
$dat =~ s/#mn/$mon/eig;
$dat =~ s/#m2/$mon2/eig;
$dat =~ s/#mk/$mon_k[$mon]/eig;
$dat =~ s/#ml/$mon_l[$mon]/eig;
$dat =~ s/#jk/($jahr % 100)/eig;
$dat =~ s/#jl/$jahr/eig;
$dat =~ s/#s/$h/eig;
$dat =~ s/#n/$min/eig;
$dat =~ s/#k/$sec/eig;
return $dat;
};
$max_news = 10 if ($max_news == 0);
#Kekse
my @cookies=();
if ((param('u') ne "") && (param('save_user')==1)) {
push(@cookies, new CGI::Cookie(-name=>'NewsUser', -value=>param('u'), -expires=>"+12M"));
};
if ((param('p') ne "") && (param('save_pass')==1)) {
push(@cookies, new CGI::Cookie(-name=>'NewsPass', -value=>param('p'), -expires=>"+12M"));
};
if (param('del_cookies') == 1) {
@cookies=();
push(@cookies, new CGI::Cookie(-name=>'NewsUser', -value=>"", -expires=>"-12M"));
push(@cookies, new CGI::Cookie(-name=>'NewsPass', -value=>"", -expires=>"-12M"));
};
my %keks=fetch CGI::Cookie;
param('u', $keks{'NewsUser'}->value) if (($keks{'NewsUser'}) && (param('u') eq ""));
param('p', $keks{'NewsPass'}->value) if (($keks{'NewsPass'}) && (param('p') eq ""));
print header(-expires=>'now', -cookie=>@cookies), start_html(-title=>$site_title.' News', -background=>$background, -text=>$textcolor, -style=>{'src'=>$style}, -link=>$linkcolor, -bgcolor=>$bgcolor);
&print_file($inc_top);
print h1($site_title.' News');
my @user=();
my @news=();
open(F, "<$data_path/news_user.dat") or die $!;
while (<F>) { chomp; push(@user, $_); };
close(F);
if ((!(param('u')) || !(param('p')) || !(param('a'))) && (param('a') ne 'e')) {
my %labels = ('p'=>'Passwort ändern','e'=>'News eintragen', 'f'=>'News freischalten','u'=>'Benutzer bearbeiten');
print start_form, "<table><tr><td>Login:</td><td>", textfield(-name=>'u', -size=>10),"</td></tr><tr><td>",
"Passwort:</td><td>", password_field(-name=>'p', -size=>10), "</td></tr><tr><td>Aktion:</td><td>",
popup_menu(-name=>'a', -values=>['p','e', 'f','u'], -labels=>%labels, -default=>'e'), "</td></tr><tr><td>Cookies:</td><td>", checkbox(-name=>'save_user', -value=>1, -label=>"Benutzer speichern"), checkbox(-name=>'save_pass', -value=>1, -label=>"Passwort speichern"), checkbox(-name=>'del_cookies', -value=>1, -label=>"Cookies löschen"), "</td></tr><tr><td colspan=2>", submit(-value=>'Start'),"</td></tr></table>", end_form;
&ende();
exit;
};
my $ok=0;
my $isAdmin = 0;
my $can_html = ($secur_mode>=3);
foreach(@user) {
my @cu = split(/~/, $_);
if (($cu[0] eq param('u')) && ($cu[1] eq crypt(param('p'), 'xx')) && (index($cu[3], param('a'))>=0)) {
$ok = 1;
$can_html = 1 if ($secur_user==1);
$isAdmin = (index($cu[3], "a")>=0);
param('m', $cu[2]);
};
};
if ((!$ok) && ($admin_post)) { print "Fehler: Zugriff verweigert !"; &ende(); };
if (param('a') eq 'e') {
if (!param('m') || !param('t') || !param('s') || (!$ok && !param('m'))) {
print start_form, &eingabe_form(0), end_form;
&ende;
} else {
# UnHTML
foreach (param()) {
my $x = param($_);
$x =~ s/<.*?>//g if (!$can_html);
if ($secur_mode>0) {
$x =~ s/[(/)?z]/<$1center>/ig;
$x =~ s/[(/)?(b|i|u|p|br)]/<$1$2>/ig;
$x =~ s/[url=(.*?)](.*?)[/url]/<A href="$1">$2</a>/ig;
$x =~ s/[url](.*?)[/url]/<A href="$1">$1</a>/ig;
$x =~ s/[email=(.*?)](.*?)[/email]/<A href="mailto:$1">$2</a>/ig;
$x =~ s/[email](.*?)[/email]/<A href="mailto:$1">$1</a>/ig;
};
if ($secur_mode>1) {
$x =~ s/[img=(.*?)]/<img src="$1">/ig;
};
param($_, $x);
};
open(F, ">>$data_path/news_news.dat") or die $!;
flock(F, 2);
my $text = param('t');
$text =~ s/n/<br>/g;
$text =~ tr/r/ /;
$text =~ s/<!--.*?-->//g;
my $datum = time;
print F substr(rand(100000),0,8)."~$ok~".param('u')."~" .param('m')."~".param('s')."~".param('y')."~".$datum."~".$text."~".param('f1')."~".param('f2')."~" .param('f3')."~".param('f4')."~".param('f5')."n";
close(F);
print h2("News wurden gespeichert !");
if ($ok) {
&update();
} else {
print "Der Eintrag wird erst nach Freigabe durch $site_title ercheinen.";
};
if ((($mailmode == 1) && !$ok) || ($mailmode == 2)) {
open(MAIL, "|$sendmail -t") or die $!;
print MAIL "From: ".param('m')."nTo: $from_mailn",
"Subject: News: ".param('s').' ('.param('u').")nn",
"$site_title NewsnnEintrag von: ".param('u')." (".param('m'),")n";
if ($ok) {
print MAIL "Datum: ", &get_date($datum), "n";
} else {
print MAIL "Datum: (wird nach Freigabe eingetragen)n";
};
print MAIL "Betreff: ", param('s'), "nText:n", param('t'), "nStatus: $ok (0-vorgeschlagen, 1-eingetragen)nn",$cgi_url, "/news.cgin";
if ((!close(MAIL)) && (!$sendmail_ignore_err)) { print "<font size="-2">Warnung: sendmail - Fehler</font>"; };
};
&ende;
};
};
unless ($ok) { print "Fehler: Zugriff verweigert"; &ende(); };
if (param('a') eq 'p') {
if (!param('p1') || !param('p2') || (param('p1') ne param('p2')) || !param('m')) {
print h2('Passwort/E-Mail für '.param('u').' ändern'), start_form,
hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'),
"<table><tr><td>neues Passwort:</td><td>", password_field(-name=>'p1', -size=>10), "</td></tR>",
"<tr><td>wiederholen:</td><td>", password_field(-name=>'p2', -size=>10), "</td></tR>",
"<tr><td>E-Mail:</td><td>", textfield(-name=>'m', -size=>40), "</td></tr></table>",
submit(-value=>'Ã?ndern'), end_form;
} else {
foreach(@user) {
my @cu = split(/~/, $_);
if ($cu[0] eq param('u')) {
$cu[1] = crypt(param('p1'),'xx');
$cu[2] = param('m');
$_ = join("~", @cu);
print h2('Passwort/E-Mail geändert.');
&save_user;
};
};
};
&ende;
};
if (param('a') eq 'u') {
if (param('set')) {
foreach(@user) {
my @cu = split(/~/, $_);
$cu[1] = crypt(param($cu[0]."_pwd"), "xx") if (param($cu[0]."_pwd"));
$cu[2] = param($cu[0]."_mail");
my $wa = (index($cu[3], "a")>=0);
$cu[3] = "p";
$cu[3] .= "u" if (param($cu[0]."_u"));
$cu[3] .= "f" if (param($cu[0]."_f"));
$cu[3] .= "e" if (param($cu[0]."_e"));
if ($isAdmin) {
$cu[3] .= "a" if (param($cu[0]."_a"));
} else {
$cu[3] .= "a" if ($wa);
};
$_ = join("~", @cu);
$_ = "" if ((param($cu[0]."_del")) && ($isAdmin || !$wa));
};
if (param('new_nick')) {
push(@user, param('new_nick')."~".crypt(param('new_pwd'),'xx')."~".param('new_mail')."~e");
CGI::delete('new_nick');CGI::delete('new_pwd');CGI::delete('new_mail');
};
&save_user;
};
print h2('Benutzer bearbeiten'), start_form, "<table border><tr><th>Nick</th><th>Passwort</th> <th>Mail</th><th>Eintragen</th><th>Freigeben</th><th>Benutzer<br>bearbeiten</th> <th>Admin</th><th><font color=red>Löschen</font></th></tr>";
foreach(@user) {
next if (!$_);
my @cu = split(/~/, $_);
param($cu[0]."_u", (index($cu[3], "u")>=0));
param($cu[0]."_f", (index($cu[3], "f")>=0));
param($cu[0]."_e", (index($cu[3], "e")>=0));
param($cu[0]."_a", (index($cu[3], "a")>=0));
param($cu[0]."_mail", $cu[2]);
print "<tr><td>$cu[0]</td><td>", textfield(-name=>$cu[0]."_pwd", -size=>10), "</td><td>",
textfield(-name=>$cu[0]."_mail", -size=>30), "</td><td>", checkbox(-name=>$cu[0]."_e", -value=>'1', -label=>''), "</td><td>",
checkbox(-name=>$cu[0]."_f", -value=>'1', -label=>''), "</td><td>", checkbox(-name=>$cu[0]."_u", -value=>'1', -label=>''),"</td><td>",checkbox(-name=>$cu[0]."_a", -value=>'1', -label=>''),"</td><td>",
checkbox(-name=>$cu[0]."_del", -value=>'1', -label=>''), "</td></tR>";
};
print "<tr><td>", textfield(-name=>'new_nick', -size=>10), "</td><td>", textfield(-name=>"new_pwd", -size=>10), "</td><td>",
textfield(-name=>"new_mail", -size=>30), "</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td></tR>";
print "</table><p><b>Passwort</b> leer lassen, um altes beizubehalten<p>", hidden(-name=>'u'), hidden(-name=>'p'),
hidden(-name=>'a'), submit(-name=>'set', -value=>"Ã?bernehmen"), end_form;
&ende;
};
if (param('a') eq 'f') {
print h2('Freigabe');
&load_news;
if (param('set')) {
foreach(@news) {
my @cn = split(/~/, $_);
$cn[1] = 1 if param($cn[0]."_frei");
$cn[6] = time if param($cn[0]."_frei");
$_ = join("~", @cn);
$_ = "" if param($cn[0]."_del");
};
&save_news;
&update;
};
if (param('postedit')) {
foreach(@news) {
my @cn = split(/~/, $_);
if ($cn[0] eq param('id')) {
my $text = param('t');
$text =~ s/n/<br>/g;
$text =~ tr/r/ /;
$text =~ s/<!--.*?-->//g;
my $datum=$cn[6];
$datum = time if (param('d'));
param('y','1') if (!param('y'));
for(my $fx=1;$fx<6;$fx++) { if (!param('f'.$fx)) { param('f'.$fx,0 ); }};
$_ = join("~", $cn[0], $cn[1], param('on'), param('om'), param('s'), param('y'), $datum, $text, param('f1'), param('f2'), param('f3'), param('f4'), param('f5'));
};
};
&save_news;
&update;
};
if (param('edit')) {
foreach(@news) {
my @cn = split(/~/, $_);
if ($cn[0] eq param('edit')) {
$cn[7] =~ s/<br>/n/g;
param('on', $cn[2]);param('om', $cn[3]);param('s', $cn[4]);param('y', $cn[5]);param('d', $cn[6]);param('t', $cn[7]);
for (my $fx=1;$fx<6;$fx++) { param('f'.$fx, $cn[7+$fx]); };
param('id', param('edit'));
print h2('Beitrag bearbeiten'), start_form, "<table border>",
"<tr><th>Name:</th><td>", textfield(-name=>'on', -size=>10), "</td></tr>",
"<tr><th>E-Mail:</th><td>", textfield(-name=>'om', -size=>60), "</td></tr>",
"<tr><th>Datum:</th><td>", checkbox(-name=>'d', -value=>'1', -label=>'auf aktuelles Datum setzen'), "</td></tr>",
"<tr><th>Titel:</th><td>", textfield(-name=>'s', -size=>60), "</td></tr>";
if ($symb_akt) {
print "<tr><th>Symbol:</th><td>";
opendir(D, $symb_path) or die $!;
my @symb = grep { (-f $symb_path."/".$_) && ($_ =~ /.(jpg|gif|png|jpeg)$/) && ($_ ne "ok.gif") } readdir(D);
closedir(D);
param('y', $symb[0]) if ((!param('y')) && ($symb[0]));
foreach(@symb) {
print "<input type="radio" name="y" value="$_"";
print(" checked") if ($_ eq param('y'));
print "><img src="$symb_url/$_">";
};
print "</td></tr>"; };
for (my $fx=1; $fx<6; $fx++) {
print "<tr><th>F$fx:</th><td>", textfield(-name=>'f'.$fx, -size=>60), "</td></tr>";
};
print "<tr><th>Text:<br><font size=-2>HTML erlaubt</font></th><td>", textarea(-name=>'t', -cols=>60, -rows=>15, -wrap=>'virtual'), "</td></tr>",
"<tr><th> </th><td>", submit(-name=>'postedit', -value=>'Ã?ndern'), "</td></tr>",
"</table>", hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'), hidden(-name=>'id'), end_form;
&ende;
}; # if
}; # foreach
} else {
print start_form, "<table border><tr><th>Beitrag</th><th>Aktionen</th></tr>";
foreach(@news) {
my @cn = split(/~/, $_);
print "<tr><td>", news_code($news_template, @cn), "</td><td>", "ID: $cn[0]<br>";
if (!$cn[1]) {
print checkbox(-name=>$cn[0]."_frei", -value=>'1', -label=>'Freigeben'), "<br>";
};
print checkbox(-name=>$cn[0]."_del", -value=>'1', -label=>'Löschen'), "<br>",
"<input type=radio name="edit" value="$cn[0]"> Bearbeiten<br><font size=-1>Nur eine wählen !</font></td></tr>";
};
print "</table>", hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'), submit(-name=>'set', -value=>'Ausführen'),
end_form;
&ende;
};
};
sub ende {
print hr, "<font size=-2>", a({-href=>$cgi_url."/news.cgi"}, "Newsverwaltung"), " - Script Version 1.542 (c) ", a({-href=>"http://www.alexander-fleischer.de"}, alx), " 2000, 2001 - ", a({-href=>"mailto:cgi@alexander-fleischer.de"}, "E-Mail"), "</font>";
&print_file($inc_bottom);
print end_html;
exit;
};
sub save_user {
open(F, ">$data_path/news_user.dat") or die $!;
flock(F, 2);
foreach(@user) { next if (!$_);print F "$_n"; };
close(F);
};
sub save_news {
open(F, ">$data_path/news_news.dat") or die $!;
flock(F, 2);
foreach(@news) { next if (!$_);print F "$_n"; };
close(F);
};
sub load_news {
open(F, "<$data_path/news_news.dat") or die $!;
flock(F, 2);
@news=();
while(<F>) { chomp; push(@news, $_); };
close(F);
};
sub update {
&load_news;
my @sort_news = sort newssort @news;
my $count = 0;
open(F, ">$html_path/news.txt") or die $!;
flock(F, 2);
if ($hdr_use) {
open(G, ">$html_path/news_hdr.txt") or die $!;
flock(G, 2);
};
foreach(@sort_news) {
my @cn = split(/~/, $_);
next if (!$cn[1]);
$count++;
if ($count<=$max_news) {
print F news_code($news_template, @cn);
if ($hdr_use && ($count<=$hdr_cnt)) { print G news_code($hdr_template, @cn); };
} else {
&archive_news($_);
$_="";
};
};
close(F);
if ($hdr_use) { close(G); };
@news = @sort_news;
&save_news;
};
sub archive_news {
my @cn = split(/~/, $_[0]);
my ($x,$x,$x,$x,$mon,$jahr,$x, $x,$x) = localtime($cn[6]);
$mon++; $jahr+=1900; $mon = sprintf("%02d", $mon);
my $mfile = "$html_path/$jahr$mon$index_ext";
my @html=();
if (!-r $mfile) {
my %monat = ('01', 'Januar', '02', 'Februar', '03', 'März', '04', 'April', '05', 'Mai', '06', 'Juni', '07', 'Juli', '08', 'August',
'09', 'September', '10', 'Oktober', '11', 'November', '12', 'Dezember');
open(G, "<$html_path/mtemplate.dat") or die $!;
open(H, ">$mfile") or die $!;
flock(G, 2);flock(H, 2);
while(<G>) { s/<!-- monat -->/"$monat{$mon} $jahr"/eg; print H $_;};
close(G); close(H);
open(G, "+<$html_path/$index_name") or die $!;
while(<G>) {chomp; push(@html, $_); };
seek(G,0,0);
foreach(@html) {
print G "$_n";
if (/<!-- insert -->/) {
print G "<a href="$html_url/$jahr$mon$index_ext">$monat{$mon} $jahr</a><br>n";
};
};
close(G);
close(H);
};
@html=();
open(G, "+<$mfile") or die $!;
flock(G, 2);
while(<G>) {chomp; push(@html, $_); };
seek(G,0,0);
foreach(@html) {
print G "$_n";
if (/^<!-- insert -->/) { $_=""; last; };
$_="";
};
print G news_code($news_template, @cn);
foreach(@html) {
next if (!$_);
print G "$_n";
};
close(G);
};
sub newssort {
my @ca = split(/~/, $a);
my @cb = split(/~/, $b);
$cb[6] <=> $ca[6];
};
sub print_file {
if (($_[0]) && (-r $_[0])) {
open(FILE1, $_[0]) or die $!;
while (<FILE1>) {print;};
close(FILE1);};
};
weil sonst dürfte der newsscript ja auch nicht funktionieren.