src/Controller/GraphController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use App\Entity\Site;
  5. use App\Repository\MeteoRepository;
  6. use App\Repository\PrevisMeteoRepository;
  7. use App\Repository\SiteRepository;
  8. use App\Service\PetitsOutils;
  9. use DateInterval;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. class GraphController extends AbstractController
  18. {
  19.     private $petitsOutils;
  20.     private $siteRepository;
  21.     private $meteoRepository;
  22.     private $previsMeteoRepository;
  23.     public function __construct(PetitsOutils $petitsOutilsSiteRepository $siteRepositoryMeteoRepository $meteoRepositoryPrevisMeteoRepository $previsMeteoRepository )
  24.     {
  25.         $this->petitsOutils $petitsOutils;
  26.         $this->siteRepository $siteRepository;
  27.         $this->meteoRepository $meteoRepository;
  28.         $this->previsMeteoRepository $previsMeteoRepository;
  29.     }
  30.     /**
  31.      * @Route("/graph/dates",name="graph-dates")
  32.      */
  33.     public function choixDates(Request $request): Response
  34.     {
  35.         $route 'graph';
  36.         $defaultData = [];
  37.         $form $this->createFormBuilder($defaultData)
  38.         ->add('debut'TextType::class,array(
  39.             'label' =>"dĂ©but",
  40.             'attr' => array(
  41.                 'class' => 'js-datepicker',
  42.             )))
  43.             ->add('fin'TextType::class,array(
  44.                 'label' =>"fin",
  45.                 'attr' => array(
  46.                     'class' => 'js-datepicker',
  47.                 )
  48.             ))
  49.             ->add('site',EntityType::class,array(
  50.                 'class'=>Site::class,
  51.             ))
  52.             ->add('ok'SubmitType::class)
  53.             ->getForm();
  54.         $form->handleRequest($request);
  55.         if($form->isSubmitted() && $form->isValid()){
  56.             $data $form->getData();
  57.             $debut $this->petitsOutils->frenchDateToEnglish($data['debut']);
  58.             
  59.             $fin $this->petitsOutils->frenchDateToEnglish($data['fin']);
  60.             return $this->redirectToRoute($route,array(
  61.                 'debut'=>$debut,
  62.                 'fin'=>$fin,
  63.                 'site'=>$data['site']->getId()
  64.             ));
  65.         }
  66.         return $this->renderForm('graph/dates.html.twig', [
  67.             'form' => $form
  68.         ]);
  69.     }
  70.     /**
  71.      * @Route("/graph",name="graph")
  72.      */
  73.     public function graph(Request $request): Response
  74.     {
  75.         $debut $request->query->get('debut');
  76.         $fin $request->query->get('fin');
  77.         $siteId $request->query->get('site');
  78.         $debut = new DateTime($debut);
  79.         $fin = new DateTime($fin);
  80.         $site $this->siteRepository->find($siteId);
  81.         $pastdatas $this->meteoRepository->findBetweenDatesForSite($debut,$fin,$site);
  82.         $previsdatas $this->previsMeteoRepository->findBetweenDatesForSite($debut,$fin,$site);
  83.         //dd($previsdatas);
  84.         $datas array_merge($pastdatas,$previsdatas);
  85.         usort($datas, function($a$b)
  86.         {
  87.             return strcmp($a->getDate()->format('Y-m-d H'), $b->getDate()->format('Y-m-d H'));
  88.         });
  89.         //dd($datas);
  90.         //tempĂ©ratures
  91.         $temp = array();
  92.         //pluvio
  93.         $pluie = array();
  94.         foreach($datas as $d){
  95.             $heure $d->getDate();
  96.             
  97.             $stamp strtotime($heure->format('Y-m-d H:i:00')); // get unix timestamp
  98.             $heure_in_ms $stamp*1000;
  99.             $temp [] = array($heure_in_ms,floatval($d->getT()));
  100.             $pluie [] = array($heure_in_ms,floatval($d->getRR()));
  101.         }
  102.         $temp json_encode($temp);
  103.         $pluie json_encode($pluie);
  104.         return $this->render('/graph/index.html.twig',[
  105.             'site' => $site,
  106.             'temp' => $temp,
  107.             'pluie' => $pluie
  108.         ]);
  109.     }
  110. }