#!/usr/bin/perl
############################################################
# FreeForum 2.1
# По всем вопросам можете обращаться algol@hotmail.ru
# Установка переменных:
# файл с записями- data.txt должен находится в той-же директории, что и скрипт
# если его нет, программа должна сама его создать, если уже есть такой- положите скрипт в поддиректорию
# будут глюки-пишите
#############################################################
$up = 1; #вверху новая запись (1) или внизу (0)
$date_command = "/bin/date"; #команда даты
$aemail = "you\@domian.com"; #ваш email (перед @ поставьте \)
$mailprog = "/usr/sbin/sendmail"; #программа sendmail
$entr =10; #кол-во записей на страницу
$entr2 =25;#кол-во заголовков на страницу
$name_color = "maroon"; # цвет имени пользователя
$answer_link_color = "blue"; # цвет фразы 'ответить на сообщение'
$enable_to_answer = "1"; # если хотите, чтобы пользователи могли отвечать, оставьте 1, если нет - 0

############################################################
use CGI qw(:standard);
$co = new CGI;
$date = `$date_command +"%B %d, %Y"`; chop($date);
$date ='00980';
if(param('action') eq 'add_new') {&add_new;}
if(param('action') eq 'add') {&add;}
if(param('action') eq 'show') {&show;}
if(param('action') eq 'reply') {&reply;}
if(param('action') eq 'reply_yes') {&reply_yes;}
if(param('action') eq 'title') {&title;}
if(param('action') eq 'titl_show') {&titl_show;}
&show;

