#!/usr/local/bin/perl   
# cinq.cgi
##
use Addtext ;

$cinqfile="../db/cinq.txt";
$host=$ENV{'REMOTE_ADDR'};
$title="Синквейны";

###

$forms_JS = (<< "FUNCT_JS") ;

function shortstr(str,nm){
if (str.length < nm) return '1';
return '';
}


function formOk(fm){

if (shortstr(fm.Aname.value,6)) {
alert ('Первая строка? ');
return false;
	}

if (shortstr(fm.Bname.value,6)) {
alert ('Вторая строка ?');
return false;
	}
if (shortstr(fm.Cname.value,5)) {
alert ('Третья строка?');
return false;
	}

if (shortstr(fm.Dname.value,8)) {
alert ('Четвертая строка ?');
return false;
	}

if (shortstr(fm.Ename.value,5)) {
alert ('Пятая строка');
return false;
	}

if (shortstr(fm.Author.value,5)) {
alert ('Автор синквейна? ');
return false;
	}

return true;
}

FUNCT_JS

#####
$Description = (<<"DESCIPT") ;
 <p class="form">
Синквейн это пятистрочная строфа. От французского "Сinq" - пять. 
Все синквейны Виртуальной Пустыни начинаются со слова Пустынь. Никакого другого слова там быть не может.<br>
Вторая строка уточняет географию места и здесь могут быть варианты и повторения.<br>
Третья строка - глаголы, действия. Здесь возможны любые варианты, но не повторения действий, которые были записаны ранее. Если слова "лежать", "загорать", "петь" уже записаны, то их дальнейшее использование запрещено.
<br>
Четвертая строка - прилагательные, описывающие чувства. Так же как и в третьей строке повторы запрещены. "милый", "славный" и "чудный" повториться не должны.
<br>
Пятая строка - описание. Повторы запрещены. 

</p>

DESCIPT

$Mistake = (<<"MIST") ;
<p class=form>
К сожалению в тексте своего синквейна Вы вторично использовали слова, которые уже записаны в нашей базе данных.  
</p>
MIST

$Mistake2 = (<<"MIST2") ;
<p class=form>
Не все строки были заполнены. 
</p>
MIST2
###

$Thanks = (<<"THANKS") ;
<p class=form>Спасибо за новый Пустынский Синквейн </p>
THANKS

####
$Form2 = (<< "FORM2");
  <table width="80%" border="0" cellpadding="0">
    <tr>
      <td class="form" width=300px >
<p class=form>Добавить новый Пустынский Синквейн</p></td>
      <td class="form" width=300px>
<form method="post" action="../cgi-bin/cinq.cgi" name="NC">
<input type="hidden" name="hiddenField" value="NotCinq">
 <input type="submit" name="Submit" value="Добавить" class="form">

</form>
  </td>
    </tr>
  </table>
FORM2

$Form3 = (<< "FORM3");
  <table width="80%" border="0" cellpadding="0">
    <tr>
      <td class="form" width=300px >
<p class=form>Почитать Пустынские Синквейны</p></td>
      <td class="form" width=300px>
<form method="post" action="../cgi-bin/cinq.cgi">
 <input type="submit"  class="form">

</form>
  </td>
    </tr>
  </table>
FORM3
 
$Form1 = (<< "FORM") ;
<form method="post" action="../cgi-bin/cinq.cgi" name="Cinq" onSubmit="return formOk(document.forms.Cinq)" >

  <table width="80%" border="0" cellpadding="0">
    <tr>
      <td class="form" width=300px >1. Одно двуслоговое слово</td>
      <td class="form">
        <input type="text" name="Aname" maxlength="20" size="15" value="Пустынь"
      </td>
    </tr>
    <tr>
      <td class="form" width=300px >2. Четыре слога (описывает предмет)</td>
      <td class="form">
        <input type="text" name="Bname" size="20" maxlength="50"
value="Мыс Лихутин"
>
      </td>
    </tr>
    <tr>
      <td class="form" width=300px >3. Шесть слогов(действие)</td>
      <td class="form">
        <input type="text" name="Cname" size="20" maxlength="50">
      </td>
    </tr>
    <tr>
      <td class="form" width=300px >4. Восемь слогов (чувства)</td>
      <td class="form">
        <input type="text" name="Dname" size="25" maxlength="40">
      </td>
    </tr>
    <tr>
      <td class="form" width=300px >5. Два слога (описание)</td>
      <td class="form">
        <input type="text" name="Ename" size="15" maxlength="50">
      </td>
    </tr>

   <tr>
      <td class="form" width=300px >Автор:</td>
      <td class="form">
        <input type="text" name="Author" size="15" maxlength="50">
      </td>
    </tr>
  </table>
  <p class="form"> 
    <input type="submit" name="Submit" value="Submit" class="form">
    <input type="reset" name="Reset" value="Reset" class="form">
  </p>
