<?php
/*
$Id: personnel.class.php,v 1.4 2006-11-02 13:53:53 fgiva Exp $
*/
require_once ("formulaire.class.php");
require_once ("dbformparc.class.php");

class personnel extends dbformparc {

    var $table="personnel";
    var $clePrimaire= "idutilisateur";
    var $typeCle= "N" ;
    
function personnel($id,&$db,$DEBUG) {
  $this->constructeur($id,$db,$DEBUG);
} // fin constructeur

function setVal(&$form,$maj,$validation){
  if ($validation==0) {
    if ($maj == 0){
//      $form->setVal('nature', get_class($this));
      $form->setVal('adlogin',"bureautique");
      $form->setVal('scanner',"f");
    }
  }
}
      
function setvalF($val){
$this->valF['idutilisateur'] = $val['idutilisateur'];
$this->valF['nom'] = $val['nom']; 
$this->valF['prenom'] = $val['prenom']; 
$this->valF['intervenant'] = $val['intervenant']; 
}

// NE SURTOUT PAS EFFACER SINON HERITAGE DES FONCTIONS DE CLASSE DBFORM DIFFERENTES
// pas d initialisation valF pour la cle primaire
function setValFAjout($val){  //pas de récupération cleprim car non fixe encore
}

// initialisation valF pour la cle primaire (désactivé)
function verifierAjout(){   //pas de verif cleprim car non fixee encore
}

function scanAD($val,&$db) { //mise à jour table personnel via LDAP
///**/require_once "../DB.php";   
include ("../dyn/connexionAD.php");
$DEBUG=0;
  echo ("<BR>Connexion à Active Directory");
  $ldapserver=ldap_connect($domaine);   //extension LDAP necessaire + copie 2 dll ds system32
  if(!$ldapserver) {
    $this->msg=$this->msg."<br>Active Directory non disponible !";
  } else {
    $bind = ldap_bind($ldapserver,"cn=".$val["adlogin"].",$dsiuo",$val["adpassword"]);
    if(!$bind) {
      $this->msg=$this->msg."<br>Nom ou mot de passe incorrect !";
    } else {
      $result = ldap_search($ldapserver,$base_dn,$filter,$inforequired);
      $info = ldap_get_entries($ldapserver,$result);
      if($info["count"] == 0) {
        $this->msg=$this->msg."<br>Aucune information disponible !";
      } else {
        for($i=0;$i<$info["count"];$i++) {
          if($DEBUG==1)
            echo "Info ".$info[$i]["userprincipalname"][0];
          if (array_key_exists("userprincipalname",$info[$i])) {
             $usermairie=strpos($info[$i]["userprincipalname"][0],".")<strpos($info[$i]["userprincipalname"][0],"@");
             $usermairie=$usermairie && strpos($info[$i]["userprincipalname"][0],".")>0;
             $usermairie=$usermairie && array_key_exists("givenname",$info[$i]);
             $usermairie=$usermairie && array_key_exists("sn",$info[$i]);
          } else
             $usermairie=false;
          if ($usermairie) {  //utilisateur mairie
            $valF=array();
            if (!is_null($info[$i]["userprincipalname"][0]))
              $valF["login"] = substr($info[$i]["userprincipalname"][0],0,strpos($info[$i]["userprincipalname"][0],"@"));
            if(array_key_exists("telephonenumber",$info[$i]))
//            if(!is_null($info[$i]["telephonenumber"][0]))
              $valF["telephone"] = $info[$i]["telephonenumber"][0];
            $ou=substr($info[$i]["dn"],strpos($info[$i]["dn"],",")+4);
            $ou=substr($ou,0,strpos($ou,","));
            $sql = "SELECT idserviceou from serviceou where libserviceou = '".$this->cleanName($ou)."'";
            $idserviceou =$db->getOne($sql);
            if ($DEBUG==1) echo ("la requete service ".$sql);
            if  (is_null($idserviceou)) {     //nouveau service
              $valF2=array();
              $idserviceou=$db->nextId("serviceou");
              $valF2["idserviceou"]=$idserviceou; 
              $valF2["libserviceou"]=$ou; 
              $res= $db->autoExecute("serviceou",$valF2,DB_AUTOQUERY_INSERT);
              if (DB :: isError($res))
                echo $res->getDebugInfo()." ".$res->getMessage();
              echo ("<BR>Ajout de l'Unité Organisationnelle ".$ou);
            } else {   //service existant
            }
            $valF["idserviceou"]=$idserviceou;        
            if ($ou==$ouintervenant)
              $valF["intervenant"] ="v";
            else
              $valF["intervenant"] ="f"; 
            $valF["datescan"] =date("Y-m-d"); 
            $sql =  "SELECT idutilisateur from personnel where nom = '".$this->cleanName($info[$i]["sn"][0])."' and 
            prenom = '".$this->cleanName($info[$i]["givenname"][0])."'";
            $id =$db->getOne($sql);
            if ($DEBUG==1) echo ("la requete utilisateur ".$sql);
            if (is_null($id)) {     //nouvel utilisateur ds personnel
              echo ("<BR>Ajout de l'Utilisateur ".$info[$i]["sn"][0]." ".$info[$i]["givenname"][0]);
              $valF["idutilisateur"] = $db->nextId("personnel");
              $valF["nom"] = $info[$i]["sn"][0];
              $valF["prenom"] = $info[$i]["givenname"][0];
              $res= $db->autoExecute("personnel",$valF,DB_AUTOQUERY_INSERT);
              if (DB :: isError($res)) 
                echo $res->getDebugInfo()." ".$res->getMessage();
            } else {   //utilisateur existant
              //verifier eventuellement ou, telephone, login
              echo ("<BR>Mise à jour de l'Utilisateur ".$info[$i]["sn"][0]." ".$info[$i]["givenname"][0]);
              $cle=" idutilisateur = ".$id;
              $res= $db->autoExecute("personnel",$valF,DB_AUTOQUERY_UPDATE,$cle);
              if (DB :: isError($res)) 
                echo $res->getDebugInfo()." ".$res->getMessage();
            }
          }

      /*    $res= $db->autoExecute("personnel",$valF,DB_AUTOQUERY_INSERT);
           if (DB :: isError($res))
                 $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');

          $sql= "delete from personnel where ".$cle;
          $res= $db->query($sql);

          $cle= $this->clePrimaire." = ".$id;
          $res= $db->autoExecute("personnel",$valF,DB_AUTOQUERY_UPDATE,$cle);  */
        }
      }
    }
  }   
}

function setId($db){
// id automatique nextid
$this->valF['idutilisateur'] = $db->nextId($this->table);
}

function ajouter($val,&$db,$DEBUG){  //surcharge pour verifier($db)
// parametrage                       // et scan active directory via
  $this->msg="";                     // scanAD
// valF
  $this->setValFAjout($val);
  $this->setValF($val);
  if ($val["scanner"]=="f") { //ajouter que si scan désactivé
    $this->verifier($db);    
    $this->verifierAjout();    
    if ($this->correct){
      $this->triggerajouter(0/*$id*/,$db,$val,$DEBUG);
      $this->setId($db); // id automatique
      $res= $db->autoExecute($this->table,$this->valF,DB_AUTOQUERY_INSERT);
      if (DB :: isError($res))
        $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
      else{
        if ($DEBUG == 1)
          echo "La requête de mise à jour est effectuée.<br>";
        $this->msg=$this->msg."<br>Enregistrement ".
        $this->valF[$this->clePrimaire]." de la table ".
        $this->table." [".$db->affectedRows().
        " enregistrement ajouté]" ;
      } // requete maj
    } else
      $this->msg=$this->msg. "<br> non enregistré";
  } else
    $this->scanAD($val,$db); //scan AD si scanner='v'
}

function modifier($val,&$db,$DEBUG){  //surcharge pour verifier($db)
 // valF
    $id=$val[$this->clePrimaire];
    $this->setValF($val);
    $this->verifier($db);  //ajout fred  $db necessaire 
 if ($this->correct){
    $this->triggermodifier($id,$db,$val,$DEBUG);
    if($this->typeCle=="A")
           $cle= $this->clePrimaire." = '".$id."'";
    else
           $cle= $this->clePrimaire." = ".$id;
    $res= $db->autoExecute($this->table,$this->valF,DB_AUTOQUERY_UPDATE,$cle);
        if (DB :: isError($res))
              $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
              else{
              if ($DEBUG == 1)
              echo "La requête de mise à jour est effectuée.<br>";
              $this->msg=$this->msg."Enregistrement ".$id." de la table ".
              $this->table." [".$db->affectedRows().
              " enregistrement mis à jour]" ;
              } // requete maj
}}

function cleSecondaire($id,$db,$val,$debug) {
  $this->rechercheInstances($id,$db,$debug) ;
}

function verifier(&$db){
  include ("../dyn/connexion.php");
  include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
  $this->correct=True;
  if ($this->valF['nom']==""){
     $this->correct=false;
     $this->msg= $this->msg."<br>Nom obligatoire";
  }
  if ($this->valF['prenom']==""){
     $this->correct=false;
     $this->msg= $this->msg."<br>Prénom obligatoire";
  }
  $id=$db->getOne("select idutilisateur from personnel where concat(nom,' ',prenom) = '".$this->valF['nom']." ".$this->valF['prenom']."'");
  if (is_numeric($id)){
    if ($id!=$this->valF["idutilisateur"]) {
      $this->correct=false;
      $this->msg= $this->msg."<br>Nom déjà existant!";
    }
  }
}//verifier

function setType(&$form,$maj) {
  if ($maj < 2) { //ajouter et modifier
    $form->setType('intervenant','select');
    if($maj==0) {
      $form->setType('idutilisateur', 'hidden');
      $form->setType('libserviceou', 'hidden');
      $form->setType('login', 'hidden');
      $form->setType('telephone', 'hidden');
      $form->setType('datescan', 'hidden');
      $form->setType('scanner', 'select');
      $form->setType('adpassword', 'password');
    } else {
      $form->setType('idutilisateur', 'hiddenstatic');
      $form->setType('intervenant','hiddenstatic');
      $form->setType('libserviceou', 'hiddenstatic');
      $form->setType('login', 'hiddenstatic');
      $form->setType('telephone', 'hiddenstatic');
      $form->setType('datescan', 'hiddenstatic');
      $form->setType('scanner', 'hidden');
      $form->setType('adlogin', 'hidden');
      $form->setType('adpassword', 'hidden');
    }
  } else { // supprimer
    $form->setType('idutilisateur', 'hiddenstatic');
    $form->setType('intervenant','hiddenstatic');
    $form->setType('nom', 'hiddenstatic');
    $form->setType('prenom', 'hiddenstatic');
    $form->setType('libserviceou', 'hiddenstatic');
    $form->setType('login', 'hiddenstatic');
    $form->setType('telephone', 'hiddenstatic');
    $form->setType('datescan', 'hiddenstatic');
    $form->setType('scanner', 'hidden');
    $form->setType('adlogin', 'hidden');
    $form->setType('adpassword', 'hidden');
  }
  $form->setType('idserviceou','hidden');
}

//function setTaille(&$form,$maj){
//$form->setTaille('observation', 70);
//}

//function setMax(&$form,$maj){
//$form->setMax('observation', 4);
//}

function setSelect(&$form, $maj,$db,$debug) {
  if($maj<2){
    $contenu=array();
    $contenu[0]=array('f','v');
    $contenu[1]=array('NON','OUI');
    $form->setSelect("intervenant",$contenu);
    if ($maj==0) $form->setSelect("scanner",$contenu);
  }
}

/*function setGroupe(&$form,$maj){
    $form->setGroupe('ipa','D');
    $form->setGroupe('ipb','G');
    $form->setGroupe('ipc','G');
    $form->setGroupe('ipd','F');
//    $form->setGroupe('ipmaitre','G');
}*/

function setLib(&$form,$maj) {
  $form->setLib('scanner','Scanner Active Directory?');
  $form->setLib('adlogin','Login AD');
  $form->setLib('adpassword','Mot de passe AD');
}

//
function setOnchange(&$form,$maj){
//  $form->setOnchange("scanner","cachermontrer(this)");

?>
<script language="javascript">
function cachermontrer(champ){
}
</script>
<?php
}  

//(recherche instances  avant suppression) non definie ds cl filles
function rechercheInstances($id,$db,$debug){
  $this->correct=True;
  $atable=array("station","element");
  foreach ($atable as $table) {
    $sql = "select * from ".$table." where idutilisateur = ".$id;
    $res = $db->query($sql);
    if($debug==1) echo $sql;
    if (DB :: isError($res))
      die($res->getMessage(). " => Echec  ".$sql);
    else{
      $nbligne=$res->numrows();
      $this->msg = $this->msg." il y a ".$nbligne.
      " enregistrement(s) en lien dans la table ".$table." pour l'utilisateur[".
      $id."]";
      if ($nbligne>0)
        $this->correct=false;
    }
  }  
}

function cleanName($name) {
  $name=str_replace("'","\'",$name);
  return $name;
}

}// fin de classe
?>