src/Controller/AdminController.php line 29

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]) ? $activityCount[$date] + 1;
  107.                 continue;
  108.             }
  109.             $loginCount[$date] = !isset($loginCount[$date]) ? $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"})
  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 nullint $entityTypeFormService $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($resultResponse::HTTP_OK);
  176.         } catch (\Exception $exception) {
  177.             return new JsonResponse(['error' => $exception->getMessage(),], Response::HTTP_BAD_REQUEST);
  178.         }
  179.     }
  180. }