<?php
namespace App\Controller;
use DateTime;
use App\Entity\Site;
use App\Repository\MeteoRepository;
use App\Repository\PrevisMeteoRepository;
use App\Repository\SiteRepository;
use App\Service\PetitsOutils;
use DateInterval;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class GraphController extends AbstractController
{
private $petitsOutils;
private $siteRepository;
private $meteoRepository;
private $previsMeteoRepository;
public function __construct(PetitsOutils $petitsOutils, SiteRepository $siteRepository, MeteoRepository $meteoRepository, PrevisMeteoRepository $previsMeteoRepository )
{
$this->petitsOutils = $petitsOutils;
$this->siteRepository = $siteRepository;
$this->meteoRepository = $meteoRepository;
$this->previsMeteoRepository = $previsMeteoRepository;
}
/**
* @Route("/graph/dates",name="graph-dates")
*/
public function choixDates(Request $request): Response
{
$route = 'graph';
$defaultData = [];
$form = $this->createFormBuilder($defaultData)
->add('debut', TextType::class,array(
'label' =>"début",
'attr' => array(
'class' => 'js-datepicker',
)))
->add('fin', TextType::class,array(
'label' =>"fin",
'attr' => array(
'class' => 'js-datepicker',
)
))
->add('site',EntityType::class,array(
'class'=>Site::class,
))
->add('ok', SubmitType::class)
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$debut = $this->petitsOutils->frenchDateToEnglish($data['debut']);
$fin = $this->petitsOutils->frenchDateToEnglish($data['fin']);
return $this->redirectToRoute($route,array(
'debut'=>$debut,
'fin'=>$fin,
'site'=>$data['site']->getId()
));
}
return $this->renderForm('graph/dates.html.twig', [
'form' => $form
]);
}
/**
* @Route("/graph",name="graph")
*/
public function graph(Request $request): Response
{
$debut = $request->query->get('debut');
$fin = $request->query->get('fin');
$siteId = $request->query->get('site');
$debut = new DateTime($debut);
$fin = new DateTime($fin);
$site = $this->siteRepository->find($siteId);
$pastdatas = $this->meteoRepository->findBetweenDatesForSite($debut,$fin,$site);
$previsdatas = $this->previsMeteoRepository->findBetweenDatesForSite($debut,$fin,$site);
//dd($previsdatas);
$datas = array_merge($pastdatas,$previsdatas);
usort($datas, function($a, $b)
{
return strcmp($a->getDate()->format('Y-m-d H'), $b->getDate()->format('Y-m-d H'));
});
//dd($datas);
//températures
$temp = array();
//pluvio
$pluie = array();
foreach($datas as $d){
$heure = $d->getDate();
$stamp = strtotime($heure->format('Y-m-d H:i:00')); // get unix timestamp
$heure_in_ms = $stamp*1000;
$temp [] = array($heure_in_ms,floatval($d->getT()));
$pluie [] = array($heure_in_ms,floatval($d->getRR()));
}
$temp = json_encode($temp);
$pluie = json_encode($pluie);
return $this->render('/graph/index.html.twig',[
'site' => $site,
'temp' => $temp,
'pluie' => $pluie
]);
}
}