<?php
namespace App\Resolver\Internal;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Overblog\GraphQLBundle\Definition\Resolver\MutationInterface;
use Overblog\GraphQLBundle\Definition\Resolver\QueryInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use App\BackendBundle\Helper\ContactHelper;
use App\BackendBundle\Helper\CompanyHelper;
use App\BackendBundle\Helper\JobHelper;
use App\BackendBundle\Helper\JobMarketHelper;
use App\BackendBundle\Helper\GraphQlCompanyHelper;
use App\BackendBundle\Helper\GraphQlJobMarketHelper;
use App\BackendBundle\Helper\UserHelper;
use App\BackendBundle\Model\GraphQL\JobMarket as JobMarketGQL;
use App\BackendBundle\Model\GraphQL\Status as StatusGQL;
use App\Entity\Address;
use App\Entity\CompanyLocation;
use App\Entity\Contact;
use App\Entity\ContactGalleryEntry;
use App\Entity\Job;
use App\Entity\JobMarket;
use App\Entity\JobMarketState;
use App\Entity\User;
class JobMarketResolver extends CommonResolver implements MutationInterface, QueryInterface {
private CompanyHelper $companyHelper;
private ContactHelper $contactHelper;
private GraphQlCompanyHelper $graphqlCompanyHelper;
private GraphQlJobMarketHelper $graphqlJobMarketHelper;
private JobHelper $jobHelper;
private JobMarketHelper $jobMarketHelper;
private UserHelper $userHelper;
public function __construct(EntityManagerInterface $em, ContactHelper $contactHelper, CompanyHelper $companyHelper,
GraphQlCompanyHelper $graphqlCompanyHelper, GraphQlJobMarketHelper $graphqlJobMarketHelper,
JobHelper $jobHelper, JobMarketHelper $jobMarketHelper, TokenStorageInterface $tokenStorage, UserHelper $userHelper) {
parent::__construct($em, $tokenStorage);
$this->companyHelper = $companyHelper;
$this->contactHelper = $contactHelper;
$this->graphqlCompanyHelper = $graphqlCompanyHelper;
$this->graphqlJobMarketHelper = $graphqlJobMarketHelper;
$this->jobHelper = $jobHelper;
$this->jobMarketHelper = $jobMarketHelper;
$this->userHelper = $userHelper;
}
public function addJobMarket($jobMarketData) {
$jobMarketGQL = new JobMarketGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$jobMarketGQL->getStatus()->setErrorMessage("User not found");
return $jobMarketGQL;
}
$jobMarket = $this->createJobMarketByData($jobMarketGQL, $user, $jobMarketData);
if (empty($jobMarket)) {
$jobMarketGQL->getStatus()->setErrorMessage("Unable to create job market");
return $jobMarketGQL;
}
$resultJobMarketGQL = $this->graphqlJobMarketHelper->prepareJobMarket($jobMarket);
return $resultJobMarketGQL;
}
public function createJobMarket() {
$jobMarketGQL = new JobMarketGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$jobMarketGQL->getStatus()->setErrorMessage("User not found");
return $jobMarketGQL;
}
$jobMarket = $this->createJobMarketDefault($user);
if (empty($jobMarket)) {
$jobMarketGQL->getStatus()->setErrorMessage("Error creating job market");
return $jobMarketGQL;
}
$resultJobMarketGQL = $this->graphqlJobMarketHelper->prepareJobMarket($jobMarket);
return $resultJobMarketGQL;
}
public function updateName($jobMarketID, $name) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setName($name);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateNumberOfPositions($jobMarketID, $numberOfPositions) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setNumberOfPositions($numberOfPositions);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateOpenClose($jobMarketID, $strOpenDate, $strClosedDate) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
try {
$openDate = new DateTime($strOpenDate);
$closedDate = new DateTime($strClosedDate);
$jobMarket->setOpenDate($openDate);
$jobMarket->setClosedDate($closedDate);
} catch (Exception $ex) {
$statusGQL->setErrorMessage("Error reading date time for openDate or closedDate");
return $statusGQL;
}
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updatePositionType($jobMarketID, $strPositionType) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$positionType = $this->jobMarketHelper->getJobMarketPositionTypeByString($strPositionType);
$jobMarket->setJobMarketPositionType($positionType);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateAdditionalInfo($jobMarketID, $additionalInfo) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setAdditionalInfo($additionalInfo);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateAddresses($jobMarketID, $arrCompanyLocationIDs) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
if (empty($arrCompanyLocationIDs)) {
return $statusGQL;
}
$jobMarket->getAddresses()->clear();
foreach ($arrCompanyLocationIDs as $companyLocationID) {
/* @var $companyLocation CompanyLocation */
$companyLocation = $this->companyHelper->getCompanyLocationById($companyLocationID);
if (empty($companyLocation)) {
continue;
}
$address = $companyLocation->getAddress();
if (empty($address)) {
continue;
}
$jobMarket->addAddress($address);
}
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateApplyType($jobMarketID, $strApplyType) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$applyType = $this->jobMarketHelper->getJobMarketApplyTypeByString($strApplyType);
$jobMarket->setJobMarketApplyType($applyType);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateDescription($jobMarketID, $description) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setDescription($description);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateDetails($jobMarketID, $details) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setDetails($details);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateImage($jobMarketID, UploadedFile $image) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$mediaImage = $this->mediaHelper->saveImageByFile($image);
$jobMarket->setImage($mediaImage);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateJobs($jobMarketID, $arrJobIDs) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
if (empty($arrJobIDs)) {
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->getJobs()->clear();
foreach ($arrJobIDs as $jobID) {
$job = $this->jobHelper->getJobById($jobID);
if (empty($job)) {
continue;
}
$jobMarket->addJob($job);
}
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateRequirements($jobMarketID, $requirements) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setRequirements($requirements);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateSalary($jobMarketID, $salary) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarket->setSalary($salary);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateStartDate($jobMarketID, $strStartDate) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
try {
$startDate = new DateTime($strStartDate);
$jobMarket->setStartDate($startDate);
} catch (Exception $exc) {
$statusGQL->setErrorMessage("The start date cannot be read.");
return $statusGQL;
}
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateStartType($jobMarketID, $strStartType) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarketStartType = $this->graphqlJobMarketHelper->getStartTypeByString($strStartType);
if (empty($strStartType)) {
$statusGQL->setErrorMessage("Start Type not found");
return $statusGQL;
}
$jobMarket->setJobMarketStartType($jobMarketStartType);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateApplyUntil($jobMarketID, $strApplyUntilDate) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
if (empty($strApplyUntilDate)) {
$jobMarket->setApplyUntil(null);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
try {
$applyUntil = new DateTime($strApplyUntilDate);
$jobMarket->setApplyUntil($applyUntil);
} catch (Exception $exc) {
$statusGQL->setErrorMessage("The start date cannot be read.");
return $statusGQL;
}
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateState($jobMarketID, $state) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
$jobMarketState = $this->getJobMarketState($state);
if (empty($jobMarketState)) {
$statusGQL->setErrorMessage("State not found");
return $statusGQL;
}
$jobMarket->setJobMarketState($jobMarketState);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function updateUrl($jobMarketID, $url) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$jobMarket->setUrl($url);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
private function getJobMarketState($strState) {
switch ($strState) {
case "ACTIVE":
return $this->em->getRepository(JobMarketState::class)->find(1);
case "INACTIVE":
return $this->em->getRepository(JobMarketState::class)->find(2);
case "DELETED":
return $this->em->getRepository(JobMarketState::class)->find(3);
case "DRAFT":
return $this->em->getRepository(JobMarketState::class)->find(4);
default:
return null;
}
return null;
}
public function updateContact($jobMarketID, $galleryEntryID) {
$statusGQL = new StatusGQL();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
$statusGQL->setErrorMessage("User not found");
return $statusGQL;
}
/* @var $jobMarket JobMarket */
$jobMarket = $this->jobMarketHelper->getJobOfferById($jobMarketID);
if (empty($jobMarket)) {
$statusGQL->setErrorMessage("Job offer not found");
return $statusGQL;
}
$isAllowed = $this->isUserAllowed($statusGQL, $user, $jobMarket);
if (!$isAllowed) {
return $statusGQL;
}
/* @var $galleryEntry ContactGalleryEntry */
$galleryEntry = $this->contactHelper->getContactGalleryEntryByID($galleryEntryID);
if (empty($galleryEntry)) {
$statusGQL->setErrorMessage("Gallery entry with id $galleryEntryID not found");
return $statusGQL;
}
$contact = $galleryEntry->getContact();
if (empty($contact)) {
$statusGQL->setErrorMessage("Gallery entry has no contact");
return $statusGQL;
}
$jobMarket->setContact($contact);
$this->em->persist($jobMarket);
$this->em->flush();
return $statusGQL;
}
public function getJobMarkets() {
$jobMarketsGQL = array();
/* @var $user User */
$user = $this->getUser();
if (empty($user)) {
return $jobMarketsGQL;
}
$companyProfile = $this->companyHelper->getSelectedCompanyProfileByUser($user);
if (empty($companyProfile)) {
return $jobMarketsGQL;
}
$jobMarkets = $this->jobMarketHelper->getJobOffersByCompanyProfile($companyProfile, null, false);
if (empty($jobMarkets)) {
return $jobMarketsGQL;
}
foreach ($jobMarkets as $jobMarket) {
$jobMarketGQL = $this->graphqlJobMarketHelper->prepareJobMarket($jobMarket);
if (empty($jobMarketGQL)) {
continue;
}
$jobMarketsGQL[] = $jobMarketGQL;
}
return $jobMarketsGQL;
}
private function isUserAllowed(StatusGQL $statusGQL, User $user, JobMarket $jobMarket) {
$companyProfile = $this->companyHelper->getSelectedCompanyProfileByUser($user);
if (empty($companyProfile)) {
$statusGQL->setErrorMessage('User has no selected company profile');
return false;
}
$companyProfileID = $companyProfile->getId();
$jobMarketCompanyProfileID = $jobMarket->getCompanyProfile()->getId();
if ($companyProfileID != $jobMarketCompanyProfileID) {
$statusGQL->setErrorMessage('User company profile and job market company profile mismatch');
return false;
}
return true;
}
private function createJobMarketDefault(User $user) {
$jobMarket = new JobMarket();
$jobMarket->setUser($user);
$jobMarket->setName("# Name des Stellenangebotes #");
$jobMarket->setNumberOfPositions(1);
$jobMarket->setSalary(0);
$jobMarket->setViewCount(0);
$jobMarket->setApplicationCount(0);
$now = new DateTime();
$jobMarket->setOpenDate($now);
$jobMarket->setClosedDate($now);
$companyProfile = $this->companyHelper->getSelectedCompanyProfileByUser($user);
$jobMarket->setCompanyProfile($companyProfile);
$stateDraft = $this->jobMarketHelper->getJobMarketStateById(4);
$jobMarket->setJobMarketState($stateDraft);
$this->em->persist($jobMarket);
$this->em->flush();
return $jobMarket;
}
private function createJobMarketByData(JobMarketGQL $jobMarketGQL, User $user, $jobMarketData) {
$jobMarket = new JobMarket();
$name = $this->getStringValue($jobMarketData, 'name');
if (empty($name)) {
$jobMarketGQL->getStatus()->setErrorMessage('Empty name');
return null;
}
$jobMarket->setName($name);
$openDate = $this->getDateValue($jobMarketData, 'openDate');
if (empty($openDate)) {
$jobMarketGQL->getStatus()->setErrorMessage('Empty open date');
return null;
}
$jobMarket->setOpenDate($openDate);
$closedDate = $this->getDateValue($jobMarketData, 'closeDate');
if (empty($closedDate)) {
$jobMarketGQL->getStatus()->setErrorMessage('Empty close date');
return null;
}
$jobMarket->setClosedDate($closedDate);
$contactID = intval($jobMarketData['contactID']);
$contact = $this->em->getRepository(Contact::class)->find($contactID);
if (empty($contact)) {
$jobMarketGQL->getStatus()->setErrorMessage("Contact with id $contactID was not found");
return null;
}
$jobMarket->setContact($contact);
$addressID = intval($jobMarketData['addressID']);
$address = $this->em->getRepository(Address::class)->find($addressID);
if (empty($address)) {
$jobMarketGQL->getStatus()->setErrorMessage("Address was not found");
return null;
}
$jobMarket->addAddress($address);
$description = $this->getStringValue($jobMarketData, 'description');
$jobMarket->setDescription($description);
$requirements = $this->getStringValue($jobMarketData, 'requirements');
$jobMarket->setRequirements($requirements);
$strPositionType = $this->getStringValue($jobMarketData, 'positionType');
$positionType = $this->jobMarketHelper->getJobMarketPositionTypeByString($strPositionType);
$jobMarket->setJobMarketPositionType($positionType);
$applyUntil = $this->getDateValue($jobMarketData, 'applyUntil');
$jobMarket->setApplyUntil($applyUntil);
$strApplyType = $this->getStringValue($jobMarketData, 'applyType');
$applyType = $this->jobMarketHelper->getJobMarketApplyTypeByString($strApplyType);
$jobMarket->setJobMarketApplyType($applyType);
$salary = $this->getStringValue($jobMarketData, 'salary', "");
$jobMarket->setSalary($salary);
$numberOfPositions = intval($jobMarketData['numberOfPositions']);
$jobMarket->setNumberOfPositions($numberOfPositions);
$state = $this->jobMarketHelper->getJobMarketStartTypeById(1);
$jobMarket->setJobMarketState($state);
$this->addJobMarketJobs($jobMarket, $jobMarketData);
$jobMarket->setUser($user);
$this->em->persist($jobMarket);
$this->em->flush();
return $jobMarket;
}
private function addJobMarketJobs(JobMarket $jobMarket, $jobMarketData) {
if (!array_key_exists('jobIDs', $jobMarketData)) {
return;
}
$arrJobIDs = $jobMarketData['jobIDs'];
foreach ($arrJobIDs as $jobID) {
$job = $this->em->getRepository(Job::class)->find($jobID);
if (empty($job)) {
continue;
}
$jobMarket->addJob($job);
}
}
private function getDateValue($jobMarketData, $key) {
if (!array_key_exists($key, $jobMarketData)) {
return null;
}
$strDate = $jobMarketData[$key];
return new DateTime($strDate);
}
private function getStringValue($jobMarketData, $key, $default = null) {
if (!array_key_exists($key, $jobMarketData)) {
return $default;
}
return $jobMarketData[$key];
}
}