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

This file is part of Gibii.

Gibii 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 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; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

****************************************************************************/



require ("../include/vars_adm.php");
require ("../include/util.inc.php");
require ("../include/utiljs.php");
opensession("Admin",false);
recuprequest();//exceptionnellement, refaire passer les POST avant les SESSION (cas des admins qui reviennent sur la page)
connecte($host,$user,$mdp,$db);

//transgresse éventuellement php.ini pour ce script
ini_set('file_uploads','On');         //autorise l'upload
ini_set('upload_max_filesize','5M');  //d'au plus 5 Mo

$tlibelles  =array(1=>"Incorporer les élèves (F_ELE.DBF)",
                   "Incorporer les profs (F_WIND.DBF)",
                   "Incorporer les classes des profs (F_MEN.DBF)",
                   "Incorporer les élèves du fichier <b>eleves.txt</b>",
                   "Incorporer les profs du fichier <b>profs.txt</b>");
$tfichiers  =array(1=>"f_ele.dbf", "f_wind.dbf", "f_men.dbf",
                   "eleves.txt", "profs.txt");
$tnomschamps=array(1=>"f_ele","f_wind","f_men","eleves","profs");
$tvarfic    =array(1=>"fichierele","fichierwind","fichiermen",
                   "fichiereleves","fichierprofs");
$tvarincor  =array(1=>"incorele","incorwind","incormen",
                   "incoreleves","incorprofs");

foreach(array_merge($tvarfic,$tvarincor) as $var) {
    //effacer d'éventuelles variables de sessions dont les valeurs
    //perturberaient en cas de 2e exécution
    unset($$var);
    //mettre en session (pour une première exécution dans la session)
    session_puts($var);
}
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" href="../themes/<?php print $etab_theme ?>/b2i.css">
<script type="text/javascript">
function modifierActivation(elemdiv,activer) {
    tabp=elemdiv.getElementsByTagName("P");
    premierp=tabp[0];
    for (i=0 ; i<tabp.length ; i++) {
        if (activer) tabp[i].removeAttribute("style");
        else tabp[i].setAttribute("style","color: grey");
        //alert(elemp.nodeType + '- '+elemp.id+'- style='+elemp.getAttribute("style"));
        }
    tabinput=elemdiv.getElementsByTagName("INPUT");
    //alert(tabinput.length);
    //on commence à 1 pour éviter le INPUT du niveau actuel
    for (i=1 ; i<tabinput.length ; i++) {
        //alert(elemp.nodeType + '- '+elemp.id+ ' - style='+elemp.getAttribute("style"));
        elemp=tabinput[i];
        //alert(elemp.nodeType + '- '+elemp.id+ ' - style='+' - name='+elemp.nodeName+' - style='+elemp.getAttribute("style"));
        if (activer) tabinput[i].removeAttribute("disabled");
        else tabinput[i].setAttribute("disabled","disabled");
        //alert(elemp.nodeType + '- '+elemp.id+'- style='+elemp.getAttribute("style"));
        }
    }

function clicrad(radio) {
    //radio.name donne (par ex.) "loginsfournis"
    elem=radio.parentNode;
    //cocher cet élement et autoriser ses enfants
    modifierActivation(elem,true);
    //décocher l'autre élément et interdire ses enfants
    nomclasse=elem.id.substring(0,3);
    idautre=1-elem.id.substring(3,4);
    elemautre=document.getElementById(nomclasse+idautre);
    modifierActivation(elemautre,false);
    //alert(elemautre.nodeType + ' - '+elemautre.id);
    }
</script>

<style type="text/css">
        <!--
        div.option {
        }
        div.option h4 {
            margin-bottom: 2px;
            margin-top:6px;
        }
        div.option div {
            margin-left: 3em;
            margin-top:3px;
            font-size: 10pt;
        }
        div.option div p {
            margin-left: 3em;
            font-size: 8pt;
            margin-top: 2px;
            margin-bottom: 1px;
        }
        div.option div input {
            width: 1.2em;
            height: 1.2em;
            vertical-align: middle;
        }
        div.option div p input {
            width: 0.8em;
            height: 0.8em;
            vertical-align: middle;
        }
        -->
</style>
</head>

<body class="arialadmin">

<?php
require("../include/utiljs.php");
$PHP_SELF=basename($_SERVER['PHP_SELF']);

