ninestat/src/ninestat-1.0/src/Cadoles/CoreBundle/Command/SynchroEtabCommand.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");
}
}