#!/usr/bin/perl

#########ПОСТОЯННЫЕ_НАСТРОЙКИ#########
$version = "v.2.0 FINAL";
$prog_name= "discuss.pl";
$admin_prog_name = "admindiscuss.pl";
$max_record_size = 7700;
$max_word_lenth = 50;
####ЗАДАЕМ_МЕСЯЦА_И_ХОРОШИЕ_СЛОВА######
@badwords = qw(pussy suck fuck asshole ebony sex adult);
@months = qw(Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь
Ноябрь Декабрь);
@days = qw(Вс Пн Вт Ср Чт Пт Сб);
$add = 0;
#####БЕРЕМ_ИЗ_ПАМЯТИ#####
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'});
}
elsif ($ENV{'REQUEST_METHOD'} eq "GET")
{
$bufer=$ENV{'QUERY_STRING'};
}
else {
&fatal_error;
}
###ВЗЯТОЕ_ПРЕОБРАЗОВЫВАЕМ###
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/\;/&#59;/g;
$value =~ s/\Ўь//g;
$value =~ s/\</&lt;/g;
$value =~ s/\>/&gt;/g;
$value =~ s/\\//g;
$value =~ s/\n/<br>/g;
$FORM{$name} = $value;
}
####ЗАДАЕМ_ЗНАЧЕНИЕ###
$action = $FORM{action};
$page = $FORM{page};
$user = $FORM{user};
$user =~ s/\///g;
$user =~ s/\.//g;
if ($user eq "") {
$user = "main";
}
######ЛИЧНЫЕ_НАСТРОЙКИ#####
require "gb_data/$user\.cfg";
######ФОРМИРУЕМ_HTML#######
if ($action eq "add"){&add}
open(GB, "gb_data/$user\.gbd") || die {&fatal_error};
@DATA=<GB>;
close (GB);
###########################
&html;
$allmess = @DATA;
$pageend=$page+$mess-1;
&forma;
&messperpage;
&show;
&messperpage;
print "<p><font color=\"$fnt_color\">Всего сообщений: <font color=\"$allert_color\">$allmess</font>\n";
print "<br><a href=\"$admin_prog_name?user=$user\">[admin control]</a></p></center>";
&htmlend;
exit;
#####################
sub add
{
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year+=1900;
if ($sec < 10) {
$sec = "0$sec";
}
if ($min < 10) {
$min = "0$min";
}
if ($hour < 10) {
$hour = "0$hour";
}
if ($mon < 10) {
$mon = "0$mon";
}
if ($mday < 10) {
$mday = "0$mday";
}
$pdata="$months[$mon] $mday, $year - $days[$wday] $hour:$min";
$name=$FORM{name};
if($name eq "")
{
&error;
}
$text=$FORM{text};
if($text eq "")
{
&error;
}
if($text eq "")
{
&error;
}
if ($FORM{mail} ne "")
{
$mail=$FORM{mail};
}
else
{
$mail="0";
}
$mail="0" if (!($mail =~ /.*\@.*\..*/));

if ($FORM{url} ne "http:\/\/")
{
$url=$FORM{url};
}
else
{
$url="0";
}
$url ="0" if (!($url =~ /.*\:.*\..*/ ));

if ($FORM{city} ne "")
{
$city=$FORM{city};
}
else
{
$city="0";
}
$ip = $ENV{'REMOTE_ADDR'};
#####ПРОВЕРКА_НА_ХОРОШИЕ_СЛОВА######
foreach (@badwords) {
$text =~ s/$_/****/ig;
$name =~ s/$_/****/ig;
$city =~ s/$_/****/ig;
}
#####ПРОВЕРКА_ДЛИНЫ_СООБЩЕНИЯ#######
$text_len = length ($text);
if ($text_len > $max_record_size)
{
&error;
}
#####ПРОВЕРКА_ДЛИНЫ_СЛОВА_В_СООБЩЕНИИ######
if ($text=~/\S{$max_word_lenth,}/)
{
&error;
}
######ЗАПИСЬ_В_ФАЙЛ_СООБЩЕНИЯ#######
$STRING = join("Ўь",$name,$mail,$url,$pdata,$city,$ip,$text,"0");
open(GB, "+<gb_data/$user\.gbd") || die {&fatal_error};
@DATA=<GB>;
@DATA=("$STRING\n",@DATA);
seek(GB,0,0);
print GB @DATA;
close (GB);
####ОТПРАВКА_ПИСЬМА_ВЕБМАСТЕРУ####
if ($sendtomaster==1) {
   open (OUTMAIL,"| $mailprog") || die "Error in sendmail program";
   print OUTMAIL "To: $masteremail\n";
   print OUTMAIL "Subject: message from - $user\n";
   print OUTMAIL "From: $fromemail\n\n";
   print OUTMAIL "http://gopal.ru/cgi-bin/discuss/discuss.pl?user=$user\n";
   print OUTMAIL "Name: $name ($ip)\n";
   print OUTMAIL "Date: $pdata\n";
   print OUTMAIL "City: $city\n" if ($useremail ne "");
   print OUTMAIL "E-Mail: $mail\n" if ($useremail ne "");
   print OUTMAIL "Url: $url\n" if ($userurl ne "");
   $text =~ s/<br>/\n/g;
   print OUTMAIL "$text\n";
   print OUTMAIL "___________________________________________________\n";
   print OUTMAIL "Служба отзывов сайта www.gopal.ru - Творчество души\n";
   close(OUTMAIL);
}
print "Location: $prog_name?user=$user\n\n";
exit;
}
######HTML-КОД_ФОРМЫ_СООБЩЕНИЯ######
sub forma
{
print <<FORMA;
<center>
<h3>$gb_name</h3>
Из-за спамеров возможность оставлять комментарии здесь отключена, вы можете прочитать только те, что были написаны до 2006 года.<br>Если вы хотите поделиться своими впечатлениями о прочитанном,
пожалуйста, заходите в новый раздел сайта <a href="http://gopal.ru/news/?p=288">http://gopal.ru/news/</a>, где есть защита от спама и большие возможности для общения!</center>
<br>
<div align="center">
<script type="text/javascript"><!--
google_ad_client = "pub-2457227176345753";
/* ForEpoc728x90 */
google_ad_slot = "4814550160";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>      
<br>
FORMA
print "\n";
}
####ПОКАЗ_СООБЩЕНИЯ######
sub show
{
print "<center><table bgcolor=\"$tbl_bg_color\" border=0 cellpadding=2 cellspacing=0>\n\n";
print "<tr><td colspan=2 bgcolor=\"black\"><hr color=\"$line_color\" size=0></td></tr>";
for($i=$page;$i<=$pageend;$i++)
{
($name,$mail,$url,$tim,$city,$ip,$text2,$answer) = split(/Ўь/,$DATA[$i]);
if($name ne "")
{
$num=$i + 1;
print "<tr><td align=left bgcolor=\"$tblh_bg_color\" height=\"20\"><font color=\"$allert_color\">$num\.</font> <font
color=\"$tblh_fnt_color\"><b>$name</b>\n";
if($city ne "0"){print " ($city)";}
print "</font><br></td>";
print "<td align=\"right\">";
if ($mail ne "0")
{
print "<a href=\"mailto:$mail?subject=Письмо от посетителя сайта $site_title\"><img src=\"$gifs_url/mail.gif\" width=18 height=18 border=0 alt=\"$mail\"></a>\n";
}
if($url ne "0")
{
print "<a href=\"$url\" target=\"_new\"><img src=\"$gifs_url/url.gif\" width=18 height=18 border=0 alt=\"$url\"></a>\n";
}
print "</td></tr>\n";
print "<tr><td colspan=2><font color=\"$fnt_color\">$text2</font></td></tr>\n";
print "<tr><td colspan=2 align=\"right\"><font color=\"$fnt_color\">Дата: $tim</font></td></tr>\n";
if($answer ne "0\n")
{
print "<tr><td colspan=2><font color=\"$adress_color\"><font color=\"$allert_color\">Ответ:</font> $answer</font></td></tr>\n";
}
print "<tr><td colspan=2 bgcolor=\"black\"><hr color=\"$line_color\" size=0></td></tr>\n\n";
}
}
print "</table></center>\n";
}
###########
sub messperpage
{
print "<center><table border=0 cellpadding=0 cellspacing=0>\n";
print "<tr><td align=\"center\"><font color=\"$fnt_color\">";
$all = int(($allmess-1) / $mess)+1;
print " &#0149; ";
for($i=1;$i <= $all;$i++)
{
$to=$i*$mess-$mess;
$a=$page/$mess+1;
$psst = $to+1;
$psend = $psst+($mess-1);
if($allmess == 0 || $allmess == 1)
{
print " <font color=\"$allert_color\">$allmess</font> &#0149; ";
}
elsif($a ne $i)
{

if($allmess == $psst)
{
print " <a href=$prog_name?user=$user&page=$to>$allmess</font></a> &#0149; ";
}
elsif ($psend > $allmess)
{
print " <a href=$prog_name?user=$user&page=$to>$psst-$allmess</a> &#0149; ";
}
else
{
print " <a href=$prog_name?user=$user&page=$to>$psst-$psend</a> &#0149; ";
}
}
elsif($allmess == $psst)
{
print " <font color=\"$allert_color\">$allmess</font> &#0149; ";
}
elsif ($psend > $allmess)
{
print " <font color=\"$allert_color\">$psst-$allmess</font> &#0149; ";
}
else
{
print " <font color=\"$allert_color\">$psst-$psend</font> &#0149; ";
}
}
print "</td></tr></table>";
}
#######ЗАГОЛОВОК_И_ОСНОВАНИЕ########
sub html
{
print "Content-type: text/html\n\n";
open (HEADER,"gb_data/$user\.hdr") || die {&fatal_error};
while (<HEADER>)
{print "$_";}
close (HEADER);
}
sub htmlend
{
# &sponsor;
open (SOF,"gb_data/$user\.ftr") || die {&fatal_error};
while (<SOF>)
{print "$_";}
close (SOF);
}
######ERRORS#####
sub fatal_error
{
print "Content-type: text/html\n\n";
print "<html><head><title>Внутренняя ошибка</title>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n";
print "</head>\n";
print "<body>\n";
print "<center><table border=0 cellpadding=0 cellspacing=0><tr><td>\n";
print "<center><font color=\"$fnt_color\"><H2>Ошибка</H2>\n";
print "<b>Внимание! Внутрення ошибка программы.</b></font></center><br>\n";
print "<li>Возможно, обсуждение с таким именем не существует</li>\n";
print "<li>Пожалуйста, сообщите web-мастеру! mailto:m-meister@yandex.ru</li>\n";
print "<li>May be you forget to set the following permissions (CHMOD for *NIX)</li>\n";
print "<br><hr color=\"$tblh_bg_color\" size=0>\n";
print "<p align=\"center\"><a
href=\"javascript:history.go(-1);\">BACK</a><br><br></p>\n";
print "</td></tr></table></center>\n";
print "</center></body></html>";
exit;
}
sub error
{
print "Content-type: text/html\n\n";
print "<html><head><title>Ошибка заполнения формы</title>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n";
print "</head>\n";
print "<body>\n";
print "<center><table border=0 cellpadding=0 cellspacing=0><tr><td>\n";
print "<center><font color=\"$fnt_color\"><H2>Ошибка</H2>\n";
print "<b>Внимание! Ошибка заполнения полей.</b></font></center><br>\n";
print "<li>Обязательно заполните \"Имя\" and \"Текст\" fields</li>\n";
print "<li>Может быть, Ваше сообщение длиннее, чем $max_record_size
символов.</font></li>";
print "<li>Возможно, длина слова в сообщении превышает $max_word_lenth
символов</font></li>";
print "<br><hr color=\"$tblh_bg_color\" size=0>\n";
print "<p align=\"center\"><a
href=\"javascript:history.go(-1);\">НАЗАД</a><br><br></p>\n";
print "</td></tr></table></center>\n";
print "</center></body></html>";
exit;
}