#!/bin/perl
#use CGI qw(:standard);
#^ при запуске cgi.pm раскомментровать
require "values.pl";
$rec_stat="";
$user_site_shows=0;
$user_ban_shows=0;
$user_ban_id=0;
$shows_total=0;
$src=0;
$link=0;
$user_id=0;
$user_ban_st=0;


&readform;
#------------------------------------------------------------------------------
sub readform {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {$mode = 0}
	if ($ENV{'REQUEST_METHOD'} eq "GET") {$mode = 1}
	if ($mode == 0) {read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'})}
	if ($mode == 1) {$buffer = $ENV{'QUERY_STRING'}}
	@pairs = split(/&/, $buffer);
#  	if (@pairs[0] eq '') {&nothing;}
	foreach $pair (@pairs) 
                {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

                if ($name eq 'gif') 
                  {
                   $rcvd_gif = $value;
                  }
                if ($name eq 'uid') 
                  {
                   $rcvd_uid = $value;
                  }

                if ($name eq 'id') 
                  {
                   $rcvd_id = $value;
                   if ($rcvd_gif eq 'act') { &show_pic; }
                   &show;
                  }
	}
}

#------------------------------------------------------------------------------
sub show_pic {

# reading user file
open USER, "user.pl";
@user_records = <USER>;
close USER;
$count = int rand(@user_records);
@user_info = split(/\|\|/, @user_records[$count]);

foreach (@user_records) 
 {
  @user_info = split(/\|\|/, $_);
  $id2uri{@user_info[3]} = @user_info[2];
 }

# reading uri's file
open URI,"uri.db";
seek URI,0,0;
@uri_stat = stat URI; #7 - size
#$dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks
sysread URI, $uri_records,@uri_stat[7],0;
close URI;

for ($uri_pos=0;$uri_pos<@uri_stat[7];$uri_pos+=30) 
 {
  push @uri_records, (substr $uri_records, $uri_pos, 30);
 }
my $move_to = 0;
foreach (@uri_records) 
 {
 if ($rcvd_uid == substr $_,0,4) 
   {
    if ($rcvd_id == substr $_,14,4 ) 
     {$user_ban_shows = substr $_,24,6;
     $ttime = time;
     if (length $ttime == 9) {$ttime = '0'.$ttime;}
     ++$user_ban_shows;
     for ($i_rec=length($user_ban_shows);$i_rec<=10-length($user_ban_shows);$i_rec++) {$user_ban_shows = "0".$user_ban_shows;}
     $rec_stat = ((substr $_,0,4).$ttime.(substr $_,14,4).(substr $_,18,6).$user_ban_shows);
     open URI, "+<uri.db";
     seek URI,$move_to,0;
     syswrite URI,$rec_stat,30;
     close URI;
     print "Location: $id2uri{$rcvd_id}\n\n";
     exit;
     }
   }
  $move_to+=30;
 }

print "Location: $id2uri{'0000'}\n\n";
exit; 	

}
                                                 	
#------------------------------------------------------------------------------
sub check {
 if ($user_id == $rcvd_id) { return -2; }
 if ($user_site_shows == 0) { return -3; }
 if (($user_ban_shows+1)*100/$user_site_shows <= $comm) {
   if ($lastdate-time > 86400*$kill_day) { return 1; } #was -1
   else { if ($lastdate-time > 86400*$wait_day) { return 1; } #was 0 
          else { if ($user_id == $rcvd_id) { return -2; }
                 else { return 1; }
               }
        }
                                                     }
 else { return -4; }
}

#------------------------------------------------------------------------------
sub separ($) {

$ru = $_[0];
foreach (@uri_records) 
{
if ($ru == substr $_,14,6) 
 {       
 $user_ban_shows+=substr $_,24,6;
} 
}                         

foreach (@uri_records)
 {
if ($ru eq substr $_,0,4)
 {
 $user_site_shows+=substr $_,18,6;
 }
}                         
}

#------------------------------------------------------------------------------
sub show {
#$writeb=false;
#^

#%vs = cookie('present');
#if (%vs) { @cook=%vs;
#          ($a,$b)=split(/-/,@cook[0]);
#           foreach (sort keys %vs) {
#             if ($a != 'active')  { $writeb=true; }
#   }}
#
#
#$the_cookie = cookie(-name=>'present',
#		     -value=>'active',
#		     -expires=>'');
#print header(-cookie=>$the_cookie);
#^ при запуске cgi.pm раскомментировать последние 12 строчек
print "Content-type: text/html\n\n";
#^ при запуске cgi.pm закомментировать последнюю 1 строчку

#print header();
# reading uri's file
open URI,"uri.db";
seek URI,0,0;
@uri_stat = stat URI; #7 - size
#$dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks
sysread URI, $uri_records,@uri_stat[7],0;
close URI;

for ($uri_pos=0;$uri_pos<@uri_stat[7];$uri_pos+=30) 
 {
  push @uri_records, (substr $uri_records, $uri_pos, 30);
 }

# reading user file
open USER, "user.pl";
@user_records = <USER>;
close USER;
# начало исправления
while ($count ==0)
{srand;
$count = int rand(@user_records);}
# конец исправления

@user_info = split(/\|\|/, @user_records[$count]);

$user_id=@user_info[3];
for ($i_rec=length($user_id);$i_rec<=6-length($user_id);$i_rec++) {$user_id = "0".$user_id;}
for ($i_rec=length($rcvd_id);$i_rec<=6-length($rcvd_id);$i_rec++) {$rcvd_id = "0".$rcvd_id;}
$user_ban_id=$user_id;
$src=@user_info[4];
$link=$cgi_uri."show.cgi?gif=act&uid=$rcvd_id&id=$user_id";

######
&separ($user_id);

$chk_st = 0;
foreach (@user_records)
 {
 @tet=split(/\|\|/, $_);
 $user_id_t=@tet[3];
 if ($rcvd_id == $user_id_t) {
 $chk_st = 1;
   }
 }
if ($chk_st == 0){
   $user_id='0000';
   $rcvd_id='0000';
   $user_ban_id=$user_id;
   $src='banner.gif';
   $link=$cgi_uri."show.cgi?gif=act&uid=$rcvd_id&id=$user_id";
}

 $check_result = &check;

print "<html><meta charset=windows-1251>
<meta http-equiv=\"Pragma\" CONTENT=\"no-cache\">
<meta http-equiv=\"Cache-Control\" CONTENT=\"no-cache\">
<body>";

#if ($check_result == 0) {print '7 days left';}
#if ($check_result == -1) {print '30 days left';}

if ($check_result == -2) {#print 'dupe';
$link=$cgi_uri."show.cgi?gif=act&uid=$rcvd_id&id=0000";
$src='banner.gif';
$user_ban_id='0000';
$user_ban_shows=0;
$user_site_shows=0;
&separ('0000');
print "<a target=_blank href=\"$link\">
<img border=0 width=468 height=60 src=\"$img_uri$src\" alt=\"$alt\"></a>";
 }

if ($check_result == -3) {#print 'show nothing';
$link=$cgi_uri."show.cgi?gif=act&uid=$rcvd_id&id=0000";
$src='banner.gif';
$user_ban_id='0000';
$user_ban_shows=0;
$user_site_shows=0;
&separ('0000');
print "<a target=_blank href=\"$link\">
<img border=0 width=468 height=60 src=\"$img_uri$src\" alt=\"$alt\"></a>";
 }

if ($check_result == -4) {
$src='banner.gif';
$user_ban_id='0000';
$user_ban_shows=0;
$user_site_shows=0;
&separ('0000');
print "<a target=_blank href=\"$link\">
<img border=0 width=468 height=60 src=\"$img_uri$src\" alt=\"$alt\"></a>";
}
if ($check_result == 1) {
print "<a target=_blank href=\"$link\">
<img border=0 width=468 height=60 src=\"$img_uri$src\" alt=\"$alt\"></a>";
}
print "</body></html>";

#if (writeb)
#{ 
#^
$move_to = &make_stat;
open URI, "+<uri.db";
seek URI,$move_to,0;
syswrite URI,$rec_stat,30; 
close URI;
#}
#^

#print "\n<br>check result: $check_result";
#print "\n<br>seek: $move_to";
#print "\n<br>record: $rec_stat";
#print "\n<br>length: ".(length $rec_stat);
}

#------------------------------------------------------------------------------
sub make_stat{
$cur_pos = 0;
foreach (@uri_records) 
 {  
 if ($rcvd_id == substr $_,0,4) {
   if ($user_ban_id == substr $_,14,4) { 
     $user_site_shows = substr $_,18,6;
     $ttime = time;
     if (length $ttime == 9) {$ttime = '0'.$ttime;}
     ++$user_site_shows;
     for ($i_rec=length($user_site_shows);$i_rec<=10-length($user_site_shows);$i_rec++) {$user_site_shows = "0".$user_site_shows;}
     for ($i_rec=length($user_ban_shows);$i_rec<=10-length($user_ban_shows);$i_rec++) {$user_ban_shows = "0".$user_ban_shows;}

    $rec_stat = ($rcvd_id.$ttime.(substr $_,14,4).$user_site_shows.(substr $_,24,6));
     @rec_stat[0] = $rcvd_id;
     @rec_stat[1] = $ttime;
     @rec_stat[2] = substr $_,14,4;
     @rec_stat[3] = $user_site_shows;
     @rec_stat[4] = substr $_,24,6;
     return $cur_pos;
    }
  }
 $cur_pos+=30;
 }                                             

if ($cur_pos > 0) 
 {
     $user_site_shows = substr $_,18,6;
     $user_ban_shows=0;
     $ttime = time;
     if (length $ttime == 9) {$ttime = '0'.$ttime;}
     ++$user_site_shows;
     for ($i_rec=length($user_site_shows);$i_rec<=10-length($user_site_shows);$i_rec++) {$user_site_shows = "0".$user_site_shows;}
     for ($i_rec=length($user_ban_shows);$i_rec<=10-length($user_ban_shows);$i_rec++) {$user_ban_shows = "0".$user_ban_shows;}

     $rec_stat = ($rcvd_id.$ttime.$user_ban_id.$user_site_shows.$user_ban_shows);
     @rec_stat[0] = $rcvd_id;
     @rec_stat[1] = $ttime;
     @rec_stat[2] = substr $_,14,4;
     @rec_stat[3] = $user_site_shows;
     @rec_stat[4] = $user_ban_shows;
  return @uri_stat[7];
 } 
else 
 {
$user_site_shows = substr $_,18,6;
     $ttime = time;
     if (length $ttime == 9) {$ttime = '0'.$ttime;}
     ++$user_site_shows;
     for ($i_rec=length($user_site_shows);$i_rec<=10-length($user_site_shows);$i_rec++) {$user_site_shows = "0".$user_site_shows;}

     for ($i_rec=length($user_ban_shows);$i_rec<=10-length($user_ban_shows);$i_rec++) {$user_ban_shows = "0".$user_ban_shows;}

     $rec_stat = ($rcvd_id.$ttime.$user_ban_id.$user_site_shows.$user_ban_shows);
     @rec_stat[0] = $rcvd_id;
     @rec_stat[1] = $ttime;
     @rec_stat[2] = $user_ban_id;
     @rec_stat[3] = $user_site_shows;
     @rec_stat[4] = $user_ban_shows;
return 0;
 }

}
 
1;
