#!/usr/bin/perl
############################################################
# HotLineForum 2.1
# По всем вопросам можете обращаться algol@hotmail.ru
# Установка переменных:
# В файле line.txt храняться данные тем обсуждения. К каждой записи отоноситься файл  data_0.txt [data_1.txt, data_2.txt...] и т.д.
# B файл nik.txt- модератор должен записать логины (ник) предоставляемые для включения новых тем
# После активизации темы использованный ник стирается
# файлы с записями- data_0.txt [data_1.txt, data_2.txt...]должны находится в той-же директории, что и скрипт
# если их нет, программа должна сама их создать.
# будут глюки-пишите
#############################################################
$admin="arteks\@ipc.ru";#адрес модератора
$up = 1; #вверху новая запись (1) или внизу (0)
$date_command = "/bin/date"; #команда даты
$aemail = "arteks\@ipc.ru"; #ваш 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);
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 'in') {&in;}##
if(param('action') eq 'reply_yes') {&reply_yes;}
if(param('action') eq 'add_title') {&add_title;}###
if(param('action') eq 'save_title') {&save_title;}###
&show;

sub in{
$v=param('team');
$file="data_".$v.".txt";
open(T,"line.txt");
@team=<T>;
close(T);
@tem=split(/\|/,$team[$v]);
open(DATA,"$file");
@data = <DATA>; $many = @data;
close(DATA);
###########
&header;
print "<font size=3><i>Тема- $tem[1], ведущий <a href=mailto:$tem[3]> $tem[2]</a></i></font>",br;
$pages = int($many / $entr) + 1;
####################
print "Страницы: ";
for($i=1; $i<=$pages; $i++) {
$m = $i * $entr - $entr;
print "[<a href=forum.cgi?action=in&team=$v&m=$m>$i</a>] ";
}
print"<hr>";
################

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

foreach $line (@data[param('m')..$end]) {
@g = split(/\|/,$line);
if ($g[0]) {
print "<u><i><b>Сообщение от:</b></u></i>\n";
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>$com[0]<br>";
if ($enable_to_answer eq "1") {
print "<a href=forum.cgi?action=reply&team=$v&m=$m&s=$a><u><font
color=$answer_link_color><b> Ответить на это сообщение</b></font></u></a>";
}
if($com[1]){
   print "<ul><a href=\"forum.cgi?action=reply&team=$v&m=$m&s=$a\"><u><i>Посмотреть ответы:</u></i></a>\n";
   #foreach $reply (@com[1..$c]) {print "<li>\n&nbsp;&nbsp;&nbsp;$reply</li>\n";}
   foreach $reply (@com[1..$c]) {
   $reply=~s/<br>/ /g;
   $reply=~s/<.*?>//g;
   $reply=~m/^.{0,60}/;
   print "<li>\n$&</li>\n";}
   print "</ul>\n";
  }
else{print "<br><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=in&team=$v&m=$m>$i</a>] ";
}
print hr;
&add;
print "<center><a href=forum.cgi><b>На главную страницу</b></a></center>";
&end;
exit;
}



sub add_title{
&header;
Delete('action');
Delete('team');
print'<center>',h3('Добавить новую тему обсуждения'),
      startform('post', 'forum.cgi'),hidden('action','save_title'),
      '<table width=300><tr><td>',
      'Название темы: </td><td>',textfield('name','','35'),
      '</td><tr><td>Email:</td><td>',textfield('email','','15'),
      '</td><tr><td>Зарегистрированный НИК:</td><td>',textfield('login','','15'),
      '</td><tr><td colspan=2 align=center>',submit, '</td></tr></table></center>', endform;
print "Для регистрации своего ника пишите модератору- ", a({-href=>"mailto:$admin"},$admin);
print "<center><a href=forum.cgi><b>На главную страницу</b></a></center>";
&end;
exit;
}

sub save_title{
open(NIK, "nik.txt");
@nik=<NIK>;
close(NIK);
$a=0;
          open(NIK, ">nik.txt");
foreach $l (@nik){
             chomp $l; 
             if($l eq param('login')){$r=1; $nik[$a]='';}
             else{print NIK "$l\n";}
             $a++;
             }
          close (NIK);
if($r==1){

          open(DATA,"line.txt");
          @data=<DATA>;
          $x=@data;
          open(DATA,">>line.txt");         
          print DATA "$x|",param('name'),"|",param('login'),"|",param('email'),"\n";
          close (DATA);
          open(NEW,">data_$x.txt") || print"Сервер не смог создать Ваш файл- обратитесь к модератору";
          close(NEW);
          chmod 0777, "data_$x.txt";
          print "Location: forum.cgi\n\n";
         }
else{
    &header;
    print h3('Ваш ник недействителен обращайтесь к модератору');
    &end;
    exit;
    }
}





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

&header;

print '<center>',h3('Темы для обсуждений'),'</center>';
foreach(@data){
             @team=split(/\|/,$_);
             print li(a({-href=>"forum.cgi?action=in&team=$team[0]"},$team[1]), "вeдущий темы- $team[2] (",a({-href=>"mailto:$team[3]"},$team[3]),")");
             }
print "<hr>";
print a({-href=>'forum.cgi?action=add_title'},'<center><b>Добавить тему для обсуждения</b></center>'),br;
&end;
   exit;
}








sub add {
Delete('action');
print startform('POST',"forum.cgi"), hidden('action','add_new'),hidden('team',"$v");
print "<center><table border=0 width=650 cellpadding=2  bgcolor=\"#C0C0C0\">\n";
print"<caption><b>Добавьте Ваше сообщение</b></caption>\n";
print "<tr><td width=\"250\" align=right><b>Имя: \n</b>";
print textfield("name", '',"20"),"</td>\n";
print "<td width=400 rowspan=3  align=right><b>Сообщение: </b><br>\n";
print  textarea ("comments",'',4,35),"</td></tr>\n";
print "<tr><td align=right><b>Город:</b>";
print textfield("city", '',"20"),"</td></tr>\n";
print "<tr><td align=right><b>Email: </b>\n";
print textfield("email", '',"20"),"</td></tr>\n";
print "<tr><td colspan=2 align=center>",submit," ",reset,"</td><tr>";
print "</table></center>",endform;
}

sub add_new {
########
if (param('comments') eq "") {&error('Не были набраны комментарии');}
if (param('name') eq "") {&error('Не было набрано имя');}
########
$v=param('team');
open (LIN,"line.txt");
@linex=<LIN>;
close(LIN);
@line=split(/\|/,$linex[$v]);
$aemail=$line[3]; chomp $aemail;
$file="data_".$v.".txt";
$comm=param('comments');
$comm =~ s/\n/<br>/g;
open (DATA,">>$file") || 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?action=in\&team=$v\n\n";
}



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

$s = param('s');
$m = param('m');
$reply = "%%$com<br>";
$reply.= "<i>Ответил:</i><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>";
@members_array = split(/\|/,$database_array[$s]);
$members_array[2].="$reply";
$database_array[$s] = 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('mes'),"\n\n";  
   print MAIL "Ответ: ",param('comments'),"\n";
   close (MAIL);
   print "Location: forum.cgi?action=in&team=$v&m=$m\n\n";
}

