<?php
namespace App\Controller;
use App\Component\ActivityLogger\ActivityLoggerStrategy;
use App\Component\Dashboard\DashboardManager;
use App\Component\FormParser\VueFormSerializer;
use App\Entity\Role;
use App\Service\TransHelper;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AppController extends AppBaseController
{
private DashboardManager $dashboardManager;
public function __construct(
EntityManagerInterface $entityManager,
RouterInterface $router,
TranslatorInterface $translator,
ActivityLoggerStrategy $logger,
VueFormSerializer $formSerializer,
DashboardManager $dashboardManager
)
{
parent::__construct($entityManager, $router, $translator, $logger, $formSerializer);
$this->dashboardManager = $dashboardManager;
}
/**
* @Route("/", name="index")
*
* @param Request $request
* @param TransHelper $transHelper
* @return Response
*/
public function index(
Request $request,
TransHelper $transHelper
): Response {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$this->logger->log('page', $request);
return $this->render('app/dashboard_grid.html.twig', [
'widgets' => $this->dashboardManager->getWidgetsForGrid(),
'translations' => $transHelper->getWidgetsTranslations()
]);
}
/**
* * @Route("/dashboard-save-grid", name="dashboard_save_grid")
* @param Request $request
* @return JsonResponse
*/
public function dashboardSaveGrid(
Request $request
): JsonResponse {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$newWidgetsLayout = json_decode($request->getContent(), true);
try {
$logData = $this->dashboardManager->saveDashboardGrid($newWidgetsLayout);
$this->logger->log('basic', 'dashboard_saved', 'app', $logData);
return new JsonResponse();
} catch (Exception $exception) {
return new JsonResponse([
'message' => 'fail',
'reason' => $exception->getMessage()
], Response::HTTP_BAD_REQUEST);
}
}
/**
* @Route("/widget-content/{identifier}", name="widget_content")
*
* @param string $identifier
*
* @return JsonResponse
*/
public function getWidgetContent(
string $identifier
): JsonResponse {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$widgetData = $this->dashboardManager->getWidgetContentDataByIdentifier($identifier);
return new JsonResponse([
'content' => $this->render(
'app/widgets/'.$widgetData['template'] .'.html.twig',
$widgetData['templateData']
)->getContent(),
]);
}
/**
* @Route("/dashboard-reset", name="dashboard_reset")
*
* @return Response
*/
public function dashboardReset(): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$this->dashboardManager->resetDashboard();
$this->logger->log('basic', 'dashboard_reset', 'app');
return $this->redirectToRoute('index');
}
/**
* @Route("/notice-board-update", name="notice_board_update", methods={"POST"})
* @param Request $request
* @return JsonResponse
*/
public function noticeBoard(Request $request): JsonResponse
{
$this->denyAccessUnlessGranted(Role::ADMIN);
$notice = $request->get('notice');
$this->dashboardManager->updateAdminNotice($notice);
$this->logger->log('basic', 'admin_notice_updated', 'app', [$notice]);
return new JsonResponse(['message' => 'OK']);
}
}