sub titl_show{
open(DATA,"data.txt");
@data = <DATA>; $many = @data;
close(DATA);
&header;
print "<div align=\"center\"><center><table border=\"0\" width=\"650\" cellpadding=\"2\"><tr><td>",hr;
if ($up eq '1') {@data = reverse(@data);}
@g = split(/\|/,$data[param('y')]);
$a=param('y');
if ($g[0]) {
print "<b><font color=$name_color>$g[0]</font></b> ";
if($g[1] ne "") {print ", <a href=mailto:$g[1]>$g[1]</a> ";}
if($g[3] ne "") {print ", $g[3] ";}
@com = split(/\%\%/,$g[2]); 
$c = @com - 1;
print "<br><u><i>Сообщение:</u></i> $com[0]\n";
print "<ul>\n";
foreach $reply (@com[1..$c]) {print "<li>\n\&nbsp;\&nbsp;\&nbsp;$reply</li>\n";}
print "</ul>\n";
if ($enable_to_answer eq "1") {
print "<a href=forum.cgi?action=reply&m=$a\&typ=2><u><font
color=$answer_link_color>Ответить на это сообщение</font></u></a><br>";}
}
&end;
exit;
}



sub title{
open(DATA,"data.txt");
@data = <DATA>; $many = @data;
close(DATA);
&header;
if ($up eq '1') {@data = reverse(@data);}
$end = param('m') + $entr2 - 1;
$a = 0;
$a = param('m') if (param('m'));
&add;
print "<div align=\"center\"><center><table border=\"0\" width=\"650\" cellpadding=\"2\"><tr><td>",hr;
print h3('Заголовки сообщений'),"<ul>"; 

foreach $line (@data[param('m')..$end]) {
@g = split(/\|/,$line);
if ($g[0]) {
print "<li><b><font color=$name_color>$g[0]</font></b> ";
@com = split(/\%\%/,$g[2]); 
$com[0]=~s/<br>/ /g;
$com[0]=~m/^.{0,60}/;
print "<a href=\"forum.cgi?action=titl_show\&y=$a\"> $&</a></li>\n";
}
$a++;
}
print"</ul><hr>";
$pages = int($many / $entr2) + 1;
print "Страницы: ";
for($i=1; $i<=$pages; $i++) {
$m = $i * $entr2 - $entr2;
print "[<a href=forum.cgi?action=title&m=$m>$i</a>] ";}
&end;
exit;
}




sub show {
open(DATA,"data.txt");
@data = <DATA>; $many = @data;
close(DATA);

&header;

if ($up eq '1') {@data = reverse(@data);}
$end = param('m') + $entr - 1;
$a = 0;
$a = param('m') if (param('m')); 
&add;

print a({-href=>'forum.cgi?action=title'},'<h4>Показать заголовки сообщений</h4>');
print "<div align=\"center\"><center><table border=\"0\" width=\"650\" cellpadding=\"2\"><tr><td>",hr;

foreach $line (@data[param('m')..$end]) {
@g = split(/\|/,$line);
if ($g[0]) {
print "<b><font color=$name_color>$g[0]</font></b> ";
if($g[1] ne "") {print ", <a href=mailto:$g[1]>$g[1]</a> ";}
if($g[3] ne "") {print ", $g[3] ";}
if($g[4] ne "") {print ", $g[4] ";}
@com = split(/\%\%/,$g[2]); 
$c = @com - 1;
print "<br><u><i>Сообщение:</u></i> $com[0]\n";
print "<ul>\n";
foreach $reply (@com[1..$c]) {print "<li>\n&nbsp;&nbsp;&nbsp;$reply</li>\n";}
print "</ul>\n";
if ($enable_to_answer eq "1") {
print "<a href=forum.cgi?action=reply&m=$a><u><font
color=$answer_link_color><b>Ответить на это сообщение</b></font></u></a><br>";
}
print "<hr>";
}
$a++;
}
$pages = int($many / $entr) + 1;
print "Страницы: ";
for($i=1; $i<=$pages; $i++) {
$m = $i * $entr - $entr;
print "[<a href=forum.cgi?action=show&m=$m>$i</a>] ";
}

&end;
   exit;
}

sub add {
Delete('action');
print startform('POST',"forum.cgi"), hidden('action','add_new');

print "<table border=0 width=650 cellpadding=2 bgcolor=\"#C0C0C0\">\n";
print<<EOD;
  <tr><td width="286" rowspan="4" valign="top" align="center"><b>Добавьте Ваши вопросы, отзывы и замечания!</b><br>      
  <br><a href="http://www.commission-junction.com/track/track.dll?AID=462743\&PID=373927\&URL=http%3A%2F%2Fwww%2Ecj%2Ecom" target="_top">
  <img src="http://www.commission-junction.com/banners/tracker.exe?PID=373927\&AID=462743\&banner=462743%2Egif" width="88" height="31" alt="" border="0"></a>
  <br><br><a href="http://trampico.virtualave.net/">
  <img src="http://trampico.virtualave.net/banners/fw00.gif"  width="88" height="31" alt="Свободные возможности сети" border="0">
  <br></a></td>
EOD
print "<td width=100 align=\"right\"><b>Имя:</b></td><td width=\"186\">";
print textfield("name", '',"20"),"</td></tr>\n";
print "<tr><td width=\"100\" align=\"right\"><b>Город:</b></td><td width=\"200\">";
print textfield("city", '',"20"),"</td></tr>\n";
print "<tr><td align=\"right\"><b>Email:</b></td>\n";
print "	<td width=\"200\">",textfield("email", '',"20"),"</td></tr>\n";
print "<tr><td><b>Сообщение:</b></td>\n";
print "<td>", textarea ("comments",'',4,25),"</td></tr>\n";
print "<tr><td align=\"center\"><a href=\"http://trampico.virtualave.net/\">Форум предоставлен сайтом FreeWorld</a></td><td colspan=2 align=\"center\">",submit("Послать"),reset,"</td></tr></table></div>\n";
print endform;
}

sub add_new {
########
if (param('comments') eq "") {&error('Не были набраны комментарии');}
if (param('name') eq "") {&error('Не было набрано имя');}
########
$comm=param('comments');
$comm =~ s/\n/<br>/g;
open (DATA,">>data.txt") || die "Can't Open DATA: $!\n";
print DATA param('name'),"|", param('email'),"|$comm| ", param('city'),"|$date\n";
close(DATA);


   open (MAIL, "|$mailprog $aemail") || die "Can't open $mailprog!\n";
   print MAIL "Reply-to: ", param('email'), "\n";
   print MAIL "From: ", param('email'),"\n";
   print MAIL "Subject: New entry in your forum\n\n";
   print MAIL param('name')," <",param('email'),"> оставил(а) запись в forume!\n";
   print MAIL "  - $date\n";
   print MAIL "Сообщение:" ,param('comments'),"\n";
   close (MAIL);

#############
   print "Location: forum.cgi\n\n";
}

sub reply_yes {
########
if (param('comments') eq "") {&error('Не были набраны комментарии');}
if (param('name') eq "") {&error('Не было набрано имя');}
########
$com=param('comments');
$com =~ s/\n/<br>/g;
open (DATA,"+<data.txt");
@database_array = <DATA>;
if ($up eq '1') {@database_array = reverse(@database_array);}

$m = param('m');

$reply = "%%<font color=$name_color><b>".param('name')."</b></font> ";
if (param('email') ne "") {$reply.=", <a href=mailto:".param('email').">".param('email')."</a>";}
if (param('city') ne "") {$reply.=", ".param('city');}
$reply.= ", $date<br>Cообщение: $com<br>";
@members_array = split(/\|/,$database_array[$m]);
$members_array[2].="$reply";
$database_array[$m] = join("\|",@members_array);

seek (DATA, 0, 0);
truncate (DATA,0);
if ($up eq '1') {@database_array = reverse(@database_array);}
print DATA @database_array;
close (DATA);
##############
# Запись добавлена
$to=param('to');
   open (MAIL, "|$mailprog $to") || die "Can't open $mailprog!\n";
   print MAIL "Reply-to: $to\n";
   print MAIL "From: $to\n";
   print MAIL "Subject: Reply to yours message\n\n";
   print MAIL param('name')," <",param('email'),"> ответил(а) на ваше сообщение в гостевой книге!\n";
   print MAIL "  - $date\n";
   print MAIL "Ответ: ",param('comments'),"\n";
   close (MAIL);
   print "Location: forum.cgi\n\n";
}

sub reply {
open(DATA,"data.txt");
@data = <DATA>;
 if ($up eq '1') {@data = reverse(@data);}
close(DATA);
@all = split(/\|/,$data[param('m')]);
@com = split(/\%\%/,$all[2]);
&header;
$m=param('m');
Delete('action');
print startform('POST',"forum.cgi"), hidden('action','reply_yes'),hidden('to',"$all[1]"),
hidden('mes',"$com[0]"), hidden('m',"$m");
print "<table border=0 width=650 cellpadding=2 bgcolor=\"#C0C0C0\">\n";
print<<EOD;
  <tr><td width="286" rowspan="4" valign="top" align="center"><b>Добавьте Ваши вопросы, отзывы и замечания!</b><br>      
  <br><a href="http://www.commission-junction.com/track/track.dll?AID=462743\&PID=373927\&URL=http%3A%2F%2Fwww%2Ecj%2Ecom" target="_top">
  <img src="http://www.commission-junction.com/banners/tracker.exe?PID=373927\&AID=462743\&banner=462743%2Egif" width="88" height="31" alt="" border="0"></a>
  <br><br><a href="http://trampico.virtualave.net/">
  <img src="http://trampico.virtualave.net/banners/fw00.gif"  width="88" height="31" alt="Свободные возможности сети" border="0">
  <br></a></td>
EOD
print "<td width=100 align=\"right\"><b>Имя:</b></td><td width=\"186\">";
print textfield("name", '',"20"),"</td></tr>\n";
print "<tr><td width=\"100\" align=\"right\"><b>Город:</b></td><td width=\"200\">";
print textfield("city", '',"20"),"</td></tr>\n";
print "<tr><td align=\"right\"><b>Email:</b></td>\n";
print "	<td width=\"200\">",textfield("email", '',"20"),"</td></tr>\n";
print "<tr><td><b>Сообщение:</b></td>\n";
print "<td>", textarea ("comments",'',4,25),"</td></tr>\n";
print "<tr><td align=\"center\"><a href=\"http://trampico.virtualave.net/\">Форум предоставлен сайтом FreeWorld</a></td><td colspan=2 align=\"center\">",submit("Послать"),reset,"</td></tr></table></div>\n";
print endform;
print "<div align=\"center\"><center><table border=\"0\" width=\"650\" cellpadding=\"2\"><tr><td>",hr;

&end;
      exit;
}

######################
sub error {
my($string) = $_[0];
&header;
   print "$string\n";
&end;
exit;
}


sub header{
print $co->header(-type=>'text/html;');
print $co->start_html(-title=>'Free Forum', 
                      -bgColor=>'#ffffff',
                      -text=>'#003670',
                      -author=>'algol@hotmail.ru',
 -head=>'<style>{font-size: 10pt;  font-family: arial} TD { font-size: 10pt}</style>',

                      -meta=>{'keywords'=>'гостевая, книга, форум ',
                              'copyright'=>'copyright 2000. Tpamp\&Co'},
                      
                      ),"\n\n";
print<<EOF;
<center><div align="center">
<table border="0" width="650" cellspacing="0" cellpadding="0">
  <tr><td width=552><img border="0" src="http://trampico.virtualave.net/banners/myfor.gif" width="522" height="68"></td>
      <td width=98 align=right><a href="http://trampico.virtualave.net/"><img border="0" src="http://trampico.virtualave.net/banners/book.gif" width="96" height="72"></a></td>
  </tr></table></div>
EOF
}

sub end{
print "</td></tr><tr><td align=\"right\"><img border=\"0\" src=\"http://trampico.virtualave.net/banners/youbook.gif\" width=\"505\" height=\"47\">\n</td>
       </tr></table></center></div>";
print end_html; 
}

1;