#!/usr/bin/perl

use strict;
use vars qw(%form %CONF $VERSION $DATA_DIR $FONT);
print "Content-type: text/html\n\n";		# On affiche l'en-tête HTML indispensable

##### CONFIG ###################################
$VERSION='2.1';   # 09/01/2005
$DATA_DIR='pg-recommander-data';
################################################
##############################################################################
# Ceci est un script CGI en Perl, réalisé par Sébastien Joncheray.           #
# Vous pouvez l'utiliser gratuitement, à la condition expresse et            #
# non négociable de ne pas le modifier du tout, ni de le réutiliser/recopier #
# en tout ou partie, revendre, louer, redistribuer, etc.                     #
# Un droit d'utilisation gratuite vous est accordé. Tous les autres droits   #
# sont réservés. Toute contrefacon fait l'objet de poursuites. Nous vous     #
# fournissons gratuitement ce script de qualité,merci de respecter le travail#
# de l'auteur. Pour nous contacter si besoin, voyez sur www.perl-gratuit.com #
##############################################################################
# IL EST PAR-DESSUS TOUT INTERDIT DE MODIFIER LES MENTIONS DE L'AUTEUR       #
# (COPYRIGHT, SITE DE L'AUTEUR,ETC). CELA EST LA CONTREPARTIE DE LA GRATUITé #
##############################################################################
# De nombreux autres scripts perl en francais, sont disponibles gratuitement #
# sur notre site : http://www.perl-gratuit.com                               #
#                                                                            #
# En cas de difficultés d'installations veuillez consultez les FAQs et autres#
# sections d'aide sur www.perl-gratuit.com, avant d'envoyer un E-Mail SVP... #
##############################################################################
# Tous droits de modification/distribution/vente strictement réservés        #
##############################################################################
%form=&receive_getpost;
&init;


