<?php
#=
/****************************************************************************
Copyright 2002, Daniel Deycard, Jacques Messines, Alain Pomirol
(CATICE Académie de Bordeaux)

This file is part of GiBii/Melia.

GiBii/Melia is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

GiBii/Melia is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GiBii/Melia; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Modifié par Fabien NGUYEN
****************************************************************************/
    print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
?>
<HTML>
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <link rel="stylesheet" href="../include/general.css">
    <script language="javascript">
    function verifmodele(mindiv) {
        permis="npdb#.-_"; //caractères autorisés dans le modèle
        m=eval("document.formparam."+mindiv+".value");
        //alert(m+' '+m.length);
        if (m.length==0) {
            alert("Le modèle doit au moins comporter un des caractères n,p,d,b,#.");
            return false;
        }
        for (i=0; i<m.length; i++) { //pour coloration : >
            if (permis.indexOf(m.charAt(i))==-1) {
                alert("Le caractère '"+m.charAt(i)+"' n\'est pas autorisé dans les modèles.");
                return false;
            }
        }
        return true;
    }
    function pas_de_mail() {
    var frm=document.formparam;
    //frm.mail_from.disabled=!frm.mail_from.disabled;
    //frm.mail_to.disabled=!frm.mail_to.disabled;
    //frm.mail_cc.disabled=!frm.mail_cc.disabled;
    //frm.mail_subject.disabled=!frm.mail_subject.disabled;
    frm.nomfield.disabled=!frm.nomfield.disabled;
}


    </script>
</HEAD>
<BODY class="arial_sadmin"  >
<?php
require ('../include/vars_adm.php');
require ('../include/util.inc.php');
require ('../incorporation/util.class.php'); //endroit de stockage à revoir
require ('../include/html.class.php');
require ('../include/utiljs.php');
require ('../include/new_etab.inc.php');

$modele_defe="ppp.nnnnnnnnnn";
$modele_defp="pnnnnnnnnnn";
opensession("Sadmin",false);
if ($sess_login=='admstats') {
	aneantir_session();
	goto("./index.php");
	}
//transgresse éventuellement php.ini pour ce script
ini_set('file_uploads','On');         //autorise l'upload
ini_set('max_execution_time','180');     //Pour le RTC de DD !

connecte($host,$user,$mdp,$db);
$PHP_SELF=basename($_SERVER['PHP_SELF']);
getparams(false);

//FONCTIONS
function erreur($mess) {   //pour le 2e passage
alert($mess);
gohistory(-1);
print "</body></html>";
exit();
}

