src/Controller/PrivateMessageController.php line 130

Open in your IDE?
  1. <?php
  2.     namespace App\Controller;
  3.     use App\Entity\Customer;
  4.     use App\Entity\Inquiry;
  5.     use App\Entity\Make;
  6.     use App\Entity\Offer;
  7.     use App\Entity\PrivateMessage;
  8.     use App\Form\PrivateMessageFilterType;
  9.     use App\Repository\NotificationsRepository;
  10.     use App\Repository\OfferRepository;
  11.     use App\Repository\PrivateMessageRepository;
  12.     use App\Services\InquiryService;
  13.     use App\Services\PaginationService;
  14.     use Symfony\Component\Form\FormFactoryInterface;
  15.     use Symfony\Component\HttpFoundation\JsonResponse;
  16.     use Symfony\Component\HttpFoundation\RedirectResponse;
  17.     use Symfony\Component\HttpFoundation\Request;
  18.     use Symfony\Component\HttpFoundation\Response;
  19.     use Symfony\Component\HttpFoundation\Session\SessionInterface;
  20.     use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  21.     use Symfony\Contracts\Translation\TranslatorInterface;
  22.     use Twig\Environment;
  23.     class PrivateMessageController extends DictionaryController  {
  24.         protected $inquiryService;
  25.         protected $offerRepository;
  26.         protected $notificationsRepository;
  27.         public function __construct(Environment $twig,
  28.                                     TranslatorInterface $translator,
  29.                                     AuthenticationUtils $authenticationUtils,
  30.                                     SessionInterface $session,
  31.                                     PrivateMessageRepository $entityRepository,
  32.                                     InquiryService $inquiryService,
  33.                                     OfferRepository $offerRepository,
  34.                                     NotificationsRepository $notificationsRepository
  35.         ) {
  36.             parent::__construct($twig$translator$authenticationUtils$session);
  37.             $this->entityRepository $entityRepository;
  38.             $this->inquiryService $inquiryService;
  39.             $this->offerRepository $offerRepository;
  40.             $this->notificationsRepository $notificationsRepository;
  41.         }
  42.         public function index(Request $requestFormFactoryInterface $formFactory) : Response
  43.         {
  44.             $queryBuilder $this->entityRepository->createQueryBuilder('entity');
  45.             $queryBuilder
  46.                 ->select('COUNT(entity.id)')
  47.                 ->leftJoin(Offer::class, 'o''WITH''entity.offer = o.id')
  48.                 ->leftJoin(Inquiry::class, 'i''WITH''o.inquiry = i.id')
  49.                 ->leftJoin(Customer::class, 'recipient''WITH''entity.recipient = recipient.id')
  50.                 ->leftJoin(Customer::class, 'author''WITH''entity.author = author.id')
  51.                 ->leftJoin(Make::class, 'mak''WITH''mak.id=i.make')
  52.             ;
  53.             $filter $this->submitFilter($request$formFactory);
  54.             if ($filter instanceof RedirectResponse) {
  55.                 return $filter;
  56.             }
  57.             $this->prepareFilter($request$queryBuilder$filter);
  58.             $recordsCount $queryBuilder->getQuery()->getSingleScalarResult();
  59.             $paginationInfo PaginationService::getPaginationInfo($request->attributes->get('page'), $recordsCount);
  60.             $queryBuilder
  61.                 ->select('entity')
  62.                 ->setFirstResult($paginationInfo['offset'])
  63.                 ->setMaxResults($paginationInfo['limit'])
  64.                 ->orderBy('entity.id''DESC');
  65.             $entities $queryBuilder->getQuery()->getResult();
  66.             return new Response(
  67.                 $this->getTwig()->render(
  68.                     $this->getConfiguration()['templates']['index'],
  69.                     [
  70.                         'paginationInfo' => $paginationInfo,
  71.                         'entities' => $entities,
  72.                         'indexRouting' => $this->getConfiguration()['routings']['index'],
  73.                         'filter' => ($filter !== null) ? $filter->createView() : null,
  74.                     ]
  75.                 )
  76.             );
  77.         }
  78.         public function show(Request $request) : Response
  79.         {
  80.             $privateMessage $this->entityRepository->find($request->attributes->get('id'));
  81.             return new Response(
  82.                 $this->getTwig()->render(
  83.                     'PrivateMessage/show.html.twig',
  84.                     [
  85.                         'privateMessage' => $privateMessage
  86.                     ]
  87.                 )
  88.             );
  89.         }
  90.         public function uploadFile(Request $request)
  91.         {
  92.             $files $this->inquiryService->uploadTemporaryPrivateMessageAttachment($_FILES$request->attributes->get('id'), $this->getUser()->getId());
  93.             return new JsonResponse([
  94.                 'file' => $files,
  95.                 'offerId' => $request->attributes->get('id'),
  96.                 'userId' => $this->getUser()->getId(),
  97.                 'width' => $files['width'],
  98.                 'height' => $files['height']
  99.             ]);
  100.         }
  101.         public function deleteFile(Request $request)
  102.         {
  103.             $files glob($_SERVER['DOCUMENT_ROOT'] . '/upload/' $request->request->get('offerId') . '/'$request->request->get('userId') . '/' $request->request->get('file'));
  104.             foreach ($files as $file) {
  105.                 unlink($file);
  106.             }
  107.             return new JsonResponse(['message' => 'UsuniÄ™to plik '$request->request->get('file'), 'status' => 'success'], 200);
  108.         }
  109.         public function getPrivateMessages($id)
  110.         {
  111.             $customer $this->get('security.token_storage')->getToken()->getUser();
  112.             $offer $this->offerRepository->find($id);
  113.             if ($this->getUser()->getIsSupplier() && ($this->getUser()->getId() != $offer->getSupplier()->getId()) && !$this->getUser()->getIsRecipient()) {
  114.                 return new JsonResponse(['status' => 'ERROR''message' => $this->getTranslator()->trans('offer.messages.you_cannot_see_not_yours_offers')]);
  115.             }
  116.             if ($this->getUser()->getIsRecipient() && ($this->getUser()->getId() !== $offer->getInquiry()->getRecipient()->getId()) && !$this->getUser()->getIsSupplier()) {
  117.                 return new JsonResponse(['status' => 'ERROR''message' => $this->getTranslator()->trans('offer.messages.you_cannot_see_not_yours_offers')]);
  118.             }
  119.             if(($this->getUser()->getIsRecipient() && $offer->getInquiry()->getRecipient()->getId() !== $this->getUser()->getId()) && ($this->getUser()->getIsSupplier() && $offer->getSupplier()->getId() != $this->getUser()->getId())){
  120.                 return new JsonResponse(['status' => 'ERROR''message' => $this->getTranslator()->trans('offer.messages.you_cannot_see_not_yours_offers')]);
  121.             }
  122.             $privateMessages $this->entityRepository->findBy(['offer' => $id], ['id' => 'DESC']);
  123.             $privateMessageIds = [];
  124.             /** @var PrivateMessage $privateMessage */
  125.             foreach ($privateMessages as $privateMessage) {
  126.                 $privateMessageIds[$privateMessage->getId()] = $privateMessage;
  127.             }
  128.             $notificationsForMessagesArray = [];
  129.             $notificationsForMessages $this->notificationsRepository->findBy(['entityType' => 'offer''entityId' => $id'contentId' => $privateMessageIds]);
  130.             foreach ($notificationsForMessages as $notificationsForMessage) {
  131.                 $notificationsForMessagesArray[$notificationsForMessage->getContentId()] = $notificationsForMessage;
  132.             }
  133.             $html $this->getTwig()->render('ClientOffer/privateMessage.html.twig', [
  134.                 'privateMessages' => $privateMessages,
  135.                 'notificationsForMessages' => $notificationsForMessagesArray
  136.             ]);
  137.             return new JsonResponse(['html' => $html], 200);
  138.         }
  139.         public function getConfiguration()
  140.         {
  141.             return [
  142.                 'templates' => [
  143.                     'index' => 'PrivateMessage/index.html.twig',
  144.                 ],
  145.                 'routings' => [
  146.                     'index' => 'private_message_index'
  147.                 ],
  148.                 'classes' => [
  149.                     'entity' => PrivateMessage::class,
  150.                     'filter' => PrivateMessageFilterType::class
  151.                 ]
  152.             ];
  153.         }
  154.     }