#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package fw::web;
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@ISA = qw(Exporter);

@EXPORT= qw(

see
http_redirect
upload_image
get_quoted
make_error
);
use fw::env;    


sub see
{
  print $cgi->header(-expires=>'-1d',-charset => 'utf-8');
}

#==============================================================================================================================================
# HTTP_REDIRECT
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# redirect to a given url
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# INPUT PARAMETERS 
#  0 : url to redirect to
# OUTPUT PARAMETERS
#  none
#==============================================================================================================================================
sub http_redirect
{
	 my $url = $_[0];	#url de redirection
	 
#	 print <<"EOH";
#			<script type="text/javascript">
#			function ffredirect(){ 
#				window.location="$url";
#			}
#			setTimeout("ffredirect()",10);
#			</script>
#EOH

print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$url\">";

}

#==============================================================================================================================================
# UPLOAD_IMAGE
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# get a file from HTTP header and store it in a file
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# INPUT PARAMETERS 
#  0 : name of the file (generally the value of the CGI field)
#  1 : path to store the picture
# OUTPUT PARAMETERS
#  0 : name of the created file (without path)
#  1 : size of the created file      
#==============================================================================================================================================
sub upload_image
{
	my $in_filename = $_[0] || "";	#Nom du fichier
	my $upload_path = $_[1];		#Chemin absolu du fichier
	my ($size, $buff, $bytes_read, $file_url);	#DÃÂÃÂfinition variables

	if ($in_filename eq "" || $in_filename =~ /(php|js|pl|asp|cgi|swf)$/) { return ""; }	#Si pas de fichier alors retour de rien
	
	my @splitted = split(/\./,$in_filename);	#DÃÂÃÂcoupage de la chaine et mise dans le tableau @splitted
	my $ext = lc($splitted[$#splitted]);	#Copie du dernier ÃÂÃÂlÃÂÃÂment --> extension du fichier
  my $filename = $splitted[0];
  $filename = clean_filename($filename);
  
  
  
	# build unique filename from current timestamp
	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 	#RÃÂÃÂcupÃÂÃÂration du temps actuel
	
  $year+=1900;	#Ajout de 1900 car la fonction localtime renvoit un nombre compris entre 0 et 99
	$mon++;			#Ajout de 1 car la fonction localtime renvoit un nombre compris entre 0 et 11
	
	my @chars = ( "A" .. "Z", "a" .. "z");	#DÃÂÃÂclaration d'un tableau contenant tous les caractÃÂÃÂres minuscules et majuscules entre A et Z
#	my $string = join("", @chars[ map { rand @chars } ( 1 .. 3 ) ]);	#RÃÂÃÂcupÃÂÃÂration de 3 caractÃÂÃÂres tirÃÂÃÂes au hasard dans le tableau @char

	$file_url = "$filename\_$year$mon$mday$hour$min$sec".".".$ext;	#ConcatÃÂÃÂnation pour formÃÂÃÂ le nom du fichier


	# add the target directory
	my $out_filename = $upload_path."/".$file_url;

    #print "[$out_filename]";

	# upload the file contained in the CGI buffer
	if (!open(WFD,">$out_filename"))
	{
		suicide("cannot create file $out_filename $!");	#Appel ÃÂÃÂ la fonction suicide
	}

	# $in_filename = "define::$in_filename";
	while ($bytes_read = read($in_filename,$buff,2096))	#Tant qu'on peut lire le fichier
	{
	    $size += $bytes_read;	#Ajout des bytes lu
	    binmode WFD;	#DÃÂÃÂfinition du mode d'enregistrement --> binaire
	    print WFD $buff;	#Enregistrement
	}
	
	close(WFD);	#Fermeture

     #   die($file_url." - ".$size);

#	if ((stat $out_filename)[7] <= 0)	#Test pour savoir si le tÃÂÃÂlÃÂÃÂchargement ne s'est pas bien passÃÂÃÂ
#	{
#	    unlink($out_filename);	#Suppression du fichier
#	    suicide("Could not upload file: $in_filename --> $out_filename / ".$cgi->cgi_error);	#Appel ÃÂÃÂ la fonction suicide
#	}

	return ($file_url,$size);	#Retourne le nom du fichier downloader sur le serveur ainsi que sa taille
}

#==============================================================================================================================================
# UPLOAD_FILE
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# alias of the "upload_image" function  
#==============================================================================================================================================
sub upload_file;
*upload_file = \&upload_image;	


#==============================================================================================================================================
# GET QUOTED
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# get a CGI param already "quoted" for use in SQL statements 
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# INPUT PARAMETERS 
#  0 : CGI parameter name
# OUTPUT PARAMETERS
#  0 : value of the parameter, with ' quoted
#==============================================================================================================================================
sub get_quoted
{
	my $var = $_[0];	
	my $val = $cgi->param($var);	
       if (ref($cgi->upload($var)) eq "IO") {
           return $cgi->upload($var);
       }
  
	my $utf8 = $_[1];
	if ($utf8 eq "utf8") {
  	  use Encode;
	    $val = decode("utf8",$val);
  }
	
	my $dontsanitize = $_[2];
  
  
  my $quote = $_[3] || 'y';

	if ($dontsanitize eq "dontsanitize") {
      $val = $val;
  } else {
      $val = sanitize_input($val);
  }
	
	if($quote eq 'y')
  {
	 $val =~ s/\'/\\\'/g;	#Traitement de la valeur
  }
  
  
   my @must_be_int_fields = ('lg','id','id_form','extlink');
   foreach my $must_be_int_field (@must_be_int_fields)
   {
       if ($var eq $must_be_int_field && $val !~ /^\d+$/ && $val ne "") 
       {
           #cas ou la valeur de id='id'
           if($var eq 'id' && $val ne 'id' && $val ne 'code')
           {
#               exit;
           }
       }  
   }
   
   my @must_be_alphanum_fields = ('token','token2','token3');
   foreach my $must_be_alphanum_field (@must_be_int_fields)
   {
       if ($var eq $must_be_alphanum_field && $val !~ /^\[A-Za-z0-9]+$/ && $val ne "") 
       {
#            exit;
       }  
   }
	
	 return $val;
}
#==============================================================================================================================================
# MAKE_ERROR
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# function to display a JS alert box and then going back in browser history
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# INPUT PARAMETERS 
#  0 : error message to display
#  1 : nof if CGI header need to be sent before JS
# OUTPUT PARAMETERS
#  none (exit the program)
#==============================================================================================================================================
sub make_error
{
	 my $msg = $_[0];
	 my $noh = $_[1] || "";
	 my $url = $_[2];
	 
	 $msg=~s/\"/\\\"/g;
	 
	 if ($noh eq "noh") {print $cgi->header();}
	 
	 if($url ne "")
	 {
  	 	print<<"EOH";
  		<script language="javascript">
     window.location = "$url";
     		</script>
EOH
      exit;
   }
	
	print<<"EOH";
		<script language="javascript">
		alert("$msg");
		history.go(-1);
		</script>
EOH
	exit;
}