function is_etab_incorrect($rne,$nom,$cp,$ville) {
//les paramètres sont supposés addslashés ; de toute façon, ils devront
//l'être puisque ils seront injectés dans une table s'ils sont corrects.
//sortie : chaîne vide     ~> établissement correct
//         chaîne non vide ~> message d'erreur
//exemple d'utilisation :
//         $mess=is_etab_identifiable($rne,$nom,$ville))
//         if ($mess) {print $mess;...} else {...}
if (empty($rne)) return "Le RNE est absent !";
else { //le RNE n'est pas vide
  if (!eregi("^[0-9]{7}[a-z]$",$rne))
      return "RNE incorrect.";
  $resetab=query("SELECT * FROM etablissements WHERE rne='$rne';");
  if (mysql_num_rows($resetab))
      return 'le RNE existe déjà';
}
if (empty($nom) && empty($ville))  //l'un des deux vide autorisé
    return 'Nom et ville absents';
if (!$cp) return '';          //code postal vide autorisé
if (!eregi("^[0-9]{5}$",$cp)) return "Code postal incorrect.";
else  {
  $resetab=query("SELECT * FROM etablissements
                   WHERE nom='$nom'
                     and ville='$ville';");
  if (mysql_num_rows($resetab)) return "Couple (nom,ville) ambigu : ($nom,$ville).";
}
return '';
}

function is_lignetexte($chligneorig,$numligne) {
//on accepte TAB et les caractères de 32 à 255.
if (ereg("^(\t|[\x0D,\x0A,\x20-\x7f]|[\x80-\xff)])*$",$chligneorig))
   return '';
else return "Caractère étranger (code binaire) en ligne $numligne.<br />";
}

function decode($ch,$r,$i) {  //décodage chaînes pour le mail
$buffer=str_replace('[rne]',$r,$ch);
$buffer=str_replace('[id]',$i,$buffer);
return $buffer;
        }

function sauve_mail_param($paramail) {
//Sauver-modifier les variables saisies dans le formulaire dans _paramsglobaux
//puis les mettre en session
foreach($paramail  as $pval) {
  $param_val=strtolower($pval); //Variables POST
  global  $$param_val;
  $$pval=$$param_val;
  $sqlsauve_mail="UPDATE _params_globaux SET param_val='".secs($$param_val)."' ".
                       " WHERE param_nom='".secs($pval)."' ;";
  query($sqlsauve_mail);
  $_SESSION[$pval]=$$param_val;
  }
}

function cree_mail_param($paramail) {
//Créer les variables par défaut dans _params_globaux
//puis les mettre en session
$param_val=array('Saisir un expéditeur',
           'Saisir au moins un destinataire',
           '',
           'Votre GiSCCo est en ligne');

$param_desc=array('Inscription étabs : expéditeur',
           'Inscription étabs : Destinataire',
           'Inscription étabs : en copie',
            'Inscription étabs : objet');
$i=0;
foreach($paramail  as $pval) {
  global $$pval;
  $$pval=$param_val[$i];
  //alert($param_val);
  $sqlsauve_mail="INSERT INTO _params_globaux SET param_nom='".secs($pval)."',
                  param_type='s',param_val='".secs($param_val[$i])."',
                  param_desc='".secs($param_desc[$i])."',
                  param_tag=0;";
  query($sqlsauve_mail);
  $_SESSION[$pval]=$param_val[$i];
  $i++;
  }
}

function getsep($nomfichier) {
 //recherche du séparateur
 $fp=fopen($nomfichier,'r');
 $sep="";
 while (!feof($fp)) {
       $buffer = fgets($fp, 1024);
       if (preg_match ("/[,;\t]/",$buffer,$trouve)) {
          $sep=$trouve[0];
          break;
      }
 }
 fclose($fp);
 if (!$sep) {
     print "Le format du fichier texte ne convient pas : ";
     print "pas de séparateur (,; ou TAB).";
 }
 return $sep;
}

function traiter_etabs($dest) {
global $emodele,$pmodele,$DATA,$HIDEDATA,$MODULE;
 //Pour le mail auto
global $CB_mail_auto,$MAIL_FROM,$MAIL_TO,$MAIL_CC,$MAIL_SUBJECT;

$directive=array(); //stocke les lignes de directives affichées à la fin
$sep=getsep($dest);
if (!$sep) erreur("Pas de séparateur trouvé dans $fichier !");
$ficlog=$dest.'.log';
$fplog=fopen($ficlog,'w');
$fp=fopen($dest,'r');
if (!$fp) erreur("$dest ne peut être ouvert en lecture");
$html=new htmlcreator();
$html->begintable("width=\"100%\" border=\"1\" cellspacing=\"0\"
                   bordercolordark=\"white\" bordercolorlight=\"black\"");
$html->beginrow();
$html->styleth="align=\"center\" bgcolor=\"white\"";
//0=rne ; 1=nom ; 2=adresse ; 3=codepostal ; 4=ville ; 5=theme ; 6=niveau  ;
//7=nb_validations ; 8=nbj_vie_demande ; 9=nb_max_demandes ; 10=nb_max_refus ;
//11=modele_login_e ; 12=modele_login_p ; 13=mdp_eleve ; 14=mdp_prof ; 15=fiche_profs ;
//16=stats_profs ; 16=valid_profs ; 17=result_profs
//facultatif après ville
//pour mettre une valeur après en laissant les précédentes par défaut,
//laisser les champs vides (;;;;;)
//21 colonnes affichées dans la page (comme le nombre de champs de la table)
$html->entetes('ID','RNE','Nom','Adresse','CP','Ville','Thème','Chgt thème', 'niv',
               'val','vie','maxD','maxR','logE','logP','mdpe','mdpp','fi',
               'stat','vali','res','actif','Rep'); // Rxxxx=repertoires de l'étab
$html->endrow();

//valeurs par défaut (sauf etab_id)
if ($MODULE=='Melia') $nbval=1; else $nbval=1;
$tdefaut=array(
     'rne'               => '',                        //les champs de 0 à 4 doivent être remplis
     'nom'               => '',                        //(donc pas de valeur par défaut)
     'adresse'           => '',
     'codepostal'        => '',
     'ville'             => '',
     'theme'             => 'argos',                     //5    theme_etab
     'chgt_theme'        => 0, 							//5.5  changement de theme ?
     'niveau'            => 'niv2',                   //6    niveau_etab
     'nb_validations'    => $nbval,                    //7    nbval_etab
     'nbj_vie_demande'   => 30,                        //8    nbjvie_etab
     'nb_max_demandes'   => 5,                         //9    maxdemande_etab
     'nb_max_refus'      => 0,                         //10   maxrefus_etab
     'modele_login_e'    => $emodele,                  //11   modelelogin_elev_etab
     'modele_login_p'    => $pmodele,                  //12   modelelogin_prof_etab
     'mdp_eleve'         => 1,                         //13   mdp_elev_etab
     'mdp_prof'          => 1,                         //14   mdp_prof_etab
     'fiche_profs'       => 1,                         //15   fiche_prof_etab
     'stats_profs'       => 1,                         //16   stats_prof_etab
     'valid_profs'       => 1,                         //17   valid_profs_etab
     'result_profs'      => 1,                         //18   result_profs_etab
     'actif'             => 1);                        //19   result_profs_etab

//Valeurs par défaut des directives incluses dans le fichier texte sous la forme
//  %variable=valeur. Exemple : %mdpadmin=             (mdpadmin sera vide)
//ou : %mdpadmin=admin ou %mdpadmin=$rne
//variables possibles dans le premier membre : voir clés du tableau $dir_defaut
//variables possibles dans le second membre : $rne, $codepostal, $ville
//constantes possibles dans le second membre : peu importe mais entre guillemets
//expressions : à vérifier après coup : c'est PHP qui interprète ! (fuite de responsabilité)

$dir_defaut=array('mdpadmin'=>'admin','mdpgestion'=>'gestion',
                  'mdpproftest'=>'proftest','mdp00000'=>'00000'
                  );
$expr_user=array();
$err_mail=false;
$nb_erreurs=0;$voirlog=false;
$keys=array_keys($tdefaut);

while ($ligne = fgetcsv ($fp, 1024, $sep)) {
      for ($i=0 ; $i<count($ligne) ; $i++)
           $ligne[$i]=trim($ligne[$i]);
      $chligne=implode($ligne," ");
      if (!trim($chligne)) continue;
      if ($chligne[0]=="#") continue;
      $chligneorig=implode($ligne,";");  //

      $html->beginrow();

      //voir s'il s'agit d'une ligne de directives
      if ($chligne[0]=='%') {
          if (preg_match("/^%([a-z0-9_]+)=(.*)/i",$chligne,$matches)) {
              if (array_key_exists($matches[1],$dir_defaut))  {
                  //ici, on se contente de stocker l'expression fournie
                  //on l'évaluera plus tard, après récupération de chaque nouvelle ligne
                  $expr_user[$matches[1]]=$matches[2];
                  $messdir="Directive acceptée : $chligne";
                  }
              else {
                  $messdir="<b>Directive [[<font color=\"maroon\">$chligne</font>]] : premier membre [$matches[1]] inconnu</b>";
                  $nb_erreurs++;
                  $voirlog=true;
                  }
              }
          else {
              $messdir="<b>Directive [[<font color=\"maroon\">$chligne</font>]] incorrecte</b>";
              $nb_erreurs++;
              $voirlog=true;
              }
          $html->colonne($messdir,'colspan="21" bgcolor="#E1D8D8"');
          $html->endrow();
          continue;
          }

      //compléter ligne par les valeurs par défaut
      $req='';
      $mess='';
      for ($i=0 ; $i<count($tdefaut) ; $i++) {
          //si i<5, ligne[i] n'est pas vide (en principe, sauf éventuellement le RNE)
          if (empty($ligne[$i]))
              if ($i>0 && $i<5) $mess='Le champ '.$keys[$i].' est vide !';
              else $ligne[$i]=$tdefaut[$keys[$i]];
          //affecter une variable (pour évaluer les directives ultérieurement)
          if ($i>=0 && $i<5) $$keys[$i]=$ligne[$i]; //affecte $rne, $nom, $adresse, ville, $codepostal
          $ligne[$i]=addslashes($ligne[$i]);
          if ($i==0) $req.='SET ';
          else $req.=', ';
          $req.=$keys[$i]."='".secs($ligne[$i])."'";
      	}
      if (!$mess) $mess=is_etab_incorrect($ligne[0],$ligne[1],$ligne[3],$ligne[4]);
      if (!$mess) $mess=is_lignetexte($chligneorig,$i+1);
      if ($mess) {  //renseignements insuffisants dans la ligne
          //virer les séparateurs finals
          do {
              $b=$chligneorig;
              $chligneorig=ereg_replace("()".$sep."$","\\1",$b);
          }
          while ($chligneorig!=$b);
          //les remplacer par d'autres séparateurs
          $chligneorig=ereg_replace($sep," <b>&#164;</b> ",$chligneorig); //caractère ¤
          //afficher la ligne sans les colonnes (colspan)
          $html->colonne($chligneorig.'<font color="red"> ~&gt; '.$mess.'.</font>',
                         'colspan="21" bgcolor="#E1D8D8"');
          $html->endrow();
          if (++$nb_erreurs>9)
              break;
          else continue;
      }

      //rajouter le premier champ et le dernier
      query("INSERT INTO etablissements $req");
      $etab_id=mysql_insert_id();
      //rectifier vite le RNE si absent (champ unique dans la table)
      $rne=$ligne[0];
      if (!$rne) {
          $rne=$etab_id;
          query("UPDATE etablissements SET rne='".secs($rne)."' WHERE etab_id=".seci($etab_id));
      }
      $html->colonne($etab_id);
      for ($i=0 ; $i<count($ligne) ; $i++)  {
          $ch=$ligne[$i];
          if (!$ch) $ch='&nbsp';
          $html->colonne($ch);
      }
      //répertoire de données de l'établissement (= RNE)
      $repnormal=$DATA.'/'.$rne;
      $rephide=$HIDEDATA.'/'.$rne;
      $reps=array($repnormal);
      $col='';
      if ($repnormal!=$rephide) $reps[]=$rephide; //il y en a 2... s'ils sont différents
      for ($i=0; $i<count($reps); $i++) {
          $rep=$reps[$i];
          if (is_dir($rep)) $col.="<font color=\"magenta\">[existait]</font> \n";
          elseif (!mkdir($rep, 0777))
               $col.="<font color=\"maroon\">[non créé] </font> \n";
          else $col.="<font color=\"green\">[ok] </font> \n";
      }


     if (isset($CB_mail_auto)) {
         //Envoi du mail automatique suivant le modèle choisi
         $from=decode($MAIL_FROM,$rne,$etab_id);
         $to=decode($MAIL_TO,$rne,$etab_id);     //ou plusieurs destinataires séparés par ','
         $cc=decode($MAIL_CC,$rne,$etab_id);     //idem
         $subject=decode($MAIL_SUBJECT,$rne,$etab_id);
         $err_mail=!envoi_mail($from,$to,$cc,$subject,"../data/modele_inscript.txt",$etab_id,$rne);
         }


      $html->colonne($col);
      $html->endrow();

      //recalculer les valeurs des variables fournies par les directives
      //----------------------------------------------------------------
      $dynamique=$dir_defaut; //on repart à "zéro" pour les variables autorisées
      //pour le nouvel étab, calculer les valeurs des variables dynamiques
      //modifiées par les directives
      //print_r($expr_user);
      foreach($expr_user as $cle=>$expr) {
          ob_start();                       //bloquer les sorties
          $result=eval("return $expr;");    //évaluer le membre droit de l'user
          $erreur=ob_get_contents();        //récupérer le msg d'erreur éventuel
          ob_end_clean();                   //vider le buffer
          if ($erreur) {
              fputs($fplog,"Etablissement $rne : $cle = ".$expr."\n");
              fputs($fplog,"Message d'erreur résultant : $erreur\n");
              fputs($fplog,"<br>\n");       //on joue sur 2 types d'affichages !
              $voirlog=true;
              }
          else $dynamique[$cle]=$result;    //stocker l'évaluation dans la bonne variable
          }
      cree_users($etab_id,$dynamique);
}
fclose($fp);
fclose($fplog);
$html->endtable();
if ($nb_erreurs>9) {
    print "<p><font color=\"yellow\">";
    print "L'analyse du fichier a été arrêtée : trop d'erreurs !</font></p><br />";
    }
if ($voirlog) {
    print "<p><br /><b><font color=\"red\">";
    print "Vérifiez les erreurs. Ci-dessous le contenu du fichier log</font></b></p><br /><hr>";
    include($ficlog);
    }
if ($err_mail) {
    print "<p><br /><b><font color=\"red\">";
    print "Erreur d'envoi du message confirmant la création. Vérifiez : <ul><li>La validité des adresses de messagerie saisies<li>L'existence du modèle dans le dossier data <li>La configuration de votre serveur SMTP dans php.ini</ul><br>Cette erreur de message n'a pas empêché la création des établissements !</font></b></p><br /><hr>";
   }

}
//==========================================
//--------  programme principal  -----------
//==========================================

//Paramètres MAIL automatique
$paramail=array('MAIL_FROM','MAIL_TO','MAIL_CC','MAIL_SUBJECT');
if (!isset($$paramail[1])) cree_mail_param($paramail);

if (!isset($traiter_fichiers)) { //$traiter_fichiers est affecté sssi un bouton a été cliqué (donc 2° passage)

    //1° passage : formulaire avec fichier à fournir.
    print "<p class=\"titre\">Importations de fichiers</p><hr width=\"30%\">";
    print"<table align='center' width='95%' border='0'><tr><td>";
    print "<p>Cette page, réservée au super-administrateur, permet d'importer
              des établissements dont les caractéristiques sont indiquées
              dans un fichier texte avec la même succession de champs que la
              page d'options de l'admin pour chaque ligne :
           <i>Voir la documentation pour plus de détails (lignes vides, lignes
              de remarques, valeurs par défaut, champs non indiqués)</i></p>";
     print "</td></tr></table>";
    //print "<p>&nbsp</p>";
    print "<FORM method=\"post\" name=\"formparam\" action=\"$PHP_SELF\" enctype=\"multipart/form-data\">\n";
    print "<FIELDSET class='forfield'>
            <LEGEND ACCESSKEY=F class='forfield' ><b>Fichier texte des établissements</b></LEGEND>\n";
    print "<table width=\"70%\" border=\"0\" align='center'>
           <tr>
              <td><div align=\"left\"> <br />
                       Sélectionnez le fichier texte à importer :
                       </div></td>
              <td><div align=\"left\"><br />
                       <input type=\"file\" name=\"fichier\">
                       <input type=\"hidden\" name=\"MAX_FILE_SIZE\" VALUE=\"4000000\">
                       </div></td>
           </tr>\n";
    print "<tr>
              <td><div align=\"left\"> <br />
                       Modèle de login <strong>élève</strong> pour TOUS les établissements : </div></td>
              <td><div align=\"left\"><br />
                       <input type=\"text\" name=\"emodele\" value=\"$modele_defe\"
                        onblur=\"verifmodele('pmodele')\"></div></td>
           </tr>\n";
    print "<tr>
              <td><div align=\"left\"> <br />
                       Modèle de login <strong>prof</strong> pour TOUS les établissements : </div></td>
              <td><div align=\"left\"><br />
                       <input type=\"text\" name=\"pmodele\" value=\"$modele_defp\"
                        onblur=\"verifmodele('emodele')\"></div></td>
           </tr>\n";
    print "<tr>
             <td colspan=2><i><div align=\"center\"> <br />
                        N.B. : les modèles pourront être modifiés localement par chaque admin d'établissement. </div></i></td>
          </tr>\n";
    print "</table>\n";
    print "</FIELDSET>";
    //Envoi automatique d'un message ?
    print"</br><table align='center' width='95%' border='0'><tr><td>";
    print "<p>Il est possible d'envoyer automatiquement un message individuel (publipostage)
              à la suite de la création en chaîne des établissements. </br>Le modèle proposé est dans le dossier data,
              sous le nom modele_inscript.txt.<br>
              Vous pouvez le modifier à votre goût, il peut contenir du texte pur ou  bien du code HTML.</p>\n";
    print "<p><div align='center'>Envoyer un message à chaque établissement : ";
    print "<input type='checkbox' name='CB_mail_auto' checked onclick='pas_de_mail()'></div></p>\n";
    print "</td></tr></table>";
    print "<FIELDSET class='forfield' ID='nomfield' TITLE='Saisie des adresses du message automatique'>
            <LEGEND ACCESSKEY=P class='forfield'><b>Paramètres du message</b></LEGEND>\n";
    print " <table width='100%'><tr><td><div align=\"center\">
                        <i>Vous pouvez utiliser dans vos saisies, les variables [rne] et [id] qui seront remplacées par le RNE et l'identifiant de l'établissement.<br>
                        Les champs marqués d'un * sont obligatoires.</div></i></td></tr></table>";
    print "<table  align='center' width=\"85%\" border=\"0\">\n";
    print "<tr>
              <td width='60%'height='35'><div align=\"left\" >
                       Adresse de messagerie de l'expéditeur du message (From :)   </div></td>
              <td><div align=\"left\">
                       <input type=\"text\" name=\"mail_from\" value=\"$MAIL_FROM\" size=40>*
                       </div></td>
          </tr>\n";
    print "<tr>
              <td width='60%'height='35'><div align=\"left\">
                       Adresse de messagerie du destinataire (To :) </br> <i><font color ='White'>(ou plusieurs séparées par des virgules)</font></i> </div></td>
              <td><div align=\"left\">
                       <input type=\"text\" name=\"mail_to\" value=\"$MAIL_TO\" size=40>*
                       </div></td>
          </tr>\n";
    print "<tr>
              <td width='60%' height='35'><div align=\"left\" width='60%'>
                       Adresse de messagerie du destinataire en copie (Cc :) </br><i><font color ='White'>(ou plusieurs séparées par des virgules)</font></i> </div></td>
              <td><div align=\"left\">
                       <input type=\"text\" name=\"mail_cc\" value=\"$MAIL_CC\" size=40>
                       </div></td>
          </tr>\n";
    print "<tr>
              <td width='60%'height='35'><div align=\"left\"> <br />
                       Objet du message envoyé (Subject :)  </div></td>
              <td><div align=\"left\"><br />
                       <input type=\"text\" name=\"mail_subject\" value=\"$MAIL_SUBJECT\" size=50>*
                       </div></td>
          </tr>\n";
    print "</table>\n";
    print "</FIELDSET>";


    print "<p align=\"center\">\n";
    print "<input type='submit' class='coul' name='traiter_fichiers' value='Inscrire les établissements'
            onclick=\"return (verifmodele('emodele') && verifmodele('pmodele'))\">\n";
    print "</p>\n";
    print "</FORM><br />\n";

}

// Deuxième passage : on effectue l'action
else {


    $erreur="";
    $copies="";
    $infosfichier=$_FILES['fichier'];
    $nom=strtolower($infosfichier['name']);
    if (empty($nom)) erreur('Pas de fichier indiqué !');
    $type=$infosfichier['type'];
    $tmp_name=$infosfichier['tmp_name'];
    $size=$infosfichier['size'];
    $error=$infosfichier['error'];
    if ($tmp_name=='none' || $size==0) erreur("Le fichier n'existe pas ou a une taille nulle ou trop importante.");
    if ($error) erreur("Erreur $error pour $nom (tmp_name=$tmp_name)");
    if (!eregi("\.txt$",$nom)) erreur("Le fichier DOIT avoir l'extension .txt !");
    $dest="$HIDEDATA/".date("Y_m_d_").$nom;
    if (!move_uploaded_file($tmp_name,creertousrep($dest))) erreur("Erreur de copie vers $dest.");


    //on sauve les paramètres de mail dans _paramsglobaux
    if (isset($CB_mail_auto))  sauve_mail_param($paramail);
    recupvars();
    traiter_etabs($dest);

    print "</body></html>";
}
?>