if ($typefic=='txt') {
   $deb=4;$fin=5;
}
else {
    $deb=1;$fin=3;
}

if (!isset($envoific)) { //$envoific est affecté sssi 2° passage
    //1° passage : formulaire avec des fichiers à fournir.

    //récupérer les variables de POST et les mettre en session
    if (empty($purgefic)) $purgefic=0; else $purgefic=1; //changement de type ou affectation
    //if (empty($razmdp))   $razmdp=0; else $razmdp=1;
    session_puts('purgefic','typefic');
    print "<h2>Incorporation des utilisateurs - Choix des fichiers : Type  $typefic</h2>";
    print "<FORM method=\"post\" action=\"$PHP_SELF\" enctype=\"multipart/form-data\">\n";

    if ($typefic=='txt') {
    	
        //explications sur les fichiers TXT
        $aster="<span style=\"color: Red;font-weight: bold;\">*</span>";
        print "<table border=\"1\" ><TR class= \"paire\" ><TD style=\"padding: 15px;\">";
        print "<a href=\"javascript:void(0);\" onclick=\"javascript:w=open('pop_docfictxt.php','explication','height=400,width=700,scrollbars=yes,status=no');w.focus();\">\n";
		print "<b><u>Voir la structure des fichiers TXT </u></b>";
		print "</a><i>(voir doc annexes pour des exemples) :</i><br />\n";
        print "</td></tr></table>\n";
        }
    $numerotage=1;
    $type="disc";
    print "<TABLE border = \"0\" class=\"file\" >\n";
    print "<UL>\n";
    for ($i=$deb; $i<=$fin; $i++) {
        print "<TR><TD><li type=\"$type\"><strong>".$numerotage++."</strong></li></TD>\n";
        print "<td width=\"300\"> - ".$tlibelles[$i]."</td>\n";
        print "<TD>&nbsp;</TD><TD>\n"; //cellule vide
        print "<input type='file' name='".$tnomschamps[$i]."'>";
        print "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" VALUE=\"4000000\">";
        print "</TD></TR>";
        }   //fin for
    print "</UL>";
    print "</table>";


    //echo "<p style=\"text-align:left\">";
    print "<input type=\"hidden\" name=\"test\" value=\"ok\">";
    if ($typefic=='txt') {
        //options pour fichiers textes
        //----------------------------
        ?>
        <div class="option">
            <h4>Options pour les logins</h4>
            <div id="log0">
                <input type="radio" name="logfournis" value="0" checked="checked" onclick="clicrad(this);"/>
                Ils ne sont pas fournis dans le fichier texte
                <!--
                <p>
                    <input type="radio" name="razlog" value="0" checked="checked" />
                    Ne pas modifier les logins des anciens retrouvés dans les fichiers textes
                </p>
                <p>
                    <input type="radio" name="razlog" value="1"  title="pr.1 remplacé par pr s'il est libre" />
                    Simplifier si possible les logins de ces anciens retrouvés
                </p>
                -->
            </div>

            <div id="log1">
                <input type="radio" name="logfournis" value="1"  onclick="clicrad(this);" />
                Ils sont fournis dans le fichier texte. En cas de conflit avec un login déjà présent dans la base :
                <p>
                    <input type="radio" name="logprioanc"  value="1" checked="checked" disabled="disabled" />
                    celui de la base aura la priorité et celui du fichier texte sera modifié
                </p>
                <p>
                    <input type="radio" name="logprioanc"  value="0" disabled="disabled" />
                    celui du fichier texte aura la priorité et celui de la base sera modifié
                </p>
            </div>
        </div>

        <div class="option">
            <h4>Options pour les mots de passe</h4>
            <div id="mdp0">
                <input type="radio" name="mdpfournis" value="0" checked="checked"  onclick="clicrad(this);" />
                Ils ne sont pas fournis dans le fichier texte
                <p>
                    <input type="radio" name="razmdp" value="0" checked="checked"/>
                    Ne pas modifier les mdp des anciens
                </p>
                <p>
                    <input type="radio" name="razmdp" value="1" />
                    Remettre à leurs valeurs par défaut ceux des anciens qui perdurent
                </p>
            </div>
            <div id="mdp1">
                <input type="radio" name="mdpfournis" value="1"  onclick="clicrad(this);" />
                Ils sont fournis dans le fichier texte
                <p >
                    <input type="radio" name="mdpenclair" value="1" checked="checked" disabled="disabled" />
                    en clair
                </p>
                <p >
                    <input type="radio" name="mdpenclair" value="0" disabled="disabled" />
                    déjà cryptés MD5 par un autre programme
                </p>
            </div>
        </div>
        <?php
        }
    else {
        //option pour fichiers dbf
        //------------------------
        ?>
        <p>
        <!-- Valeurs pour singer les fichiers txt -->
        <input type="hidden" name="logfournis" value="0" />
        <input type="hidden" name="razlog" value="0" />
        <input type="hidden" name="mdpfournis" value="0" />
        <input type="checkbox" name="razmdp" />
        Mettre ou remettre les mots de passe à leurs valeurs par défaut
        </p>
        <?php
        }
    print "<p class=\"warning\"><input type='submit' class='coul' name='envoific' value='Traiter les fichiers'>\n";
    print "&nbsp;&nbsp;&nbsp;";
    print "Si vous hésitez pour les options, laissez les valeurs par défaut !</p>\n";
    print "</form>\n";
    }
