src/Controller/MeteoTosaController.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\General;
  4. use App\Entity\Sidebar;
  5. use App\Entity\Sponsors;
  6. use App\Entity\Usuari;
  7. use App\Util\Util;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. use Symfony\Component\Security\Core\SecurityContext;
  18. use App\Entity\Meteo;
  19. use DoctrineExtensions\Query\Mysql;
  20. use DoctrineExtensions\Query\Mysql\Day;
  21. use Doctrine\ORM\Query;
  22. use Symfony\Component\Validator\Constraints\DateTime;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. class MeteoTosaController extends AbstractController
  25. {
  26.     protected $enSidebar;
  27.     protected $enGeneral;
  28.     protected $enSponsors;
  29.     private $em;
  30.     private $objUtil;
  31.     private $requestStack;
  32.     private $session;
  33.     private $translator;
  34.     private $params;
  35.     private $correuController;
  36.     private $mailer;
  37.     private $sPathUploads;
  38.     public function __construct(EntityManagerInterface $em,RequestStack $requestStack,TranslatorInterface $translatorContainerBagInterface $paramsCorreuController $correuController,MailerInterface $mailer)
  39.     {
  40.         $this->em $em;
  41.         $this->objUtil = new Util($this->em);
  42.         $this->requestStack $requestStack;
  43.         $this->session $this->requestStack->getSession();
  44.         $this->translator $translator;
  45.         $this->params $params;
  46.         $this->correuController $correuController;
  47.         $this->mailer $mailer;
  48.         $this->sPathUploads dirname(__FILE__) . "/../../public/uploads/";
  49.         $this->enSidebar $this->em->getRepository(Sidebar::class)->findBy(
  50.             array(   'general' => 1)
  51.         );
  52.         /////////////////////////
  53.         // Recoger dades generals
  54.         /////////////////////////
  55.         $this->enGeneral $this->em->getRepository(General::class)->findAll();
  56.         ///////////
  57.         // Sponsors
  58.         ///////////
  59.         $this->enSponsors $this->em->getRepository(Sponsors::class)->findBy(
  60.             array( 'visible'   => 1),
  61.             array('ordre' => 'ASC')
  62.         );
  63.     }
  64.     public function indexAction(Request $peticion)
  65.     {
  66.         $aRequest $peticion->request;
  67.         $enMeteo $this->em->getRepository(Meteo::class)->findAll();
  68.         
  69.         foreach ($enMeteo as $aMeteoPartial)
  70.         {
  71.             $aMeteo[$aMeteoPartial->getCodi()] = $aMeteoPartial
  72.             $sHora = ($aMeteoPartial->getDataExtrem() != ''?' ' $this->translator->trans("a les") . ' ' $aMeteoPartial->getDataExtrem()->format('H:i') . ' h ':'');
  73.             $aMeteo[$aMeteoPartial->getCodi()] = number_format$aMeteoPartial->getValor(), $aMeteoPartial->getDecimals(), ","".") . ' ' $aMeteoPartial->getUnitats() . $sHora;
  74.         }
  75.         return $this->render('meteo_tosa.html.twig', array(
  76.             'enSidebar' => $this->enSidebar[0],
  77.             'aMeteo'    => $aMeteo,
  78.             'enGeneral' => $this->enGeneral,
  79.             'enSponsors'=> $this->enSponsors
  80.         ));
  81.     }
  82.     
  83.     public function importarXmlAction(Request $peticion)
  84.     {
  85.         $aRequest $peticion->request;
  86.         $enMeteoUpdate = new Meteo();
  87.         
  88.         $emConfig $this->em->getConfiguration();
  89.         $emConfig->addCustomDatetimeFunction('YEAR''DoctrineExtensions\Query\Mysql\Year');
  90.         $emConfig->addCustomDatetimeFunction('MONTH''DoctrineExtensions\Query\Mysql\Month');
  91.         $emConfig->addCustomDatetimeFunction('DAY''DoctrineExtensions\Query\Mysql\Day');
  92.         
  93.         //phpinfo();
  94.         $bTest false;
  95.         // Default parameters
  96.         $ftp_server "ftp.meteo.cat";
  97.         $ftp_user_name "masella";
  98.         $ftp_user_pass "8utraTrU";
  99.         //$sDir = '/var/www/html/web/meteoXML/';
  100.         switch ($_SERVER['SERVER_NAME'])
  101.         {
  102.             case 'www.masella.com':
  103.             case 'beta.masella.com':
  104.                 $sDir '/var/www/vhosts/masella.com/httpdocs/public/meteoXML/';
  105.                 break;
  106.             case 'dev22.masella.com':
  107.             case 'dev23.masella.com':
  108.                 $sDir '/var/www/vhosts/' $_SERVER['SERVER_NAME'] . '/httpdocs/web/meteoXML/';
  109.                 break;
  110.             case 'sf6.masella.com':
  111.             case 'new.masella.com':
  112.                 $sDir '/var/www/vhosts/' $_SERVER['SERVER_NAME'] . '/httpdocs/public/meteoXML/';
  113.                 break;
  114.             case 'masella015.developer.entorno.es':
  115.                 $sDir '/home/jramon/projects/masella2015/web/meteoXML/';
  116.                 break;
  117.         }
  118.         $sDirTarget '/Dades/XML/';
  119.         //echo __FILE__.'<br>';
  120.         // definir algunas variables
  121.         $local_file 'local.zip';
  122.         
  123.         if (!$bTest)
  124.         {
  125.             // Conexión FTP para obtener el ultimo fichero
  126.             $conn_id ftp_connect($ftp_server);
  127.             $login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass);
  128.             $aDirectori ftp_nlist($conn_id$sDirTarget);
  129.             rsort($aDirectori);
  130.             $server_file $aDirectori[0];
  131.             // intenta descargar $server_file y guardarlo en $local_file
  132.             if (ftp_get($conn_id$sDir.$local_file$server_fileFTP_BINARY))
  133.             {
  134.                 //echo "Se ha guardado satisfactoriamente en $local_file\n";
  135.             } else {
  136.                 echo "Ha habido un problema\n";
  137.                 die();
  138.             }
  139.             // Borramos todos los ficheros del ftp excepto el que acabamos de coger
  140.             foreach ($aDirectori as $iKey=>$sFileDelete)
  141.             {
  142.                 if ($iKey==0) continue;
  143.                 ftp_delete($conn_id$sFileDelete);
  144.             }
  145.             ftp_close($conn_id);
  146.     
  147.             $sShell "unzip " $sDir $local_file " -d " $sDir;
  148.             //echo '<br>'.$sShell.'<br>';
  149.             shell_exec($sShell);
  150.             //$aXML = simplexml_load_file($sXmlFile);
  151.             $server_file basename($server_file);
  152.             $local_fileXML str_replace(".zip"""$server_file);
  153.             //echo $sDir.$local_fileXML."<br>";
  154.         } else {
  155.             $sDir '/home/jramon/projects/masella2015/meteoXML/';
  156.             //$sDir = '/meteoXML/';
  157.             $local_fileXML "SMC_MES_11023_1823_20141215151100_0.xml";
  158.         }
  159.         $aXML simplexml_load_file($sDir.$local_fileXML);
  160.         if (!$bTest)
  161.         {
  162.             unlink($sDir.$local_fileXML);
  163.             unlink($sDir.$local_file);
  164.         }
  165.         /*
  166.         echo '<pre>';
  167.         print_r($aXML->estacio);
  168.         echo '</pre>';
  169.         */
  170.         
  171.         $query $this->em->createQuery('DELETE FROM App:Meteo p WHERE p.data_extrem IS NULL');
  172.         $enMeteo $query->getResult();
  173.         $dateTime = new DateTime();
  174.         
  175.         foreach ($aXML->estacio->variable as $aXMLData)
  176.         {
  177.             /*
  178.             echo '<pre>';
  179.             print_r($aXMLData);
  180.             echo '</pre>';
  181.             */
  182.             echo 'codi: '.$aXMLData["codi"].'<br>';
  183.             /*
  184.             echo '<pre>';
  185.             print_r($aXMLData);
  186.             echo '</pre>';
  187.             */
  188.             // Agafem l'ultima lectura
  189.             foreach ($aXMLData->lectura as $aXMLLectura)
  190.             {
  191.                 // Agafem l'ultima lectura
  192.                 // només ens interen les últimes dades de l'estructura de Lectura
  193.             }
  194.             if ($aXMLLectura["data_extrem"] != '')
  195.             {
  196.                 $enMeteo $this->em->getRepository(Meteo::class)->findBy(
  197.                     array(
  198.                         'acronim' => $aXMLData["acronim"]
  199.                     )
  200.                 );
  201.                 foreach ($enMeteo as $aMeteo)
  202.                 {
  203.                     ////////////////////////////////////////////////////////////////
  204.                     // Només updatejem si es diferent dia O el valor nou es superior
  205.                     ////////////////////////////////////////////////////////////////
  206.                     $bUpdate false;
  207.                     if ($aXMLData["acronim"] == 'HRx'
  208.                         || $aXMLData["acronim"] == 'Tx'
  209.                         || $aXMLData["acronim"] == 'VVx10')
  210.                     {
  211. //                        . " AND (DAY(p.data_extrem) != :day"
  212. //                                . " OR p.valor< :valor)"
  213.                         //echo $aMeteo->getDataExtrem()->format('d') . '!= ' . substr($aXMLLectura["data_extrem"],0,2) . '<br>';
  214.                         if ($aMeteo->getDataExtrem()->format('d') != substr($aXMLLectura["data_extrem"],0,2)
  215.                                 || floatval($aMeteo->getValor()) < floatval($aXMLLectura["valor"]))
  216.                         {
  217.                             //echo '<br> Valor < <br>' . floatval($aMeteo->getValor()) . '<' . floatval($aXMLLectura["valor"]) . '<br>';
  218.                             $bUpdate true;
  219.                         }
  220.                     } else {
  221. //                                . " AND (DAY(p.data_extrem) != :day"
  222. //                                . " OR p.valor > :valor)"  
  223.                         if ($aMeteo->getDataExtrem()->format('d') != substr($aXMLLectura["data_extrem"],0,2)
  224.                                 || floatval($aMeteo->getValor()) > floatval($aXMLLectura["valor"]))
  225.                         {
  226.                             //echo '<br> Valor > <br>' . floatval($aMeteo->getValor()) . '>' . floatval($aXMLLectura["valor"]) . '<br>';
  227.                             $bUpdate true;
  228.                         }
  229.                     }
  230.                     
  231.                     if ($bUpdate)
  232.                     {
  233.                         echo '<br> Update<br>';
  234.                         $enMeteoUpdate $this->em->getRepository(Meteo::class)->find($aMeteo->getId());
  235.                         $enMeteoUpdate->setDataExtrem(\DateTime::createFromFormat('d/m/Y H:i'$aXMLLectura["data_extrem"]));
  236.                         $enMeteoUpdate->setValor($aXMLLectura["valor"]);
  237.                         $this->em->persist($enMeteoUpdate);
  238.                         $this->em->flush();
  239.                         
  240. //                        $sQuery =   "UPDATE App:Meteo p SET "
  241. //                                . " p.data_extrem = :data_extrem"
  242. //                                . ", p.valor= :valor"
  243. //                                . " WHERE p.acronim = :acronim";
  244. //
  245. //                        $query = $this->em->createQuery($sQuery)
  246. //                            ->setParameter('data_extrem', \DateTime::createFromFormat('d/m/Y H:i', $aXMLLectura["data_extrem"]))
  247. //                            ->setParameter('valor', $aXMLLectura["valor"])
  248. //                            ->setParameter('acronim', $aXMLData["acronim"])
  249. //                        ;
  250. //                        $enMeteo = $query->getResult();
  251.                     }
  252.                 }
  253.             } else {
  254.                 $enMeteoInsert = new Meteo();
  255.                 $enMeteoInsert->setCodi($aXMLData["codi"]);
  256.                 $enMeteoInsert->setAcronim($aXMLData["acronim"]);
  257.                 $enMeteoInsert->setNom($aXMLData['nom']);
  258.                 $enMeteoInsert->setTipus($aXMLData['tipus']);
  259.                 $enMeteoInsert->setUnitats($aXMLData['unitats']);
  260.                 $enMeteoInsert->setDecimals($aXMLData['decimals']);
  261.                 //$enMeteoInsert->setData($dateTime->setTimestamp(strtotime(str_replace('/','-',$aXMLLectura["data"]))));
  262.                 $enMeteoInsert->setData(\DateTime::createFromFormat('d/m/Y H:i'$aXMLLectura["data"]));
  263.                 $enMeteoInsert->setValor($aXMLLectura["valor"]);
  264.                 
  265.                 echo '<br>data_extrem2<br>' $aXMLLectura["data_extrem"] . '<br>';
  266.                 
  267.                 if (isset($aXMLLectura["data_extrem"]))
  268.                 {
  269.                     $enMeteoInsert->setDataExtrem(\DateTime::createFromFormat('d/m/Y H:i'$aXMLLectura["data_extrem"]));
  270.                 }
  271.                 $enMeteoInsert->setEstat($aXMLLectura["estat"]);
  272.                 $enMeteoInsert->setBase($aXMLLectura["base"]);
  273.                 
  274.                 $this->em->persist($enMeteoInsert);
  275.                 $this->em->flush();
  276.             }
  277.         }
  278.         return new Response('ok');
  279.     }
  280. }