src/Controller/AppController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Component\ActivityLogger\ActivityLoggerStrategy;
  4. use App\Component\Dashboard\DashboardManager;
  5. use App\Component\FormParser\VueFormSerializer;
  6. use App\Entity\Role;
  7. use App\Service\TransHelper;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Exception;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Routing\RouterInterface;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. class AppController extends AppBaseController
  17. {
  18. private DashboardManager $dashboardManager;
  19. public function __construct(
  20. EntityManagerInterface $entityManager,
  21. RouterInterface $router,
  22. TranslatorInterface $translator,
  23. ActivityLoggerStrategy $logger,
  24. VueFormSerializer $formSerializer,
  25. DashboardManager $dashboardManager
  26. )
  27. {
  28. parent::__construct($entityManager, $router, $translator, $logger, $formSerializer);
  29. $this->dashboardManager = $dashboardManager;
  30. }
  31. /**
  32. * @Route("/", name="index")
  33. *
  34. * @param Request $request
  35. * @param TransHelper $transHelper
  36. * @return Response
  37. */
  38. public function index(
  39. Request $request,
  40. TransHelper $transHelper
  41. ): Response {
  42. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  43. $this->logger->log('page', $request);
  44. return $this->render('app/dashboard_grid.html.twig', [
  45. 'widgets' => $this->dashboardManager->getWidgetsForGrid(),
  46. 'translations' => $transHelper->getWidgetsTranslations()
  47. ]);
  48. }
  49. /**
  50. * * @Route("/dashboard-save-grid", name="dashboard_save_grid")
  51. * @param Request $request
  52. * @return JsonResponse
  53. */
  54. public function dashboardSaveGrid(
  55. Request $request
  56. ): JsonResponse {
  57. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  58. $newWidgetsLayout = json_decode($request->getContent(), true);
  59. try {
  60. $logData = $this->dashboardManager->saveDashboardGrid($newWidgetsLayout);
  61. $this->logger->log('basic', 'dashboard_saved', 'app', $logData);
  62. return new JsonResponse();
  63. } catch (Exception $exception) {
  64. return new JsonResponse([
  65. 'message' => 'fail',
  66. 'reason' => $exception->getMessage()
  67. ], Response::HTTP_BAD_REQUEST);
  68. }
  69. }
  70. /**
  71. * @Route("/widget-content/{identifier}", name="widget_content")
  72. *
  73. * @param string $identifier
  74. *
  75. * @return JsonResponse
  76. */
  77. public function getWidgetContent(
  78. string $identifier
  79. ): JsonResponse {
  80. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  81. $widgetData = $this->dashboardManager->getWidgetContentDataByIdentifier($identifier);
  82. return new JsonResponse([
  83. 'content' => $this->render(
  84. 'app/widgets/'.$widgetData['template'] .'.html.twig',
  85. $widgetData['templateData']
  86. )->getContent(),
  87. ]);
  88. }
  89. /**
  90. * @Route("/dashboard-reset", name="dashboard_reset")
  91. *
  92. * @return Response
  93. */
  94. public function dashboardReset(): Response
  95. {
  96. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  97. $this->dashboardManager->resetDashboard();
  98. $this->logger->log('basic', 'dashboard_reset', 'app');
  99. return $this->redirectToRoute('index');
  100. }
  101. /**
  102. * @Route("/notice-board-update", name="notice_board_update", methods={"POST"})
  103. * @param Request $request
  104. * @return JsonResponse
  105. */
  106. public function noticeBoard(Request $request): JsonResponse
  107. {
  108. $this->denyAccessUnlessGranted(Role::ADMIN);
  109. $notice = $request->get('notice');
  110. $this->dashboardManager->updateAdminNotice($notice);
  111. $this->logger->log('basic', 'admin_notice_updated', 'app', [$notice]);
  112. return new JsonResponse(['message' => 'OK']);
  113. }
  114. }