src/Controller/DashboardController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Message;
  4. use App\Entity\User;
  5. use App\Entity\Vendor;
  6. use App\Enumerations\MessageIconEnumeration;
  7. use App\Enumerations\VendorStatusEnumeration;
  8. use App\Form\ChangepasswordType;
  9. use App\Form\MessageType;
  10. use App\Form\RegistrationFormType;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use HeadlessChromium\BrowserFactory;
  14. use HeadlessChromium\Entity\NetworkResponseEntity;
  15. use HeadlessChromium\Page;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\RedirectResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class DashboardController extends AbstractController
  23. {
  24.     protected $doctrine;
  25.     public function __construct(ManagerRegistry $doctrine)
  26.     {
  27.         $this->doctrine $doctrine;
  28.     }
  29.     #[Route('/'name'app_dashboard')]
  30.     public function index(Request $requestEntityManagerInterface $entityManager): Response
  31.     {
  32.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  33.         /**
  34.          * @var User $user
  35.          */
  36.         $user $this->getUser();
  37.         $vendorAll $entityManager->getRepository(Vendor::class)->count([]);
  38.         $vendorApproved $entityManager->getRepository(Vendor::class)->count(['status' => VendorStatusEnumeration::STATUS_APPROVED]);
  39.         $data = [
  40.             'controller_name' => 'DashboardController',
  41.             'user' => [
  42.                 'name' => $user->getName(),
  43.                 'roles' => $user->getRoles(),
  44.             ],
  45.             'messages' => array_slice($this->getMessages(), 05true),
  46.             'vendorCount' => $vendorAll,
  47.             'vendorApproved' => $vendorApproved
  48.         ];
  49.         return $this->render('dashboard/index.html.twig'$data);
  50.     }
  51.     #[Route('/addmessage'name:'app_addmessage')]
  52.     public function addmessage(Request $requestEntityManagerInterface $entityManager): Response
  53.     {
  54.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  55.         $this->denyAccessUnlessGranted('ROLE_EDITSTAFF');
  56.         /**
  57.          * @var User $user
  58.          */
  59.         $user $this->getUser();
  60.         $form $this->createForm(MessageType::class);
  61.         $form->handleRequest($request);
  62.         if ($form->isSubmitted() && $form->isValid()) {
  63.             $details $form->get('message')->getData();
  64.             $subject $form->get('subject')->getData();
  65.             $type $form->get('type')->getData();
  66.             $message = new Message();
  67.             $message
  68.                 ->setUser($user)
  69.                 ->setMessage($details)
  70.                 ->setSubject($subject)
  71.                 ->setType($type);
  72.             $entityManager->persist($message);
  73.             $entityManager->flush();
  74.             return new RedirectResponse("/");
  75.         }
  76.         return $this->render('dashboard/message.html.twig', [
  77.             'messageForm' => $form->createView(),
  78.             'user' => [
  79.                 'name' => $user->getName(),
  80.                 'roles' => $user->getRoles()
  81.             ]
  82.         ]);
  83.     }
  84.     #[Route('/changepassword'name'app_changepassword')]
  85.     public function changepassword(Request $requestEntityManagerInterface $entityManagerUserPasswordHasherInterface $userPasswordHasher): Response
  86.     {
  87.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  88.         /**
  89.          * @var User $user
  90.          */
  91.         $user $this->getUser();
  92.         $form $this->createForm(ChangepasswordType::class, $user);
  93.         $form->handleRequest($request);
  94.         if ($form->isSubmitted() && $form->isValid()) {
  95.             $pass $form->get('newPassword')->getData();
  96.             $repeat $form->get('repeatPassword')->getData();
  97.             if ($pass !== $repeat) {
  98.                 $this->addFlash('flash_error''Passwords did not match');
  99.                 return $this->render('registration/changepassword.html.twig', [
  100.                     'changepasswordForm' => $form->createView(),
  101.                     'user' => [
  102.                         'name' => $user->getName(),
  103.                         'roles' => $user->getRoles(),
  104.                     ]
  105.                 ]);
  106.             }
  107.             $user->setPassword(
  108.                 $userPasswordHasher->hashPassword(
  109.                     $user,
  110.                     $pass
  111.                 )
  112.             );
  113.             $entityManager->persist($user);
  114.             $entityManager->flush();
  115.             return new RedirectResponse("/");
  116.         }
  117.             // do anything else you need here, like send an email
  118.         return $this->render('registration/changepassword.html.twig', [
  119.             'changepasswordForm' => $form->createView(),
  120.             'user' => [
  121.                 'name' => $user->getName(),
  122.                 'roles' => $user->getRoles()
  123.             ]
  124.         ]);
  125.     }
  126.     #[Route('/stafflist'name'app_stafflist')]
  127.     public function stafflist(): Response
  128.     {
  129.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  130.         /**
  131.          * @var User $user
  132.          */
  133.         $user $this->getUser();
  134.         return $this->render('dashboard/staff.html.twig', [
  135.             'user' => [
  136.                 'name' => $user->getName(),
  137.                 'roles' => $user->getRoles()
  138.             ],
  139.             'users' => $this->getAllUsers()
  140.         ]);
  141.     }
  142.     protected function getAllUsers(): array
  143.     {
  144.         $users $this->doctrine->getRepository(User::class)->findAll();
  145.         return $users;
  146.     }
  147.     protected function getMessages(): array
  148.     {
  149.         $messages $this->doctrine->getRepository(Message::class)->findAll();
  150.         foreach ($messages as &$m) {
  151.             /**
  152.              * @var Message $m
  153.              */
  154.             $m->loadIcon();
  155.         }
  156.         $files glob(__DIR__ "/../../changelog/*.json");
  157.         $data = [];
  158.         foreach ($files as $f) {
  159.             $temp json_decode(file_get_contents($f));
  160.             $ftime filemtime($f);
  161.             if (is_array($temp)) {
  162.                 foreach ($temp as $t) {
  163.                     $messages[] = $this->normalizeChangelog($t$ftime);
  164.                 }
  165.             } else {
  166.                 $messages[] = $this->normalizeChangelog($temp$ftime);
  167.             }
  168.         }
  169.         $pinned = [];
  170.         $unpinned = [];
  171.         /**
  172.          * @var Message $message
  173.          */
  174.         foreach ($messages as $message) {
  175.             if ($message->isPinned()) {
  176.                 $pinned[] = $message;
  177.             } else {
  178.                 $unpinned[] = $message;
  179.             }
  180.         }
  181.         usort($pinned, function($a$b){
  182.             /**
  183.              * @var Message $a
  184.              * @var Message $b
  185.              */
  186.             return $a->getCreatedOn()->getTimestamp() <= $b->getCreatedOn()->getTimestamp();
  187.         });
  188.         usort($unpinned, function($a$b){
  189.             /**
  190.              * @var Message $a
  191.              * @var Message $b
  192.              */
  193.             return $a->getCreatedOn()->getTimestamp() <= $b->getCreatedOn()->getTimestamp();
  194.         });
  195.         $messages array_merge($pinned$unpinned);
  196.         return $messages;
  197.     }
  198.     protected function normalizeChangelog($data$filetime)
  199.     {
  200.         $message = new Message();
  201.         $createdon = !empty($data->createdon) ? strtotime($data->createdon) : strtotime($filetime);
  202.         $type = !empty($data->type) ? $data->type "unknown";
  203.         $subject = !empty($data->subject) ? $data->subject "";
  204.         $details = !empty($data->message) ? $data->message "";
  205.         $pinned = !empty($data->pinned) ? $data->pinned false;
  206.         $message
  207.             ->setCreatedon((new \DateTime())->setTimestamp($createdon))
  208.             ->setType($type)
  209.             ->setSubject($subject)
  210.             ->setMessage($details)
  211.             ->setPinned($pinned);
  212.         ;
  213.         return $message;
  214.     }
  215. }