</form>

FORM
###
	# Проверка правильности заполнения формы и запись

if($ENV{'REQUEST_METHOD'} eq 'GET'){$query=$ENV{'QUERY_STRING'};}
elsif($ENV{'REQUEST_METHOD'} eq 'POST')
  {sysread(STDIN,$query,$ENV{'CONTENT_LENGTH'});}

if($query eq ''){ # Если запрос пустой, то грузим все синквейны и предложение добавить новый 

	add_hyper_link($cinqfile) 			;
	$txt = " $Form2 $txt  ";
	present_cinq() ;
	exit;
			}
if ( $query =~ /NotCinq/) {  # Eсли есть значение 
	$txt = " $Description $Form1   ";
	present_cinq() ;
	exit;
				}
  
@formfields=split(/&/,$query);
  foreach(@formfields)		{
   if(/^Aname=(.*)/){$Aname=urldecode($1);}
	if(/^Bname=(.*)/){$Bname=urldecode($1);}
	if(/^Cname=(.*)/){$Cname=urldecode($1);}
	if(/^Dname=(.*)/){$Dname=urldecode($1);}
	if(/^Ename=(.*)/){$Ename=urldecode($1);}
	if(/^Author=(.*)/){$Author=urldecode($1);}
					}
if (not defined ($Aname)  
or not  defined ($Bname) 
or not defined ($Cname) 
or not defined ($Dname)
or not  defined ($Ename) 
or not defined ($Author) ) 
	{
	$txt = " $Mistake2  $Form1  ";
	present_cinq() ;
	exit;
	}

open(DATA,"$cinqfile") || print_err("Cannot open $cinqfile $!");
undef $/;  # $nl still valid
my $OldData = <DATA>;
close(DATA);
$/ = $nl;
my $NewWords = " $Cname . $Dname . $Ename ";
$NewWords =~ s/\s\S\S?\S?\s+//g;
$NewWords  =~ s/\,//g;
$NewWords =~ s/\.//g;
$OldData  =~ s/\.//g;
$OldData  =~ s/\,//g;
my @NewWords = split(" ", $NewWords ) ;	
foreach(@NewWords) {
if ($OldData =~ m/$_/) {
	$txt = " $Mistake <b> $_ </b> $Form1 "  ;
	present_cinq() ;
	exit ; 
	}
	}
write_cinq()	;
$txt = " $Thanks $Form3" ;
present_cinq() ;

###	

sub write_cinq {	
$anket_str=join('#',($Aname,$Bname,$Cname,$Dname,$Ename,$Author,$host));
open(DATA,">>$cinqfile") || print_err("Cannot open $cinqfile $!");
#flock(DATA,2);  
print DATA "$anket_str\n";
#flock(DATA,8);
  close(DATA);
}


sub add_hyper_link {
my $file = $_[0] ;
open(DATA,$file) || print_err("Cannot open $file $!");
@AllData=reverse <DATA>;
close(DATA);

my @out_list = ();
foreach (@AllData) {
my ($Aname,$Bname,$Cname,$Dname,$Ename,$Author) = split('#');
push (@out_list,"<p class=form>$Aname <br> \n $Bname <br> \n $Cname <br> \n $Dname <br> \n $Ename <br> \n $Author <\/p>" );
			}
$txt = " @out_list ";
## Используется модуль AddText
$txt = preptext($txt);
$txt = illustr($txt,$datafile);
		}

sub present_cinq {
my %par;
$par{animals} = $Java_string ;
$par{js_function} = $forms_JS ;
$par{body} = " $txt ";
$par{title} = $title  ;

open (T, '../lib/template2.html') || die "template.html: $!";
undef $/;  # $nl still valid
$_ = <T>;
close (T);
s/\$(\w+)/defined($par{$1}) ? $par{$1} : ''/geo;
print;
$/ = $nl;
		}

sub urldecode{
 local($val)=@_;
 $val=~s/\+/ /g;
 $val=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
 return $val;
 }
sub print_err{
 print "Content-Type: text/html\n\n";
 print "<HTML><HEAD><TITLE>Error!!</TITLE></HEAD>";
 print "<BODY><CENTER><H1>@_</H1>";
 print "</BODY></HTML>";
 exit;
 }
