src/Controller/Front/Offer/OfferController.php line 578

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front\Offer;
  3. use App\Config\Pages;
  4. use App\Entity\Page\Page;
  5. use App\Message\Create\CreateNewOfferEmail;
  6. use App\Utils\ResponseMessage\ResponseMessage;
  7. use App\Utils\Slug\Slug;
  8. use App\View\Offer\Offer\Offer;
  9. use PHPUnit\Exception;
  10. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  11. use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use App\Entity\Offer\Offer as EntityOffer;
  18. class OfferController extends OfferUtilsController
  19. {
  20.     private const PACKAGE_SELECT_TEMPLATE = 'front/offer/includes/html/package_select.twig';
  21.     private const ROLE_SHOW_FREE_PACKAGE = ['ROLE_ADMIN', 'ROLE_EDITOR'];
  22.     public function createOfferStepOneAction(Request $request, Page $page): Response
  23.     {
  24.         $checkAccess = null;
  25.         if ($request->isMethod('POST')) {
  26.             return $this->postActionOfferStepOne($request, $page, "1");
  27.         }
  28.         if (is_null($this->getTemporaryIdFromQuery($request))) {
  29.             $offer = false;
  30.         } else {
  31.             $offer = $this->checkIfOfferExist($request);
  32.             if (is_null($offer)) {
  33.                 return $this->redirectToStepOne($request);
  34.             }
  35.             $checkStep = $this->checkIfCorrectStep($offer, $request, "1");
  36.             if (false === is_null($checkStep)) {
  37.                 return $checkStep;
  38.             }
  39.             $checkAccess = $this->checkIfUserHasAccess($request);
  40.             if (false === is_null($checkAccess)) {
  41.                 return $checkAccess;
  42.             }
  43.         }
  44.         if (!$this->checkUserHavePackage($request, $checkAccess)) {
  45.             $locale = $request->getLocale();
  46.             if ($this->getUser()) {
  47.                 $error = ResponseMessage::NoHavePackage($locale);
  48.                 $this->addFlash('response_message', $error);
  49.             }
  50.             $page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
  51.             return $this->redirectToRoute('front-page', [
  52.                 '_locale' => $locale,
  53.                 'url' => $page->translate($locale, false)->getUrl(),
  54.             ]);
  55.         }
  56.         $viewParams = $this->createViewParams($request, $page, '1');
  57.         $viewParams['offer'] = $offer;
  58.         $offerActivePackage = $offer !== false ? $offer : null;
  59.         $viewParams['packages'] = $this->getActivePackage($request, $offerActivePackage);
  60.         $this->getFreePackage($viewParams);
  61.         if (false !== $offer) {
  62.             $categoryId = $offer->getCategoryId();
  63.             $viewParams['industries'] = $this->itemCategoryProvider->getIndustryById($categoryId, '1');
  64.         }
  65.         return $this->render(self::NEW_OFFER_STEP_1_TEMPLATE_PATH, $viewParams);
  66.     }
  67.     public function createOfferStepTwoAction(Request $request, Page $page): Response
  68.     {
  69.         $offer = $this->checkIfOfferExist($request);
  70.         if (is_null($offer)) {
  71.             return $this->redirectToStepOne($request);
  72.         }
  73.         $checkStep = $this->checkIfCorrectStep($offer, $request, "1");
  74.         if (false === is_null($checkStep)) {
  75.             return $checkStep;
  76.         }
  77.         $checkAccess = $this->checkIfUserHasAccess($request);
  78.         if (false === is_null($checkAccess)) {
  79.             return $checkAccess;
  80.         }
  81.         if (false === $this->checkOfferHavePackage($offer)) {
  82.             return $this->createRedirectWhenOfferNoHavePackage($request);
  83.         }
  84.         if (!$this->checkUserHavePackage($request, $checkAccess)) {
  85.             $locale = $request->getLocale();
  86.             if ($this->getUser()) {
  87.                 $error = ResponseMessage::NoHavePackage($locale);
  88.                 $this->addFlash('response_message', $error);
  89.             }
  90.             $page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
  91.             return $this->redirectToRoute('front-page', [
  92.                 '_locale' => $locale,
  93.                 'url' => $page->translate($locale, false)->getUrl(),
  94.             ]);
  95.         }
  96.         if ($request->isMethod('POST')) {
  97.             $request->request->set('categoryType', 'requirements');
  98.             return $this->postActionOffer($request, "2");
  99.         }
  100.         return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_2_TEMPLATE_PATH, "2");
  101.     }
  102.     public function createOfferStepThreeAction(Request $request, Page $page): Response
  103.     {
  104.         $offer = $this->checkIfOfferExist($request);
  105.         if (is_null($offer)) {
  106.             return $this->redirectToStepOne($request);
  107.         }
  108.         $checkStep = $this->checkIfCorrectStep($offer, $request, "1");
  109.         if (false === is_null($checkStep)) {
  110.             return $checkStep;
  111.         }
  112.         $checkAccess = $this->checkIfUserHasAccess($request);
  113.         if (false === is_null($checkAccess)) {
  114.             return $checkAccess;
  115.         }
  116.         if (false === $this->checkOfferHavePackage($offer)) {
  117.             return $this->createRedirectWhenOfferNoHavePackage($request);
  118.         }
  119.         if (!$this->checkUserHavePackage($request, $checkAccess)) {
  120.             $locale = $request->getLocale();
  121.             if ($this->getUser()) {
  122.                 $error = ResponseMessage::NoHavePackage($locale);
  123.                 $this->addFlash('response_message', $error);
  124.             }
  125.             $page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
  126.             return $this->redirectToRoute('front-page', [
  127.                 '_locale' => $locale,
  128.                 'url' => $page->translate($locale, false)->getUrl(),
  129.             ]);
  130.         }
  131.         if ($request->isMethod('POST')) {
  132.             $request->request->set('categoryType', 'taskRange');
  133.             return $this->postActionOffer($request, "3");
  134.         }
  135.         return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_3_TEMPLATE_PATH, "3");
  136.     }
  137.     public function createOfferStepFourAction(Request $request, Page $page): Response
  138.     {
  139.         $offer = $this->checkIfOfferExist($request);
  140.         if (is_null($offer)) {
  141.             return $this->redirectToStepOne($request);
  142.         }
  143.         $checkStep = $this->checkIfCorrectStep($offer, $request, "1");
  144.         if (false === is_null($checkStep)) {
  145.             return $checkStep;
  146.         }
  147.         $checkAccess = $this->checkIfUserHasAccess($request);
  148.         if (false === is_null($checkAccess)) {
  149.             return $checkAccess;
  150.         }
  151.         if (false === $this->checkOfferHavePackage($offer)) {
  152.             return $this->createRedirectWhenOfferNoHavePackage($request);
  153.         }
  154.         if (!$this->checkUserHavePackage($request, $checkAccess)) {
  155.             $locale = $request->getLocale();
  156.             if ($this->getUser()) {
  157.                 $error = ResponseMessage::NoHavePackage($locale);
  158.                 $this->addFlash('response_message', $error);
  159.             }
  160.             $page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
  161.             return $this->redirectToRoute('front-page', [
  162.                 '_locale' => $locale,
  163.                 'url' => $page->translate($locale, false)->getUrl(),
  164.             ]);
  165.         }
  166.         if ($request->isMethod('POST')) {
  167.             $request->request->set('categoryType', 'details');
  168.             return $this->postActionOffer($request, "4");
  169.         }
  170.         return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_4_TEMPLATE_PATH, "4");
  171.     }
  172.     public function createOfferStepFiveAction(Request $request, Page $page): Response
  173.     {
  174.         $checkTemporary = $this->checkIfTemporaryIdExist($request);
  175.         if (false === is_null($checkTemporary)) {
  176.             return $checkTemporary;
  177.         }
  178.         $offer = $this->checkIfOfferExist($request);
  179.         if (is_null($offer)) {
  180.             return $this->redirectToStepOne($request);
  181.         }
  182.         $checkStep = $this->checkIfCorrectStep($offer, $request, "5");
  183.         if (false === is_null($checkStep)) {
  184.             return $checkStep;
  185.         }
  186.         $checkAccess = $this->checkIfUserHasAccess($request);
  187.         if (false === is_null($checkAccess)) {
  188.             return $checkAccess;
  189.         }
  190.         if (false === $this->checkOfferHavePackage($offer)) {
  191.             return $this->createRedirectWhenOfferNoHavePackage($request);
  192.         }
  193.         if (!$this->checkUserHavePackage($request, $checkAccess)) {
  194.             $locale = $request->getLocale();
  195.             if ($this->getUser()) {
  196.                 $error = ResponseMessage::NoHavePackage($locale);
  197.                 $this->addFlash('response_message', $error);
  198.             }
  199.             $page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
  200.             return $this->redirectToRoute('front-page', [
  201.                 '_locale' => $locale,
  202.                 'url' => $page->translate($locale, false)->getUrl(),
  203.             ]);
  204.         }
  205.         if ($request->isMethod('POST')) {
  206.             $offer = $this->getOffer($request);
  207.             $offerCompany = $offer->getOfferCompany();
  208.             if (is_null($offerCompany)) {
  209.                 $offerCompany = $this->offerCompanyFactory->createEmptyOfferCompany();
  210.                 $this->offerCompanyService->create($offerCompany);
  211.             }
  212.             $this->offerCompanyFactory->updateCompanyFromRequestParams($request, $offerCompany);
  213.             $this->offerFactory->addParamsToOffer($request, $offer);
  214.             $this->offerFactory->changeCompanyInSearchParams($offerCompany, $offer);
  215.             $offer->setOfferCompany($offerCompany);
  216.             $offer->setStep("6");
  217.             $offer->generateKeywords();
  218.             $this->editChildOffersSearchCompany($offer);
  219.             $this->offerCompanyService->flush();
  220.             if (!is_null($this->getUser())) {
  221.                 if ($this->getUser()->getRoles()[0] == "ROLE_ADMIN" || $this->getUser()->getRoles(
  222.                     )[0] == "ROLE_EDITOR") {
  223.                     $user = $this->userProvider->getOneByEmail(
  224.                         $offer->getEmail(),
  225.                     ) != null ? $this->userProvider->getOneByEmail($offer->getEmail()) : null;
  226.                     $userId = !is_null($user) ? $user->getId() : null;
  227.                     $company = $this->companyProvider->getEntityByUserId($userId);
  228.                     if ($company) {
  229.                         $company->setLogo($offer->getOfferCompany()->getLogo());
  230.                         $this->companyService->update($company);
  231.                     } else {
  232.                         $company = $this->companyFactory->createEmptyCompany($user);
  233.                         $company
  234.                             ->setLogo($offer->getOfferCompany()->getLogo())
  235.                             ->setUser($user);
  236.                         $this->companyService->create($company);
  237.                     }
  238.                 } else {
  239.                     $company = $this->companyProvider->getEntityByUserId($this->getUser()->getId());
  240.                     if ($company) {
  241.                         if (is_null($company->getLogo())) {
  242.                             $company->setLogo($offer->getOfferCompany()->getLogo());
  243.                             $this->companyService->update($company);
  244.                         }
  245.                     }
  246.                 }
  247.             }
  248.             $temporaryId = $this->getTemporaryIdFromQuery($request);
  249.             $accessKey = $this->getAccessKeyFromQuery($request);
  250.             return $this->redirectToStep($request, Pages::USER_ADD_OFFER_STEP_SIX, $temporaryId, $accessKey);
  251.         }
  252.         $userId = is_null($this->getUser()) ? null : $this->getUser()->getId();
  253.         $viewParams = $this->createViewParams($request, $page, 'none');
  254.         $viewParams['offer'] = $offer;
  255.         $companyFromOffer = $offer->getCompany();
  256.         $companyFromUser = null;
  257.         if (!is_null($this->getUser())) {
  258.             if ($this->getUser()->getRoles()[0] == "ROLE_ADMIN" || $this->getUser()->getRoles()[0] == "ROLE_EDITOR") {
  259.                 $user = $this->userProvider->getOneByEmail(
  260.                     $offer->getEmail(),
  261.                 ) != null ? $this->userProvider->getOneByEmail($offer->getEmail())->getId() : null;
  262.                 $companyFromUser = $this->companyProvider->getOneByUserId($user);
  263.             } else {
  264.                 $companyFromUser = $this->companyProvider->getOneByUserId($userId);
  265.             }
  266.         }
  267.         $viewParams['company'] = is_null($companyFromOffer) ? $companyFromUser : $companyFromOffer;
  268.         $viewParams['accessKey'] = $this->getAccessKeyFromQuery($request);
  269.         return $this->render(self::NEW_OFFER_STEP_5_TEMPLATE_PATH, $viewParams);
  270.     }
  271.     public function createOfferStepSixAction(Request $request, Page $page): Response
  272.     {
  273.         $checkTemporary = $this->checkIfTemporaryIdExist($request);
  274.         if (false === is_null($checkTemporary)) {
  275.             return $checkTemporary;
  276.         }
  277.         $offer = $this->checkIfOfferExist($request);
  278.         if (is_null($offer)) {
  279.             return $this->redirectToStepOne($request);
  280.         }
  281.         $checkStep = $this->checkIfCorrectStep($offer, $request, "6");
  282.         if (false === is_null($checkStep)) {
  283.             return $checkStep;
  284.         }
  285.         $checkAccess = $this->checkIfUserHasAccess($request);
  286.         if (false === is_null($checkAccess)) {
  287.             return $checkAccess;
  288.         }
  289.         if (false === $this->checkOfferHavePackage($offer)) {
  290.             return $this->createRedirectWhenOfferNoHavePackage($request);
  291.         }
  292.         $orderIsUsed = $this->checkOrderIsUsed($offer->getOrder(), $offer);
  293.         if (!$this->checkUserHavePackage($request, $checkAccess) || $orderIsUsed) {
  294.             $locale = $request->getLocale();
  295.             $error = $orderIsUsed ?
  296.                 ResponseMessage::errorMaxLengthOfferInPackage($locale) :
  297.                 ResponseMessage::NoHavePackage($locale);
  298.             $this->addFlash('response_message', $error);
  299.             $page = $this->pageProvider->getOneByMigrationId(PAGES::USER_ZONE_PACKAGE_ADVERTISING);
  300.             return $this->redirectToRoute('front-page', [
  301.                 '_locale' => $locale,
  302.                 'url' => $page->translate($locale, false)->getUrl(),
  303.             ]);
  304.         }
  305.         if ($request->isMethod('POST')) {
  306.             $offer = $this->getOffer($request);
  307.             if (is_null($offer->getWorkData()) === false) {
  308.                 if (isset($offer->getWorkData()['address']['city'])) {
  309.                     $this->createManyChildOfferFromMainOffer($offer);
  310.                 }
  311.             }
  312.             $this->offerFactory->addParamsToOffer($request, $offer);
  313.             $this->ifUserExistsAddToOffer($offer);
  314.             $offer
  315.                 ->setDone(true)
  316.                 ->setActive(true)
  317.                 ->setPublishedAt(new \DateTime());
  318.             $offer->generateKeywords();
  319.             $offer->setKeywordsChildOffer();
  320.             $offer->updateOfferChildActiveAndDone();
  321.             $this->offerService->save($offer);
  322.             $manyOfferSalary = $this->offerSalaryFactory->createManyOfferSalary($offer);
  323.             $this->offerSalaryService->saveMany($manyOfferSalary);
  324.             if ($offer->getPackage()->getFreePackage()) {
  325.                 $userEntity = $this->userProvider->getUserByUsername($offer->getEmail());
  326.                 $orderRequest = new Request();
  327.                 $orderRequest->request->set('step', 1);
  328.                 $orderRequest->request->set('customer', $userEntity?->getId());
  329.                 $orderRequest->query->set('package', $offer->getPackage()?->getId());
  330.                 $orderRequest->request->set('status', 1);
  331.                 $orderRequest->request->set('paymentStatus', 2);
  332.                 $orderRequest->request->set('company', [
  333.                     'name' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  334.                     )->getExtraInvoiceData()->getName() : $offer->getOfferCompany()->getInvoiceData()->getName(),
  335.                     'address' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  336.                     )->getExtraInvoiceData()->getAddress()->getAddress() : $offer->getOfferCompany()->getInvoiceData(
  337.                     )->getAddress()->getAddress(),
  338.                     'postCode' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  339.                     )->getExtraInvoiceData()->getAddress()->getPostCode() : $offer->getOfferCompany()->getInvoiceData(
  340.                     )->getAddress()->getPostCode(),
  341.                     'city' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  342.                     )->getExtraInvoiceData()->getAddress()->getCity() : $offer->getOfferCompany()->getInvoiceData(
  343.                     )->getAddress()->getCity(),
  344.                     'country' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  345.                     )->getExtraInvoiceData()->getAddress()->getCountry() : $offer->getOfferCompany()->getInvoiceData(
  346.                     )->getAddress()->getCountry(),
  347.                     'nip' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
  348.                     )->getExtraInvoiceData()->getVatId() : $offer->getOfferCompany()->getInvoiceData()->getVatId(),
  349.                     'owner' => $offer->getEmail(),
  350.                 ]);
  351.                 $order = $this->orderService->create($orderRequest);
  352.                 $offer->setOrder($order);
  353.                 $offer->editOrderChildOffer($offer, $order);
  354.                 $offer->editUserChildOffer($offer, $userEntity);
  355.                 $this->offerService->save($offer);
  356.                 if (is_null($offer->getUser())) {
  357.                     try {
  358.                         $userPackageOffer = new Request();
  359.                         $userPackageOffer->request->set('user', $userEntity?->getId());
  360.                         $userPackageOffer->request->set('package', $offer->getPackage()?->getId());
  361.                         $userPackageOffer->request->set('offer', $offer?->getId());
  362.                         $userPackageOffer->request->set('order', $order?->getId());
  363.                         $this->createUserPackageOffer($userPackageOffer);
  364.                         $this->userPackageService->checkOfferUsedLength([
  365.                             'package' => $offer->getPackage(),
  366.                             'user' => $userEntity,
  367.                             'order' => $offer->getOrder(),
  368.                         ]);
  369.                     } catch (Exception $e) {
  370.                     }
  371.                 }
  372.             }
  373.             $this->offerBoostService->setBoostDates($offer);
  374.             $defaultUser = is_null($this->getUser()) === false ? $this->getUser()->getEmail() : '';
  375.             $username = $offer->getEmail() !== '' ? $offer->getEmail() : $defaultUser;
  376.             $locale = $request->getLocale();
  377.             $temporaryId = $offer->getTemporaryId();
  378.             $accessKey = $offer->getAccessKey();
  379.             $isUser = is_null($this->userProvider->getOneByEmail($offer->getEmail())) === false ? true : false;
  380.             $offerName = [
  381.                 'pl' => $offer->getOfferNamePL(),
  382.                 'en' => $offer->getOfferNameEN(),
  383.             ];
  384.             if ($offer->getUser()) {
  385.                 try {
  386.                     $packageRequest = new Request();
  387.                     $packageRequest->request->set('package', $offer->getPackage()?->getId());
  388.                     $packageRequest->request->set('user', $offer->getUser()?->getId());
  389.                     $packageRequest->request->set('offer', $offer->getId());
  390.                     $packageRequest->request->set('order', $offer->getOrder()?->getId());
  391.                     $this->createUserPackageOffer($packageRequest);
  392.                     $this->userPackageService->checkOfferUsedLength([
  393.                         'package' => $offer->getPackage(),
  394.                         'user' => $offer->getUser(),
  395.                         'order' => $offer->getOrder(),
  396.                     ]);
  397.                 } catch (Exception $e) {
  398.                 }
  399.             }
  400.             $this->messageBus->dispatch(
  401.                 new CreateNewOfferEmail(
  402.                     $username,
  403.                     $locale,
  404.                     $temporaryId,
  405.                     $accessKey,
  406.                     $isUser,
  407.                     $offerName,
  408.                 ),
  409.             );
  410.             return $this->checkIsLogin() === true ? $this->redirectToMyOffers($request) : $this->redirectToMainPage(
  411.                 $request,
  412.             );
  413.         }
  414.         $viewParams = $this->createViewParams($request, $page, 'none');
  415.         $temporaryId = $this->getTemporaryIdFromQuery($request);
  416.         $viewParams['offer'] = $this->offerProvider->getOfferPreViewByTemporaryId($temporaryId);
  417.         $viewParams['accessKey'] = $this->getAccessKeyFromQuery($request);
  418.         return $this->render(self::NEW_OFFER_STEP_6_TEMPLATE_PATH, $viewParams);
  419.     }
  420.     public function createOfferStepSevenAction(Request $request, Page $page): Response
  421.     {
  422.         $checkAccess = $this->checkIfUserHasAccess($request);
  423.         if (false === is_null($checkAccess)) {
  424.             return $checkAccess;
  425.         }
  426.         $viewParams = $this->createViewParams($request, $page, 'none');
  427.         return $this->render(self::NEW_OFFER_STEP_7_TEMPLATE_PATH, $viewParams);
  428.     }
  429.     public function createOfferListViewAction(Request $request, Page $page): Response
  430.     {
  431.         $userLogged = $this->checkUserLogOut($request);
  432.         if (false === is_null($userLogged)) {
  433.             return $userLogged;
  434.         }
  435.         $viewParams = $this->createViewParams($request, $page, 'none');
  436.         $userId = $this->getUser()->getId();
  437.         $request = $request->attributes->get('originalRequest');
  438.         if ($this->getUser()->getRoles()[0] === 'ROLE_EDITOR') {
  439.             $viewParams['offers'] = $this->offerProvider->getAllDoneByEditor($this->getUser()->getEmail());
  440.         } else {
  441.             $viewParams['offers'] = $this->offerProvider->getAllDoneUserOffer($userId, $request->getLocale());
  442.         }
  443.         return $this->render(self::OFFER_LIST_VIEW_TEMPLATE_PATH, $viewParams);
  444.     }
  445.     public function createShareOfferListViewAction(Request $request, Page $page): Response
  446.     {
  447.         $userLogged = $this->checkUserLogOut($request);
  448.         if (false === is_null($userLogged)) {
  449.             return $userLogged;
  450.         }
  451.         $viewParams = $this->createViewParams($request, $page, 'none');
  452.         $viewParams['shared_offers'] = [];
  453.         if ($this->getUser()->getRoles()[0] !== 'ROLE_ADMIN' && $this->getUser()->getRoles()[0] !== "ROLE_EDITOR") {
  454.             $viewParams['shared_offers'] = $this->createViewSharedOffer(
  455.                 $this->sharedOfferProvider->getAllByUser($this->getUser()),
  456.             );
  457.         }
  458.         return $this->render(self::SHARE_OFFER_LIST_VIEW_TEMPLATE_PATH, $viewParams);
  459.     }
  460.     public function createUnFinishOfferListViewAction(Request $request, Page $page): Response
  461.     {
  462.         $userLogged = $this->checkUserLogOut($request);
  463.         if (false === is_null($userLogged)) {
  464.             return $userLogged;
  465.         }
  466.         $viewParams = $this->createViewParams($request, $page, 'none');
  467.         $userId = $this->getUser()->getId();
  468.         $request = $request->attributes->get('originalRequest');
  469.         if ($this->getUser()->getRoles()[0] === "ROLE_EDITOR") {
  470.             $viewParams['offers'] = $this->offerProvider->getAllNoDoneByEditor($this->getUser()->getEmail());
  471.         } else {
  472.             $viewParams['offers'] = $this->offerProvider->getAllUnDoneUserOffer($userId, $request->getLocale());
  473.         }
  474.         return $this->render(self::OFFER_UN_FINISH_LIST_VIEW_TEMPLATE_PATH, $viewParams);
  475.     }
  476.     public function deleteOfferAction(Request $request, Page $page): Response
  477.     {
  478.         $userLogged = $this->checkUserLogOut($request);
  479.         if (false === is_null($userLogged)) {
  480.             return $userLogged;
  481.         }
  482.         $checkAccess = $this->checkIfUserCanRemoveOrCopyOffer($request);
  483.         if (false === is_null($checkAccess)) {
  484.             return $checkAccess;
  485.         }
  486.         $referer = $request->headers->get('referer');
  487.         $temporaryId = $this->getTemporaryIdFromQuery($request);
  488.         $offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
  489.         if (is_null($offer)) {
  490.             return $this->offerNotFound($request);
  491.         }
  492.         $this->offerService->editOfferVisible($offer, false);
  493.         if (is_null($referer)) {
  494.             return $this->redirectToMainPage($request);
  495.         }
  496.         return $this->redirect($referer);
  497.     }
  498.     public function copyOfferAction(Request $request, Page $page): Response
  499.     {
  500.         $userLogged = $this->checkUserLogOut($request);
  501.         if (false === is_null($userLogged)) {
  502.             return new JsonResponse($userLogged->getTargetUrl());
  503.         }
  504.         if ($checkAccess = $this->checkIfUserCanRemoveOrCopyOffer($request)) {
  505.             return new JsonResponse($checkAccess->getTargetUrl());
  506.         }
  507.         $temporaryId = $this->getTemporaryIdFromQuery($request);
  508.         $offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
  509.         $originalRequest = $request->attributes->get('originalRequest');
  510.         if (is_null($offer)) {
  511.             return new JsonResponse($this->offerNotFound($request)->getTargetUrl());
  512.         }
  513.         if ($checkAccess = $this->checkPackageOfferUsedLength($request, $offer)) {
  514.             return new JsonResponse($checkAccess->getTargetUrl());
  515.         }
  516.         $orderId = $originalRequest->get('orderId', null);
  517.         $orderEntity = is_null($orderId) === false ? $this->orderProvider->getOneById($orderId) : $offer->getOrder();
  518.         $orderId = $orderEntity?->getId();
  519.         $package = $orderId ? $orderEntity?->getPackage() : $offer->getPackage();
  520.         $newOfferTemporaryId = $this->offerService->cloneOffer($offer, $orderEntity);
  521.         if (is_null($newOfferTemporaryId)) {
  522.             $newOfferTemporaryId = $temporaryId;
  523.         }
  524.         $offer = $this->offerProvider->getEntityByTemporaryId($newOfferTemporaryId);
  525.         $this->userPackageService->checkOfferUsedLength([
  526.             'package' => $package,
  527.             'user' => $offer->getUser(),
  528.             'order' => $orderEntity,
  529.         ]);
  530.         return new JsonResponse($this->redirectToAcceptOffer($request, $newOfferTemporaryId, null));
  531.     }
  532.     public function showOffersIndustryAction(Request $request, Page $page): Response
  533.     {
  534.         $result_params = $request->request->all();
  535.         $data = [];
  536.         if (isset($result_params['resut_params']) === true && $result_params['resut_params'] != '') {
  537.             $apiKey = $this->parameterBag->get('google_api_key');
  538.             $result = $request->request->all();
  539.             foreach ($result as $items) {
  540.                 foreach ($items as $item) {
  541.                     if (isset($item['id_place']) === true && isset($item['name'])) {
  542.                         $response = $this->httpClient->request(
  543.                             'GET',
  544.                             'https://maps.googleapis.com/maps/api/place/details/json?fields=formatted_address,geometry&language=pl&place_id='.$item['id_place'].'&key='.$apiKey,
  545.                         );
  546.                         $jsonResponse = json_decode($response->getContent());
  547.                         $data[] = [
  548.                             'city' => $item['name'],
  549.                             'pl_name' => $jsonResponse->result->formatted_address,
  550.                             'lat' => $jsonResponse->result->geometry->location->lat,
  551.                             'lnt' => $jsonResponse->result->geometry->location->lng,
  552.                         ];
  553.                     }
  554.                 }
  555.             }
  556.         }
  557.         $this->offerFactory->checkIfLocationsFromSearchExistInDB($data);
  558.         $params = $request->attributes->get('originalRequest')->query->all();
  559.         $viewParams = $this->createViewParams($request, $page, 'none', false);
  560.         $viewParams['main_page_search'] = $this->mainPageOfferSearchFactory->createMainPageOfferSearchView();
  561.         $viewParams['industry'] = [];
  562.         $viewParams['industry_list_footer'] = [];
  563.         $viewParams['city_list_footer'] = [];
  564.         $viewParams['max_search_params'] = $this->parameterBag->get('maxSearchParams');
  565.         $viewParams['max_search_params_own'] = $this->parameterBag->get('maxSearchParamsOwn');
  566.         $viewParams['lvl_jobs'] = $this->jobLevelsProvider->getAllActiveView();
  567.         $viewParams['show_job_level_select'] = $this->jobLevelSelectProvider->getOneById(1);
  568.         if (isset($params['filters'])) {
  569.             $viewParams['seo'] = $this->getSeoForIndustryByParams($params['filters']);
  570.             $viewParams['search_options'] = $this->mainPageOfferSearchFactory->getMainPageOfferSearchParameterView(
  571.                 $params['filters'],
  572.                 $request->getLocale(),
  573.             );
  574.             $seoText = $this->mainPageOfferSearchFactory->getMainPageSeoText($params['filters']);
  575.             $viewParams['seo_text'] = $seoText;
  576.             $viewParams['change_title'] = true;
  577.             $viewParams['new_title'] = $request->getLocale() === 'pl' ?
  578.                 $seoText->getSeoTextPL() : $seoText->getSeoTextEN();
  579.             $response_data = $this->mainPageOfferSearchFactory->getOffersWithChoseFilters($params['filters']);
  580.             $viewParams['offers'] = $response_data['offers'];
  581.             $viewParams['offersResult'] = $response_data['offers'];
  582.             $viewParams['pagination'] = $this->mainPageOfferSearchFactory->getPagination(
  583.                 $response_data['offers_max'],
  584.                 $params['filters'],
  585.             );
  586.         }
  587.         if (isset($params)) {
  588.             if (false === isset($params['filters'])) {
  589.                 return $this->redirectToMainPage($request);
  590.             }
  591.         }
  592.         return $this->render(self::HOME_PAGE_INDUSTRY_VIEW_TEMPLATE_PATH, $viewParams);
  593.     }
  594.     public function showApplicationListAction(Request $request, Page $page): Response
  595.     {
  596.         $userLogged = $this->checkUserLogOut($request);
  597.         if (false === is_null($userLogged)) {
  598.             return $userLogged;
  599.         }
  600.         $checkAccess = $this->checkIfUserCanShowApplicationList($request);
  601.         if (false === is_null($checkAccess)) {
  602.             return $checkAccess;
  603.         }
  604.         $viewParams = $this->createViewParams($request, $page, 'none');
  605.         $temporaryId = $viewParams['temporaryId'];
  606.         $offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
  607.         if (is_null($offer)) {
  608.             return $this->offerNotFound($request);
  609.         }
  610.         $applications = [];
  611.         foreach ($offer->getOffers() as $localOffer) {
  612.             foreach ($localOffer->getApplication() as $localApplication) {
  613.                 $applications[] = $localApplication;
  614.             }
  615.         }
  616.         foreach ($offer->getApplication() as $localApplication) {
  617.             $applications[] = $localApplication;
  618.         }
  619.         $locale = $request->getLocale();
  620.         $viewParams['applicationList'] = $this->applicationFactory
  621.             ->createOfferApplicationViewFromEntities($applications, $locale);
  622.         return $this->render(self::APPLICATIONS_LIST_VIEW_TEMPLATE_PATH, $viewParams);
  623.     }
  624.     public function deleteApplicationAction(Request $request, Page $page): Response
  625.     {
  626.         $userLogged = $this->checkUserLogOut($request);
  627.         if (false === is_null($userLogged)) {
  628.             return $userLogged;
  629.         }
  630.         $checkAccess = $this->checkIfUserCanRemoveApplicationOrShowCV($request);
  631.         if (false === is_null($checkAccess)) {
  632.             return $checkAccess;
  633.         }
  634.         $applicationId = $this->getApplicationIdFromQuery($request);
  635.         $application = $this->applicationProvider->getEntityById($applicationId);
  636.         if (is_null($application)) {
  637.             return $this->applicationNotFound($request);
  638.         }
  639.         $referer = $request->headers->get('referer');
  640.         $this->applicationService->remove($application);
  641.         $this->applicationService->flush();
  642.         if (is_null($referer)) {
  643.             return $this->redirectToMainPage($request);
  644.         }
  645.         return $this->redirect($referer);
  646.     }
  647.     public function previewCVAction(Request $request, Page $page): Response
  648.     {
  649.         $userLogged = $this->checkUserLogOut($request);
  650.         if (false === is_null($userLogged)) {
  651.             return $userLogged;
  652.         }
  653.         $checkAccess = $this->checkIfUserCanRemoveApplicationOrShowCV($request);
  654.         if (false === is_null($checkAccess)) {
  655.             return $checkAccess;
  656.         }
  657.         $applicationId = $this->getApplicationIdFromQuery($request);
  658.         $application = $this->applicationProvider->getEntityById($applicationId);
  659.         if (is_null($application)) {
  660.             return $this->applicationNotFound($request);
  661.         }
  662.         $file = $application->getFile();
  663.         if (is_null($file)) {
  664.             return $this->applicationNotFound($request);
  665.         }
  666.         $fileName = $file->getFileName();
  667.         $extension = $file->getExtension();
  668.         $directory = $this->getParameter('cvURL');
  669.         $file = $directory.$fileName.'.'.$extension;
  670.         $fileNameExt = $fileName.'.'.$extension;
  671.         if ($extension === 'pdf') {
  672.             $response = new BinaryFileResponse($file);
  673.         } else {
  674.             try {
  675.                 $response = new BinaryFileResponse($file);
  676.                 $response->setContentDisposition(
  677.                     ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  678.                     $fileNameExt,
  679.                 );
  680.             } catch (FileNotFoundException $e) {
  681.                 return $this->redirectToApplicationListWithFileNotFoundError($request);
  682.             }
  683.         }
  684.         return $response;
  685.     }
  686.     /**
  687.      * @Route("/search/offer", name="search-phrase", methods={"GET"})
  688.      */
  689.     public function searchOfferAction(Request $request): Response
  690.     {
  691.         $userLogged = $this->checkUserLogOut($request);
  692.         $locale = (string)$request->query->get('locale');
  693.         if (false === is_null($userLogged)) {
  694.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  695.         }
  696.         $searchPhrase = (string)$request->query->get('searchPhrase');
  697.         $isDone = (bool)$request->query->get('isDone');
  698.         $user = $this->getUser();
  699.         $userId = is_null($user) ? null : $this->getUser()->getId();
  700.         $offers = $this->offerProvider->getOffersBySearchPhrase($searchPhrase, $isDone, $userId, $locale);
  701.         if (is_null($offers)) {
  702.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  703.         }
  704.         return new JsonResponse($this->serializer->normalize($offers, 'json'));
  705.     }
  706.     /**
  707.      * @Route("/search/select/option", name="search-select-option", methods={"GET","POST"})
  708.      */
  709.     public function searchSelectOption(Request $request): ?Response
  710.     {
  711.         $locale = (string)$request->request->get('languages');
  712.         $data = [];
  713.         $data['technology'] = $this->itemProvider->getAllSelect2OptionsItemTechnologySQL($locale);
  714.         $data['another'] = $this->anotherProvider->getAllSelect2OptionsAnotherSQL($locale);
  715.         $data['industry'] = $this->itemCategoryProvider->getAllSelect2OptionsIndustrySQL($locale);
  716.         $data['search'] = array_merge(
  717.             $data['industry'],
  718.             $data['another'],
  719.             $data['technology'],
  720.             $this->itemCategoryRepository->getAllSelect2OptionsJobDescriptionSQL($locale),
  721.             $this->itemCategoryProvider->getAllSelect2OptionsOfferNameSQL($locale),
  722.             $this->offerProvider->getAllSelect2OptionsCompanyNameSQL(),
  723.             $this->searchCityProvider->getAllSelect2OptionsSQL(),
  724.         );
  725.         return new JsonResponse($data);
  726.     }
  727.     /**
  728.      * @Route("/search/location/option/{language}", name="search-location-option")
  729.      */
  730.     public function searchLocationOption(Request $request, $language): ?Response
  731.     {
  732.         $query = $request->query->get('q');
  733.         if ($query != '') {
  734.             $query = Slug::slug($query);
  735.         }
  736.         $response = $this->httpClient->request(
  737.             'GET',
  738.             'https://maps.googleapis.com/maps/api/place/autocomplete/json',
  739.             [
  740.                 'query' => [
  741.                     'input' => $query,
  742.                     'language' => $language,
  743.                     'types' => 'geocode',
  744.                     'key' => $this->parameterBag->get('google_api_key'),
  745.                 ],
  746.             ],
  747.         );
  748.         $jsonResponse = json_decode($response->getContent());
  749.         $unique = [];
  750.         foreach ($jsonResponse->predictions as $item) {
  751.             if (!in_array(Slug::slug($item->structured_formatting->main_text), $unique)) {
  752.                 $data[] = [
  753.                     'id' => $item->structured_formatting->main_text,
  754.                     'text' => $item->structured_formatting->main_text,
  755.                     'id_place' => $item->place_id,
  756.                     'country' => end($item->terms)->value,
  757.                 ];
  758.                 $unique[] = Slug::slug($item->structured_formatting->main_text);
  759.             }
  760.         }
  761.         return new JsonResponse($data ?? null);
  762.     }
  763.     /**
  764.      * @Route("/search/location/geometry", name="search-location-geometry")
  765.      */
  766.     public function searchLocationGeometry(Request $request): ?Response
  767.     {
  768.         $placeId = $request->query->get('placeId');
  769.         $response = $this->httpClient->request(
  770.             'GET',
  771.             'https://maps.googleapis.com/maps/api/place/details/json',
  772.             [
  773.                 'query' => [
  774.                     'place_id' => $placeId,
  775.                     'key' => $this->parameterBag->get('google_api_key'),
  776.                 ],
  777.             ],
  778.         );
  779.         $jsonContent = json_decode($response->getContent());
  780.         $geometry = $jsonContent->result->geometry->location;
  781.         return new JsonResponse([
  782.             'placeId' => $placeId,
  783.             'lat' => $geometry->lat,
  784.             'lnt' => $geometry->lng,
  785.         ]);
  786.     }
  787.     /**
  788.      * @Route("/get/users/list/permissons", name="get-users-list-permissons", methods={"GET","POST"})
  789.      */
  790.     public function getListUsersPermissions(Request $request): ?Response
  791.     {
  792.         $data = $request->request->all();
  793.         $userLogged = $this->checkUserLogOut($request);
  794.         $locale = $request->getLocale();
  795.         if (false === is_null($userLogged)) {
  796.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  797.         }
  798.         $offer = $this->offerProvider->getEntityById($data['idOffer']);
  799.         $response = $this->sharedOfferProvider->getAllAsJson($offer);
  800.         return new JsonResponse($response);
  801.     }
  802.     /**
  803.      * @Route("/add/permission/user", name="add-permission-user", methods={"GET","POST"})
  804.      */
  805.     public function addPermissionToUser(Request $request): ?Response
  806.     {
  807.         $data = $request->request->all();
  808.         $userLogged = $this->checkUserLogOut($request);
  809.         $locale = $data['locale'];
  810.         if (false === is_null($userLogged)) {
  811.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  812.         }
  813.         $params = [
  814.             'email' => $data['email'],
  815.             'idOffer' => $data['idOffer'],
  816.         ];
  817.         $sameEmail = $this->getPermission($params);
  818.         if ($sameEmail === true) {
  819.             $sharedOffer = $this->sharedOfferFactory->create($request);
  820.             $this->sharedOfferService->create($sharedOffer, $locale, $data['offerUser']);
  821.         }
  822.         return new JsonResponse([
  823.             'idOffer' => $data['idOffer'],
  824.             'sameEmail' => $sameEmail,
  825.         ]);
  826.     }
  827.     /**
  828.      * @Route("/update/permission/user", name="update-permission-user", methods={"GET","POST"})
  829.      */
  830.     public function updatePermissionUser(Request $request): ?Response
  831.     {
  832.         $data = $request->request->all();
  833.         $offerUser = $data['offerUser'];
  834.         $userLogged = $this->checkUserLogOut($request);
  835.         $locale = $data['locale'];
  836.         if (false === is_null($userLogged)) {
  837.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  838.         }
  839.         $response = [];
  840.         $sharedOffer = $this->sharedOfferFactory->update($request);
  841.         if (is_null($sharedOffer)) {
  842.             return new JsonResponse($response);
  843.         }
  844.         $this->sharedOfferService->create($sharedOffer, $locale, $offerUser);
  845.         return new JsonResponse([
  846.             'idOffer' => $sharedOffer->getOffer()->getId(),
  847.         ]);
  848.     }
  849.     /**
  850.      * @Route("/remove/permission/user", name="remove-permission-user", methods={"GET","POST"})
  851.      */
  852.     public function removePermissionUser(Request $request): ?Response
  853.     {
  854.         $data = $request->request->all();
  855.         $userLogged = $this->checkUserLogOut($request);
  856.         $locale = $data['locale'];
  857.         if (false === is_null($userLogged)) {
  858.             return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
  859.         }
  860.         $response = [];
  861.         $user = $this->userProvider->getUserFromId($data['idUser']);
  862.         $offer = $this->offerProvider->getEntityById($data['idOffer']);
  863.         $sharedOffer = $this->sharedOfferProvider->getOneByUserAndOffer($user, $offer);
  864.         if (is_null($sharedOffer)) {
  865.             return new JsonResponse($response);
  866.         }
  867.         $response = ['idOffer' => $sharedOffer->getOffer()->getId()];
  868.         $this->sharedOfferService->remove($sharedOffer);
  869.         return new JsonResponse($response);
  870.     }
  871.     /**
  872.      * @Route("/get-items/by-industry", name="get-items-by-industry", methods={"GET","POST"})
  873.      */
  874.     public function getItemsByIndustry(Request $request): ?JsonResponse
  875.     {
  876.         $data = $request->request->all();
  877.         $response = [];
  878.         $items = $this->itemSortRepository->getAllByMaxAndIndustry(20, $data['industryId']);
  879.         $locale = $data['locale'];
  880.         foreach ($items as $item) {
  881.             $item_provider = $this->itemProvider->getOneById($item->getItemId());
  882.             if ($item_provider->getApproved() === true) {
  883.                 if ($locale == 'pl') {
  884.                     $technologyName = $item_provider->getName() != '' ?
  885.                         $item_provider->getName() : $item_provider->getNameEn();
  886.                 } else {
  887.                     $technologyName = $item_provider->getNameEn() != '' ?
  888.                         $item_provider->getNameEn() : $item_provider->getName();
  889.                 }
  890.                 $item_response = [
  891.                     'id' => $item_provider->getSearchSlug(),
  892.                     'text' => $technologyName,
  893.                     'id_category' => $item->getIndustry(),
  894.                     'point' => $item->getPointsSum(),
  895.                     'category' => 'technology',
  896.                 ];
  897.                 $response[] = $item_response;
  898.             }
  899.         }
  900.         return new JsonResponse($response);
  901.     }
  902.     /**
  903.      * @Route("/search/order/industry", name="search-order-industry", methods={"POST"})
  904.      */
  905.     public function searchOrderIndustry(Request $request): Response
  906.     {
  907.         $response = [];
  908.         $orderId = $request->get('orderId', null);
  909.         $packageId = $request->get('packageId', null);
  910.         $order = $this->orderProvider->getOneById($orderId);
  911.         if (is_null($order) === false) {
  912.             return new JsonResponse($order->getIndustriesIds());
  913.         }
  914.         $package = $this->packageProvider->getOneById($packageId);
  915.         if (is_null($package) === false) {
  916.             return new JsonResponse($package->getIndustriesIds());
  917.         }
  918.         return new JsonResponse($response);
  919.     }
  920.     /**
  921.      * @Route("/render/package_select", name="render-package-select", methods={"POST"})
  922.      */
  923.     public function renderPackageSelect(Request $request): Response
  924.     {
  925.         $temporaryId = $request->get('temporaryId', null);
  926.         if (empty($temporaryId)) {
  927.             $temporaryId = null;
  928.         }
  929.         $offer = $this->offerProvider->getOfferByTemporaryId($temporaryId);
  930.         $viewParams = [
  931.             'packages' => $this->getActivePackage($request, $offer),
  932.             'offer' => $offer,
  933.         ];
  934.         $this->getFreePackage($viewParams);
  935.         return new JsonResponse($this->renderView(self::PACKAGE_SELECT_TEMPLATE, $viewParams));
  936.     }
  937.     private function createUserPackageOffer(Request $request): void
  938.     {
  939.         $userPackageOffer = $this->userPackageOfferProvider->getAllByUserPackageOrderOffer(
  940.             $request->get('user', null),
  941.             $request->get('package', null),
  942.             $request->get('order', null),
  943.             $request->get('offer', null),
  944.         );
  945.         if (!$userPackageOffer) {
  946.             return;
  947.         }
  948.         $this->userPackageOfferService->create($request);
  949.     }
  950.     private function createManyChildOfferFromMainOffer(?EntityOffer $offer): void
  951.     {
  952.         if (null === $offer) {
  953.             return;
  954.         }
  955.         if (null !== $offer->getOffers()) {
  956.             return;
  957.         }
  958.         $offer->setKeywordsChildOffer();
  959.         $childOffers = $offer->createManyChildOffer($this->entityManager);
  960.         foreach ($childOffers as $childOffer) {
  961.             $offerLinkDb = $this->offerLinksProvider->getEntityByOfferId($childOffer->getId());
  962.             if (!is_null($offerLinkDb)) {
  963.                 continue;
  964.             }
  965.             $this->offerService->createOfferLinks($childOffer);
  966.         }
  967.     }
  968.     private function getPermission(?array $data): ?bool
  969.     {
  970.         $user = $this->userProvider->getOneByEmail($data['email']);
  971.         if (is_null($user)) {
  972.             return true;
  973.         }
  974.         $offer = $this->offerProvider->getEntityById($data['idOffer']);
  975.         $sharedOffer = $this->sharedOfferProvider->getOneByUserAndOffer($user, $offer);
  976.         return is_null($sharedOffer) === true ? true : false;
  977.     }
  978.     private function getActivePackage(Request $request, ?Offer $offer): array
  979.     {
  980.         $user = $request->get('user', null);
  981.         if (is_null($offer) === false) {
  982.             if (is_null($offer->getEmail()) === false) {
  983.                 $userEntity = $this->userProvider->getOneByEmail($offer->getEmail());
  984.                 if ($offer->getPackageId()) {
  985.                     return $this->userPackageProvider->getAllByUser($userEntity) ?? [];
  986.                 }
  987.                 return $this->userPackageProvider->getAllByUserAndActive($userEntity) ?? [];
  988.             }
  989.         }
  990.         if (is_null($user) === false) {
  991.             $userEntity = $this->userProvider->getOneByEmail($user);
  992.             return $this->userPackageProvider->getAllByUserAndActive($userEntity) ?? [];
  993.         }
  994.         if (is_null($this->getUser())) {
  995.             return [];
  996.         }
  997.         $roleNoValidation = ['ROLE_ADMIN'];
  998.         $roleUser = $this->getUser()->getRoles()[0] ?? '';
  999.         if (in_array($roleUser, $roleNoValidation)) {
  1000.             return [];
  1001.         }
  1002.         $userPackage = $this->userPackageProvider->getAllByUserAndActive($this->getUser());
  1003.         if (is_null($userPackage)) {
  1004.             return [];
  1005.         }
  1006.         return $userPackage;
  1007.     }
  1008.     private function getFreePackage(array &$viewParams): void
  1009.     {
  1010.         $userEntity = $this->getUser();
  1011.         if (is_null($userEntity) === false) {
  1012.             $role = $userEntity->getRoles()[0] ?? null;
  1013.             if (in_array($role, self::ROLE_SHOW_FREE_PACKAGE)) {
  1014.                 $viewParams['freePackage'] = $this->packageProvider->getOneByFreePackage();
  1015.             }
  1016.         }
  1017.     }
  1018. }