170 lines
9.1 KiB
PHP
170 lines
9.1 KiB
PHP
<?php
|
|
namespace Cadoles\CoreBundle\Command;
|
|
|
|
use Symfony\Component\Console\Command\Command;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputArgument;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Symfony\Component\Finder\Finder;
|
|
use Symfony\Component\Filesystem\Filesystem;
|
|
use Symfony\Component\HttpKernel\KernelInterface;
|
|
use Doctrine\DBAL\Connection as DBALConnection;
|
|
use Doctrine\ORM\EntityManager;
|
|
|
|
use Cadoles\CoreBundle\Entity\Etab;
|
|
|
|
use Ramsey\Uuid\Uuid;
|
|
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
|
|
|
|
global $bdd01;
|
|
global $config;
|
|
|
|
class SynchroEtabCommand extends Command
|
|
{
|
|
private $container;
|
|
private $em;
|
|
private $em2;
|
|
private $output;
|
|
private $filesystem;
|
|
private $rootlog;
|
|
private $ldap;
|
|
private $ldap_basedn;
|
|
|
|
protected function configure()
|
|
{
|
|
$this
|
|
->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('<fg=red>'.$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");
|
|
}
|
|
|
|
|
|
}
|