// Deuxième passage
else {
    $erreur="";
    $copies="";

    if (empty($razlogin))   $razlogin=0; else $razlogin=1;
    if (empty($razmdp))   $razmdp=0; else $razmdp=1;
    session_puts('razlogin','razmdp');
    //vider les variables de session (peut-être affectées par un passage précédent)
    $fichierele='';$fichierwind='';$fichiermen='';$fichiereleves='';$fichierprofs='';
    $incorele=0;$incorwind=0;$incormen=0;$incoreleves=0;$incorprofs=0;
    $alerte="";
    for ($i=$deb; $i<=$fin; $i++) {
        $libellechamp=$tnomschamps[$i];
        $infosfichier=$_FILES[$libellechamp];  //retourne un tableau
		$nom=strtolower($infosfichier['name']);
        if (empty($nom)) continue; //voir plus tard pour utilisation de copie existante
        $tbase=explode('.',$tfichiers[$i]);
        $masque="/^$tbase[0].*\.$tbase[1]$/i";
        if (!preg_match($masque,$nom)) {
            $alerte.="Le nom attendu est de la forme [$tbase[0]*.$tbase[1]] et non pas [$nom]. Ce fichier n'est pas pris en compte.\n";
            continue;
        }
        $type=$infosfichier['type'];
        $tmp_name=$infosfichier['tmp_name'];
        $size=$infosfichier['size'];
   		if (!($tmp_name=='none' && $size==0)) {
            //fichier existe et taille < x Mo
            $dest="$HIDEDATA/$etab_rne/individus/$etab_id".'_'.date("Y_m_d_").$nom;
            if (!move_uploaded_file($tmp_name,creertousrep($dest))) {
                $alerte.="Erreur de copie de [$monfichier] vers $dest.\n";
                continue;
            }
            //affecte l'une des variables de session suivantes du nom de fichier correspondant :
            //$fichierele,$fichierwind,$fichiermen,$fichiereleves,sfichierprofs
            ${$tvarfic[$i]}=$dest;         //par ex. $fichiereleves="$HIDEDATA/.../eleves.txt"
            ${$tvarincor[$i]}=1;           //par ex. $incoreleves=1
            session_puts($tvarfic[$i],$tvarincor[$i]);//session_puts('fichiereleves','incoreleves')
        }  // if (!($tmp_name...
    } //  for


    if (!empty($alerte)) {
        alert($alerte);  //warning seulement
        goto($PHP_SELF);
        }
    if ($typefic=='dbf' && $incormen && !$incorwind) {
        alert("Impossible d'importer F_MEN.DBF seul. Il va avec F_WIND.DBF. <br />");
        goto($PHP_SELF);
        }
    session_puts('logfournis','mdpfournis');
    if ($logfournis) session_puts('logprioanc');
    else session_puts('razlog');
    if ($mdpfournis) session_puts('mdpenclair');
    else session_puts('razmdp');

    if ($typefic=='txt') {
    	$verif_entete=1;
        goto('txt2tables.php?verif_entete=1&op=');
        }
    else {
        goto('gep2txt.php#fingep');
        }
} //else  if (!isset($_POST["bouton"]))

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