sub reply {
$v=param('team');
$file="data_".$v.".txt";
open(DATA,"$file");
@data = <DATA>;
 if ($up eq '1') {@data = reverse(@data);}
close(DATA);
#@all = split(/\|/,$data[param('m')]);
#@com = split(/\%\%/,$all[2]);
&header;

@g = split(/\|/,$data[param('s')]);
if ($g[0]) {
print "<u><i><b>Сообщение от:</b></u></i>\n";
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>$com[0]<br>";
}
print "<ul><u><i><b>Ответы:</b></u></i>\n";
foreach $reply (@com[1..$c]) {print "<li>\n&nbsp;&nbsp;&nbsp;$reply</li>\n";}
print "</ul>\n";
$m=param('m');
Delete('action');
print startform('POST',"forum.cgi"), hidden('action','reply_yes'),hidden('to',"$g[1]"),
hidden('mes',"$com[0]"), hidden('m',"$m"), hidden('s',"$s"), hidden('team',"$v");
print "<center><table border=0 width=650 cellpadding=2 bgcolor=\"#C0C0C0\">\n";
print"<caption><h2>Ответить на сообщение в форуме</h2></caption>\n";
print "<tr><td width=\"250\" align=right><b>Имя: \n</b>";
print textfield("name", '',"20"),"</td>\n";
print "<td width=400 rowspan=3  align=right><b>Сообщение: </b><br>\n";
print  textarea ("comments",'',4,35),"</td></tr>\n";
print "<tr><td align=right><b>Город:</b>";
print textfield("city", '',"20"),"</td></tr>\n";
print "<tr><td align=right><b>Email: </b>\n";
print textfield("email", '',"20"),"</td></tr>\n";
print "<tr><td colspan=2 align=center>",submit," ",reset,"</td><tr>";
print "</table><center>",endform, hr;

print "<center><a href=forum.cgi><b>На главную страницу</b></a></center>";
&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=>'HotLine 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;
<h2><i>HotLine Forum</i></h2>
<!--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 "<p align=\"right\"><img border=\"0\" src=\"http://trampico.virtualave.net/banners/youbook.gif\" width=\"505\" height=\"47\"></p>\n";
print end_html; 
}

1;