if(($form{'email_dest'} ne '') || ($form{'email_visiteur'} ne '') || ($form{'nom_dest'} ne '') || ($form{'nom_visiteur'} ne '')) {			# Si envoi du formulaire
  ##################################
  #### Quelques vérifications : ####
  ##################################
  if ($form{'nom_visiteur'} eq '')   { &print_out("$CONF{thefont}Vous n'avez pas indiqué votre nom...</font>"); }
  if ($form{'email_visiteur'} eq '') { &print_out("$CONF{thefont}Vous n'avez pas indiqué votre adresse E-Mail...</font>"); }
  if ($form{'nom_dest'} eq '')       { &print_out("$CONF{thefont}Vous n'avez pas indiqué le nom du destinataire...</font>"); }
  if ($form{'email_dest'} eq '')     { &print_out("$CONF{thefont}Vous n'avez pas indiqué l'adresse E-Mail du destinataire...</font>"); }
  ## on vérifie les adresses E-Mail données
  if (!&verify_email($form{'email_visiteur'})) { &print_out("$CONF{thefont}Votre adresse E-Mail <b>$form{'email_visiteur'}</b> est incorrecte.</font>"); }
  if (!&verify_email($form{'email_dest'}))     { &print_out("$CONF{thefont}L'adresse E-Mail du destinataire <b>$form{'email_dest'}</b> est incorrecte.</font>"); }
  ## On vérifie que le message personnalisé n'est pas trop important:
  if (length($form{'message'}) > 2000) { &print_out("$CONF{thefont}Le message personnalisé que vous avez tapé est trop long (2000 caractères maxi).</font>"); }
  $form{'message'}=~ s/\r\n/\n/g;

  #### Envoi Email au destinataire          ####
  if (length($form{'message'}) > 5) {		# si message perso, on l'ajoute
    $CONF{'MESSAGE_DEST'}.="\n\nMESSAGE AJOUTE PAR [nom_visiteur]:\n".('-' x 30)."\n$form{'message'}\n";
  }
  &send_email($CONF{'EMAIL_WEBMASTER'},$form{'email_dest'},'Site recommandé',&remplir_template($CONF{'MESSAGE_DEST'}));

  ### Envoi confirmation visiteur si besoin  ###
  if ($CONF{'NOTIFY_VISITEUR'} == 1) {
    &send_email($CONF{'EMAIL_WEBMASTER'},$form{'email_visiteur'},'Site recommandé',&remplir_template($CONF{'MESSAGE_VISITEUR'}));
  }

  ### Envoi notification webmaster si besoin ###
  if ($CONF{'NOTIFY_WEBMASTER'} == 1) {
    &send_email($CONF{'EMAIL_WEBMASTER'},$CONF{'EMAIL_WEBMASTER'},'[PG-RECOMMANDER]',"
    Ceci est un E-Mail automatique de PG-RECOMMANDER pour vous informer que
    $form{'nom_visiteur'} ($form{'email_visiteur'})
    a recommandé votre site à :
    $form{'nom_dest'} ($form{'email_dest'})\n
    Adresses sauvegardées sans doublon, stats mises à jour.\n
    Fin du message.");
  }

  #### SAUVEGARDE INFOS VISITEUR            ####
  {
    my $buf=quotemeta($form{'email_visiteur'});
    if (open(COLLVRW,"+<$DATA_DIR/collecte_visiteur.dat")) {
      flock(COLLVRW,2);
      seek(COLLVRW,0,0);
      if ( scalar(grep(/^$buf\|/,<COLLVRW>)) == 0) { # si email pas encore dans la liste...
        seek(COLLVRW,0,2);
        print COLLVRW ($form{'email_visiteur'}.'|'.$form{'nom_visiteur'}."\n");
      }
      close (COLLVRW);
    }
  }

  #### SAUVEGARDE INFOS DESTINATAIRE        ####
  {
    my $buf=quotemeta($form{'email_dest'});
    if (open(COLLDRW,"+<$DATA_DIR/collecte_dest.dat")) {
      flock(COLLDRW,2);
      seek(COLLDRW,0,0);
      if ( scalar(grep(/^$buf\|/,<COLLDRW>)) == 0) { # si email pas encore dans la liste...
        seek(COLLDRW,0,2);
        print COLLDRW ($form{'email_dest'}.'|'.$form{'nom_dest'}."\n");
      }
      close (COLLDRW);
    }
  }

  #### SAUVEGARDE STATS                     ####
  $ENV{'HTTP_REFERER'}=~ s/\?.*$//g;
  if (($ENV{'HTTP_REFERER'} ne '') && (length($ENV{'HTTP_REFERER'}) < 200)) {
    $ENV{'HTTP_REFERER'}=~ s/\t+//gs;		# on enlève les tabulations éventuelles car on utilise \t comme séparateur
    my %stats=();
    
    if (open(STATRW,"+<$DATA_DIR/stats.dat")) {
      flock(STATRW,2);
      ## on lit les données existantes
      while(<STATRW>) {
        chomp($_);
        if ($_=~ /^([^\t]+)\t(\d+)$/) { $stats{"$1"}+=$2; }
      }
      $stats{$ENV{'HTTP_REFERER'}}+=1;
      # Sauvegarde
      seek(STATRW,0,0);
      while ( ($a,$b)=each %stats) { print STATRW "$a\t$b\n";  }
      truncate(STATRW,tell(STATRW));
      close (STATRW);
    }
  }

  &print_out("<p>$CONF{thefont}
             <b>Merci $form{'nom_visiteur'} !</b><br>
             &nbsp;<br>
             Un E-Mail vient d'être envoyé à $form{'nom_dest'} ($form{'email_dest'}) de votre part
             pour recommander ce site, ainsi que vous l'avez demandé.<br>
             &nbsp;<br>
             <a href=\"javascript:history.go(".($ENV{'HTTP_REFERER'}=~ /pg-recommander\.pl/ ? '-2' : '-1').")\">RETOUR</a>
             </font></p>");


} else {                                        # Si le CGI a été appelé sans paramètres, on affiche juste le formulaire
  &print_out($CONF{'theform'});
}


1;
################### FIN ! ######################
################################################


################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub receive_getpost {
# 2002-09-20
my (%postdata,$data,$pair);

  $data='';
  if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    my $len=$ENV{'CONTENT_LENGTH'};
    if (read(STDIN,$data,$len) != $len) {print ("<H1>error reading post data </H1>"); die("Error reading 'POST' data\n"); }
  } elsif ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $data=$ENV{'QUERY_STRING'};
  }

  foreach $pair (split('&',$data)) {
    my ($name,$value)=split('=',$pair);
    $name=~ tr/\0//d;  $value=~ tr/\0//d;
    $name =~ tr/+/ /; $name =~ s/%([0-9a-fA-F]{2})/chr hex($1)/ge;
    $value=~ tr/+/ /; $value=~ s/%([0-9a-fA-F]{2})/chr hex($1)/ge;
    $postdata{$name}=$value;
  }
  return %postdata;
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub print_out {
my ($msg)=@_;
## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessous, vous ne #
## respectez pas les conditions d'utilisation gratuite de ce programme, et #
## vous vous en servez de manière illégale ! Merci de respecter le travail #
## de l'auteur !        Merci de votre compréhension.                      #
my $out=$CONF{'TEMPLATE_STD'} || (print "Le modèle d'affichage aux visiteurs est absent.<br>Veuillez vous rendre dans l'administration, section de paramétrage : vérifiez et validez la configuration SVP." and exit(0));
$out=~ s/\[message\]/$msg/gs || (print "Le modèle d'affichage aux visiteurs ne contient pas le tag spécial <b>[message]</b><br>Veuillez vous rendre dans l'administration, section de paramétrage : vérifiez et validez la configuration SVP." and exit(0));print "$out<p>&nbsp;</p><center><i>$FONT Script CGI Perl disponible sur <a href=\"http://www.perl-gratuit.com/\" target=\"_blank\">Perl-Gratuit.com</a></i></center>";exit(0);
## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessus, vous ne  #
## respectez pas les conditions d'utilisation gratuite de ce programme, et #
## vous vous en servez de manière illégale ! Merci de respecter le travail #
## de l'auteur.         Merci de votre compréhension.                      #
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub formfield_encode {
# 27/01/2002
my ($s)=@_;
  $s=~ s/&/&amp;/gso;
  $s=~ s/</&lt;/gso;
  $s=~ s/>/&gt;/gso;
  $s=~ s/"/&quot;/gso;
  $s;
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub verify_email {
# 29-06-2002
my ($email)=@_;

  if ($email eq '') { return(0);}
  if ( ($email =~ /(\s)|(@.*@)|(\.\.)|(@\.)|(^\.)/) || 
      (($email !~ /^[a-zA-Z0-9\-\_\.]+\@localhost$/) && 
       ($email !~ /^[a-zA-Z0-9\-\_\.]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/)) ) {
    return(0);
  } else {
    return(1);
  }
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub send_email {                                # Sous-programme pour envoyer un E-Mail
  my ($from,$to,$subject,$message)=@_;          # Récupération des paramètres du mail à envoyer
  $from=~ s/\s/ /gs;    # anti-spam
  $to=~ s/\s/ /gs;      # anti-spam
  $subject=~ s/\s/ /gs; # anti-spam
  if ($^O=~ /mswin/i) { print "<hr><PRE>$message</PRE><b>Ce script n'est pas fait pour fonctionner sur serveur windows! mail non envoyé!</b><hr>" and return;}
  open (MAIL, "|$CONF{'MAILPROG'} -t -oi -oem");# Appel du programme sendmail (PIPE)
  print MAIL ("To: $to\n");
  print MAIL ("From: $from\n");
  print MAIL ("Subject: $subject\n\n");
  print MAIL ("$message");
  close (MAIL);                                 # On referme le canal de communication avec sendmail, et le mail part...
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub remplir_template {
my ($msg)=@_;
  ## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessous, vous ne #
  ## respectez pas les conditions d'utilisation gratuite de ce programme, et #
  ## vous vous en servez de manière illégale ! Merci de respecter le travail #
  ## de l'auteur ! Si vous souhaitez modifier ces lignes, il vous faudra     #
  ## aquérir une licence payante.     Merci de votre compréhension.          #
  $msg=~ s/\[email_dest\]/$form{email_dest}/gs;
  $msg=~ s/\[email_visiteur\]/$form{email_visiteur}/gs;
  $msg=~ s/\[nom_dest\]/$form{nom_dest}/gs;
  $msg=~ s/\[nom_visiteur\]/$form{nom_visiteur}/gs;
  $msg.="\n\n\n".'_' x 46 ."\nPG-RECOMMANDER. Script CGI Perl de recommandation\ndisponible sur http://www.perl-gratuit.com \n";
  return ($msg);
  ## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessus, vous ne  #
  ## respectez pas les conditions d'utilisation gratuite de ce programme, et #
  ## vous vous en servez de manière illégale ! Merci de respecter le travail #
  ## de l'auteur ! Si vous souhaitez modifier ces lignes, il vous faudra     #
  ## aquérir une licence payante.     Merci de votre compréhension.          #
}
################################################










################################################
#######                                  #######
#######          ADMINISTRATION          #######
#######                                  #######
################################################
sub init {

  %CONF=();
  $CONF{'CGI_NAME'}='PG-Recommander';           # Nom du CGI: NE PAS CHANGER SINON ERREURS...(noms images)
  $CONF{'CGI_DESC'}="Recommandation de votre site";  # Description du CGI: NE PAS CHANGER SINON ERREURS...
  $CONF{'IMGCGI_URL'}='http://img-scripts.perl-gratuit.com';
  $CONF{'SERVER_NAME'}=($ENV{'SERVER_NAME'} || $ENV{'HTTP_HOST'});
  $CONF{'CGI_URL'}=($ENV{'REQUEST_URI'} || $ENV{'SCRIPT_NAME'});
  $CONF{'CGI_URL'}=~ s/\?.*//gs;                
  $CONF{'CGI0_URL'}="http://".$CONF{'SERVER_NAME'}.$CONF{'CGI_URL'}; # URL complète, à utiliser pour visiteurs only (valeur par défaut)
  
  $FONT="<font face=\"Arial\" size=\"2\">";


  ## Vérif que le répertoire des données existe ##
  if (! -e "$DATA_DIR") {
    &msg_fin("ERREUR !","Pour faire fonctionner ce CGI, il vous faut créer, dans le répertoire où se trouve
                ce script, le sous-répertoire <b>$DATA_DIR</b><br>
                N'oubliez pas de lui attribuer CHMOD 777 (tous droits de lecture,écriture,éxécution)
                si votre serveur est de type Unix.<br>
		Pour plus d'informations sur 'CHMOD', voyez sur notre site dans les fiches pratiques/FAQ.");
  }

  ## Vérif que le fichier de configuration existe ##
  if (! -e "$DATA_DIR/config.dat") {
    open(TESTW,">$DATA_DIR/config.dat") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/config.dat</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    close(TESTW);
    eval{ chmod(0777,"$DATA_DIR/config.dat");};
    &msg_fin("Auto-installation",qq|
            <p align="center"><font face="Arial" size="3" color="#800000"><b>Bienvenue dans l'auto-installation de &quot;$CONF{'CGI_NAME'}&quot; !</b></font></p>
            <blockquote><p align="justify">$FONT Vous éxécutez ce script CGI Perl pour la première fois.
             Afin de faciliter la mise en place de ce script sur votre site, l'installation-configuration
             est guidée et automatisée par étapes successives. Un fichier de configuration va être créé,
             un choix de mot de passe administrateur vous sera demandé, puis une page de choix de configuration
             vous sera présentée. Nous vous conseillons fortement ensuite de consulter la section de documentation
             inclue.<br>&nbsp;<br>
             Toute cette procédure vous permet une mise en place aisée, sans besoin d'intervenir manuellement
             dans les fichiers et répertoires de données de ce script.</font></p></blockquote>
            <p align="center">$FONT<i>Veuillez maintenant actualiser cette page pour continuer SVP...<br>
              (cliquez sur le bouton &quot;Actualiser&quot; de votre navigateur)</i></font></p>|);
  }
  ## Vérif que le fichier mot de passe existe ##
  if (! -e "$DATA_DIR/passwd.dat") {
    open(TESTW,">$DATA_DIR/passwd.dat") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/passwd.dat</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    close(TESTW);
    eval{ chmod(0777,"$DATA_DIR/passwd.dat");};
    &msg_fin("Auto-installation",qq|
            <p align="center"><font face="Arial" size="3" color="#800000"><b>Conditions d'utilisation gratuite :</b></font></p>
            <blockquote><p align="justify">$FONT Au bas des pages générées par ce script vous verrez un copyright
             et la mention de l'auteur (nom et lien vers notre site).<br>
             Un droit d'utilisation gratuite de ce script CGI Perl vous est accordé à la condition expresse
             de ne pas le modifier du tout (y compris et tout particulièrement ces copyrights et mentions de
             l'auteur), ni de le réutiliser/recopier en tout ou partie, revendre, louer, redistribuer, etc.
             Tous les droits autres que l'utilisation gratuite sont réservés (nous contacter au besoin).<br>&nbsp;<br>
             Tout simplement, merci de respecter le travail de l'auteur afin que nous puissions continuer
             à vous proposer de tels scripts.</font></p></blockquote>
            <p align="center">$FONT<i>Veuillez maintenant actualiser cette page pour continuer SVP...<br>
              (cliquez sur le bouton &quot;Actualiser&quot; de votre navigateur)</i></font></p>|);
    
  }
  ## Vérif que le répertoire des données est protégé ##
  if (!-e "$DATA_DIR/.htaccess") {
    open(HTW,">$DATA_DIR/.htaccess") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/.htaccess</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    print HTW "<Limit GET POST>\norder deny,allow\ndeny from all\n</Limit>\n";
    close(HTW);
    eval{ chmod(0666,"$DATA_DIR/.htaccess");};
    &msg_fin("AUTO-PROTECTION DES DONNEES",qq|
            <p align="center"><font face="Arial" size="3" color="#800000"><b>Sécurité de votre répertoire des données</b></font></p>
            <blockquote><p align="justify">$FONT Certains serveurs peu ou mal sécurisés permettent l'accès,
             le listing et la consultation des fichiers à l'intérieur de la section &quot;cgi-bin&quot; des sites
             hébergés.<br>&nbsp;<br>
             Afin d'empêcher tout accès par la navigateur dans votre répertoire des données <b>$DATA_DIR</b>
             un fichier spécial &quot;.htaccess&quot; vient d'être automatiquement créé avec les
             directives-serveurs adéquates.<br>&nbsp;<br>
             Selon votre serveur, il se peut que vous ne puissiez pas voir le .htaccess par FTP. Dans ce cas,
             consultez la page d'informations correspondante dans la section
             <a href="http://www.perl-gratuit.com/fiches/" target="_blank"><b>Fiches Pratiques</b></a> de
             notre site.</font></p></blockquote>
            <p align="center">$FONT<i>Veuillez maintenant actualiser cette page pour continuer SVP...<br>
              (cliquez sur le bouton &quot;Actualiser&quot; de votre navigateur)</i></font></p>|);
  }
  ## Chargement configuration
  open (CONFR,"$DATA_DIR/config.dat") || &msg_fin("ERREUR !", "Impossible de lire le fichier <b>$DATA_DIR/config.dat</b>: $!");
  eval{flock(CONFR,2);};
  while (<CONFR>) {
    chomp($_);
    if ( ($_ ne '') && ($_!~ /^#/) && ($_=~ /^([^\s]+)\s+(.*)/) ) {
      $CONF{"$1"}="$2";
      $CONF{"$1"}=~ s/\|\\n\|/\n/gs;
    }
  }
  close (CONFR);
  ## Chargement mot de passe:
  open (PASSR,"$DATA_DIR/passwd.dat") || (&msg_fin("ERREUR !","Impossible de lire le fichier <b>$DATA_DIR/passwd.dat</b>: $!"));
  $CONF{'CPASSWD'}=<PASSR>;
  close(PASSR);
  chomp($CONF{'CPASSWD'});
  ## Vérif mot de passe fixé
  if ($CONF{'CPASSWD'} eq '') {  (($form{'ORDadmin_changepass_do'} eq '') && (&admin_changepass) ) || (&admin_changepass_do); }
  ## OPTIONNAL STUFF :
  if (! -e "$DATA_DIR/collecte_visiteur.dat") {
    open(BUF1,">$DATA_DIR/collecte_visiteur.dat") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/collecte_visiteur.dat</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    close(BUF1);
    eval{ chmod(0777,"$DATA_DIR/collecte_visiteur.dat");};
  }
  if (! -e "$DATA_DIR/collecte_dest.dat") {
    open(BUF2,">$DATA_DIR/collecte_dest.dat") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/collecte_dest.dat</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    close(BUF2);
    eval{ chmod(0777,"$DATA_DIR/collecte_dest.dat");};
  }
  if (! -e "$DATA_DIR/stats.dat") {
    open(BUF3,">$DATA_DIR/stats.dat") || (&msg_fin("ERREUR !","Impossible de créer le fichier <b>$DATA_DIR/stats.dat</b> : $!<br> Vérifiez le CHMOD 777 du répertoire <b>$DATA_DIR</b>"));
    close(BUF3);
    eval{ chmod(0777,"$DATA_DIR/stats.dat");};
  }
  $CONF{'thefont'}="<font face=\"$CONF{FONT_FACE}\" size=\"$CONF{FONT_SIZE}\" color=\"$CONF{FONT_COLOR}\">";
  $CONF{'theform'}=qq|
  <form method="POST" action="$CONF{CGI0_URL}">
  <div align="center"><center>
  <table border="0" cellpadding="2" cellspacing="0" bgcolor="#DDDDDD">
    <tr>
      <td align="center" width="50%"><font face="Verdana, Arial" size="1"><b>Votre nom</b></font><br>
       <input type="text" name="nom_visiteur" size="20"></td>
      <td align="center" width="50%"><font face="Verdana, Arial" size="1"><b>Votre E-Mail</b></font><br>
       <input type="text" name="email_visiteur" size="20"></td>
    </tr> <tr>
      <td align="center" width="50%"><font face="Verdana, Arial" size="1"><b>Nom destinataire</b></font><br>
       <input type="text" name="nom_dest" size="20"></td>
      <td align="center" width="50%"><font face="Verdana, Arial" size="1"><b>E-Mail destinataire</b></font><br>
       <input type="text" name="email_dest" size="20"></td>
    </tr> <tr>
      <td align="center" colspan="2"><font face="Verdana, Arial" size="1">
       <b>Ajoutez un message personnel (optionnel):</b></font><br>
      <textarea rows="3" name="message" cols="40"></textarea></td>
    </tr> <tr>
      <td align="center" colspan="2"><input type="submit" value="Envoyer"></td>
    </tr>
  </table>
  </center></div>
  </form>|;
  
  
  ## L'administrateur veut entrer ? ##
  if($ENV{'QUERY_STRING'} eq 'admin') { 
    &msg_fin("ENTREE ADMINISTRATEUR",qq|<center><form action="$CONF{CGI_URL}" METHOD="POST">
                                     Mot de Passe : <input type="PASSWORD" name="PASSWD"><br>&nbsp;<br>
                                     <input type="submit" value="Entrée"></form></center>|);
  }
  ## L'administrateur est déjà entré ##
  if ($form{'PASSWD'}) {                        # On vérifie le mot de passe s'il y en a un
    if (crypt($form{'PASSWD'},'aa') ne $CONF{'CPASSWD'}) {
      sleep(3);
      &msg_fin ("ACCES ADMINSTRATEUR REFUSE","<b>Le mot de passe n'est pas correct !</b><br>
                Retournez à la page précédente pour retenter...<br>
                Si vous ne parvenez pas à vous souvenir de votre mot de passe, une seule chose à faire : par FTP,
                supprimez le fichier <b>&quot;$DATA_DIR/passwd.dat&quot;</b> puis rendez-vous à l'URL de ce script
                pour fixer un nouveau mot de passe.");
    }
    ## Vérif paramétrage effectué ##
    if (!$CONF{'config_param'}) {    ( ($form{'ORDadmin_param_do'} eq '') && (&admin_param) ) || (&admin_param_do);  }
    &admin;
    exit(0);
  }
  ## sinon retour à l'utilisation publique normale
}
################################################
################################################
sub msg_fin {
my ($titre,$tip)=@_;
my ($d1,$d2);


  ## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessous, vous ne #
  ## respectez pas les conditions d'utilisation gratuite de ce programme, et #
  ## vous vous en servez de manière illégale ! Merci de respecter le travail #
  ## de l'auteur !        Merci de votre compréhension.                      #
  print qq|<html>
  <head>
   <title>$CONF{CGI_NAME} - Administration</title>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <style><!-- A:link {text-decoration: none; color: #0000FF}  A:visited {text-decoration: none; color: #0000FF}  A:hover {text-decoration: underline; color: #0000FF}  --></style>
  </head>
  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#0000FF">
  <p>&nbsp;</p>
  <div align="center"><center>
  <table border="0" width="80%" cellspacing="1" cellpadding="0">
    <tr><td width="100%" bgcolor="#E7BD30" align="center" style="border: 1px solid rgb(0,0,128)"><font face="Arial" size="3" color="#000080"><b>$CONF{'CGI_NAME'} : <i>$titre</i></b></font></td></tr>
    <tr><td width="100%" bgcolor="#DDDDDD" style="border: 1px solid rgb(0,0,0); padding: 5px"><font face="Arial" size="2"><p>&nbsp;</p>$tip<p>&nbsp;</p></font></tr>
    <tr><td width="100%" bgcolor="#E7BD30" align="center" style="border: 1px solid rgb(0,0,128)"><font face="Arial" size="1" color="#000080"><b>Script CGI Perl gratuit disponible sur <a href="http://www.perl-gratuit.com">perl-gratuit.com</a>. v$VERSION &copy;</b></font></td></tr>
  </table></center></div>
  </body>
  </html>|;
  exit(0);
  ## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessus, vous ne  #
  ## respectez pas les conditions d'utilisation gratuite de ce programme, et #
  ## vous vous en servez de manière illégale ! Merci de respecter le travail #
  ## de l'auteur !        Merci de votre compréhension.                      #
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin {

  if ($form{'ORDadmin_changepass'})         { &admin_changepass;
  } elsif ($form{'ORDadmin_changepass_do'}) { &admin_changepass_do;
  } elsif ($form{'ORDadmin_version'})       { &admin_version;
  } elsif ($form{'ORDadmin_info'})          { &admin_info;
  } elsif ($form{'ORDadmin_param'})         { &admin_param;
  } elsif ($form{'ORDadmin_param_do'})      { &admin_param_do;
  } elsif ($form{'ORDadmin_stats'})         { &admin_stats;          #
  } elsif ($form{'ORDadmin_statsreset'})    { &admin_statsreset;     #
  } elsif ($form{'ORDadmin_export'})        { &admin_export;   #
  } else                                    { &admin_menu;
  }
  exit(0);
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_menu {
my (%tmpl)=();
  $tmpl{'EMAIL_WEBMASTER'}=$CONF{'EMAIL_WEBMASTER'};
  $tmpl{'NOTIFY_WEBMASTER'}=$CONF{'NOTIFY_WEBMASTER'}==1?'Oui':'Non';
  $tmpl{'NOTIFY_VISITEUR'}=$CONF{'NOTIFY_VISITEUR'}==1?'Oui':'Non';
  $tmpl{'MAILPROG'}=$CONF{'MAILPROG'};
  $tmpl{'FONT_FACE'}=$CONF{'FONT_FACE'};
  $tmpl{'FONT_SIZE'}=$CONF{'FONT_SIZE'};
  $tmpl{'FONT_COLOR'}=$CONF{'FONT_COLOR'};

  ## Nb visiteurs collectées ##
  $tmpl{'nb_visiteur'}='0';
  open(BUF1,"$DATA_DIR/collecte_visiteur.dat") || (&msg_fin('ERREUR',"Impossible de lire le fichier $DATA_DIR/collecte_visiteur.dat: $!"));
  while (<BUF1>) {$tmpl{'nb_visiteur'}++;}
  close(BUF1);
  ## Nb destinataires collectés ##
  $tmpl{'nb_dest'}='0';
  open(BUF2,"$DATA_DIR/collecte_dest.dat") || (&msg_fin('ERREUR',"Impossible de lire le fichier $DATA_DIR/collecte_dest.dat: $!"));
  while (<BUF2>) {$tmpl{'nb_dest'}++;}
  close(BUF2);

  
  &msg_fin("Menu Administration",qq|
          <div align="center"><center>
          <table border="0" cellspacing="1" cellpadding="0">
           <tr> <td colspan="2" align="center"><font face="Arial" size="2" color="#800000"><b>Vos paramètres :</b></font></td> </tr>
           <tr> <td>$FONT E-Mail administrateur :</font></td>                         <td>$FONT $tmpl{EMAIL_WEBMASTER}</font></td> </tr>
           <tr> <td>$FONT Notifications au Webmaster : &nbsp;&nbsp;&nbsp;</font></td> <td>$FONT $tmpl{NOTIFY_WEBMASTER}</font></td> </tr>
           <tr> <td>$FONT Notifications au visiteur :</font></td>                     <td>$FONT $tmpl{NOTIFY_VISITEUR}</font></td> </tr>
           <tr> <td>$FONT Emplacement sendmail :</font></td>                          <td>$FONT $tmpl{MAILPROG}</font></td> </tr>
           <tr> <td>$FONT Police de caractères  :</font></td>                         <td>$FONT $tmpl{FONT_FACE}, taille:$tmpl{FONT_SIZE}, couleur:<font color="$tmpl{FONT_COLOR}">$tmpl{FONT_COLOR}</font></font></td> </tr>
           <tr> <td valign="top">$FONT Adresses collectées  :</font></td>             <td>$FONT $tmpl{nb_visiteur} adresses de visiteurs<br>$tmpl{nb_dest} adresses de destinataires</font></td> </tr>
          </table>
          <br>
          
          <form method="POST" action="$CONF{CGI_URL}">
          <input type="hidden" name="PASSWD" VALUE="$form{PASSWD}">
          <table border="0" cellspacing="1">
          <tr><td align="center"><B><font face="Arial" color="#800000">Menu :</font></B></td></tr>
          <tr><td style="border: 1px solid #800000; padding: 8px"><font face="Arial" size="2">
            <input type="submit" value="&gt;&gt;" name="ORDadmin_stats"> Voir les statistiques d'utilisation.<br>
            <input type="submit" value="&gt;&gt;" name="ORDadmin_export"> Exporter la liste des
              <select name="export_type" size="1" style="font-size: xx-small">
              <option value="visiteur">visiteurs</option>
              <option value="dest">destinataires</option>
              </select><br>
              &nbsp; &nbsp; &nbsp; au format
              <select name="export_format" size="1" style="font-size: xx-small">
              <option value="1">importation dans PG-MailingList PRO</option>
              <option value="2" selected>Outlook/Outlook Express</option>
              <option value="3">Netscape Mail</option>
              <option value="4">CSV (texte, séparateur tabulation)</option>
              </select><br>
              <hr color="#800000" size="1">
            <input type="submit" value="&gt;&gt;" name="ORDadmin_param"> Modifier vos paramètres.<br>
            <input type="submit" value="&gt;&gt;" name="ORDadmin_changepass"> Modifier votre mot de passe.<br>
            <input type="submit" value="&gt;&gt;" name="ORDadmin_version"> Dernière version disponible.<br>
            <input type="submit" value="&gt;&gt;" name="ORDadmin_info"> DOCUMENTATION / INFORMATIONS A LIRE
            </font></td>
          </tr>
          </table>
          </form>
          </center></div>|);
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_changepass {

  &msg_fin("Modification du mot de passe Administrateur",
           "<p align=\"center\">$FONT Choisissez votre nouveau mot de passe Administrateur de ce script (4 à 8 caractères).</font></p>
            <form action=\"$CONF{'CGI_URL'}\" method=\"POST\">
            <input type=\"hidden\" name=\"PASSWD\" value=\"$form{'PASSWD'}\">
            <div align=\"center\"><center><table border=\"0\">
            <tr><td>$FONT Nouveau mot de passe :</font></td> <td><input type=\"text\" name=\"new_passwd\" size=\"8\"></td></tr>
            <tr><td>$FONT Nouveau mot de passe (confirmation) :</font></td> <td><input type=\"text\" name=\"new_passwdbis\" size=\"8\"></td></tr>
            <tr><td colspan=\"2\" align=\"center\"> <input type=\"submit\" name=\"ORDadmin_changepass_do\" value=\"Enregistrer ce nouveau mot de passe\"> <input type=\"submit\" value=\"Annuler\"> </td></tr>
            </table></center></div></form>\n");
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_changepass_do {

  if (length($form{'new_passwd'}) < 4)               { &msg_fin("ERREUR !","Le mot de passe <b>$form{new_passwd}</b> fait moins de 4 caractères, ce qui est dangereux !");}
  if ($form{'new_passwd'} ne $form{'new_passwdbis'}) { &msg_fin("ERREUR !","Les deux cases de mot de passe ne sont pas identiques");}

  $CONF{'CPASSWD'}=crypt($form{'new_passwd'},'aa');
  open (PASSW,">$DATA_DIR/passwd.dat") || (&msg_fin("ERREUR !","Impossible d'enregistrer dans le fichier <b>$DATA_DIR/passwd.dat</b> ($!), veuillez vérifier le chmod 777 du répertoire <b>$DATA_DIR</b>: $!"));
  print PASSW "$CONF{'CPASSWD'}";
  close (PASSW);
  eval{ chmod(0666,"$DATA_DIR/passwd.dat");};

  $form{'PASSWD'}=$form{'new_passwd'};
  &msg_fin("Mot de passe Administrateur modifié",
           "<blockquote>
             <p>$FONT Le mot de passe pour l'accès Administrateur a été modifié et est
                maintenant <font color=\"#FF0000\">$form{'new_passwd'}</font>. Attention, il est sauvegardé de façon cryptée.
                Vous ne pourrez pas (ce programme non plus) le décrypter. Si vous l'oubliez, lorsque
                vous tenterez d'accéder ici avec un mauvais mot de passe, un message vous expliquera comment faire.
             </font></p>
             <center><form action=\"$CONF{'CGI_URL'}\" method=\"POST\"><input type=\"hidden\" name=\"PASSWD\" value=\"$form{'new_passwd'}\"><input type=\"submit\" value=\"Cliquez ici pour continuer\"></form></center>
             </blockquote>\n");
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_param {
my (%tmpl);

  if (!$CONF{'config_param'}) {
    $CONF{'NOTIFY_WEBMASTER'}=1;
    $CONF{'NOTIFY_VISITEUR'}=1;
    $CONF{'FONT_FACE'}='Arial';
    $CONF{'FONT_SIZE'}=2;
    $CONF{'FONT_COLOR'}='#000000';
    $CONF{'MESSAGE_DEST'}=qq|[nom_dest],\n\n[nom_visiteur] ([email_visiteur]) vous envoie\nce message pour vous recommander d'aller voir le site:\nhttp://www.votre-site-ici.com\n\nVous trouverez sur ce site :\n - des infos sur...\n - des services concernant...\nVous souhaitant bonne visite,\n\nLe webmaster|;
    $CONF{'MESSAGE_VISITEUR'}=qq|[nom_visiteur],\n\nCeci est un E-Mail automatique pour confirmer que suite\nà votre demande, un E-Mail à été envoyé à [nom_dest]\n([email_dest]) pour recommander le site :\nhttp://www.votre-site-ici.com\n\nEn vous remerciant,\n\nLe Webmaster.\n|;
  }
  # default-getback template
  if ($CONF{'TEMPLATE_STD'} eq '') { $CONF{'TEMPLATE_STD'}=qq|<html>\n<body bgcolor="#FFFFFF" color="#800000">\n<p>&nbsp;</p>\n\n<center>[message]</center>\n\n</body></html>|;}

  
  $tmpl{'CGI0_URL'}       =&formfield_encode($CONF{'CGI0_URL'});
  $tmpl{'EMAIL_WEBMASTER'}=&formfield_encode($CONF{'EMAIL_WEBMASTER'});
  $tmpl{'MAILPROG'}       =&formfield_encode($CONF{'MAILPROG'});
  $tmpl{'NOTIFY_WEBMASTER'}= $CONF{'NOTIFY_WEBMASTER'} ? ' checked' : '';
  $tmpl{'NOTIFY_VISITEUR'} = $CONF{'NOTIFY_VISITEUR'}  ? ' checked' : '';
  $tmpl{'TEMPLATE_STD'}=&formfield_encode($CONF{'TEMPLATE_STD'});
  $tmpl{'MESSAGE_DEST'}=&formfield_encode($CONF{'MESSAGE_DEST'});
  $tmpl{'MESSAGE_VISITEUR'}=&formfield_encode($CONF{'MESSAGE_VISITEUR'});
  $tmpl{'FONT_FACE'} =&formfield_encode($CONF{'FONT_FACE'});
  $tmpl{'FONT_SIZE'} =&formfield_encode($CONF{'FONT_SIZE'});
  $tmpl{'FONT_COLOR'}=&formfield_encode($CONF{'FONT_COLOR'});

  ## Recherche des emplacements de sendmail, aux endroits classiques sur Unix/Linux
  foreach ('/usr/lib/sendmail','/usr/bin/sendmail','/bin/sendmail','/usr/sbin/sendmail','/usr/local/bin/sendmail','/usr/local/lib/sendmail') {
    if ((-e $_) && (-x $_)) { $tmpl{'guessed_sendmail'}.="$_<br>"; }
  }
  if ($tmpl{'guessed_sendmail'} eq'') { $tmpl{'guessed_sendmail'}='<i>Aucun</i>';}

  &msg_fin("Configuration",qq|
          <form action="$CONF{CGI_URL}" method="POST">
          <input type="hidden" name="PASSWD" value="$form{'PASSWD'}">
          <div align="center"><center>
          <table width="80%" border="0" cellpadding="5">
          <tr valign="top">
            <td>$FONT<B>URL complète exacte de ce script :</b><br>
             Merci de vérifier que l'URL indiquée ici est correcte.
             C'est celle-ci qui sera utilisée pour les visiteurs.</font></td>
            <td><input type="text" name="CGI0_URL" size="20" value="$tmpl{CGI0_URL}"></td>
          </tr> <tr>
            <td>$FONT<B>E-Mail Webmaster :</B><br>Tapez ici votre adresse E-Mail</font></td>
            <td nowrap><input name="EMAIL_WEBMASTER" VALUE="$tmpl{EMAIL_WEBMASTER}" size="20"></td>
          </tr><tr valign="top">
            <td>$FONT<B>Emplacement de sendmail :</B><br>
             Indiquez ici l'emplacement du programme sendmail sur votre serveur. A noter que ce script
             tente de le trouver tout seul en cherchant aux endroits habituels, mais il se peut qu'il
             ne le trouve pas. Si vous ne le connaissez pas demandez à votre hébergeur.</font></td>
            <td nowrap><input type="text" name="MAILPROG" size="20" value="$tmpl{MAILPROG}"><br>
             $FONT<u>Emplacement(s) détecté(s):</u><br>$tmpl{'guessed_sendmail'}</font></td>
          </tr><tr valign="top">
            <td>$FONT<B>Notification webmaster :</B><br>
             Cochez cette case si vous souhaitez être informé par un E-Mail court à chaque fois qu'un visiteur
             utilise ce script pour recommander votre site à un ami/destinataire.</font></td>
            <td><input type="checkbox" name="NOTIFY_WEBMASTER" value="1" $tmpl{NOTIFY_WEBMASTER}></td>
          </tr><tr valign="top">
            <td>$FONT<B>Notification visiteur :</B><br>
             Cochez cette case si vous souhaitez que le visiteur recommandant votre site à un ami, reçoive
             un E-Mail de confirmation/accusé réception.</font></td>
            <td><input type="checkbox" name="NOTIFY_VISITEUR" value="1" $tmpl{NOTIFY_VISITEUR}></td>
          </tr><tr valign="top">
            <td colspan="2">$FONT<B>Page-modèle d'affichage aux visiteurs :</B><br>
             Vous pouvez modifier ci-dessous la page HTML modèle utilisée pour l'affichage aux visiteurs (template).
             Pour plus de commodités, copiez/collez ce code HTML dans votre éditeur HTML favori pour personnaliser
             cette page-modèle puis reportez-le ensuite ici après modifications.<br>
             Attention, le tag spécial [message] doit rester présent, il marque l'emplacement auquel le script
             affichera les différents messages. En cas de doute, laissez tel quel.<br>
             <textarea name="TEMPLATE_STD" cols="60" rows="8" wrap="off">$tmpl{TEMPLATE_STD}</textarea></font></td>
          </tr>
          <tr valign="top">
            <td colspan="2">&nbsp;<br>$FONT<B><font color="#800000">E-Mail au destinataire :</font></B><br>
              Modifiez ci-dessous le message qui sera envoyé par E-Mail au destinataire (<i>ami</i> du visiteur).<br>
              Mettez-y principalement l'URL de votre site et une petite description</font><br>
              <table border="1" bordercolor="#000000" cellspacing="0" cellpadding="0"><tr><td>$FONT
                Mettez [nom_dest] à l'endroit où le nom du destinataire doit apparaître.<br>
                Mettez [email_dest] à l'endroit où l'E-Mail du destinataire doit apparaître.<br>
                Mettez [nom_visiteur] à l'endroit où le nom du visiteur doit apparaître.<br>
                Mettez [email_visiteur] à l'endroit où l'E-Mail du visiteur doit apparaître.<br>
                <i>ATTENTION, lors de l'envoi de l'email, [nom_dest], [email_dest], et les
                2 autres TAGS seront remplacés par les noms et adresses E-Mail tapées dans le formulaire.
                Ne supprimez donc pas ces TAGS, ils servent à personnaliser chaque Mail.</i></font></td></tr>
              </table>
              <textarea name="none" cols="65" rows="1" wrap="VIRTUAL">1........10........20........30........40........50........60....</textarea><br>
              <textarea name="MESSAGE_DEST" ROWS="10" COLS="65" wrap="off">$CONF{'MESSAGE_DEST'}</textarea> 
            </td>
          </tr>
          <tr valign="top">
            <td colspan="2">&nbsp;<br>$FONT<B><font color="#800000">Accusé-réception au visiteur (optionnel) :</font></B><br>
              Si vous avez coché <u>notification au visiteur</u> ci-dessus, modifiez le message qui sera envoyé
              par E-Mail au visiteur, en tant qu'accusé-réceptione t remerciement.</font><br>
              <table border="1" bordercolor="#000000" cellspacing="0" cellpadding="0"><tr><td>$FONT
                Mettez [nom_dest] à l'endroit où le nom du destinataire doit apparaître.<br>
                Mettez [email_dest] à l'endroit où l'E-Mail du destinataire doit apparaître.<br>
                Mettez [nom_visiteur] à l'endroit où le nom du visiteur doit apparaître.<br>
                Mettez [email_visiteur] à l'endroit où l'E-Mail du visiteur doit apparaître.<br>
                <i>ATTENTION, lors de l'envoi de l'email, [nom_dest], [email_dest], et les
                2 autres TAGS seront remplacés par les noms et adresses E-Mail tapées dans le formulaire.
                Ne supprimez donc pas ces TAGS, ils servent à personnaliser chaque Mail.</i></font></td></tr>
              </table>
              <textarea name="none" cols="65" rows="1" wrap="VIRTUAL">1........10........20........30........40........50........60....</textarea><br>
              <textarea name="MESSAGE_VISITEUR" ROWS="10" COLS="65" wrap="off">$CONF{'MESSAGE_VISITEUR'}</textarea> 
            </td>
          </tr>
          <tr><td colspan="2" align="center"><font face="Arial" size="2" color="#800000"><b>Format de caractères à utiliser pour l'affichage de messages aux visiteurs:</b></font></td></tr>
          <tr><td>$FONT<B>Police :</B>  (Recommandé: Arial)         </font></td> <td><input type="text" name="FONT_FACE" size="10" value="$tmpl{FONT_FACE}"></td> </tr>
          <tr><td>$FONT<B>Taille :</B>  (Recommandé: 2)             </font></td> <td><input type="text" name="FONT_SIZE" size="5" value="$tmpl{FONT_SIZE}"></td> </tr>
          <tr><td>$FONT<B>Couleur :</B> (Recommandé -noir-: #000000)</font></td> <td><input type="text" name="FONT_COLOR" size="10" value="$tmpl{FONT_COLOR}"><a href="javascript://" onclick="window.open('$CONF{IMGCGI_URL}/palette.html','palette','height=450,width=360,menubar=no,scrollbars=no,toolbar=no,location=no,status=no'); return true;"><img src="$CONF{IMGCGI_URL}/palette.gif" border="0" align="absmiddle"></a></td> </tr>
          </table>
          
          <input type="submit" name="ORDadmin_param_do" value="VALIDER !"> <input type="submit" name="ORDadmin_menu" value="Annuler">
          </center></div>
          </form>|);
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_param_do {

  # CGI0_URL
  if ($form{'CGI0_URL'} eq '') {     &msg_fin("ERREUR !","Vous n'avez pas indiqué l'URL de ce script.");}
  if ($form{'CGI0_URL'}!~ m|^https*://|) { &msg_fin("ERREUR !","L'URL de ce script doit commencer par <i>http://</i> ou <i>https://</i>");}
  $CONF{'CGI0_URL'}=$form{'CGI0_URL'};
  # EMAIL_WEBMASTER
  if (!&verify_email($form{'EMAIL_WEBMASTER'})) { &msg_fin("ERREUR !","Adresse E-Mail webmaster invalide<br>&nbsp;<br>Merci de corriger...");}
  $CONF{'EMAIL_WEBMASTER'}=$form{'EMAIL_WEBMASTER'};
  # MAILPROG
  if ($form{'MAILPROG'} eq '') { &msg_fin("ERREUR !","Vous n'avez pas indiqué l'emplacement de sendmail. Ceci est indispensable pour les envois d'E-Mails.");  }
  if (!-e "$form{MAILPROG}") {   &msg_fin("ERREUR !","Emplacement de sendmail incorrect");}
  $CONF{'MAILPROG'}=$form{'MAILPROG'};
  # NOTIFY_WEBMASTER
  $CONF{'NOTIFY_WEBMASTER'}=int($form{'NOTIFY_WEBMASTER'});
  # NOTIFY_VISITEUR
  $CONF{'NOTIFY_VISITEUR'}=int($form{'NOTIFY_VISITEUR'});
  # TEMPLATE_STD
  $form{'TEMPLATE_STD'}=~ s/\r\n/\n/gs;
  if ($form{'TEMPLATE_STD'}!~ /\[message\]/s) { &msg_fin("ERREUR !","La page-modèle d'affichage aux visiteurs ne contient pas le tag spécial [message]<br>Il doit nécessairement être présent. Merci de retourner page précédente pour vérifier et corriger.");}
  $CONF{'TEMPLATE_STD'}=$form{'TEMPLATE_STD'};
  # MESSAGE_DEST
  $form{'MESSAGE_DEST'}=~ s/\r\n/\n/gs;
  $form{'MESSAGE_DEST'}=~ s/\s+$//g;
  $form{'MESSAGE_DEST'}.="\n";
  if ($form{'MESSAGE_DEST'} eq '') { &msg_fin("ERREUR !","Le contenu de l'email au destinataire est vide !. Merci de retourner page précédente pour corriger.");}
  $CONF{'MESSAGE_DEST'}=$form{'MESSAGE_DEST'};
  # MESSAGE_VISITEUR
  $form{'MESSAGE_VISITEUR'}=~ s/\r\n/\n/gs;
  $form{'MESSAGE_VISITEUR'}=~ s/\s+$//g;
  $form{'MESSAGE_VISITEUR'}.="\n";
  $CONF{'MESSAGE_VISITEUR'}=$form{'MESSAGE_VISITEUR'};
  # FONT :
  $CONF{'FONT_FACE'}=$form{'FONT_FACE'};
  $CONF{'FONT_SIZE'}=$form{'FONT_SIZE'};
  $CONF{'FONT_COLOR'}=$form{'FONT_COLOR'};
  # SAVE IT'S DONE:
  $CONF{config_param}=1;
  
  ## ENREGISTREMENTS PARAMS ##
  eval{chmod(0777,"$DATA_DIR/config.dat");};
  open (CONFW,">$DATA_DIR/config.dat") ||  (&msg_fin("ERREUR !","Impossible de réécrire <b>$DATA_DIR/config.dat</b> : $!<br> Merci de mettre chmod 777 manuellement à ce fichier et au répertoire... "));
  foreach ('config_param','CGI0_URL','EMAIL_WEBMASTER','MAILPROG','NOTIFY_WEBMASTER','NOTIFY_VISITEUR','TEMPLATE_STD','MESSAGE_DEST','MESSAGE_VISITEUR','FONT_FACE','FONT_SIZE','FONT_COLOR') {
    $CONF{$_}=~ s/\n/\|\\n\|/gs;
    print CONFW ("$_\t$CONF{$_}\n");
  }
  close (CONFW);
  ## /ENREGISTREMENTS PARAMS ##

  &msg_fin("Configuration",
           "<p align=\"center\">$FONT Paramètres de configuration enregistrés avec succès !<br> </font></p>
            <center><form action=\"$CONF{'CGI_URL'}\" method=\"POST\"><input type=\"hidden\" name=\"PASSWD\" value=\"$form{PASSWD}\"><input type=\"submit\" name=\"ORDadmin_menu\" value=\"Cliquez ici pour continuer\"></form></center>");
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_version {
my %tmpl=();
  $tmpl{'CGI_NAME_fted'}=lc($CONF{CGI_NAME}); # formatted
  $tmpl{'CGI_NAME_fted'}=~ s/\s/_/gs;

  &msg_fin("Dernière version disponible",qq|
    <blockquote>
      <p><font face="Arial" size="2">Cette page vous indique <u>en temps réel</u> s'il existe
      une version plus récente de ce script CGI Perl sur notre site perl-gratuit.com. Si vous constatez
      que c'est le cas, vous pouvez aller y consulter le détail des ajouts ou corrections
      éventuelles de ce CGI, et télécharger/installer la nouvelle version.</font></p>
    </blockquote>
    <div align="center"><center>
    <table border="0" cellpadding="2" cellspacing="1">
      <tr>
        <td><font face="Arial" size="2"><b>Version utilisée ici :</b></font></td>
        <td><font face="Arial" size="2" color="#0000FF"><b>$VERSION</b></font></td>
      </tr> <tr>
        <td><font face="Arial" size="2"><b>Dernière version disponible : &nbsp; </b></font></td>
        <td><img src="$CONF{'IMGCGI_URL'}/$tmpl{CGI_NAME_fted}_vnumber.gif" border="0"></td>
      </tr>
    </table>
    <p>$FONT
     Remarque éventuelle sur la dernière version :<br><img src="$CONF{'IMGCGI_URL'}/$tmpl{CGI_NAME_fted}_vnote.gif" border="0"><br> &nbsp;<br>
     Vous trouverez la dernière version disponible sur <a href="http://www.perl-gratuit.com" target="_blank">Perl-Gratuit.com</a>
    </font></p>
    <form action="$CONF{CGI_URL}" METHOD="POST"><input type="hidden" name="PASSWD" value="$form{PASSWD}"><input type="submit" value="Retour Menu"></form>
    </center></div>|);
}
################################################
#### ATTENTION, réutilisation/recopie du    ####
#### code source interdite et illégale      ####
################################################
sub admin_info {
my (%tmpl)=();

  $tmpl{'form'}=&formfield_encode($CONF{'theform'});

  &msg_fin("Documentation / Informations à lire",qq|
    <p align="center"><font face="Arial" color="#800000" size="3"><b>Informations sur l'utilisation de $CONF{CGI_NAME} :</b></font></p>
    
    <p><font face="Arial" size="2"><font color="#800000"><b>Accès à l'administration :</b></font><br>
     Pour accéder à la section d'administration de $CONF{CGI_NAME} rendez-vous à l'URL exacte : <br>
     <a href="http://$ENV{SERVER_NAME}$CONF{CGI_URL}?admin">http://$ENV{SERVER_NAME}$CONF{CGI_URL}?admin</a><br>
     Mettez cette URL dans vos favoris pour ne pas l'oublier ! Votre mot de passe sera ensuite demandé.</font></p>
    
    <p><font face="Arial" size="2"><font color="#800000"><b>Intégration dans votre site :</b></font><br>
    Vous avez deux manières possibles d'intégrer ce CGI à votre site web :<br>
    - Soit vous faites un lien direct vers l'URL de ce script CGI Perl, celui-ci affichera alors le
    formulaire demandant les informations nécessaires.<br>
    &nbsp; <u>URL :</u> $CONF{'CGI0_URL'}<br>
    - Soit vous recopiez et intégrez dans une ou plusieurs de vos pages web, le formulaire dont le code HTML est
    indiqué ci-dessous. Libre à vous d'en personnaliser l'apparence, mais attention à ne pas modifier les champs:<br>
    <form action="" method="get"><textarea name="htmlcode" rows="8" cols="60" wrap="off">$tmpl{form}</textarea></form>
    </font></p>
    
    <p><font face="Arial" size="2"><font color="#800000"><b>Copyright - Licence d'utilisation :</b></font><br>
    Un droit d'utilisation gratuite de ce script CGI Perl vous est accordé à la condition expresse de ne pas
    le modifier du tout, ni de le réutiliser ou recopier en tout ou partie, revendre, louer, redistribuer, etc.
    Tous les droits autres que l'utilisation gratuite sont réservés (nous contacter au besoin).
    Toute contrefaçon ou autre violation des droits de propriété intellectuelle fait l'objet de poursuites.
    IL EST PAR-DESSUS TOUT INTERDIT DE MODIFIER LES MENTIONS DE L'AUTEUR (COPYRIGHT, NOM ET LIEN VERS LE SITE
    DE L'AUTEUR,ETC). CECI EST LA CONTREPARTIE DE LA GRATUITÉ.<br>
    Tout simplement, merci de respecter le travail de l'auteur... afin que nous puissions continuer à vous
    proposer de tels scripts CGI Perl.</font></p>
    
    <p><font face="Arial" size="2"><font color="#800000"><b>Version PRO disponible :</b></font><br>
    Ce script CGI existe en version PRO, dédiée à un usage professionnel. Principales caractéristiques :<br>
    - aucune mention de l'auteur ni copyright visible par le visiteur.<br>
    - personnalisation complète de l'affichage pour une bonne intégration à votre site.<br>
    - assistance, support technique privilégié et ultra-prioritaire, documentation complète en ligne.<br>
    - installation offerte sur demande.<br>
    - nombreuses fontionnalités supplémentaires, etc...<br>
    Pour consulter le détail de la version PRO de ce script CGI Perl et en acquérir éventuellement une licence,
    merci de vous rendre sur notre autre site: <a href="http://www.perl-pro.com/" target="_blank">Perl-PRO.com</a>
    </font></p>
    
    <center>
     <form action="$CONF{CGI_URL}" method="POST"><input type="hidden" name="PASSWD" value="$form{PASSWD}"><input type="submit" value="Retour Menu"></form>
    </center>
  |);
}
################################################
################################################
sub admin_export {
my ($line,$nb,$email,$nom);

  #### Affichage page
  print ("<html><body>");
  if ($form{'export_type'} eq 'visiteur') {
    print ("Liste des adresses de visiteurs collectées (personnes ayant recommandé votre site):<br>\n");
  } elsif ($form{'export_type'} eq 'dest') {
    print ("Liste des adresses de destinataires collectées (personnes à qui un E-Mail de recommandation a été envoyé):<br>\n");
  } else {
    &msg_fin("ERREUR !","Impossible de reconnaître si vous voulez voir les adresses des visiteurs ou des destinataires.");
  }

  print "<p>&nbsp;</p>\n";
  print "<PRE><TT>" if (($form{'export_format'}==4) || ($form{'export_format'}==1));

  ## Liste :
  open (COLLR,"$DATA_DIR/collecte\_$form{'export_type'}.dat") || (&msg_fin("ERREUR !","Impossible de lire $DATA_DIR/collecte\_$form{'export_type'}.dat: $!"));
  while ($line=<COLLR>) {
    chomp($line);
    ($email,$nom)=split(/\|/o,$line);
    if ($form{'export_format'}==1) {            # importation dans PG-MailingList PRO
      print "$line\n";
    } elsif ($form{'export_format'}==2) {       # Outlook/Outlook Express
      print "$nom&lt;$email&gt;; ";
    } elsif ($form{'export_format'}==3) {       # Netscape Mail
      print "$nom&lt;$email&gt;, ";
    } elsif ($form{'export_format'}==4) {       # CSV
      print "$email\t$nom\n",
    }
    $nb++;
  }
  close(COLLR);

  #### Fin de la page
  print "</TT></PRE>" if (($form{'export_format'}==4) || ($form{'export_format'}==1));
  print ("<br>&nbsp;<br><b>$nb</b> adresses.</body></html>\n");
  exit(0);
}
################################################
################################################
sub admin_stats {
my (%stats,$max,$total)=();

  ## Lecture des stats
  open (STATR,"$DATA_DIR/stats.dat") || (&msg_fin("ERREUR","Impossible de lire le fichier de stats: $!"));
  while(<STATR>) {
    chomp($_);
    if ($_=~ /^([^\t]+)\t(\d+)$/) { $stats{"$1"}+=$2; }
  }
  close (STATR);

  ## valeur maxi, total :
  $max=0;
  $total=0;
  foreach (values(%stats)) {
    if ($_ > $max) { $max=$_;}
    $total+=$_;
  }

  if ($total<1) { &msg_fin("Statistiques d'utilisation"," Aucune utilisation actuellement."); }

  &msg_fin("Statistiques d'utilisation","
    <blockquote>
      <p>$FONT Cette section vous indique depuis quelles pages de votre site les visiteurs ont utilisé
       le formulaire de recommandation.<br> &nbsp;<br>
       Nombre total d'utilisations de ce CGI: <b>$total</b></font></p>
    </blockquote>
    
    <div align=\"center\"><center>
    <table border=\"0\">".(
    join '', map {"<tr>
          <td><font face=\"Arial\" size=\"1\">$_</font></td>
          <td><font face=\"Arial\" size=\"2\"><img src=\"$CONF{IMGCGI_URL}/barre-bleue.gif\" height=\"10\" width=\"".int(300*$stats{$_}/$total)."\"> $stats{$_} <i>(". int(0.5+($stats{$_}/$total)*100) ." %)</i></font></td>
          </tr>\n"} sort{$stats{$b}<=>$stats{$a}} keys %stats
    )."</table>
    <p><form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">
    <input type=\"hidden\" name=\"PASSWD\" value=\"$form{PASSWD}\">
    <input type=\"submit\" name=\"ORDadmin_statsreset\" value=\"Remettre à zéro les statistiques\"><br>&nbsp;<br>
    <input type=\"submit\" value=\"Retour Menu\">
    </form></p>
    </center></div>");
}
################################################
sub admin_statsreset {

  open (STATSRAZ,">$DATA_DIR/stats.dat");
  close(STATSRAZ);
  eval{chmod(0666,"$DATA_DIR/stats.dat");};

  &msg_fin("Statistiques d'utilisation","
           <center>
            <p>$FONT Les statistiques ont été réinitialisées avec succès !</font></p>
            <form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">
            <input type=\"hidden\" name=\"PASSWD\" value=\"$form{PASSWD}\">
            <input type=\"submit\" value=\"Cliquez ici pour continuer\"><br> &nbsp; <br>
            </form>
            </p>
           </center>");
}
################################################
################################################
