ulvis.paste.net - pastebin

Paste Search Dynamic
Recent pastes
PHP with SQL
  1. <?php
  2.  
  3. /**
  4.  *
  5.  *
  6.  * @version $Id$
  7.  * @copyright 2014
  8.  */
  9.  
  10. require_once(dirname(__file__).'/class-ocihexa.php');
  11. require_once(dirname(__file__).'/fonctions.php');
  12. require_once(dirname(__file__).'/config.php');
  13.  
  14.  
  15. $ldapID = ldap_connect(ldapServer, ldapServerPort)
  16.         or die("Impossible de se connecter au serveur LDAP " . ldapServer);
  17. if ($ldapID)
  18. {
  19.         /* Changement du Protocole V3*/
  20.         if (!ldap_set_option($ldapID, LDAP_OPT_PROTOCOL_VERSION, 3)) die("erreur protocole") ;
  21.         if (!ldap_set_option($ldapID, LDAP_OPT_REFERRALS, 0)) die("erreur referrals");
  22. }
  23.  
  24. // binding to ldap server
  25. $ldapbind = ldap_bind($ldapID, ldapUser, ldapPassword) or die ("Error trying to bind: ".ldap_error($ldapID));
  26. if (!$ldapbind) die ("error ldapbind");
  27. /* connection à la base Salto  */
  28. try
  29. {
  30.         $bd_salto = new PDO('mysql:host='.salto_host.';dbname='.salto_db_name.'', ''.salto_user.'', ''.salto_pass.'');
  31. }
  32. catch (Exception $e)
  33. {
  34.         die('Erreur : ' . $e->getMessage());
  35. }
  36. /*récupération de la date du jour*/
  37. $date=date("Ymd");
  38.  
  39. /* Récupération des comptes à exclure des créations*/
  40. $resExclusCreation="(";
  41. $dbExclusCreation=new Connection($servergd);
  42. $selectExclusCreation="(select distinct(Matricule) from ld_exclusion)";
  43. $resSelectExclusCreation=$dbExclusCreation->ExecuteQuery($selectExclusCreation);
  44. while($dbExclusCreation->MapRecord())
  45. {
  46.         $resExclusCreation.="'".$dbExclusCreation->FieldByName("Matricule")."',";
  47. }
  48. $resExclusCreation=substr($resExclusCreation, 0,-1). ")";
  49.  
  50. /**
  51.  * *============================================================================
  52.  *
  53.  *                              Synchronisation
  54.  *
  55.  * =============================================================================
  56.  */
  57. // différences entre LDAP et Hexagone
  58. $fSynchro=fopen(dirname(__file__)."/extract/m_$date.csv","w+");//gestion modification
  59. $fAbsents=fopen(dirname(__file__)."/extract/c_$date.csv","w+");//gestion création
  60. $fReact=fopen(dirname(__file__)."/extract/r_$date.csv","w+");//gestion reactivation
  61.  
  62. $resSynchroSansMetier='';
  63. $resAbsentsSansMetier='';
  64. $resSynchro='';
  65. $resAbsents='';
  66. $resReact='';
  67.  
  68. // Traitement compte actif RH
  69. $dbSynchro=new Connection($server);
  70. $selectSynchro="select distinct Ent.Position,Ent.Sortdef,Ent.Matri,Civ.Nom,Civ.Prenom, to_char(ENT.ENTDEF,'YYYY-MM-DD HH24:MI:SS') as ENTDEF from GRH01.HGAENT Ent, GRH01.HGACIV Civ
  71. where Ent.Matri=Civ.Matri
  72.    and nvl(Ent.Sortdef,sysdate)<>Ent.Entdef
  73.    and ENT.ENTDEF<trunc(sysdate+4)
  74.    and (nvl(Ent.Sortdef,sysdate)>sysdate or (Ent.Sortdef is null and ENT.ENTDFI>sysdate)
  75.    and not exists
  76.        ( select ent2.matri from GRH01.HGAENT ent2 where  ent2.matri=ent.matri and (nvl(Ent2.sortdef,sysdate)>sysdate))
  77.        )
  78.                and Ent.Matri not in ".$resExclusCreation;
  79.  
  80. $resSelectSynchro=$dbSynchro->ExecuteQuery($selectSynchro);
  81.  
  82. while($dbSynchro->MapRecord())
  83. {
  84. /*
  85.         if (!isset($matri_courant_synchro)) {
  86.                 echo("debut du traitement <br>");
  87.         }
  88. */
  89.         $matri_courant_synchro = $dbSynchro->FieldByName("Matri");
  90.  
  91.         if($dbSynchro->FieldByName("Nom")!='' && $dbSynchro->FieldByName("Prenom")!='')
  92.                 $identiteSynchro = strip_accents($dbSynchro->FieldByName("Nom")).",".prenom_majuscule(strtolower(strip_accents($dbSynchro->FieldByName("Prenom"))));
  93.         else $identiteSynchro='';
  94.  
  95.         $dateEntSynchro = $dbSynchro->FieldByName("Entdef");
  96.         $dateTraitement =date('Y-m-d')." 00:00:00";
  97.         if ($dateEntSynchro>$dateTraitement) {
  98.                 $creation=true;
  99.         } else {
  100.                 $creation=false;
  101.         }
  102.  
  103.         $pole_uf=recup_pole_uf($matri_courant_synchro,$server,$creation);
  104.         $pole_uf=explode(",",$pole_uf);
  105.         $ufSynchro=strtoupper(strip_accents($pole_uf[0]));
  106.         $poleSynchro=strtoupper(strip_accents($pole_uf[1]));
  107.  
  108.         $metierSynchro=recup_metier($matri_courant_synchro,$server,$creation);
  109.         $dateEntSynchro = $dbSynchro->FieldByName("Entdef");
  110.  
  111.         if($identiteSynchro=='' || $pole_uf=='NOK' || $pole_uf=='' || $ufSynchro=='NOK' || $poleSynchro=='NOK' || $metierSynchro=='NOK' || $metierSynchro=='')
  112.         {
  113.         // Log erreur compte RH
  114.         //      echo("erreur recup infos pour ".$matri_courant_synchro." identite ".$identiteSynchro." pole ".$poleSynchro." uf ".$ufSynchro." métier ".$metierSynchro."<br>");
  115.         }
  116.         else
  117.         {
  118.                 // Recup infos LDAP et comparaison
  119.                 $filtreSynchro="(cn=".$matri_courant_synchro.")";
  120.                 $synchronisation=array("employeenumber","title","sn","givenname","company","department","useraccountcontrol");
  121.                 $srSynchro=ldap_search($ldapID,ldapBaseDN,$filtreSynchro,$synchronisation)
  122.                         or die ("Error in search query: ".ldap_error($ldapID));
  123.                 $infoSynchro = ldap_get_entries($ldapID, $srSynchro);
  124.                 /**************************************************************************
  125.                  Traitement matricules existants sous LDAP
  126.                  **************************************************************************/
  127.  
  128.                 if($infoSynchro["count"]!=0)
  129.                 {
  130.                 //      if ($matri_courant_synchro=='990050') die ($infoSynchro[0]["userAccountControl"][0]);
  131.                         if(!isset($infoSynchro[0]["title"][0]))
  132.                                 $infoSynchro[0]["title"][0]='';
  133.                         // *****************************************************
  134.                         // Réactivation des comptes désactivés
  135.                         // *****************************************************
  136.                         //if(isset($infoSynchro[0]['sambaacctflags'][0])&&strpos($infoSynchro[0]["sambaacctflags"][0], 'D')!==false)
  137.                 //      if ($matri_courant_synchro=='075809') die ($infoSynchro[0]["useraccountcontrol"][0]);
  138.  
  139.                         if(isset($infoSynchro[0]['useraccountcontrol'][0]))
  140.                         {
  141.                                 $userAccountControl = (int) $infoSynchro[0]["useraccountcontrol"][0];
  142.                         //if ($matri_courant_synchro=='075809') echo ("user account control >$userAccountControl< et binaire >".($userAccountControl & 0x00000002)."< résultat attendu >".(0x00000002)."< <br>");
  143.                                 if ((bool)($userAccountControl & 0x2)==true)
  144.                                 {
  145.                                 //      if ($matri_courant_synchro=='075809') die ("user account control >$userAccountControl< et binaire >".($userAccountControl & 0x00000002)."< résultat attendu >".(0x00000002)."<");
  146.  
  147.                                 //      echo("traitement compte désactivé ".$identiteSynchro."<br>");
  148.  
  149.                                         $reqExclu="select Matricule from GEDEON.LD_EXCLUSION where Matricule=$matri_courant_synchro";
  150.                                         $resReqExclu=$dbExclu->ExecuteQuery($reqExclu);
  151.                                         if ($dbExclu->MapRecord()===false)
  152.                                         {
  153.                                                 // transmet à Salto info réactivation du compte (2=modification)
  154.                                                 envoie_salto(2,$matri_courant_synchro,$identiteSynchro,$metierSynchro,$ufSynchro,$poleSynchro,$dateEntSynchro,$bd_salto,$server,'r');
  155.                                                 $resReact.=$matri_courant_synchro.",".$identiteSynchro.",".$metierSynchro.",".$ufSynchro.",".$poleSynchro."\n";
  156.                                         }
  157.                                 }// else if ($matri_courant_synchro=='075809') die ("fail user account control >$userAccountControl< et binaire >".($userAccountControl & 0x00000002)."< résultat attendu >".(0x00000002)."<");
  158.                         }
  159.  
  160.  
  161.                 //      if ($matri_courant_synchro=='020626')echo("<br> Nom AGFA <".$dbSynchro->FieldByName("Nom")."> Nom LDAP <".$infoSynchro[0]["sn"][0]."> <br>");
  162.  
  163.                         /******************************************************************
  164.                         * Traitement des modifications
  165.                         ******************************************************************/
  166.                         if($dbSynchro->FieldByName("Nom")!=$infoSynchro[0]["sn"][0]
  167.                                 ||$dbSynchro->FieldByName("Prenom")!=strtoupper($infoSynchro[0]["givenname"][0])
  168.                                 ||$metierSynchro!=$infoSynchro[0]["title"][0]
  169.                                 //||$ufSynchro!=$infoSynchro[0]["departmentnumber"][0]
  170.                                 ||$ufSynchro!=$infoSynchro[0]["department"][0]
  171.                                 //||$poleSynchro!=$infoSynchro[0]["description"][0])
  172.                                 ||$poleSynchro!=$infoSynchro[0]["company"][0])
  173.  
  174.                         {
  175.                         //      echo("traitement compte modifié ".$identiteSynchro."<br>");
  176.                                 // transmet info modification du compte à Salto (3= modification ou création si inexistant)
  177.                                 envoie_salto(3,$matri_courant_synchro,$identiteSynchro,$metierSynchro,$ufSynchro,$poleSynchro,$dateEntSynchro,$bd_salto,$server);
  178.                                 $resSynchro.=$matri_courant_synchro.",".$identiteSynchro.",".$metierSynchro.",".$ufSynchro.",".$poleSynchro."\n";
  179.                                 //      if ($matri_courant_synchro=='828220')echo("<br> $resSynchro <br>");
  180.                                 //$mailSynchro=1;
  181.                         }
  182.  
  183.  
  184.  
  185.                 }
  186.                 /************************************************************************
  187.                  Traitement matricules absents sous LDAP
  188.                  ************************************************************************/
  189.                 else
  190.                 {
  191.                         //      if ($matri_courant_synchro=='558656')echo("<br>pas trouvé LDAP <br>");
  192.                         if($identiteSynchro!='' && $pole_uf!='NOK' && $pole_uf!='' && $ufSynchro!='NOK' && $poleSynchro!='NOK')
  193.                         {
  194.                                 if($metierSynchro=='NOK')
  195.                                 {
  196.                                         //$mailAbsentsSansMetier=1;
  197.                                         $resAbsentsSansMetier.=$matri_courant_synchro.",".$identiteSynchro.",,".$ufSynchro.",".$poleSynchro."\n";
  198.                                 }
  199.                                 else {
  200.                                 //      echo ("traitement création compte ".$identiteSynchro."<br>");
  201.                                         //$mailAbsents=1;
  202.                                         // Transmet à Salto info création de compte
  203.                                         envoie_salto(3,$matri_courant_synchro,$identiteSynchro,$metierSynchro,$ufSynchro,$poleSynchro,$dateEntSynchro,$bd_salto,$server);
  204.                                         $resAbsents.=$matri_courant_synchro.",".$identiteSynchro.",".$metierSynchro.",".$ufSynchro.",".$poleSynchro."\n";
  205.                                 }
  206.                         }
  207.                 }
  208.         }
  209. }
  210. //echo("ecriture des fichiers <br>");
  211. fwrite($fSynchro,$resSynchro);
  212. fwrite($fAbsents,$resAbsents);
  213. fwrite($fReact,$resReact);
  214. fclose($fSynchro);
  215. fclose($fAbsents);
  216. fclose($fReact);
  217.  
  218. /*******************************************************************
  219. *    Traitement des sorties non interceptées
  220. * ******************************************************************/
  221. //echo("ouverture fichier");
  222. $fListe = fopen(dirname(__file__)."/extract/d_$date.csv","w+")// Recevra les désactivations temporaires
  223. $fListeDel = fopen(dirname(__file__)."/extract/s_$date.csv","w+");      // Recevra les suppressions
  224. $resListe = '';
  225. $resListeDel = '';
  226.  
  227. $dbListe=new Connection($server);
  228. /* La requête renvoie la liste des matricules sortis mais aussi ceux absents depuis plus de 10 jours
  229. *   et n'appartenant pas aux groupes informatique, directeurs
  230. *   les matricules absents remontent avec une date sortie à null permet de les exclure de la suppression
  231. */
  232.  
  233. // Partie à décommenter si prise en compte des absences
  234. /*$selectListe="select distinct Ent.Position,Ent.Sortdef,Ent.Matri,Civ.Nom,Civ.Prenom, decode(Ent.sortdef,null,null,null) as Datesor,
  235.    to_char(ENT.ENTDEF,'YYYY-MM-DD HH24:MI:SS') as ENTDEF from GRH01.HGAENT Ent,GRH01.HGACIV Civ,GRH01.HGAMET Met
  236.    where Ent.Matri=Civ.Matri and (ent.matri in (select distinct(ABS.MATRI) from GRH01.HGAABS ABS where ABS.ABSDEF<=sysdate and ABS.ABSDRET>sysdate and ABS.ABSJ30>10 ))
  237.    and Ent.Matri=Met.Matri and Met.Metdfi>sysdate and (Met.codmet not LIKE 'H35%' and Met.codmet not LIKE 'H45C%')
  238.    and ent.entdfi>sysdate
  239.    union */
  240. $selectListe=" select distinct Ent.Position,Ent.Sortdef,Ent.Matri,Civ.Nom,Civ.Prenom, TO_CHAR(Ent.sortdef,'YYYYMMDD') as Datesor,
  241.    to_char(ENT.ENTDEF,'YYYY-MM-DD HH24:MI:SS') as ENTDEF from GRH01.HGAENT Ent,GRH01.HGACIV Civ
  242.    where Ent.Matri=Civ.Matri and
  243.     (Ent.Sortdef is not null and Ent.Sortdef<=sysdate and Ent.Sortdef >= TO_DATE('20150101','YYYYMMDD') and Ent.Entdfi>sysdate
  244.    and nvl(Ent.SortDatRet,to_date('20991231','YYYYMMDD'))>sysdate and not exists (select ent2.matri from grh01.hgaent ent2 where ENT2.ENTDEF>=ENT.ENTDFI and ENT2.MATRI=ENT.MATRI))";
  245.  
  246. $resSelectListe=$dbListe->ExecuteQuery($selectListe);
  247. $actif='';
  248. $sortiesTemporaires=array("H8","I2","IB");      // Code position pour des sorties temporaires
  249.  
  250. while($dbListe->MapRecord())
  251. {
  252. /*
  253.         if (!isset($matri_courant_Liste)) {
  254.                 echo("debut du traitement sorties<br>");
  255.         }
  256. */
  257.         $matri_courant_Liste = $dbListe->FieldByName("Matri");
  258.         $dateEntListe = $dbListe->FieldByName("Entdef");
  259.  
  260.         if($dbListe->FieldByName("Nom")!='' && $dbListe->FieldByName("Prenom")!='')
  261.                 $identiteListe = strip_accents($dbListe->FieldByName("Nom")).",".prenom_majuscule(strtolower(strip_accents($dbListe->FieldByName("Prenom"))));
  262.         else $identiteListe='';
  263.  
  264.         $LibListe='';
  265.         $dbLibListe=new Connection($server);
  266.         if($dbListe->FieldByName("Position")!='')
  267.         {
  268.                 $selectLibListe="select LIBPOS from GRH01.HGTLPOS where GRH01.HGTLPOS.POSITION='".$dbListe->FieldByName("Position")."'";
  269.                 $resSelectLibListe=$dbLibListe->ExecuteQuery($selectLibListe);
  270.                 if ($dbLibListe->MapRecord())
  271.                         $LibListe=$dbLibListe->FieldByName("LIBPOS");
  272.                 else $LibListe='';
  273.         }
  274.         else $LibListe='';
  275.         $filtreListe="(uid=".$matri_courant_Liste.")";
  276.         //$restrictionListe=array("sambaacctflags");
  277.         $restrictionListe=array("useraccountcontrol");
  278.         $srListe=ldap_search($ldapID,ldapBaseDN,$filtreListe,$restrictionListe);
  279.         $infoListe = ldap_get_entries($ldapID, $srListe);
  280.  
  281.         /*Vérification statut du compte sous LDAP :
  282.            OK Compte actif
  283.            KO Compte désactivé (sambaacctflags contient D)
  284.            KKO compte inexistant dans LDAP
  285.         */
  286.         if($infoListe["count"]!=0)
  287.         {
  288.         //      if(strpos($infoListe[0]["sambaacctflags"][0], 'D')==false) /*&& compte_actif($matri_courant_Liste,$server))/*compte actif*/
  289.                 if (isset($infoListe[0]['useraccountcontrol'][0])) $userAccountControl= (int) $infoListe[0]['useraccountcontrol'][0]; else $userAccountControl=0;
  290.                 //if ($userAccountControl & 0x00000002 != 0x00000002)
  291.                 if ((bool)($userAccountControl & 0x2)==false)
  292.                         $actif='OK';
  293.                 else $actif='KO';
  294.  
  295.         }
  296.         else $actif='KKO';
  297.  
  298.         /* Vérification si le compte existe dans la table LD_DESACTIVATION (dans ce cas il doit rester actif) */
  299.         $dbDesactiv=new Connection($servergd);
  300.         $recupdesactiv="select * from LD_DESACTIVATION where MATRICULE='$matri_courant_Liste'";
  301.  
  302.         $resdes=$dbDesactiv->ExecuteQuery($recupdesactiv);
  303.         if($actif=='OK')
  304.         {
  305.                 if(!$dbDesactiv->MapRecord())
  306.                 {
  307.                                 if ($identiteListe!='') {
  308.                                 {
  309. //                                      echo("traitement désactivation compte ".$matri_courant_Liste." ".$identiteListe."<br>");
  310.                                         $metierListe=recup_metier($matri_courant_Liste,$server);
  311.                                         $poleUFListe=explode(",",recup_pole_uf($matri_courant_Liste,$server));
  312.                                         $poleListe=strtoupper(strip_accents($poleUFListe[1]));
  313.                                         $ufListe=strtoupper(strip_accents($poleUFListe[0]));
  314.                                         envoie_salto(2,$matri_courant_Liste,$identiteListe,$metierListe,$ufListe,$poleListe,$dateEntListe,$bd_salto,$server,'d');
  315.                                         $resListe.=$matri_courant_Liste.",".$identiteListe.",".$metierListe.",".$ufListe.",".$poleListe."\n"; /*",".$LibListe."\n";*/
  316.                                 }
  317.                         }
  318.                 }
  319.         }
  320.         /*si le compte n'est plus actif, on vérifie si la date de sortie a plus de 30j et si le motif de sortie n'est pas temporaire */
  321.         elseif($actif=='KO')
  322.         {
  323.                 if (!$dbDesactiv->MapRecord() && $dbListe->FieldByName("DateSor")!='' && $LibListe!='' && $identiteListe!='')
  324.                 {
  325.                         if ($dbListe->FieldByName("DateSor")<date("Ymd", strtotime('-30 days'))&& !in_array($dbListe->FieldByName("Position"), $sortiesTemporaires))
  326.                         {
  327. //                                      echo("traitement suppression compte ".$matri_courant_Liste." ".$identiteListe."<br>");
  328.                                 $metierListe=recup_metier($matri_courant_Liste,$server);
  329.                                 $poleUFListe=explode(",",recup_pole_uf($matri_courant_Liste,$server));
  330.                                 $poleListe=strtoupper(strip_accents($poleUFListe[1]));
  331.                                 $ufListe=strtoupper(strip_accents($poleUFListe[0]));
  332.                                 envoie_salto(4,$matri_courant_Liste,$identiteListe,$metierListe,$ufListe,$poleListe,$dateEntListe,$bd_salto,$server);
  333.                                 $resListeDel.=$matri_courant_Liste.",".$identiteListe.",".$metierListe.",".$ufListe.",".$poleListe."\n";
  334.                                 //$mailListe=1;
  335.                         }
  336.                 }
  337.         }
  338.  
  339. }
  340. //echo("ecriture des fichiers <br>");
  341. fwrite($fListe,$resListe);
  342. fwrite($fListeDel,$resListeDel);
  343. fclose($fListe);
  344. fclose($fListeDel);
  345.  
  346. chmod(dirname(__file__)."/extract/m_$date.csv",0755);
  347. chmod(dirname(__file__)."/extract/c_$date.csv",0755);
  348. chmod(dirname(__file__)."/extract/r_$date.csv",0755);
  349. chmod(dirname(__file__)."/extract/s_$date.csv",0755);
  350. chmod(dirname(__file__)."/extract/d_$date.csv",0755);
  351. ?>
Parsed in 0.282 seconds