#!/usr/local/bin/perl
# Perl Location one your server
################
# SetUp Begin
$cgiurl   = "http://www.echate.com/esexo/friend.cgi"; # The URL of this CGI script.

$filehead = "/home2/echate/www/esexo/"; # The REAL PATH of database and text files. If you don't know, you have to contact your server.

$userfile      = "user";         # The file name of database. Do not need the extension name.
$userclickfile = "userclick";    # The number of clicks's database. Do not need the extension name.

$usertypefile  = "usertype.txt"; # The text of TYPE OF PERSON.
$userareafile  = "userarea.txt"; # The text of LOCATION.
$userwayfile   = "userway.txt";  # The text of INTEREST.

$mainpagefile  = "main.htm";   # MAIN PAGE
$addpagefile   = "add.htm";      # THE PAGE OF REGISTRATION
$clickpagefile = "click.htm";    # THE PAGE OF DETAIL
$managepagefile= "manage.htm";   # THE PAGE OF WEBMASTER TO CONTROL
$succpagefile  = "succ.htm";     # THE PAGE OF AFTER REGISTERED
$errorpagefile = "error.htm";    # THE PAGE OF ERROR MESSAGE

$allow_noname  = 0; # 1=Allows visitor to register without filling out the NAME field.  0=DISABLE IT!
$allow_notype  = 0; # 1=Allows visitor to register without filling out the TYPE OF PERSON field.  0=DISABLE IT!
$allow_noemail = 0; # 1=Allows visitor to register without filling out the E_MAIL field.  0=DISABLE IT!
$allow_nourl   = 1; # 1=Allows visitor to register without filling out the HOMEPAGE field.  0=DISABLE IT!
$allow_noage   = 0; # 1=Allows visitor to register without filling out the AGE field.  0=DISABLE IT!
$allow_nojob   = 0; # 1=Allows visitor to register without filling out the OCCUPATION field.  0=DISABLE IT!
$allow_noarea  = 0; # 1=Allows visitor to register without filling out the LOCATION field.  0=DISABLE IT!
$allow_noinfo  = 0; # 1=Allows visitor to register without filling out the INTRODUCTION field.  0=DISABLE IT!
$allow_noway   = 0; # 1=Allows visitor to register without filling out the INTEREST field.  0=DISABLE IT!

$allow_html    = 0;  # 1=allow user to use HTML 0=no 
$perpage       = 50; # MAXIUM INFORMATION PER PAGE

$manageperpage = 100; # MAXIUM INFORMATION PER PAGE (CONTROL MODE)
$time_miss     = +1 ; # TIME ZONE ADJUSTMENT

$manage{"super"}="terberus";  # ID & PASSWORD OF WEBMASTER

$masteremail  = "esexo\@echate.com"; # Your E-mail
$mailprg      = "/usr/sbin/sendmail -t";    # The path of E-mail system on your server. Contact your server if you don't know.
$fromemail    = "esexo\@echate.com"; # Your E-amil
$sendtomaster = 1;                          # Auto notify webmaster when new registration. 1=ENABLE 0=DISABLE

# End
#############
#$|=1;

&get_form;
&set_var;

$manage=0;
if (($manageid ne "") && ($managepassword ne "")) {
   if ($manage{$manageid} eq $managepassword) {
      $manageinfo="&manageid=$manageid&managepassword=$managepassword";
      $manage=1;
      $perpage=$manageperpage;
   }
}

$sss="";
$sss="$sss&usertypesss=$usertypesss" if ($usertypesss ne "");
$sss="$sss&useragesss1=$useragesss1" if ($useragesss1 ne "");
$sss="$sss&useragesss2=$useragesss2" if ($useragesss2 ne "");
$sss="$sss&userareasss=$userareasss" if ($userareasss ne "");
$sss="$sss&userwaysss=$userwaysss" if ($userwaysss ne "");

print "Content-type: text/html\n\n";
if ($job eq "add") {
   &friend_add;
   exit 0;
}
elsif ($job eq "makeadd") {
   &friend_makeadd;
   exit 0;
}
elsif ($job eq "click") {
   &friend_click;
   exit 0;
}
elsif ($job eq "manage") {
   &friend_manage;
   exit 0;
}
elsif (($job eq "erase") && ($manage==1)) {
   &friend_erase;
   exit 0;
}

