setName('Core:Import') // the short description shown while running "php bin/console list" ->setDescription("Importation Utilisateur à partir d'un fichier CSV Annuaire") // the full command description shown when running the command with // the "--help" option ->setHelp('This command Import for Core') ->addArgument('simulate', InputArgument::OPTIONAL, 'true to simulate / false to run') ; } protected function convert($filename, $delimiter = ',', $enclosure = '"') { if(!file_exists($filename) || !is_readable($filename)) { return FALSE; } $header = NULL; $data = array(); if (($handle = fopen($filename, 'r')) !== FALSE) { while (($row = fgetcsv($handle, 1000, $delimiter, $enclosure)) !== FALSE) { if(!$header) { $header = $row; } else { $data[] = array_combine($header, $row); } } fclose($handle); } return $data; } protected function execute(InputInterface $input, OutputInterface $output) { $kernel = new \AppKernel('dev', true); $kernel->boot(); $kernel->loadClassCache(); $em = $kernel->getContainer()->get('service_container')->get('doctrine.orm.default_entity_manager'); $simulate = $input->getArgument('simulate'); if($simulate=="") $simulate="true"; if($simulate!="true"&&$simulate!="false") { $output->writeln('Paramétre incorrect'); return; } $simulate=($simulate=="true"); $output->writeln(''); if($simulate) $output->writeln('** SIMULATION'); else $output->writeln('** REEL'); $output->writeln(''); $output->writeln('====================================================='); $output->writeln('== IMPORT USERS ====================================='); $output->writeln('====================================================='); // Read CSV $fileName = 'src/Cadoles/CoreBundle/Command/import.csv'; // Convert $datas = $this->convert($fileName); foreach($datas as $row) { if($row["uid"]!="") { $data = $em->getRepository('CadolesCoreBundle:User')->findBy(array('username' => $row["uid"])); if($data) { $output->writeln(' - Existe déjà >> '.$row["uid"]); } else { $data = $em->getRepository('CadolesCoreBundle:User')->findBy(array('email' => $row["mail"])); if($data) { $output->writeln(' - Existe déjà >> '.$row["uid"]); } else { $output->writeln(' - Création Utilisateur >> '.$row["uid"]); if(!$simulate) { $niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->findOneBy(array("id"=>-100)); $user = new User(); $user->setUsername($row["uid"]); $user->setPasswordDirect($row["userpassword"]); $user->setSalt("IMPORT-".$row["uid"]); $user->setNiveau01($niveau01); $user->setSiren($user->getNiveau01()->getSiren()); $user->setSiret($user->getNiveau02()!==null?$user->getNiveau02()->getSiret():""); $user->setAvatar("noavatar.png"); $user->setVisible(true); $user->setAuthlevel("simple"); $user->setRole("ROLE_USER"); $user->setFirstname($row["givenname"]); $user->setLastname($row["sn"]); $user->setEmail($row["mail"]); $em->persist($user); $em->flush(); } } } } } return; $ldap = $kernel->getContainer()->get('cadoles.core.service.ldap'); if($ldap->isEnabled()) { $output->writeln(''); $output->writeln('====================================================='); $output->writeln('== SYNCHONISATION BUNDLE TO LDAP ===================='); $output->writeln('====================================================='); $output->writeln(''); $output->writeln('== NIVEAU01 ========================================='); $baseNiveau01 = $kernel->getContainer()->getParameter('ldap_baseniveau01'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Niveau01','table') ->getQuery() ->getResult(); foreach($datas as $data) { $criteria = '(cn='.$data->getLabel().')'; $subbranch=$baseNiveau01; $results = $ldap->search($criteria, array('cn'), $subbranch); // Mise à jour si elle existe if(count($results) > 0) { $output->writeln(' - Modification dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->modifyNiveau01($data,$data->getLabel()); } // Sinon création de la fiche else { $output->writeln(' - Création dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->addNiveau01($data); } } $output->writeln(''); $output->writeln('== NIVEAU02 ========================================='); $baseNiveau02 = $kernel->getContainer()->getParameter('ldap_baseniveau02'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Niveau02','table') ->getQuery() ->getResult(); foreach($datas as $data) { $criteria = '(cn='.$data->getLabel().')'; $subbranch=$baseNiveau02; $results = $ldap->search($criteria, array('cn'), $subbranch); // Mise à jour si elle existe if(count($results) > 0) { $output->writeln(' - Modification dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->modifyNiveau02($data,$data->getLabel()); } // Sinon création de la fiche else { $output->writeln(' - Création dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->addNiveau02($data); } } $output->writeln(''); $output->writeln('== GROUP ============================================'); $baseGroup = $kernel->getContainer()->getParameter('ldap_basegroup'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Group','table') ->getQuery() ->getResult(); foreach($datas as $data) { $criteria = '(cn='.$data->getLabel().')'; $subbranch=$baseGroup; $results = $ldap->search($criteria, array('cn'), $subbranch); // Mise à jour si elle existe if(count($results) > 0) { $output->writeln(' - Modification dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->modifyGroup($data,$data->getLabel()); } // Sinon création de la fiche else { $output->writeln(' - Création dans annuaire >> '.$data->getLabel()); if(!$simulate) $ldap->addGroup($data); } } $output->writeln(''); $output->writeln('== USER ============================================='); $baseUser = $kernel->getContainer()->getParameter('ldap_baseuser'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:User','table') ->getQuery() ->getResult(); foreach($datas as $data) { $criteria = '(uid='.$data->getUsername().')'; $subbranch=$baseUser; $results = $ldap->search($criteria, array('uid'), $subbranch); // S'assurer que SIREN correspond au Niveau01 if($data->getNiveau01()->getSiren()!=$data->getSiren()) { $data->SetSiren($data->getNiveau01()->getSiren()); $data->flush(); } // S'assurer que SIRET correspond au Niveau02 if($data->getNiveau02()!==null&&$data->getNiveau01()->getSiren()!=$data->getSiren()) { $data->SetSiret($data->getNiveau02()->getSiret()); $data->flush(); } // Mise à jour si elle existe if(count($results) > 0) { $output->writeln(' - Modification dans annuaire >> '.$data->getUsername()); if(!$simulate) $ldap->modifyUser($data); } // Sinon création de la fiche else { $output->writeln(' - Création dans annuaire >> '.$data->getUsername()); if(!$simulate) $ldap->addUser($data); } // Rattachement à Niveau01 et Niveau02 if(!$simulate) $ldap->addGroupUser($data); } $output->writeln(''); $output->writeln('== USER GROUP ======================================='); $baseGroup = $kernel->getContainer()->getParameter('ldap_basegroup'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Group','table') ->getQuery() ->getResult(); foreach($datas as $data) { $criteria = '(cn='.$data->getLabel().')'; $subbranch=$baseGroup; $results = $ldap->search($criteria, array('cn'), $subbranch); // Mise à jour des membres du groupes if(count($results) > 0) { $output->writeln(' - '.$data->getLabel()); $dn=$ldap->getGroupDN($data->getLabel()); $attrs["memberuid"]=array(); $attrs["cadolesMember"]=array(); foreach($data->getUsers() as $usergroupe) { array_push($attrs["memberuid"],$usergroupe->getUser()->getUsername()); array_push($attrs["cadolesMember"],$ldap->getUserDN($usergroupe->getUser())); $output->writeln(' > '.$usergroupe->getUser()->getUsername()); } if(!$simulate) $ldap->ldapModify($dn, $attrs); } } $output->writeln(''); $output->writeln('====================================================='); $output->writeln('== SYNCHONISATION LDAP TO BUNDLE ===================='); $output->writeln('====================================================='); $output->writeln(''); $output->writeln('== NIVEAU01 ========================================='); $baseNiveau01 = $kernel->getContainer()->getParameter('ldap_baseniveau01'); $criteria = '(cn=*)'; $subbranch=$baseNiveau01; $results = $ldap->search($criteria, array('cn'), $subbranch); foreach($results as $result) { $data = $em->getRepository('CadolesCoreBundle:Niveau01')->findBy(array('label' => $result["cn"])); if($data) $output->writeln(' - Existe dans bundle >> '.$result["cn"]); else { $output->writeln(' - A supprimer dans annuaire >> '.$result["cn"]); $dn=$ldap->getNiveau01DN($result["cn"]); if(!$simulate) $ldap->deleteByDN($dn); } } $output->writeln(''); $output->writeln('== NIVEAU02 ========================================='); $baseNiveau02 = $kernel->getContainer()->getParameter('ldap_baseniveau02'); $criteria = '(cn=*)'; $subbranch=$baseNiveau02; $results = $ldap->search($criteria, array('cn'), $subbranch); foreach($results as $result) { $data = $em->getRepository('CadolesCoreBundle:Niveau02')->findBy(array('label' => $result["cn"])); if($data) $output->writeln(' - Existe dans bundle >> '.$result["cn"]); else { $output->writeln(' - A supprimer dans annuaire >> '.$result["cn"]); $dn=$ldap->getNiveau02DN($result["cn"]); if(!$simulate) $ldap->deleteByDN($dn); } } $output->writeln(''); $output->writeln('== GROUP ============================================'); $baseGroup = $kernel->getContainer()->getParameter('ldap_basegroup'); $criteria = '(cn=*)'; $subbranch=$baseGroup; $results = $ldap->search($criteria, array('cn'), $subbranch); foreach($results as $result) { $data = $em->getRepository('CadolesCoreBundle:Group')->findBy(array('label' => $result["cn"])); if($data) $output->writeln(' - Existe dans bundle >> '.$result["cn"]); else { $output->writeln(' - A supprimer dans annuaire >> '.$result["cn"]); $dn=$ldap->getGroupDN($result["cn"]); if(!$simulate) $ldap->deleteByDN($dn); } } $output->writeln(''); $output->writeln('== USER ============================================='); $baseUser = $kernel->getContainer()->getParameter('ldap_baseuser'); $criteria = '(uid=*)'; $subbranch=$baseUser; $results = $ldap->search($criteria, array('uid'), $subbranch); foreach($results as $result) { $data = $em->getRepository('CadolesCoreBundle:User')->findBy(array('username' => $result["uid"])); if($data) $output->writeln(' - Existe dans bundle >> '.$result["uid"]); else { $output->writeln(' - A supprimer dans annuaire >> '.$result["uid"]); $dn='uid='.$result["uid"].','.$baseUser; if(!$simulate) $ldap->deleteByDN($dn); } } } $output->writeln(''); $output->writeln('====================================================='); $output->writeln('== SYNCHONISATION BUNDLE TO EPORTAIL ================'); $output->writeln('====================================================='); $eportail = $kernel->getContainer()->get('cadoles.core.service.eportail'); if(!$eportail->isEnabled()) { $output->writeln(''); $output->writeln(' Synchronisation ePortail désactivée'); } else { $output->writeln(''); $output->writeln('== NIVEAU01 ========================================='); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Niveau01','table') ->getQuery() ->getResult(); foreach($datas as $data) { $output->writeln(' - Synchronisation eportail >> '.$data->getLabel()); if(!$simulate) $eportail->syncNiveau01($data,$data->getLabel()); } $output->writeln(''); $output->writeln('== NIVEAU02 ========================================='); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Niveau02','table') ->getQuery() ->getResult(); foreach($datas as $data) { $output->writeln(' - Synchronisation eportail >> '.$data->getLabel()); if(!$simulate) $eportail->syncNiveau02($data,$data->getLabel()); } $output->writeln(''); $output->writeln('== GROUP ============================================'); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:Group','table') ->getQuery() ->getResult(); foreach($datas as $data) { $output->writeln(' - Synchronisation eportail >> '.$data->getLabel()); if(!$simulate) $eportail->syncGroup($data,$data->getLabel()); } $output->writeln(''); $output->writeln('== USER ============================================='); $datas = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:User','table') ->getQuery() ->getResult(); foreach($datas as $data) { $output->writeln(' - Synchronisation eportail >> '.$data->getUsername()); if(!$simulate) $eportail->syncUser($data); } $output->writeln(''); $output->writeln('====================================================='); $output->writeln('== SYNCHONISATION EPORTAIL TO BUNDLE ================'); $output->writeln('====================================================='); $dbeportail= $kernel->getContainer()->get('service_container')->get('doctrine.orm.eportail_entity_manager')->getConnection(); $output->writeln(''); $output->writeln('== GROUP ============================================'); $sql = "SELECT * FROM env_group WHERE group_id>0"; $query = $dbeportail->prepare($sql); $query->execute(); while($row=$query->fetch()){ $fgOK=false; if (strpos($row["group_name"], $labelniveau01.' = ') === 0) { $tmp=str_replace("$labelniveau01 = ","",$row["group_name"]); $data = $em->getRepository('CadolesCoreBundle:Niveau01')->findBy(array('label' =>$tmp)); if($data) { $fgOK=true; $output->writeln(' - Existe dans bundle >> '.$row["group_name"]); } } if (strpos($row["group_name"], $labelniveau02.' = ') === 0) { $tmp=str_replace("$labelniveau01 = ","",$row["group_name"]); $data = $em->getRepository('CadolesCoreBundle:Niveau02')->findBy(array('label' =>$tmp)); if($data) { $fgOK=true; $output->writeln(' - Existe dans bundle >> '.$row["group_name"]); } } if (strpos($row["group_name"], 'GROUPE = ') === 0) { $tmp=str_replace("GROUPE = ","",$row["group_name"]); $data = $em->getRepository('CadolesCoreBundle:Group')->findBy(array('label' =>$tmp)); if($data) { $fgOK=true; $output->writeln(' - Existe dans bundle >> '.$row["group_name"]); } } if(!$fgOK) { $output->writeln(' - A supprimer dans eportail >> '.$row["group_name"]); if(!$simulate) delGroup($row["group_id"]); } } $output->writeln(''); $output->writeln('== USER ============================================='); $sql = "SELECT * FROM env_user WHERE user_id>0"; $query = $dbeportail->prepare($sql); $query->execute(); while($row=$query->fetch()){ $data = $em->getRepository('CadolesCoreBundle:User')->findBy(array('username' =>$row["user_login"])); if($data) $output->writeln(' - Existe dans bundle >> '.$row["user_login"]); else { $output->writeln(' - A supprimer dans eportail >> '.$row["user_login"]); if(!$simulate) delUser($row["user_id"]); } } } $output->writeln(''); $output->writeln(''); } protected static function determineKernelRootDir(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); $rootdir = rtrim(getcwd(), '/'); return $rootdir . '/' . trim($extra['symfony-app-dir'], '/'); } }