setName('Core:SynchroEtab') ->setDescription('Synchronisation Etablissement Scolaire') ->setHelp('This command Synchro Etab for Core') ->addArgument('simulate', InputArgument::OPTIONAL, 'true to simulate / false to run') ->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job') ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') ; } protected function execute(InputInterface $input, OutputInterface $output) { $this->container = $this->getApplication()->getKernel()->getContainer(); $this->em = $this->container->get('doctrine')->getEntityManager(); $this->output = $output; $this->filesystem = new Filesystem(); $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; $this->writelnred(''); $this->writelnred('== Core:SynchroEtab'); $this->writelnred('=========================================================================================================='); $simulate = $input->getArgument('simulate'); if($simulate=="") $simulate="true"; if($simulate!="true"&&$simulate!="false") { $this->writeln('Paramétre incorrect'); return; } $simulate=($simulate=="true"); $this->writeln(''); if($simulate) $this->writeln('** SIMULATION'); else $this->writeln('** REEL'); $this->writeln(''); $this->writeln('====================================================='); $this->writeln('== SYNCHONISATION ETAB =============================='); $this->writeln('====================================================='); $headers = ['Accept' => 'application/json']; $query = []; $url="https://data.education.gouv.fr/api/records/1.0/search/?dataset=fr-en-adresse-et-geolocalisation-etablissements-premier-et-second-degre&q=numero_uai%3D##RNE##&facet=numero_uai&facet=appellation_officielle&facet=secteur_public_prive_libe&facet=code_postal_uai&facet=localite_acheminement_uai&facet=libelle_commune&facet=appariement&facet=localisation&facet=nature_uai&facet=nature_uai_libe&facet=etat_etablissement&facet=etat_etablissement_libe&facet=code_departement&facet=code_region&facet=code_academie&facet=code_commune&facet=libelle_departement&facet=libelle_region&facet=libelle_academie&facet=secteur_prive_code_type_contrat&facet=secteur_prive_libelle_type_contrat"; if($this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYactivate")->getValue()) { $PROXYserver = $this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYserver")->getValue(); $PROXYport = $this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYport")->getValue(); \Unirest\Request::proxy($PROXYserver, $PROXYport, CURLPROXY_HTTP, true); } // Etablissement non localisé $noloc=$this->em->getRepository("CadolesCoreBundle:Etab")->find(-100); // Pour l'ensemble des serveurs $servers=$this->em->getRepository("CadolesCoreBundle:Server")->findAll(); foreach($servers as $server) { $urlrne=str_replace("##RNE##",$server->getIdLocal(),$url); $response = \Unirest\Request::get($urlrne,$headers,$query); if($response->body->records) { $this->writeln($server->getIdlocal()." Localisé"); $fields = $response->body->records[0]->fields; $etab=$this->em->getRepository("CadolesCoreBundle:Etab")->findOneBy(["numero_uai"=>$fields->numero_uai]); if(!$etab) { $etab=new Etab(); } if(isset($fields->localite_acheminement_uai)) $etab->setLocaliteAcheminementUai($fields->localite_acheminement_uai); if(isset($fields->numero_uai)) $etab->setNumeroUai($fields->numero_uai); if(isset($fields->secteur_public_prive_libe)) $etab->setSecteurPublicPriveLibe($fields->secteur_public_prive_libe); if(isset($fields->etat_etablissement)) $etab->setEtatEtablissement($fields->etat_etablissement); if(isset($fields->libelle_region)) $etab->setLibelleRegion($fields->libelle_region); if(isset($fields->secteur_prive_code_type_contrat)) $etab->setSecteurPriveCodeTypeContrat($fields->secteur_prive_code_type_contrat); if(isset($fields->code_postal_uai)) $etab->setCodePostalUai($fields->code_postal_uai); if(isset($fields->code_region)) $etab->setCodeRegion($fields->code_region); if(isset($fields->epsg)) $etab->setEpsg($fields->epsg); if(isset($fields->nature_uai_libe)) $etab->setNatureUaiLibe($fields->nature_uai_libe); if(isset($fields->appellation_officielle)) $etab->setAppellationOfficielle($fields->appellation_officielle); if(isset($fields->latitude)) $etab->setLatitude($fields->latitude); if(isset($fields->secteur_prive_libelle_type_contrat)) $etab->setSecteurPriveLibelleTypeContrat($fields->secteur_prive_libelle_type_contrat); if(isset($fields->coordonnee_y)) $etab->setCoordonneeY($fields->coordonnee_y); if(isset($fields->coordonnee_x)) $etab->setCoordonneeX($fields->coordonnee_x); if(isset($fields->adresse_uai)) $etab->setAdresseUai($fields->adresse_uai); if(isset($fields->code_commune)) $etab->setCodeCommune($fields->code_commune); if(isset($fields->localisation)) $etab->setLocalisation($fields->localisation); if(isset($fields->libelle_commune)) $etab->setLibelleCommune($fields->libelle_commune); if(isset($fields->code_departement)) $etab->setCodeDepartement($fields->code_departement); if(isset($fields->etat_etablissement_libe)) $etab->setEtatEtablissementLibe($fields->etat_etablissement_libe); if(isset($fields->nature_uai)) $etab->setNatureUai($fields->nature_uai); if(isset($fields->libelle_departement)) $etab->setLibelleDepartement($fields->libelle_departement); if(isset($fields->code_academie)) $etab->setCodeAcademie($fields->code_academie); if(isset($fields->appariement)) $etab->setAppariement($fields->appariement); if(isset($fields->longitude)) $etab->setLongitude($fields->longitude); if(isset($fields->denomination_principale)) $etab->setDenominationPrincipale($fields->denomination_principale); if(isset($fields->libelle_academie)) $etab->setLibelleAcademie($fields->libelle_academie); //$etab->setPosition($fields->position); if(!$etab->getLongitude()&&$etab->getLibelleCommune()) { $localisation = \Unirest\Request::get("https://nominatim.openstreetmap.org/search?q=".urlencode($fields->libelle_commune)."&format=json",$headers); if($localisation->body[0]) { $etab->setLongitude($localisation->body[0]->lon); $etab->setLatitude($localisation->body[0]->lat); } } // Sauvegarde $this->em->persist($etab); $this->em->flush(); $etab=$this->em->getRepository("CadolesCoreBundle:Etab")->findOneBy(["numero_uai"=>$fields->numero_uai]); $server->setEtab($etab); $this->em->flush(); } else { $this->writeln($server->getIdlocal()." Non Localisé"); // Ratacher le serveur à l'etab inconnu $server->setEtab($noloc); $this->em->flush(); } } $this->writeln(''); return 1; } private function writelnred($string) { $this->output->writeln(''.$string.''); $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); } private function writeln($string) { $this->output->writeln($string); $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); } }