src/Controller/Cabinet/CabinetController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Cabinet;
  3. use App\Entity\Chat;
  4. use App\Entity\ChatParticipant;
  5. use App\Entity\User;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. /**
  13.  * @Route("/cabinet", name="cabinet.")
  14.  * @IsGranted("ROLE_USER")
  15.  */
  16. class CabinetController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/", name="index")
  20.      */
  21.     public function schedule(): Response
  22.     {
  23.         if ($this->isGranted('ROLE_SPEAKER')) {
  24.             return $this->redirectToRoute('cabinet.schedule.index');
  25.         }
  26.         return $this->redirectToRoute('cabinet.planned_consultation.index');
  27.     }
  28.     /**
  29.      * @Route("/support", name="support")
  30.      */
  31.     public function support(TranslatorInterface $translator): RedirectResponse
  32.     {
  33.         $content = [];
  34.         $em $this->getDoctrine()->getManager();
  35.         $uniqId 'support_' $this->getUser()->getId();
  36.         $chat $em->getRepository(Chat::class)->findOneBy(['uniqId' => $uniqId]);
  37.         if (is_null($chat)) {
  38.             $qb $em->getRepository(User::class)->createQueryBuilder('u');
  39.             $admins $qb->andWhere($qb->expr()->like('u.roles'':role'))
  40.                 ->setParameter('role''%ROLE_ADMIN%')
  41.                 ->getQuery()
  42.                 ->getResult();
  43.             if (!empty($admins)) {
  44.                 $chat = (new Chat())
  45.                     ->setAuthor($this->getUser())
  46.                     ->setName(sprintf($translator->trans('label.support_request', [], 'cabinet'), $this->getUser()))
  47.                     ->setUniqId($uniqId);
  48.                 $part = (new ChatParticipant())->setUser($this->getUser());
  49.                 $chat->addParticipant($part);
  50.                 $em->persist($part);
  51.                 foreach ($admins as $admin) {
  52.                     $adminPart = (new ChatParticipant())->setUser($admin);
  53.                     if (
  54.                         $chat->getParticipants()->exists(function ($key$value) use ($adminPart) {
  55.                             return $adminPart->getUser() == $value->getUser();
  56.                         })) {
  57.                         continue;
  58.                     }
  59.                     $chat->addParticipant($adminPart);
  60.                     $em->persist($adminPart);
  61.                 }
  62.                 $em->persist($chat);
  63.                 $em->flush();
  64.                 $content['id'] = $chat->getUniqId();
  65.             }
  66.         } else {
  67.             $content['id'] = $chat->getUniqId();
  68.         }
  69.         return $this->redirectToRoute('cabinet.chat.index'$content);
  70.     }
  71. }