<?php
namespace App\Controller\Front\Offer;
use App\Config\Pages;
use App\Entity\Page\Page;
use App\Message\Create\CreateNewOfferEmail;
use App\Utils\ResponseMessage\ResponseMessage;
use App\Utils\Slug\Slug;
use App\View\Offer\Offer\Offer;
use PHPUnit\Exception;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Offer\Offer as EntityOffer;
class OfferController extends OfferUtilsController
{
private const PACKAGE_SELECT_TEMPLATE = 'front/offer/includes/html/package_select.twig';
private const ROLE_SHOW_FREE_PACKAGE = ['ROLE_ADMIN', 'ROLE_EDITOR'];
public function createOfferStepOneAction(Request $request, Page $page): Response
{
$checkAccess = null;
if ($request->isMethod('POST')) {
return $this->postActionOfferStepOne($request, $page, "1");
}
if (is_null($this->getTemporaryIdFromQuery($request))) {
$offer = false;
} else {
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "1");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
}
if (!$this->checkUserHavePackage($request, $checkAccess)) {
$locale = $request->getLocale();
if ($this->getUser()) {
$error = ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
}
$page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
$viewParams = $this->createViewParams($request, $page, '1');
$viewParams['offer'] = $offer;
$offerActivePackage = $offer !== false ? $offer : null;
$viewParams['packages'] = $this->getActivePackage($request, $offerActivePackage);
$this->getFreePackage($viewParams);
if (false !== $offer) {
$categoryId = $offer->getCategoryId();
$viewParams['industries'] = $this->itemCategoryProvider->getIndustryById($categoryId, '1');
}
return $this->render(self::NEW_OFFER_STEP_1_TEMPLATE_PATH, $viewParams);
}
public function createOfferStepTwoAction(Request $request, Page $page): Response
{
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "1");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
if (false === $this->checkOfferHavePackage($offer)) {
return $this->createRedirectWhenOfferNoHavePackage($request);
}
if (!$this->checkUserHavePackage($request, $checkAccess)) {
$locale = $request->getLocale();
if ($this->getUser()) {
$error = ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
}
$page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
if ($request->isMethod('POST')) {
$request->request->set('categoryType', 'requirements');
return $this->postActionOffer($request, "2");
}
return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_2_TEMPLATE_PATH, "2");
}
public function createOfferStepThreeAction(Request $request, Page $page): Response
{
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "1");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
if (false === $this->checkOfferHavePackage($offer)) {
return $this->createRedirectWhenOfferNoHavePackage($request);
}
if (!$this->checkUserHavePackage($request, $checkAccess)) {
$locale = $request->getLocale();
if ($this->getUser()) {
$error = ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
}
$page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
if ($request->isMethod('POST')) {
$request->request->set('categoryType', 'taskRange');
return $this->postActionOffer($request, "3");
}
return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_3_TEMPLATE_PATH, "3");
}
public function createOfferStepFourAction(Request $request, Page $page): Response
{
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "1");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
if (false === $this->checkOfferHavePackage($offer)) {
return $this->createRedirectWhenOfferNoHavePackage($request);
}
if (!$this->checkUserHavePackage($request, $checkAccess)) {
$locale = $request->getLocale();
if ($this->getUser()) {
$error = ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
}
$page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
if ($request->isMethod('POST')) {
$request->request->set('categoryType', 'details');
return $this->postActionOffer($request, "4");
}
return $this->getMethodAction($request, $page, self::NEW_OFFER_STEP_4_TEMPLATE_PATH, "4");
}
public function createOfferStepFiveAction(Request $request, Page $page): Response
{
$checkTemporary = $this->checkIfTemporaryIdExist($request);
if (false === is_null($checkTemporary)) {
return $checkTemporary;
}
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "5");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
if (false === $this->checkOfferHavePackage($offer)) {
return $this->createRedirectWhenOfferNoHavePackage($request);
}
if (!$this->checkUserHavePackage($request, $checkAccess)) {
$locale = $request->getLocale();
if ($this->getUser()) {
$error = ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
}
$page = $this->pageProvider->getOneByMigrationId(PAGES::ORDER);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
if ($request->isMethod('POST')) {
$offer = $this->getOffer($request);
$offerCompany = $offer->getOfferCompany();
if (is_null($offerCompany)) {
$offerCompany = $this->offerCompanyFactory->createEmptyOfferCompany();
$this->offerCompanyService->create($offerCompany);
}
$this->offerCompanyFactory->updateCompanyFromRequestParams($request, $offerCompany);
$this->offerFactory->addParamsToOffer($request, $offer);
$this->offerFactory->changeCompanyInSearchParams($offerCompany, $offer);
$offer->setOfferCompany($offerCompany);
$offer->setStep("6");
$offer->generateKeywords();
$this->editChildOffersSearchCompany($offer);
$this->offerCompanyService->flush();
if (!is_null($this->getUser())) {
if ($this->getUser()->getRoles()[0] == "ROLE_ADMIN" || $this->getUser()->getRoles(
)[0] == "ROLE_EDITOR") {
$user = $this->userProvider->getOneByEmail(
$offer->getEmail(),
) != null ? $this->userProvider->getOneByEmail($offer->getEmail()) : null;
$userId = !is_null($user) ? $user->getId() : null;
$company = $this->companyProvider->getEntityByUserId($userId);
if ($company) {
$company->setLogo($offer->getOfferCompany()->getLogo());
$this->companyService->update($company);
} else {
$company = $this->companyFactory->createEmptyCompany($user);
$company
->setLogo($offer->getOfferCompany()->getLogo())
->setUser($user);
$this->companyService->create($company);
}
} else {
$company = $this->companyProvider->getEntityByUserId($this->getUser()->getId());
if ($company) {
if (is_null($company->getLogo())) {
$company->setLogo($offer->getOfferCompany()->getLogo());
$this->companyService->update($company);
}
}
}
}
$temporaryId = $this->getTemporaryIdFromQuery($request);
$accessKey = $this->getAccessKeyFromQuery($request);
return $this->redirectToStep($request, Pages::USER_ADD_OFFER_STEP_SIX, $temporaryId, $accessKey);
}
$userId = is_null($this->getUser()) ? null : $this->getUser()->getId();
$viewParams = $this->createViewParams($request, $page, 'none');
$viewParams['offer'] = $offer;
$companyFromOffer = $offer->getCompany();
$companyFromUser = null;
if (!is_null($this->getUser())) {
if ($this->getUser()->getRoles()[0] == "ROLE_ADMIN" || $this->getUser()->getRoles()[0] == "ROLE_EDITOR") {
$user = $this->userProvider->getOneByEmail(
$offer->getEmail(),
) != null ? $this->userProvider->getOneByEmail($offer->getEmail())->getId() : null;
$companyFromUser = $this->companyProvider->getOneByUserId($user);
} else {
$companyFromUser = $this->companyProvider->getOneByUserId($userId);
}
}
$viewParams['company'] = is_null($companyFromOffer) ? $companyFromUser : $companyFromOffer;
$viewParams['accessKey'] = $this->getAccessKeyFromQuery($request);
return $this->render(self::NEW_OFFER_STEP_5_TEMPLATE_PATH, $viewParams);
}
public function createOfferStepSixAction(Request $request, Page $page): Response
{
$checkTemporary = $this->checkIfTemporaryIdExist($request);
if (false === is_null($checkTemporary)) {
return $checkTemporary;
}
$offer = $this->checkIfOfferExist($request);
if (is_null($offer)) {
return $this->redirectToStepOne($request);
}
$checkStep = $this->checkIfCorrectStep($offer, $request, "6");
if (false === is_null($checkStep)) {
return $checkStep;
}
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
if (false === $this->checkOfferHavePackage($offer)) {
return $this->createRedirectWhenOfferNoHavePackage($request);
}
$orderIsUsed = $this->checkOrderIsUsed($offer->getOrder(), $offer);
if (!$this->checkUserHavePackage($request, $checkAccess) || $orderIsUsed) {
$locale = $request->getLocale();
$error = $orderIsUsed ?
ResponseMessage::errorMaxLengthOfferInPackage($locale) :
ResponseMessage::NoHavePackage($locale);
$this->addFlash('response_message', $error);
$page = $this->pageProvider->getOneByMigrationId(PAGES::USER_ZONE_PACKAGE_ADVERTISING);
return $this->redirectToRoute('front-page', [
'_locale' => $locale,
'url' => $page->translate($locale, false)->getUrl(),
]);
}
if ($request->isMethod('POST')) {
$offer = $this->getOffer($request);
if (is_null($offer->getWorkData()) === false) {
if (isset($offer->getWorkData()['address']['city'])) {
$this->createManyChildOfferFromMainOffer($offer);
}
}
$this->offerFactory->addParamsToOffer($request, $offer);
$this->ifUserExistsAddToOffer($offer);
$offer
->setDone(true)
->setActive(true)
->setPublishedAt(new \DateTime());
$offer->generateKeywords();
$offer->setKeywordsChildOffer();
$offer->updateOfferChildActiveAndDone();
$this->offerService->save($offer);
$manyOfferSalary = $this->offerSalaryFactory->createManyOfferSalary($offer);
$this->offerSalaryService->saveMany($manyOfferSalary);
if ($offer->getPackage()->getFreePackage()) {
$userEntity = $this->userProvider->getUserByUsername($offer->getEmail());
$orderRequest = new Request();
$orderRequest->request->set('step', 1);
$orderRequest->request->set('customer', $userEntity?->getId());
$orderRequest->query->set('package', $offer->getPackage()?->getId());
$orderRequest->request->set('status', 1);
$orderRequest->request->set('paymentStatus', 2);
$orderRequest->request->set('company', [
'name' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getName() : $offer->getOfferCompany()->getInvoiceData()->getName(),
'address' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getAddress()->getAddress() : $offer->getOfferCompany()->getInvoiceData(
)->getAddress()->getAddress(),
'postCode' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getAddress()->getPostCode() : $offer->getOfferCompany()->getInvoiceData(
)->getAddress()->getPostCode(),
'city' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getAddress()->getCity() : $offer->getOfferCompany()->getInvoiceData(
)->getAddress()->getCity(),
'country' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getAddress()->getCountry() : $offer->getOfferCompany()->getInvoiceData(
)->getAddress()->getCountry(),
'nip' => $offer->getOfferCompany()->getIsExtraInvoiceData() ? $offer->getOfferCompany(
)->getExtraInvoiceData()->getVatId() : $offer->getOfferCompany()->getInvoiceData()->getVatId(),
'owner' => $offer->getEmail(),
]);
$order = $this->orderService->create($orderRequest);
$offer->setOrder($order);
$offer->editOrderChildOffer($offer, $order);
$offer->editUserChildOffer($offer, $userEntity);
$this->offerService->save($offer);
if (is_null($offer->getUser())) {
try {
$userPackageOffer = new Request();
$userPackageOffer->request->set('user', $userEntity?->getId());
$userPackageOffer->request->set('package', $offer->getPackage()?->getId());
$userPackageOffer->request->set('offer', $offer?->getId());
$userPackageOffer->request->set('order', $order?->getId());
$this->createUserPackageOffer($userPackageOffer);
$this->userPackageService->checkOfferUsedLength([
'package' => $offer->getPackage(),
'user' => $userEntity,
'order' => $offer->getOrder(),
]);
} catch (Exception $e) {
}
}
}
$this->offerBoostService->setBoostDates($offer);
$defaultUser = is_null($this->getUser()) === false ? $this->getUser()->getEmail() : '';
$username = $offer->getEmail() !== '' ? $offer->getEmail() : $defaultUser;
$locale = $request->getLocale();
$temporaryId = $offer->getTemporaryId();
$accessKey = $offer->getAccessKey();
$isUser = is_null($this->userProvider->getOneByEmail($offer->getEmail())) === false ? true : false;
$offerName = [
'pl' => $offer->getOfferNamePL(),
'en' => $offer->getOfferNameEN(),
];
if ($offer->getUser()) {
try {
$packageRequest = new Request();
$packageRequest->request->set('package', $offer->getPackage()?->getId());
$packageRequest->request->set('user', $offer->getUser()?->getId());
$packageRequest->request->set('offer', $offer->getId());
$packageRequest->request->set('order', $offer->getOrder()?->getId());
$this->createUserPackageOffer($packageRequest);
$this->userPackageService->checkOfferUsedLength([
'package' => $offer->getPackage(),
'user' => $offer->getUser(),
'order' => $offer->getOrder(),
]);
} catch (Exception $e) {
}
}
$this->messageBus->dispatch(
new CreateNewOfferEmail(
$username,
$locale,
$temporaryId,
$accessKey,
$isUser,
$offerName,
),
);
return $this->checkIsLogin() === true ? $this->redirectToMyOffers($request) : $this->redirectToMainPage(
$request,
);
}
$viewParams = $this->createViewParams($request, $page, 'none');
$temporaryId = $this->getTemporaryIdFromQuery($request);
$viewParams['offer'] = $this->offerProvider->getOfferPreViewByTemporaryId($temporaryId);
$viewParams['accessKey'] = $this->getAccessKeyFromQuery($request);
return $this->render(self::NEW_OFFER_STEP_6_TEMPLATE_PATH, $viewParams);
}
public function createOfferStepSevenAction(Request $request, Page $page): Response
{
$checkAccess = $this->checkIfUserHasAccess($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
$viewParams = $this->createViewParams($request, $page, 'none');
return $this->render(self::NEW_OFFER_STEP_7_TEMPLATE_PATH, $viewParams);
}
public function createOfferListViewAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$viewParams = $this->createViewParams($request, $page, 'none');
$userId = $this->getUser()->getId();
$request = $request->attributes->get('originalRequest');
if ($this->getUser()->getRoles()[0] === 'ROLE_EDITOR') {
$viewParams['offers'] = $this->offerProvider->getAllDoneByEditor($this->getUser()->getEmail());
} else {
$viewParams['offers'] = $this->offerProvider->getAllDoneUserOffer($userId, $request->getLocale());
}
return $this->render(self::OFFER_LIST_VIEW_TEMPLATE_PATH, $viewParams);
}
public function createShareOfferListViewAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$viewParams = $this->createViewParams($request, $page, 'none');
$viewParams['shared_offers'] = [];
if ($this->getUser()->getRoles()[0] !== 'ROLE_ADMIN' && $this->getUser()->getRoles()[0] !== "ROLE_EDITOR") {
$viewParams['shared_offers'] = $this->createViewSharedOffer(
$this->sharedOfferProvider->getAllByUser($this->getUser()),
);
}
return $this->render(self::SHARE_OFFER_LIST_VIEW_TEMPLATE_PATH, $viewParams);
}
public function createUnFinishOfferListViewAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$viewParams = $this->createViewParams($request, $page, 'none');
$userId = $this->getUser()->getId();
$request = $request->attributes->get('originalRequest');
if ($this->getUser()->getRoles()[0] === "ROLE_EDITOR") {
$viewParams['offers'] = $this->offerProvider->getAllNoDoneByEditor($this->getUser()->getEmail());
} else {
$viewParams['offers'] = $this->offerProvider->getAllUnDoneUserOffer($userId, $request->getLocale());
}
return $this->render(self::OFFER_UN_FINISH_LIST_VIEW_TEMPLATE_PATH, $viewParams);
}
public function deleteOfferAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$checkAccess = $this->checkIfUserCanRemoveOrCopyOffer($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
$referer = $request->headers->get('referer');
$temporaryId = $this->getTemporaryIdFromQuery($request);
$offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
if (is_null($offer)) {
return $this->offerNotFound($request);
}
$this->offerService->editOfferVisible($offer, false);
if (is_null($referer)) {
return $this->redirectToMainPage($request);
}
return $this->redirect($referer);
}
public function copyOfferAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return new JsonResponse($userLogged->getTargetUrl());
}
if ($checkAccess = $this->checkIfUserCanRemoveOrCopyOffer($request)) {
return new JsonResponse($checkAccess->getTargetUrl());
}
$temporaryId = $this->getTemporaryIdFromQuery($request);
$offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
$originalRequest = $request->attributes->get('originalRequest');
if (is_null($offer)) {
return new JsonResponse($this->offerNotFound($request)->getTargetUrl());
}
if ($checkAccess = $this->checkPackageOfferUsedLength($request, $offer)) {
return new JsonResponse($checkAccess->getTargetUrl());
}
$orderId = $originalRequest->get('orderId', null);
$orderEntity = is_null($orderId) === false ? $this->orderProvider->getOneById($orderId) : $offer->getOrder();
$orderId = $orderEntity?->getId();
$package = $orderId ? $orderEntity?->getPackage() : $offer->getPackage();
$newOfferTemporaryId = $this->offerService->cloneOffer($offer, $orderEntity);
if (is_null($newOfferTemporaryId)) {
$newOfferTemporaryId = $temporaryId;
}
$offer = $this->offerProvider->getEntityByTemporaryId($newOfferTemporaryId);
$this->userPackageService->checkOfferUsedLength([
'package' => $package,
'user' => $offer->getUser(),
'order' => $orderEntity,
]);
return new JsonResponse($this->redirectToAcceptOffer($request, $newOfferTemporaryId, null));
}
public function showOffersIndustryAction(Request $request, Page $page): Response
{
$result_params = $request->request->all();
$data = [];
if (isset($result_params['resut_params']) === true && $result_params['resut_params'] != '') {
$apiKey = $this->parameterBag->get('google_api_key');
$result = $request->request->all();
foreach ($result as $items) {
foreach ($items as $item) {
if (isset($item['id_place']) === true && isset($item['name'])) {
$response = $this->httpClient->request(
'GET',
'https://maps.googleapis.com/maps/api/place/details/json?fields=formatted_address,geometry&language=pl&place_id='.$item['id_place'].'&key='.$apiKey,
);
$jsonResponse = json_decode($response->getContent());
$data[] = [
'city' => $item['name'],
'pl_name' => $jsonResponse->result->formatted_address,
'lat' => $jsonResponse->result->geometry->location->lat,
'lnt' => $jsonResponse->result->geometry->location->lng,
];
}
}
}
}
$this->offerFactory->checkIfLocationsFromSearchExistInDB($data);
$params = $request->attributes->get('originalRequest')->query->all();
$viewParams = $this->createViewParams($request, $page, 'none', false);
$viewParams['main_page_search'] = $this->mainPageOfferSearchFactory->createMainPageOfferSearchView();
$viewParams['industry'] = [];
$viewParams['industry_list_footer'] = [];
$viewParams['city_list_footer'] = [];
$viewParams['max_search_params'] = $this->parameterBag->get('maxSearchParams');
$viewParams['max_search_params_own'] = $this->parameterBag->get('maxSearchParamsOwn');
$viewParams['lvl_jobs'] = $this->jobLevelsProvider->getAllActiveView();
$viewParams['show_job_level_select'] = $this->jobLevelSelectProvider->getOneById(1);
if (isset($params['filters'])) {
$viewParams['seo'] = $this->getSeoForIndustryByParams($params['filters']);
$viewParams['search_options'] = $this->mainPageOfferSearchFactory->getMainPageOfferSearchParameterView(
$params['filters'],
$request->getLocale(),
);
$seoText = $this->mainPageOfferSearchFactory->getMainPageSeoText($params['filters']);
$viewParams['seo_text'] = $seoText;
$viewParams['change_title'] = true;
$viewParams['new_title'] = $request->getLocale() === 'pl' ?
$seoText->getSeoTextPL() : $seoText->getSeoTextEN();
$response_data = $this->mainPageOfferSearchFactory->getOffersWithChoseFilters($params['filters']);
$viewParams['offers'] = $response_data['offers'];
$viewParams['offersResult'] = $response_data['offers'];
$viewParams['pagination'] = $this->mainPageOfferSearchFactory->getPagination(
$response_data['offers_max'],
$params['filters'],
);
}
if (isset($params)) {
if (false === isset($params['filters'])) {
return $this->redirectToMainPage($request);
}
}
return $this->render(self::HOME_PAGE_INDUSTRY_VIEW_TEMPLATE_PATH, $viewParams);
}
public function showApplicationListAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$checkAccess = $this->checkIfUserCanShowApplicationList($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
$viewParams = $this->createViewParams($request, $page, 'none');
$temporaryId = $viewParams['temporaryId'];
$offer = $this->offerProvider->getEntityByTemporaryId($temporaryId);
if (is_null($offer)) {
return $this->offerNotFound($request);
}
$applications = [];
foreach ($offer->getOffers() as $localOffer) {
foreach ($localOffer->getApplication() as $localApplication) {
$applications[] = $localApplication;
}
}
foreach ($offer->getApplication() as $localApplication) {
$applications[] = $localApplication;
}
$locale = $request->getLocale();
$viewParams['applicationList'] = $this->applicationFactory
->createOfferApplicationViewFromEntities($applications, $locale);
return $this->render(self::APPLICATIONS_LIST_VIEW_TEMPLATE_PATH, $viewParams);
}
public function deleteApplicationAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$checkAccess = $this->checkIfUserCanRemoveApplicationOrShowCV($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
$applicationId = $this->getApplicationIdFromQuery($request);
$application = $this->applicationProvider->getEntityById($applicationId);
if (is_null($application)) {
return $this->applicationNotFound($request);
}
$referer = $request->headers->get('referer');
$this->applicationService->remove($application);
$this->applicationService->flush();
if (is_null($referer)) {
return $this->redirectToMainPage($request);
}
return $this->redirect($referer);
}
public function previewCVAction(Request $request, Page $page): Response
{
$userLogged = $this->checkUserLogOut($request);
if (false === is_null($userLogged)) {
return $userLogged;
}
$checkAccess = $this->checkIfUserCanRemoveApplicationOrShowCV($request);
if (false === is_null($checkAccess)) {
return $checkAccess;
}
$applicationId = $this->getApplicationIdFromQuery($request);
$application = $this->applicationProvider->getEntityById($applicationId);
if (is_null($application)) {
return $this->applicationNotFound($request);
}
$file = $application->getFile();
if (is_null($file)) {
return $this->applicationNotFound($request);
}
$fileName = $file->getFileName();
$extension = $file->getExtension();
$directory = $this->getParameter('cvURL');
$file = $directory.$fileName.'.'.$extension;
$fileNameExt = $fileName.'.'.$extension;
if ($extension === 'pdf') {
$response = new BinaryFileResponse($file);
} else {
try {
$response = new BinaryFileResponse($file);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileNameExt,
);
} catch (FileNotFoundException $e) {
return $this->redirectToApplicationListWithFileNotFoundError($request);
}
}
return $response;
}
/**
* @Route("/search/offer", name="search-phrase", methods={"GET"})
*/
public function searchOfferAction(Request $request): Response
{
$userLogged = $this->checkUserLogOut($request);
$locale = (string)$request->query->get('locale');
if (false === is_null($userLogged)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
$searchPhrase = (string)$request->query->get('searchPhrase');
$isDone = (bool)$request->query->get('isDone');
$user = $this->getUser();
$userId = is_null($user) ? null : $this->getUser()->getId();
$offers = $this->offerProvider->getOffersBySearchPhrase($searchPhrase, $isDone, $userId, $locale);
if (is_null($offers)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
return new JsonResponse($this->serializer->normalize($offers, 'json'));
}
/**
* @Route("/search/select/option", name="search-select-option", methods={"GET","POST"})
*/
public function searchSelectOption(Request $request): ?Response
{
$locale = (string)$request->request->get('languages');
$data = [];
$data['technology'] = $this->itemProvider->getAllSelect2OptionsItemTechnologySQL($locale);
$data['another'] = $this->anotherProvider->getAllSelect2OptionsAnotherSQL($locale);
$data['industry'] = $this->itemCategoryProvider->getAllSelect2OptionsIndustrySQL($locale);
$data['search'] = array_merge(
$data['industry'],
$data['another'],
$data['technology'],
$this->itemCategoryRepository->getAllSelect2OptionsJobDescriptionSQL($locale),
$this->itemCategoryProvider->getAllSelect2OptionsOfferNameSQL($locale),
$this->offerProvider->getAllSelect2OptionsCompanyNameSQL(),
$this->searchCityProvider->getAllSelect2OptionsSQL(),
);
return new JsonResponse($data);
}
/**
* @Route("/search/location/option/{language}", name="search-location-option")
*/
public function searchLocationOption(Request $request, $language): ?Response
{
$query = $request->query->get('q');
if ($query != '') {
$query = Slug::slug($query);
}
$response = $this->httpClient->request(
'GET',
'https://maps.googleapis.com/maps/api/place/autocomplete/json',
[
'query' => [
'input' => $query,
'language' => $language,
'types' => 'geocode',
'key' => $this->parameterBag->get('google_api_key'),
],
],
);
$jsonResponse = json_decode($response->getContent());
$unique = [];
foreach ($jsonResponse->predictions as $item) {
if (!in_array(Slug::slug($item->structured_formatting->main_text), $unique)) {
$data[] = [
'id' => $item->structured_formatting->main_text,
'text' => $item->structured_formatting->main_text,
'id_place' => $item->place_id,
'country' => end($item->terms)->value,
];
$unique[] = Slug::slug($item->structured_formatting->main_text);
}
}
return new JsonResponse($data ?? null);
}
/**
* @Route("/search/location/geometry", name="search-location-geometry")
*/
public function searchLocationGeometry(Request $request): ?Response
{
$placeId = $request->query->get('placeId');
$response = $this->httpClient->request(
'GET',
'https://maps.googleapis.com/maps/api/place/details/json',
[
'query' => [
'place_id' => $placeId,
'key' => $this->parameterBag->get('google_api_key'),
],
],
);
$jsonContent = json_decode($response->getContent());
$geometry = $jsonContent->result->geometry->location;
return new JsonResponse([
'placeId' => $placeId,
'lat' => $geometry->lat,
'lnt' => $geometry->lng,
]);
}
/**
* @Route("/get/users/list/permissons", name="get-users-list-permissons", methods={"GET","POST"})
*/
public function getListUsersPermissions(Request $request): ?Response
{
$data = $request->request->all();
$userLogged = $this->checkUserLogOut($request);
$locale = $request->getLocale();
if (false === is_null($userLogged)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
$offer = $this->offerProvider->getEntityById($data['idOffer']);
$response = $this->sharedOfferProvider->getAllAsJson($offer);
return new JsonResponse($response);
}
/**
* @Route("/add/permission/user", name="add-permission-user", methods={"GET","POST"})
*/
public function addPermissionToUser(Request $request): ?Response
{
$data = $request->request->all();
$userLogged = $this->checkUserLogOut($request);
$locale = $data['locale'];
if (false === is_null($userLogged)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
$params = [
'email' => $data['email'],
'idOffer' => $data['idOffer'],
];
$sameEmail = $this->getPermission($params);
if ($sameEmail === true) {
$sharedOffer = $this->sharedOfferFactory->create($request);
$this->sharedOfferService->create($sharedOffer, $locale, $data['offerUser']);
}
return new JsonResponse([
'idOffer' => $data['idOffer'],
'sameEmail' => $sameEmail,
]);
}
/**
* @Route("/update/permission/user", name="update-permission-user", methods={"GET","POST"})
*/
public function updatePermissionUser(Request $request): ?Response
{
$data = $request->request->all();
$offerUser = $data['offerUser'];
$userLogged = $this->checkUserLogOut($request);
$locale = $data['locale'];
if (false === is_null($userLogged)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
$response = [];
$sharedOffer = $this->sharedOfferFactory->update($request);
if (is_null($sharedOffer)) {
return new JsonResponse($response);
}
$this->sharedOfferService->create($sharedOffer, $locale, $offerUser);
return new JsonResponse([
'idOffer' => $sharedOffer->getOffer()->getId(),
]);
}
/**
* @Route("/remove/permission/user", name="remove-permission-user", methods={"GET","POST"})
*/
public function removePermissionUser(Request $request): ?Response
{
$data = $request->request->all();
$userLogged = $this->checkUserLogOut($request);
$locale = $data['locale'];
if (false === is_null($userLogged)) {
return new JsonResponse(['error' => ResponseMessage::onNotAccessToAction($locale)]);
}
$response = [];
$user = $this->userProvider->getUserFromId($data['idUser']);
$offer = $this->offerProvider->getEntityById($data['idOffer']);
$sharedOffer = $this->sharedOfferProvider->getOneByUserAndOffer($user, $offer);
if (is_null($sharedOffer)) {
return new JsonResponse($response);
}
$response = ['idOffer' => $sharedOffer->getOffer()->getId()];
$this->sharedOfferService->remove($sharedOffer);
return new JsonResponse($response);
}
/**
* @Route("/get-items/by-industry", name="get-items-by-industry", methods={"GET","POST"})
*/
public function getItemsByIndustry(Request $request): ?JsonResponse
{
$data = $request->request->all();
$response = [];
$items = $this->itemSortRepository->getAllByMaxAndIndustry(20, $data['industryId']);
$locale = $data['locale'];
foreach ($items as $item) {
$item_provider = $this->itemProvider->getOneById($item->getItemId());
if ($item_provider->getApproved() === true) {
if ($locale == 'pl') {
$technologyName = $item_provider->getName() != '' ?
$item_provider->getName() : $item_provider->getNameEn();
} else {
$technologyName = $item_provider->getNameEn() != '' ?
$item_provider->getNameEn() : $item_provider->getName();
}
$item_response = [
'id' => $item_provider->getSearchSlug(),
'text' => $technologyName,
'id_category' => $item->getIndustry(),
'point' => $item->getPointsSum(),
'category' => 'technology',
];
$response[] = $item_response;
}
}
return new JsonResponse($response);
}
/**
* @Route("/search/order/industry", name="search-order-industry", methods={"POST"})
*/
public function searchOrderIndustry(Request $request): Response
{
$response = [];
$orderId = $request->get('orderId', null);
$packageId = $request->get('packageId', null);
$order = $this->orderProvider->getOneById($orderId);
if (is_null($order) === false) {
return new JsonResponse($order->getIndustriesIds());
}
$package = $this->packageProvider->getOneById($packageId);
if (is_null($package) === false) {
return new JsonResponse($package->getIndustriesIds());
}
return new JsonResponse($response);
}
/**
* @Route("/render/package_select", name="render-package-select", methods={"POST"})
*/
public function renderPackageSelect(Request $request): Response
{
$temporaryId = $request->get('temporaryId', null);
if (empty($temporaryId)) {
$temporaryId = null;
}
$offer = $this->offerProvider->getOfferByTemporaryId($temporaryId);
$viewParams = [
'packages' => $this->getActivePackage($request, $offer),
'offer' => $offer,
];
$this->getFreePackage($viewParams);
return new JsonResponse($this->renderView(self::PACKAGE_SELECT_TEMPLATE, $viewParams));
}
private function createUserPackageOffer(Request $request): void
{
$userPackageOffer = $this->userPackageOfferProvider->getAllByUserPackageOrderOffer(
$request->get('user', null),
$request->get('package', null),
$request->get('order', null),
$request->get('offer', null),
);
if (!$userPackageOffer) {
return;
}
$this->userPackageOfferService->create($request);
}
private function createManyChildOfferFromMainOffer(?EntityOffer $offer): void
{
if (null === $offer) {
return;
}
if (null !== $offer->getOffers()) {
return;
}
$offer->setKeywordsChildOffer();
$childOffers = $offer->createManyChildOffer($this->entityManager);
foreach ($childOffers as $childOffer) {
$offerLinkDb = $this->offerLinksProvider->getEntityByOfferId($childOffer->getId());
if (!is_null($offerLinkDb)) {
continue;
}
$this->offerService->createOfferLinks($childOffer);
}
}
private function getPermission(?array $data): ?bool
{
$user = $this->userProvider->getOneByEmail($data['email']);
if (is_null($user)) {
return true;
}
$offer = $this->offerProvider->getEntityById($data['idOffer']);
$sharedOffer = $this->sharedOfferProvider->getOneByUserAndOffer($user, $offer);
return is_null($sharedOffer) === true ? true : false;
}
private function getActivePackage(Request $request, ?Offer $offer): array
{
$user = $request->get('user', null);
if (is_null($offer) === false) {
if (is_null($offer->getEmail()) === false) {
$userEntity = $this->userProvider->getOneByEmail($offer->getEmail());
if ($offer->getPackageId()) {
return $this->userPackageProvider->getAllByUser($userEntity) ?? [];
}
return $this->userPackageProvider->getAllByUserAndActive($userEntity) ?? [];
}
}
if (is_null($user) === false) {
$userEntity = $this->userProvider->getOneByEmail($user);
return $this->userPackageProvider->getAllByUserAndActive($userEntity) ?? [];
}
if (is_null($this->getUser())) {
return [];
}
$roleNoValidation = ['ROLE_ADMIN'];
$roleUser = $this->getUser()->getRoles()[0] ?? '';
if (in_array($roleUser, $roleNoValidation)) {
return [];
}
$userPackage = $this->userPackageProvider->getAllByUserAndActive($this->getUser());
if (is_null($userPackage)) {
return [];
}
return $userPackage;
}
private function getFreePackage(array &$viewParams): void
{
$userEntity = $this->getUser();
if (is_null($userEntity) === false) {
$role = $userEntity->getRoles()[0] ?? null;
if (in_array($role, self::ROLE_SHOW_FREE_PACKAGE)) {
$viewParams['freePackage'] = $this->packageProvider->getOneByFreePackage();
}
}
}
}