if ($page eq "") {$page=1;}


@usertypefile=&readtxtfile("$filehead$usertypefile");
@userareafile=&readtxtfile("$filehead$userareafile");
@userwayfile=&readtxtfile("$filehead$userwayfile");

@mainpagefile=&readtxtfile("$filehead$mainpagefile");
foreach (@mainpagefile) {
   if ($_ =~ /<!--usertypesss-->/) {
      foreach $temp (@usertypefile) {
         $temp =~ s/\n//g;
         print "<option value='$temp'>$temp\n";
      }
   } 
   elsif ($_ =~ /<!--useragesss1-->/) {
      for($i=10;$i<=70;$i++) { 
         print "<option value='$i'>$i\n";
      }
   } 
   elsif ($_ =~ /<!--useragesss2-->/) {
      for($i=10;$i<=70;$i++) { 
         print "<option value='$i'>$i\n";
      }
   } 
   elsif ($_ =~ /<!--userareasss-->/) {
      foreach $temp (@userareafile) {
         $temp =~ s/\n//g;
         print "<option value='$temp'>$temp\n";
      }
   } 
   elsif ($_ =~ /<!--userwaysss-->/) {
      foreach $temp (@userwayfile) {
         $temp =~ s/\n//g;
         print "<option value='$temp'>$temp\n";
      }
   } 
   elsif ($_ =~ /<!--listhere-->/) {
      print "<form method=post action=$cgiurl?job=erase$sss&page=$page$manageinfo>\n" if ($manage==1);
      dbmopen(%TEMP,"$filehead$userfile",0666);
      %USERFILE=%TEMP;
      dbmclose(%TEMP);

      @userno=keys %USERFILE;
      @userno=sort @userno;
      $usertotal=$#userno+1;
      $usermatch=$#userno+1;
      if ($sss ne "") {
         @temp=();
         foreach $userno1 (@userno) {
            $check1=0;
            $check2=0; 
            ($mark,$username,$usertype,$useremail,$userurl,$userage,$userjob,$userarea,$userway,$userip,$datentimen,$markend,$last)=split(/¡ü/,$USERFILE{$userno1});
            if (($mark eq "start") && ($markend eq "end")) {
               if ($usertypesss ne "") {
                  $check1++;
                  if ($usertype eq $usertypesss) {
                     $check2++;
                  }
               } 
               if ($useragesss1 ne "") {
                  $check1++;
                  if ($userage>=$useragesss1) {
                     $check2++;
                  }
               } 
               if ($useragesss2 ne "") {
                  $check1++;
                  if ($userage<=$useragesss2) {
                     $check2++;
                  }
               } 
               if ($userareasss ne "") {
                  $check1++; 
                  if ($userarea eq $userareasss) {
                     $check2++;
                  }
               } 
               if ($userwaysss ne "") {
                  $check1++; 
                  if ($userway eq $userwaysss) {
                     $check2++;
                  }
               } 
               if ($check1==$check2) {
                  push(@temp,$userno1);
               }
            }
         }
         @userno=@temp;
         $usermatch=$#userno+1;
         print "<center><b>Felicitaciones... Se hallaron $usermatch aciertos!</b></center><p>\n"; 
      }
      splice(@userno,0,$#userno-$page*$perpage+1);
      splice(@userno,$#userno-($page-1)*$perpage+1,($page-1)*$perpage);

      dbmopen(%TEMP,"$filehead$userclickfile",0666);
      %USERCLICKFILE=%TEMP;
      dbmclose(%TEMP);

      if ($#userno>=0) {
         for ($i=$#userno;$i>=0;$i--) {
             $userno=$userno[$i];  
             if ($USERFILE{$userno}) {
                ($mark,$username,$usertype,$useremail,$userurl,$userage,$userjob,$userarea,$userway,$userip,$datentimen,$markend,$last)=split(/¡ü/,$USERFILE{$userno});
                $temp="";
                $temp="<input type=checkbox name='userno' value='$userno'>" if ($manage==1);
                print "$temp<font size=-1>$usertype</font><font size=+1><b><a href=$cgiurl?job=click&userno=$userno>$username</a></b></font>...<font size=-2><i>$userip $datentimen Visto: $USERCLICKFILE{$userno} Veces</i></font><br>\n";
             }
         }
      }
      print "<center><input type=submit value='DELETE'></center></form>\n" if ($manage==1);
   } 
   elsif ($_ =~ /<!--otherpagehere-->/) {
      $i=1;
      $j=$usermatch;
      while ($j>0) {
        print " ";
        print "<a href=$cgiurl?page=$i$sss$manageinfo>" if ($page != $i); 
        print "$i"; 
        print "</a>" if ($page != $i);
        $j=$j-$perpage; 
        $i++;
      }
   }
   elsif ($_ =~ /<!--totalrecordhere-->/) {
      print "$usertotal";
   }
   else {
      $_ =~ s/\$cgiurl/$cgiurl/g;
      $_ =~ s/\$masteremail/$masteremail/g;
      $_ =~ s/\$manageinfo/$manageinfo/g;
      print "$_";
   } 
}
exit 0;
##########
sub friend_add {
@usertypefile=&readtxtfile("$filehead$usertypefile");
@userareafile=&readtxtfile("$filehead$userareafile");
@userwayfile =&readtxtfile("$filehead$userwayfile");
@addpagefile =&readtxtfile("$filehead$addpagefile");

foreach (@addpagefile) {
   if ($_ =~ /<!--usertypehere-->/) {
      foreach $temp (@usertypefile) { 
         $temp =~ s/\n//g;
         print "<option value='$temp'>$temp\n";
      }
   }
   elsif ($_ =~ /<!--useragehere-->/) {
      for($i=10;$i<=70;$i++) { 
         print "<option value='$i'>$i\n";
      }
   }
   elsif ($_ =~ /<!--userareahere-->/) {
      foreach $temp (@userareafile) {
         $temp =~ s/\n//g; 
         print "<option value='$temp'>$temp\n";
      }
   }
   elsif ($_ =~ /<!--userwayhere-->/) {
      foreach $temp (@userwayfile) {
         $temp =~ s/\n//g; 
         print "<option value='$temp'>$temp\n";
      }
   }
   else {
      $_ =~ s/\$cgiurl/$cgiurl/g;
      $_ =~ s/\$masteremail/$masteremail/g;
      print "$_";
   }
}
}
##########
sub friend_click {
$check=0;
if ($userno ne "") {
   dbmopen(%USERFILE,"$filehead$userfile",0666);
   if ($USERFILE{$userno}) {
      ($mark,$username,$usertype,$useremail,$userurl,$userage,$userjob,$userarea,$userway,$userip,$datentimen,$markend,$last)=split(/¡ü/,$USERFILE{$userno});
      if (($mark eq "start") && ($markend eq "end")) {
         $check=1;
      } 
   } 
   dbmclose(%USERFILE);
}
if ($check==1) {
   dbmopen(%USERCLICKFILE,"$filehead$userclickfile",0666);
   if ($USERCLICKFILE{$userno}) {
      $USERCLICKFILE{$userno}++;
   }
   else {
      $USERCLICKFILE{$userno}=1;
   }
   dbmclose(%USERCLICKFILE);
}
else {
   &error("CANNOT FIND THIS NUMBER!");
}

open(USERINFOFILE,"$filehead$userno");
$userinfo=<USERINFOFILE>;
close(USERINFOFILE);

@clickpagefile=&readtxtfile("$filehead$clickpagefile");
foreach (@clickpagefile) {
   $_ =~ s/\$masteremail/$masteremail/g;
   $_ =~ s/\$username/$username/g;
   $_ =~ s/\$usertype/$usertype/g;
   $_ =~ s/\$useremail/$useremail/g;
   $_ =~ s/\$userurl/$userurl/g;
   $_ =~ s/\$userage/$userage/g;
   $_ =~ s/\$userjob/$userjob/g;
   $_ =~ s/\$userarea/$userarea/g;
   $_ =~ s/\$userinfo/$userinfo/g;
   $_ =~ s/\$userway/$userway/g;
   print "$_";
}
}
##########
sub friend_erase {
if ($userno ne "") {
   @userno=split(/¡±/,$userno);
   dbmopen(%USERFILE,"$filehead$userfile",0666);
   dbmopen(%USERCLICKFILE,"$filehead$userclickfile",0666);
   foreach (@userno) {
      if ($USERFILE{$_}) {
         delete $USERFILE{$_}; 
      } 
      if ($USERCLICKFILE{$_}) {
         delete $USERCLICKFILE{$_}; 
      } 
      $deletefile="$filehead$_";
      unlink $deletefile;
   }
   dbmclose(%USERFILE);
   dbmclose(%USERCLICKFILE);
}
&friend_succ(erase,"DATA DELETED!");
}
##########
sub friend_makeadd {
&checkempty($username ,"Debes colocar tu Nombre!") if ($allow_noname==0);
&checkempty($usertype ,"Debes colocar tu Tipo de Persona!") if ($allow_notype==0);
&checkempty($useremail,"Si no pones tu E-MAIL la vaina no sirve!") if ($allow_noemail==0);
&checkempty($userurl  ,"Entonces? pon tu URL porfa!") if ($allow_nourl==0);
&checkempty($userage  ,"Eeeeepale que flojera... pon tu edad!") if ($allow_noage==0);
&checkempty($userjob  ,"Deberías poner tu ocupación... osea!") if ($allow_nojob==0);
&checkempty($userarea ,"Que ladilla! no piensas poner la ciudad!") if ($allow_noarea==0);     
&checkempty($userinfo ,"Sería bueno si pones tu Presentación Personal!") if ($allow_noinfo==0);     
&checkempty($userway  ,"Tambien es Necesario que pongas tu interes!") if ($allow_noway==0);     

dbmopen(%USERFILE,"$filehead$userfile",0666);
$USERFILE{$newuserno}="start¡ü$username¡ü$usertype¡ü$useremail¡ü$userurl¡ü$userage¡ü$userjob¡ü$userarea¡ü$userway¡ü$userip¡ü$daten($timen)¡üend¡ü\n";
dbmclose(%USERFILE);

dbmopen(%USERCLICKFILE,"$filehead$userclickfile",0666);
$USERCLICKFILE{$newuserno}=1;
dbmclose(%USERCLICKFILE);

open(USERINFOFILE,">$filehead$newuserno");
print USERINFOFILE "$userinfo";
close(USERINFOFILE);

if ($sendtomaster==1) {
   open (OUTMAIL,"| $mailprg") || die "Mail system error";
   print OUTMAIL "To: $masteremail\n";
   print OUTMAIL "Subject: NOTICE...\n";
   print OUTMAIL "From: $fromemail\n";
   print OUTMAIL "======================================\n";
   print OUTMAIL "NAME: $username from $userip at $daten($timen)\n";
   print OUTMAIL "TYPE: $usertype\n";
   print OUTMAIL "E-MAIL: $useremail\n";
   print OUTMAIL "HOMEPAGE: $userurl\n";
   print OUTMAIL "AGE: $userage\n";
   print OUTMAIL "OCCUPATION: $userjob\n";
   print OUTMAIL "LOCATION: $userarea\n";
   $userinfo =~ s/<br>/\n/g;
   print OUTMAIL "INTRODUCTION: $userinfo\n";
   print OUTMAIL "INTEREST: $userway\n";
   print OUTMAIL "======================================\n";
   print OUTMAIL "$cgiurl\n";
   print OUTMAIL "======================================\n";
   print OUTMAIL "\n\n";
   close(OUTMAIL);
}

&friend_succ(makeadd,"REGISTERED!");
}
##########
sub friend_manage {
@managepagefile=&readtxtfile("$filehead$managepagefile");
foreach (@managepagefile) {
   $_ =~ s/\$cgiurl/$cgiurl/g;
   print "$_";
}
}
##########
sub friend_succ {
if ($_[0] =~ /erase/) {
   $targeturl="$cgiurl?page=$page$sss$manageinfo";
}
else {
   $targeturl="$cgiurl";
}
@succpagefile=&readtxtfile("$filehead$succpagefile");
foreach (@succpagefile) {
   $_ =~ s/\$targeturl/$targeturl/g;
   $_ =~ s/\$succmessage/$_[1]/g;
   print "$_";
}
}
##########
sub set_var {
$job            =&get_var('job'            ,'\n|¡ü');
$userno         =&get_var('userno'         ,'\n|¡ü');
$username       =&get_var('username'       ,'\n|¡ü');
$usertype       =&get_var('usertype'       ,'\n|¡ü');
$useremail      =&get_var('useremail'      ,'\n|¡ü');
$userurl        =&get_var('userurl'        ,'\n|¡ü');
$userage        =&get_var('userage'        ,'\n|¡ü');
$userjob        =&get_var('userjob'        ,'\n|¡ü');
$userarea       =&get_var('userarea'       ,'\n|¡ü');
$userinfo       =&get_var('userinfo'       ,'¡ü');
$userway        =&get_var('userway'        ,'\n|¡ü');

$usertypesss    =&get_var('usertypesss'    ,'\n|¡ü');
$useragesss1    =&get_var('useragesss1'    ,'\n|¡ü');
$useragesss2    =&get_var('useragesss2'    ,'\n|¡ü');
$userjobsss     =&get_var('userjobsss'     ,'\n|¡ü');
$userareasss    =&get_var('userareasss'    ,'\n|¡ü');
$userinfosss    =&get_var('userinfosss'    ,'¡ü');
$userwaysss     =&get_var('userwaysss'     ,'\n|¡ü');

$page           =&get_var('page'           ,'\n|¡ü');
$manageid       =&get_var('manageid'       ,'\n|"|<|>|\&|;| |\?|¡ü');
$managepassword =&get_var('managepassword' ,'\n|"|<|>|\&|;| |\?|¡ü');

$useremail="" if (!($useremail =~ /.*\@.*\..*/));
$userurl  ="" if (!($userurl   =~ /.*\:.*\..*/ ));
$userinfo =~ s/\n/<br>/g;

$userip=$ENV{'REMOTE_ADDR'};

($secn,$minn,$hourn,$dayn,$monn,$yearn,$weekn,$yeardayn,$isdst) = localtime(time+(3600*$time_miss));
$monn=$monn+1;
if ($monn<10)  {$monn="0$monn";}
if ($dayn<10)  {$dayn="0$dayn";}
if ($hourn<10) {$hourn="0$hourn";}
if ($minn<10)  {$minn="0$minn";}
if ($secn<10)  {$secn="0$secn";}
$daten="$yearn/$monn/$dayn";
$timen="$hourn\:$minn\:$secn";
$newuserno="$yearn$monn$dayn$hourn$minn$secn";
}

############
sub get_form {
@querys = split(/&/, $ENV{'QUERY_STRING'});
foreach (@querys) {
  ($name,$value) = split(/=/, $_);
  &setvaluetoform($name, $value); 
}

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach (@pairs) {
  ($name, $value) = split(/=/, $_);
  &setvaluetoform($name, $value); 
}
}
##########
sub setvaluetoform {
$name=$_[0];
$value=$_[1];
$name=&decode($name);
$name=&filterhtml($name);
$value=&decode($value);
$value=&filterhtml($value);
if ($FORM{$_[0]}) {$FORM{$_[0]}="$FORM{$_[0]}¡±$_[1]";}
else {$FORM{$_[0]}=$_[1];}
}
##########
sub decode {
local($return)=$_[0];
$return =~ tr/+/ /;
$return =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $return;
}
##########
sub filterhtml {
local($return)=$_[0];
$return =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
   $return =~ s/<([^>]|\n)*>//g;
   $return =~ s/<//g;
}
return $return;
}
#########
sub get_var {
local($return)="";
$return="$FORM{$_[0]}" if ($FORM{$_[0]});
$return=~ s/$_[1]//g;
return $return;
}
#########
sub readtxtfile {
open(READTXTFILE,"$_[0]");
@readtxtfile=<READTXTFILE>;
close(READTXTFILE);
return @readtxtfile;
}
#############
sub checkempty {
local($chkval)=$_[0];
$chkval =~ s/ |<br>|\n//g;
&error($_[1]) if ($chkval eq "");
}
##########
sub error {
@errorpagefile=&readtxtfile("$filehead$errorpagefile");
foreach (@errorpagefile) {
   $_ =~ s/\$errormessage/$_[0]/g;
   print "$_";
}
exit 0;
}

