<?php
namespace App\Controller;
use App\Entity\DashboardChart;
use App\Entity\Client;
use App\Entity\Dashboard;
use App\Entity\Partner;
use App\Entity\DashboardWidget;
use App\Form\DashboardAddWidgetOverviewTypeST;
use App\Form\DashboardAddWidgetTypeGlobal;
use App\Form\DashboardAddWidgetTypeST;
use App\Form\DashboardWidgetType;
use App\Repository\ClientRepository;
use App\Repository\DashboardWidgetColumnRepository;
use App\Repository\DashboardRepository;
use App\Repository\DashboardChartRepository;
use App\Repository\DashboardWidgetRepository;
use App\Repository\PartnerRepository;
use App\Repository\UserRepository;
use App\Utils\CsvResponse;
use App\Utils\SunburstDashboard;
use App\Service\Datalake\WidgetService;
use App\Utils\Slugger;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Validator\Constraints\DateTime;
use Symfony\Component\Validator\Validator\ValidatorInterface;
/**
* @Route("/dashboard/widget")
*
*/
class DashboardWidgetController extends AbstractController
{
/**
* @Route("/new", name="dashboard_widget_new", methods="GET")
*/
public function new(Session $session, DashboardRepository $dashboardRepository): Response
{
if($session->get("id") != null)
$dashboard = $dashboardRepository->findOneById($session->get("id"));
else
$dashboard = $this->getUser()->getDashboards()[0];
return $this->redirectToRoute('dashboard_show', ['id' => $dashboard->getId(),'mclick' => 'widget-add']);
}
/**
* @Route("/new/modal", name="dashboard_widget_new_modal", methods="POST")
*/
public function newModal(Request $request, DashboardRepository $dashboardRepo, DashboardChartRepository $dashboardChartRepo, ClientRepository $clientRepo, PartnerRepository $partnerRepo, UserRepository $userRepo, Session $session): Response
{
$widget = new DashboardWidget();
$dashboardId = $session->get("id");
$user = $this->getUser();
$role = $user->getRoles()[0];
$dashboard= $dashboardRepo->findOneById($dashboardId);
// dump($dashboard->getClients()[0]->getName()); exit;
$event = substr(lcfirst($dashboard->getName()), 0, -1);
// Par défaut, si Dashboard Global ou Client
// - setName, setEvent, setDashboard
$widget->setDashboard($dashboardRepo->findOneById($dashboardId));
$dashboardClients = $dashboardRepo->findOneById($dashboardId)->getClients();
// dump(count($dashboardClients)); exit;
$widget->setEvent($event);
// if(count($dashboardClients) > 0 || count($user->getClients()) === 1){
// if($role == "ROLE_CLIENT")
// $widget->setName($dashboardClients[0]->getName." - ". "All Partners - ".$event);
// else
// $widget->setName($dashboard->getClients()[0]->getName()." - ". "All Partners - ".$event);
// }
// else
// $widget->setName("All advertisers - ". "All Partners - ".$event);
// dump($widget); exit;
if(null !== ($request->request->get("name")))
$widget->setName($request->request->get("name"));
if(null !== ($request->request->get("chart")))
$widget->setDashboardChart($dashboardChartRepo->findOneById($request->request->get("chart")));
if(null !== ($request->request->get("clients"))){
foreach($request->request->get("clients") as $client)
$widget->addClient($clientRepo->findOneById($client));
}
if(null !== ($request->request->get("partners"))){
foreach($request->request->get("partners") as $partner)
$widget->addPartner($partnerRepo->findOneById($partner));
}
$event = substr(lcfirst($dashboardRepo->findOneById($dashboardId)->getName()), 0, -1);
if($event=="sale" || $event=="click" || $event=="impression" || $event=="lead" || $event=="visit")
$widget->setEvent($event);
elseif(null !== ($request->request->get("event")))
$widget->setEvent($request->request->get("event"));
// If Dashbord's clients exist, it is not a gobal dashboard, Or is User_Client has only 1 linked advertiser we can't add Clients
if(count($dashboardClients) > 0 || count($user->getClients()) === 1){
$form = $this->createForm(DashboardAddWidgetTypeST::class, $widget);
}
else // It is a Global Dashboard, we can choose Clients
$form = $this->createForm(DashboardAddWidgetTypeGlobal::class, $widget);
$title = "Add new widget";
$modal = $this->renderView('layout/modal/content.html.twig',array('widget' => $widget, 'title' => $title,'form' => $form->createView(),'path' => 'dashboard/widget/modal/_form.html.twig','id' => 'widget_new'));
return new Response(json_encode(array('modal'=>$modal)));
}
/**
* @Route("/ajax/new", name="dashboard_widget_ajax_new", methods="POST")
*/
public function ajaxNew(AuthenticationUtils $helper, Request $request, DashboardRepository $dashboardRepo, ValidatorInterface $validator): Response
{
$widget = new DashboardWidget();
$dashboard = $dashboardRepo->findOneById($request->request->get("dashboard"));
$dashboardClients =$dashboard->getClients();
// Skaze à les droits d'édition sur tous les dashboard + l'user qui a créé le Dashboard
$event = substr(lcfirst($dashboard->getName()), 0, -1);
$widget->setDashboard($dashboard);
$widget->setEvent($event);
$user = $this->getUser();
if(count($dashboard->getClients()) > 0 || count($user->getClients()) === 1)
$form = $this->createForm(DashboardAddWidgetTypeST::class, $widget);
else
$form = $this->createForm(DashboardAddWidgetTypeGlobal::class, $widget);
$widget->setDashboard($dashboard);
$form->handleRequest($request);
if ($request->isXmlHttpRequest()) {
if (!$form->isValid()) {
foreach ($form as $fieldName => $formField) {
$errors[$fieldName] = $formField->getErrors();
return new Response(json_encode($errors));
}
}
else {
$em = $this->getDoctrine()->getManager();
// TODO: Ajout couche sécurité : empêcher l'édition
// Skaze à les droits d'édition sur tous les dashboard + l'user qui a créé le Dashboard
// $event = substr(lcfirst($dashboard->getName()), 0, -1);
// // TODO: If dashboard getName = overview => create overviewType Form
// if($request->request->get("event") != 'undefined')
// $widget->setEvent($request->request->get("event"));
// elseif ($event=="sale" || $event=="click" || $event=="impression" || $event=="lead" || $event=="visit")
// $widget->setEvent($event);
if($request->request->get("type") != 'undefined')
$widget->setType($request->request->get("type"));
else
$widget->setType("count");
//TODO: Changer le nom en fonctions des advertisers sélectionnés
$widget->setX(0);
$widget->setY(0);
$widget->setWidth(6);
$widget->setHeight(6);
$widget->setStartDate(new \DateTime(date('Y-m-d 00:00:00',strtotime("-1 days"))));
$widget->setEndDate(new \DateTime(date('Y-m-d 00:00:00',strtotime("-1 days"))));
$widget->setTypeDate(0);
$widget->setUser($this->getUser());
// TODO: Ajout des columns
$repository = $this->getDoctrine()->getRepository(DashboardChart::class);
// Si il y a un POST_TYPE => prendre le $POST, sinon, $chart->getTypes()[0]
$chart = $repository->find($_POST['dashboardChart']);
$widget->setDashboardChart($chart);
if($chart->getIdentifier() == "table")
$widget->setType("list");
elseif($chart->getIdentifier() == "overview")
$widget->setType("overview");
else
$widget->setType("count");
$user = $this->getUser();
$role = $user->getRoles()[0];
// TODO: gerer les multi clients
// if ($role === 'ROLE_CLIENT') {
// $dashboardClients = $dashboard->getClients();
// $dashboardClient = $dashboard->getUsers()[0]->getClients()[0];
// $widgetClients = $widget->getClients();
// // dump($widgetClients);
// // Only Add client to widget if dashboard has Client
// if(count($widgetClients) !== 0) {
// $widget->addClient($dashboardClient);
// }
// } else
if ($role === 'ROLE_PARTNER'){
$dashboardPartner = $dashboard->getUsers()[0]->getPartners()[0];
$widget->addPartner($dashboardPartner);
}
if ($_POST['name']!='')
$widget->setName($_POST['name']);
// else if(count($dashboard->getClients()) > 0)
// $widget->setName($dashboard->getClients()[0]->getName().' - All Partners - '.ucFirst($event)."s");
else
$widget->setName('');
// $em->persist($dashboard);
// $em->persist($widget);
// $em->flush();
if ($role === 'ROLE_SKAZE' || $role === 'ROLE_ADMIN' || $role === 'ROLE_CLIENT') {
//Client Add
if (isset($_POST['clients']) && !empty($_POST['clients'])) {
$clientTable = explode(",", $_POST['clients'] );
//TODO: Voir pourquoi $widget->addClient($client) ne marche pas
foreach ($clientTable as $key => $client) {
$repository = $this->getDoctrine()->getRepository(Client::class);
$client = $repository->find($client);
$client->addDashboardWidget($widget);
$em->persist($client);
$em->flush();
}
}
if(count($dashboardClients) == 1)
$widget->addClient($dashboard->getClients()[0]);
if (isset($_POST['partners']) && !empty($_POST['partners'])) {
$partnerTable = explode(",", $_POST['partners'] );
//TODO: Voir pourquoi $widget->addpartner($partner) ne marche pas
foreach ($partnerTable as $key => $partner) {
$repository = $this->getDoctrine()->getRepository(Partner::class);
$partner = $repository->find($partner);
$partner->addDashboardWidget($widget);
$em->persist($partner);
$em->flush();
}
}
}
$em->persist($dashboard);
$em->persist($widget);
$em->flush();
$widget = $this->renderView('dashboard/widget/ajax/_new.html.twig',['widget' => $widget]);
return new Response(json_encode(array('widget' => $widget)));
}
}
return new Response(json_encode(false));
}
/**
* @Route("/{id}", name="dashboard_widget_show", methods="GET")
*/
public function show(DashboardWidget $widget, DashboardRepository $dashRepo): Response
{
$isDashboardCampaign = false;
$campaignDateIn = false;
$campaignDateOut = false;
if(count($widget->getDashboard()->getCampaigns()) >0) {
$campaign = $widget->getDashboard()->getCampaigns()[0];
$isDashboardCampaign = true;
$campaignDateIn = $campaign->getDateIn();
$campaignDateOut = $campaign->getDateOut();
}
$campaignList = $widget->getDashboard()->getCampaigns();
$event = $widget->getEvent();
$campaigns = [];
foreach ($campaignList as $campaign) {
foreach ( $campaign->getPartnerCampaignIds() as $partnerCampaignId ){
$campaigns[] = $partnerCampaignId->getCampaignDspId();
}
}
return $this->render($widget->getDashboardChart()->getPath(), ['widget' => $widget, 'isDashboardCampaign'=>$isDashboardCampaign , 'campaignDateIn'=>$campaignDateIn, 'campaignDateOut'=>$campaignDateOut, 'uclients' => $this->getUser()->getClients(), "campaigns" => $campaigns, "event" => $event]);
}
/**
* @Route("/fs/{id}", name="dashboard_widget_showfs", methods="GET")
*/
public function showfs(DashboardWidget $widget): Response
{
return $this->render($widget->getDashboardChart()->getPath(), ['widget' => $widget, 'uclients' => $this->getUser()->getClients(), 'fullSize' => true]);
}
/**
* @Route("/overview/{id}", name="dashboard_widget_overview", methods="GET|POST")
*
*/
public function overview(DashboardWidget $widget): Response
{
$fileExist = false;
$utilSunburst = new SunburstDashboard();
$params = $utilSunburst->getDateFromDuration($widget->getTypeDate());
if(count($widget->getClients()) == 0){
$pathName = false;
$fileName = false;
$generation = false;
}else{
$pathName = $this->getParameter('kernel.project_dir')."/var/tmp/".$widget->getClients()[0]->getName()." - ".$params["dateIn"]->format("yy-m-d")." - ".$params["dateOut"]->format("yy-m-d");
if(file_exists($pathName) && !(file_exists($pathName.".xlsx"))){
$generation = true;
}else{
if(file_exists($pathName))
unlink($pathName);
$pathName .= ".xlsx";
$fileName = $widget->getClients()[0]->getName()." - ".$params["dateIn"]->format("yy-m-d")." - ".$params["dateOut"]->format("yy-m-d").".xlsx";
$generation = false;
}
}
if(file_exists($pathName))
$fileExist = $fileName;
$campaignList = $widget->getDashboard()->getCampaigns();
$campaigns = [];
$campaignId = "all";
foreach ($campaignList as $campaign) {
foreach ( $campaign->getPartnerCampaignIds() as $partnerCampaignId ){
$campaigns[] = $partnerCampaignId->getCampaignDspId();
$campaignId = $partnerCampaignId->getCampaign()->getId();
}
}
return $this->render($widget->getDashboardChart()->getPath(), ['widget' => $widget, 'uclients' => $this->getUser()->getClients(), 'file' => $fileExist, 'fileName' => $fileName, 'generation' => $generation, "campaigns" => $campaigns, "campaignId" => $campaignId]);
}
/**
* @Route("/overview/mobile/{id}", name="dashboard_widget_overview_mobile", methods="GET|POST")
*
*/
public function overviewMobile(DashboardWidget $widget): Response
{
return $this->render('dashboard/chart/template/overview3.html.twig', ['widget' => $widget, 'uclients' => $this->getUser()->getClients()]);
}
/**
* @Route("/setDate/overview", name="dashboard_widget_set_date_overview", methods="POST")
*/
public function setDateOverview(Request $request, DashboardWidgetRepository $repo): Response
{
// Get Data from request
$date = $request->request->get('date');
if($date == 3) {
// dump("date 3");
$start = new \DateTime($request->request->get('startDate'));
$end = new \DateTime($request->request->get('endDate'));
}
// if date
// dump($start, $end, $date);exit;
$widgetId = $request->request->get('widget');
// Set DashboardWidgetEntity
$em = $this->getDoctrine()->getManager();
$widget = $repo->find($widgetId);
$widget->setTypeDate($date);
switch ($date) {
case 0:
$returnDate = "7 days";
break;
case 1:
$returnDate = "1 month";
break;
case 2:
$returnDate = "2 months";
break;
case 3:
$returnDate = "custom";
$widget->setStartDate($start);
$widget->setEndDate($end);
break;
default:
$returnDate = "Unknown setting";
break;
}
$em->persist($widget);
$em->flush();
// Return date for change span with js
return new JsonResponse($returnDate);
}
/**
* @Route("/sunburst/{tagId}/{duration}/{widgetId}", name="dashboard_widget_sunburst", methods="GET")
*/
public function sunburst(Session $session,Request $request, EntityManagerInterface $em , PartnerRepository $partnerRepo, DashboardWidgetRepository $dashWidgetRepo): Response
{
// dump($request);
$projectDir = $this->getParameter('kernel.project_dir');
$client = $request->attributes->get('tagId');
$widgetId = $request->attributes->get('widgetId');
$duration = $request->attributes->get('duration');
if ($duration == 3 ) {
$idate = $dashWidgetRepo->findOneById($widgetId)->getStartDate()->format("Y-m-d");
$odate = $dashWidgetRepo->findOneById($widgetId)->getEndDate()->format("Y-m-d");
// dump($idate, $odate);
// dump("duration 3"); exit;
// TODO: Si duration = 3, prendre les dates du widget
# code...
} else {
$utilSunburst = new SunburstDashboard();
$params = $utilSunburst->getDateFromDuration($duration);
$idate = $params['dateIn']->format("Y-m-d");
$odate = $params['dateOut']->format("Y-m-d");
}
if($this->getUser()->getRoles()[0] == "ROLE_PROSPECT")
$CsvPath = $projectDir."/var/fake/dashboard/sunburst/all/all.csv";
else
$CsvPath = $projectDir."/var/dashboard/sunburst/".$client."/".$idate." ".$odate." - ".$client." - sunburst - skaze.csv";
if(!is_file($CsvPath) || (is_file($CsvPath) && !(date("Y-m-d", filemtime($CsvPath)) == date("Y-m-d")))){
$widgetService = new WidgetService();
$widgetService->sunburstWrite($client,$duration, $em, $partnerRepo, $projectDir, $idate, $odate);
}
$file = new File($CsvPath);
return $this->file($file);
}
/**
* @Route("/edit/{id}", name="dashboard_widget_edit", methods="GET")
*/
public function edit(Request $request, DashboardWidget $widget): Response
{
$dashboard = $widget->getDashboard();
return $this->redirectToRoute('dashboard_show', ['id' => $dashboard->getId(),'mclick' => 'widget-edit-'.$widget->getId()]);
}
/**
* @Route("/edit/{id}/modal", name="dashboard_widget_edit_modal", methods="POST")
*/
public function editModal(Request $request, DashboardWidget $widget, DashboardRepository $dashboardRepo, DashboardChartRepository $dashboardChartRepo, ClientRepository $clientRepo, PartnerRepository $partnerRepo): Response
{
// dump($request); exit;
if(null !== ($request->request->get("name")))
$widget->setName($request->request->get("name"));
if(null !== ($request->request->get("chart")))
$widget->setDashboardChart($dashboardChartRepo->findOneById($request->request->get("chart")));
if(null !== ($request->request->get("clients"))){
foreach($request->request->get("clients") as $client)
$widget->addClient($clientRepo->findOneById($client));
}
if(null !== ($request->request->get("partners"))){
foreach($request->request->get("partners") as $partner)
$widget->addPartner($partnerRepo->findOneById($partner));
}
$event = substr(lcfirst($dashboardRepo->findOneById($widget->getDashboard())->getName()), 0, -1);
if ($event=="sale" || $event=="click" || $event=="impression" || $event=="lead" || $event=="visit")
$widget->setEvent($event);
elseif(null !== ($request->request->get("event")))
$widget->setEvent($request->request->get("event"));
//Copy
$dashboard = $dashboardRepo->findOneById($widget->getDashboard());
// dump(count($dashboard->getClients())); exit;
$user = $this->getUser();
// dump(count($user->getClients())); exit;
if(count($dashboard->getClients()) > 0 || count($user->getClients()) === 1)
$form = $this->createForm(DashboardAddWidgetTypeST::class, $widget);
else
$form = $this->createForm(DashboardAddWidgetTypeGlobal::class, $widget);
//end copy
// $form = $this->createForm(DashboardAddWidgetTypeST::class, $widget);
$form->handleRequest($request);
$title = "Edit widget";
$modal = $this->renderView('layout/modal/content.html.twig',array('widget' => $widget, 'title' => $title,'form' => $form->createView(),'path' => 'dashboard/widget/modal/_form.html.twig','id' => 'widget_edit'));
return new Response(json_encode(array('modal'=>$modal)));
}
/**
* @Route("/ajax/update/{id}", name="dashboard_widget_ajax_update", methods="POST")
*/
public function ajaxUpdate(Request $request,DashboardRepository $dashboardRepo, $id) {
$em = $this->getDoctrine()->getManager();
$dashboard = $dashboardRepo->findOneById($request->request->get("dashboard"));
$repositoryWidget = $this->getDoctrine()->getRepository(DashboardWidget::class);
$widget = $repositoryWidget->find($id);
$widget->setDashboard($dashboard);
$oldName = $widget->getName();
$clients = $request->request->get('clients');
$partners = $request->request->get('partners');
$dashboardChart = $request->request->get('dashboardChart');
$name = $request->request->get('name');
$user = $this->getUser();
if ($name != ""){
$widget->setName($name);
} else {
$widget->setName('');
}
// When dashboard is Global or user has multi advertiser, we can set Client
if(count($dashboard->getClients()) === 0 || count($user->getClients()) > 1 ) {
//Remove old clients if exist
foreach($widget->getClients() as $client)
$widget->removeClient($client);
if(!empty($clients) && $clients != "undefined") {
$clientTable = explode(",",$clients);
//Register new clients
$repositoryClient = $this->getDoctrine()->getRepository(Client::class);
foreach ($clientTable as $client) {
$client = $repositoryClient->find($client);
$widget->addClient($client);
}
}
}
//Remove old partners if exist
foreach($widget->getPartners() as $partner)
$widget->removePartner($partner);
if(!empty($partners) && ($partners != "undefined")) {
$partnerTable = explode(",",$partners );
//Register new partners
$repositoryPartner = $this->getDoctrine()->getRepository(Partner::class);
foreach ($partnerTable as $partner) {
$partner = $repositoryPartner->find($partner);
$widget->addPartner($partner);
}
}
$repositoryDashboardChart = $this->getDoctrine()->getRepository(DashboardChart::class);
$chart = $repositoryDashboardChart->find($dashboardChart);
// Widget set type with chart selected (Table could be count but at time let it in list type)
if($chart->getName() === "table")
$widget->setType("list");
else
$widget->setType("count");
$widget->setDashboardChart($chart);
$user = $this->getUser();
if ($user->getRoles()[0] === 'ROLE_PARTNER'){
$dashboardPartner = $dashboard->getUsers()[0]->getPartners()[0];
$widget->addPartner($dashboardPartner);
}
$em->persist($dashboard);
$em->persist($widget);
$em->flush();
$widget = $this->renderView('dashboard/widget/ajax/_update.html.twig',['widget' => $widget, 'widgetName' => $widget->getName()]);
return new Response(json_encode(array('widget' => $widget)));
}
/**
* @Route("/delete/{id}", name="dashboard_widget_delete", methods="POST")
*/
public function delete(Request $request, DashboardWidget $widget): Response
{
if ($this->isCsrfTokenValid('delete'.$widget->getId(), $request->request->get('_token'))) {
$em = $this->getDoctrine()->getManager();
$em->remove($widget);
$em->flush();
return new Response(json_encode("true"));
}
return new Response(json_encode("false"));
}
/**
* @Route("/delete/{id}/modal", name="dashboard_widget_delete_modal", methods="POST")
*/
public function deleteModal(Request $request, DashboardWidget $widget): Response
{
$title = "Delete widget ".$widget->getName();
$modal = $this->renderView('layout/modal/content.html.twig',array('widget' => $widget,'title' => $title, 'path' => 'dashboard/widget/modal/_delete.html.twig','id' => 'widget_delete'));
return new Response(json_encode(array('modal'=>$modal)));
}
/**
* @Route("/ajax/date", name="dashboard_widget_ajax_date", methods="POST")
*/
public function ajaxDate(Request $request)
{
$response = true;
if(isset($_POST['myData'])){
//Test string
// ""
$repository = $this->getDoctrine()->getRepository(DashboardWidget::class);
$entityManager = $this->getDoctrine()->getManager();
if(isset($_POST['myData']['id']) && $widget = $repository->find($_POST['myData']['id'])){
//TODO: Add secure layer
if(1 == 1){
if(isset($_POST['myData']['typeDate']) && ($_POST['myData']['typeDate'] == "0" || $_POST['myData']['typeDate'] == "1" || $_POST['myData']['typeDate'] == "2"))
$widget->setTypeDate($_POST['myData']['typeDate']);
if(isset($_POST['myData']['startDate']) && preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$_POST['myData']['startDate']))
$widget->setStartDate(new \DateTime($_POST['myData']['startDate']." 00:00:00.000000"));
if(isset($_POST['myData']['endDate']) && preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$_POST['myData']['endDate']))
$widget->setEndDate(new \DateTime($_POST['myData']['endDate']." 00:00:00.000000"));
$entityManager->flush();
}
else
$response = false;
}
else
$response = false;
}
else
$response = false;
return new Response(json_encode($response));
}
/**
* @Route("/ajax/position", name="dashboard_widget_ajax_position", methods="POST")
*/
public function ajaxPosition(Request $request)
{
$response = true;
if(isset($_POST['myData']) && is_array($_POST['myData'])){
$repository = $this->getDoctrine()->getRepository(DashboardWidget::class);
$entityManager = $this->getDoctrine()->getManager();
foreach($_POST['myData'] as $item){
if(isset($item['id']) && $widget = $repository->find($item['id'])){
//TODO: Add secure layer
if(1 == 1){
if(isset($item['x']) && is_numeric($item['x']))
$widget->setX($item['x']);
if(isset($item['y']) && is_numeric($item['y']))
$widget->setY($item['y']);
if(isset($item['width']) && is_numeric($item['width']))
$widget->setWidth($item['width']);
if(isset($item['height']) && is_numeric($item['height']))
$widget->setHeight($item['height']);
$entityManager->flush();
}
else
$response = false;
}
else
$response = false;
}
$entityManager->flush();
}
else
$response = false;
return new Response(json_encode($response));
}
/**
* @Route("/ajax/convertToCsv", name="ajax_convert_csv", methods="POST")
*/
public function ajaxConvertToCsv(Request $request): Response
{
if($request->isXmlHttpRequest() && isset($_POST['filename']) && isset($_POST['date']) && isset($_POST['data'])) {
$filename = $_POST['filename'];
$pathFile = $this->getParameter('kernel.project_dir')."/var/tmp";
if(!is_dir($pathFile))
mkdir($pathFile);
$cb = rand();
mkdir($pathFile."/".$cb);
$date = $_POST['date'];
$data = $_POST['data'];
$fp = fopen($pathFile."/".$cb."/".$filename, 'w');
fputcsv($fp, array("date","count"),",",'"');
for($i=0;$i<count($date);$i++)
fputcsv($fp, array($date[$i],$data[$i]),",",'"');
header('Content-Type: application/json');
return new JsonResponse(array($cb,$filename));
}
header('Content-Type: application/json');
return new JsonResponse(false);
}
/**
* @Route("/download/csv/{cb}/{file}", name="download_csv", methods="GET")
*/
public function downloadCsv(Request $request, $cb, $file): Response
{
$pathFile = $this->getParameter('kernel.project_dir');
if(is_file($pathFile."/var/tmp/".$cb.'/'.$file)) {
$response = new Response();
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment; filename="'. $file . '"');
readfile($pathFile."/var/tmp/".$cb.'/'.$file);
unlink($pathFile."/var/tmp/".$cb.'/'.$file);
rmdir($pathFile."/var/tmp/".$cb);
return $response;
}
else
throw $this->createNotFoundException('This file does not exist');
}
/**
* @Route("/refresh/title/{id}", name="dashboard_widget_refresh_title", methods="POST")
*/
public function refreshTitle(Request $request, $id): Response
{
//TODO: Render only widget header to change title
}
}