src/Controller/AdminController.php line 143

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\base\AbstractController;
  4. use App\Entity\UserActivity;
  5. use App\Entity\Location;
  6. use App\Entity\ResetPasswordRequest;
  7. use App\Enum\EntityTypeEnum;
  8. use App\Enum\FilterEnum;
  9. use App\EventListener\LoggableListener;
  10. use App\Interfaces\FormInterface;
  11. use App\Repository\ResetPasswordRequestRepository;
  12. use App\Service\FormService;
  13. use App\Util\JSONParseUtil;
  14. use Psr\Log\LoggerInterface;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use SymfonyCasts\Bundle\ResetPassword\ResetPasswordHelperInterface;
  20. use SymfonyCasts\Bundle\ResetPassword\Controller\ResetPasswordControllerTrait;
  21. use SymfonyCasts\Bundle\ResetPassword\Exception\ResetPasswordExceptionInterface;
  22. /**
  23. * @Route("/admin")
  24. */
  25. class AdminController extends AbstractController
  26. {
  27. use ResetPasswordControllerTrait;
  28. private $resetPasswordHelper;
  29. private $repository;
  30. private $logger;
  31. public function __construct(
  32. ResetPasswordHelperInterface $resetPasswordHelper,
  33. ResetPasswordRequestRepository $repository,
  34. LoggerInterface $logger
  35. ) {
  36. $this->resetPasswordHelper = $resetPasswordHelper;
  37. $this->repository = $repository;
  38. $this->logger = $logger;
  39. }
  40. /**
  41. * @Route("/", name="admin_index")
  42. */
  43. public function index()
  44. {
  45. if(!($this->isGranted('ROLE_PREVIOUS_ADMIN')) && is_null($this->getUser()->getLastLogin())) {
  46. try {
  47. $resetPasswordRequest = $this->getDoctrine()->getRepository(ResetPasswordRequest::class)->findOneBy(['user' => $this->getUser()->getId()]);
  48. if(!is_null($resetPasswordRequest)) {
  49. $this->repository->remove($resetPasswordRequest);
  50. }
  51. $resetToken = $this->resetPasswordHelper->generateResetToken($this->getUser());
  52. return $this->redirectToRoute('app_reset_password',['token'=> $resetToken->getToken()]);
  53. } catch (ResetPasswordExceptionInterface $e) {
  54. $this->logger->error($e->getMessage());
  55. }
  56. }
  57. if(!$this->getUser()->isHatchAdministrator()){
  58. return $this->redirectToRoute('client_index',['locationId'=> $this->getUser()->getUserLocations()[0]->getLocation()->getId()]);
  59. }
  60. return $this->render('admin/index.html.twig', ['number' => rand()]);
  61. }
  62. /**
  63. * @Route("/activity", name="admin_activity")
  64. * @param Request $request
  65. * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
  66. */
  67. public function adminActivity(Request $request)
  68. {
  69. if (!$this->getUser()->isHatchAdministrator()) {
  70. return $this->redirectToRoute('client_index', ['locationId' => $this->getUser()->getUserLocations()[0]->getLocation()->getId()]);
  71. }
  72. $dateFrom = $request->query->get('dateFrom');
  73. $dateTo = $request->query->get('dateTo');
  74. if (null === $dateFrom || "" === $dateFrom) {
  75. if ($request->query->get('username') && $request->query->get('userId')) {
  76. return $this->redirectToRoute('admin_activity', [
  77. 'dateFrom' => date('Y-m-d', strtotime('-7 days')),
  78. 'username' => $request->query->get('username'),
  79. 'userId' => $request->query->get('userId'),
  80. ]);
  81. } else {
  82. return $this->redirectToRoute('admin_activity', [
  83. 'dateFrom' => date('Y-m-d', strtotime('-7 days'))
  84. ]);
  85. }
  86. }
  87. if(!$request->get('userFilter')) {
  88. $request->request->set('userFilter', FilterEnum::FILTER_USERS_ALL);
  89. }
  90. $userId =$request->query->get('userId');
  91. $activityData = $this->getDoctrine()
  92. ->getRepository(UserActivity::class)
  93. ->getByLocationIdBetweenDates(
  94. Location::ADMINISTRATION_OFFICE,
  95. $dateFrom,
  96. $dateTo === null ? $dateTo : date('Y-m-d 23:59:59', strtotime($dateTo)),
  97. $userId,
  98. 200
  99. );
  100. $loginCount = [];
  101. $activityCount = [];
  102. /** @var UserActivity $login */ //logins not currently tracked for admin side
  103. foreach ($activityData as $activity) {
  104. $date = $activity->getLoggedAt()->format('Y-m-d');
  105. if ($activity->getAction() !== LoggableListener::ACTION_LOGIN) {
  106. $activityCount[$date] = !isset($activityCount[$date]) ? 1 : $activityCount[$date] + 1;
  107. continue;
  108. }
  109. $loginCount[$date] = !isset($loginCount[$date]) ? 1 : $loginCount[$date] + 1;
  110. $activityCount[$date] = $activityCount[$date] ?? 0;
  111. }
  112. return $this->render('admin/admin_activity.html.twig', [
  113. 'loginCount' => $loginCount,
  114. 'activityCount' => $activityCount,
  115. 'activityData' => $activityData,
  116. ]);
  117. }
  118. /**
  119. * @Route("/generate_new_form_change_note/{entityType}/{formId}", name="generate_new_form_change_note", methods={"POST"}, defaults={"formId"=null})
  120. * @param Request $request
  121. * @param int|null $formId
  122. * @param int $entityType
  123. * @param FormService $formService
  124. * @return JsonResponse
  125. */
  126. public function generateFormChangesNote(Request $request, ?int $formId = null, int $entityType, FormService $formService): JsonResponse
  127. {
  128. $className = EntityTypeEnum::getEntityClassName($entityType);
  129. if ($formId) {
  130. $form = $this->getDoctrine()->getManager()->getRepository($className)->find($formId);
  131. } else {
  132. $form = new $className();
  133. }
  134. $formType = EntityTypeEnum::getTypeName($entityType);
  135. $entityFormType = EntityTypeEnum::getEntityFormTypeClass($entityType);
  136. $oldRelatedForms = $form->getId() ? EntityTypeEnum::getRelatedFormsArray($form) : [];
  137. $oldTags = $form->getId() ? $form->getTags()->toArray() : [];
  138. $oldRegulations = $form->getId() ? $form->getRegulations()->toArray() : [];
  139. $oldLocations = $form->getId() ? $form->getLocations()->toArray() : [];
  140. $allFieldsToDisplay = $form->getId() ? JSONParseUtil::getAllFormFields($form) : [];
  141. $oldFieldsToDisplay = explode(';', $form->getFieldsToDisplay());
  142. $updatedFieldsToDisplay = [];
  143. $requestFormString = EntityTypeEnum::getRequestFormString($entityType);
  144. $formDataArray = $request->request->get($requestFormString);
  145. if (array_key_exists('fieldsToDisplaySelect', $formDataArray)) {
  146. $updatedFieldsToDisplay = $formDataArray['fieldsToDisplaySelect'];
  147. }
  148. $oldFieldsLabels = [];
  149. $updatedFieldsLabels = [];
  150. foreach ($oldFieldsToDisplay as $field) {
  151. $label = JSONParseUtil::findMatchingFieldLabelAndValue($field, $allFieldsToDisplay);
  152. if (!empty($label)) {
  153. $oldFieldsLabels[] = $label[0];
  154. }
  155. }
  156. foreach ($updatedFieldsToDisplay as $field) {
  157. $label = JSONParseUtil::findMatchingFieldLabelAndValue($field, $allFieldsToDisplay);
  158. if (!empty($label)) {
  159. $updatedFieldsLabels[] = $label[0];
  160. }
  161. }
  162. $requestForm = $this->createForm($entityFormType, $form);
  163. $requestForm->handleRequest($request);
  164. try {
  165. $params = [
  166. 'entityType' => $entityType,
  167. 'oldRelatedForms' => $oldRelatedForms,
  168. 'oldTags' => $oldTags,
  169. 'oldRegulations' => $oldRegulations,
  170. 'oldLocations' => $oldLocations,
  171. 'oldFieldsToDisplay' => $oldFieldsLabels,
  172. 'updatedFieldsToDisplay' => $updatedFieldsLabels
  173. ];
  174. $result = $formService->getFormChangesNotes($form, $formType, $params);
  175. return new JsonResponse($result, Response::HTTP_OK);
  176. } catch (\Exception $exception) {
  177. return new JsonResponse(['error' => $exception->getMessage(),], Response::HTTP_BAD_REQUEST);
  178. }
  179. }
  180. }