diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php index 9637bb2bfa15e34a652e8c5d7d68827853d2c9ac..483c525bd5129a8147d4470c0ee00737fcd8279f 100644 --- a/Classes/Controller/JoblistController.php +++ b/Classes/Controller/JoblistController.php @@ -532,19 +532,6 @@ class JoblistController extends ActionController { * @throws NoSuchArgumentException */ protected function initializeApplyAction(): void { - $propertyMappingConfiguration = $this->arguments->getArgument('applyData')->getPropertyMappingConfiguration(); - $propertyMappingConfiguration->forProperty('job')->allowAllProperties(); - - // remove the job validator - /** @var ConjunctionValidator $validator */ - $validator = $this->arguments->getArgument('applyData')->getValidator(); - foreach ($validator->getValidators() as $subValidator) { - /** @var GenericObjectValidator $subValidatorSub */ - foreach ($subValidator->getValidators() as $subValidatorSub) { - $subValidatorsSub = $subValidatorSub->getPropertyValidators(); - unset($subValidatorsSub['job']); - } - } } /** @@ -565,11 +552,11 @@ class JoblistController extends ActionController { $job = $applyData->getJob(); if ($job) { $applyData->setJobId($job->getJobId()); - foreach ($job->getCompanies() as $company) { + foreach ($job->getCompany() as $company) { /** @var Company $company */ $applyData->setCompany($company); } - } elseif (!$applyData->getCompany()) { + } elseif (!$applyData->getFirstCompany()) { /** @var Company $company */ $company = $this->companyRepository->findByUid( (int) $_POST['tx_sgjobs_jobapplication']['applyData']['company'] @@ -581,8 +568,8 @@ class JoblistController extends ActionController { // look for a configured default job, in case of unsolicited application $applyData->setPid($GLOBALS['TSFE']->id); - if ((!$job || !$applyData->getJobId()) && $applyData->getCompany()) { - $applyData->setJobId($applyData->getCompany()->getJobId()); + if ((!$job || !$applyData->getJobId()) && $applyData->getFirstCompany()) { + $applyData->setJobId($applyData->getFirstCompany()->getJobId()); } if ($applyData->_isNew()) { @@ -627,7 +614,7 @@ class JoblistController extends ActionController { if ($contact !== NULL) { $mailService->setToAddresses($contact->getEmail()); } else { - $company = $applyData->getCompany(); + $company = $applyData->getFirstCompany(); if (($company !== NULL) && $company->getContact() !== NULL) { $mailService->setToAddresses($company->getContact()->getEmail()); } @@ -730,8 +717,8 @@ class JoblistController extends ActionController { */ protected function getApplicationMailMarkers(JobApplication $applyData): array { $location = ''; - if ($applyData->getCompany() !== NULL) { - $location = $applyData->getCompany()->getCity(); + if ($applyData->getFirstCompany() !== NULL) { + $location = $applyData->getFirstCompany()->getCity(); } return [ diff --git a/Classes/Domain/Model/Job.php b/Classes/Domain/Model/Job.php index cb2976f8d6d73d9a2cba4946fb1bb4d38647f764..a9fbba2ab1f99c86a0f413fb63a54370ae983ebb 100644 --- a/Classes/Domain/Model/Job.php +++ b/Classes/Domain/Model/Job.php @@ -107,7 +107,7 @@ class Job extends AbstractEntity { * @var ObjectStorage<Company> */ #[Lazy] - protected $company; + protected $company = NULL; /** * @var ObjectStorage<Job> @@ -287,25 +287,28 @@ class Job extends AbstractEntity { } /** - * @return Company|NULL + * @return ObjectStorage|NULL */ public function getCompany() { if ($this->company instanceof LazyLoadingProxy) { $this->company->_loadRealInstance(); } - return $this->company->offsetGet(0); + return $this->company; } /** - * @return ObjectStorage + * @return Company|NULL */ - public function getCompanies(): ObjectStorage { + public function getFirstCompany(): ?Company { if ($this->company instanceof LazyLoadingProxy) { $this->company->_loadRealInstance(); } - return $this->company; + if ($this->company->count() === 0) { + return NULL; + } + return $this->company->offsetGet(0); } /** diff --git a/Classes/Domain/Model/JobApplication.php b/Classes/Domain/Model/JobApplication.php index afbf630c17a4663cd0afe8f52dbdb7d3130afeb1..a19e4a26c2f8c0408ebcaeac275145c3601b87ec 100644 --- a/Classes/Domain/Model/JobApplication.php +++ b/Classes/Domain/Model/JobApplication.php @@ -53,7 +53,7 @@ class JobApplication extends AbstractEntity { * @var ObjectStorage<Company> */ #[Lazy] - protected $company; + protected $company = NULL; /** * @var Job $job @@ -477,13 +477,21 @@ class JobApplication extends AbstractEntity { } /** - * @return Company|NULL + * @return ObjectStorage|NULL */ public function getCompany() { if ($this->company instanceof LazyLoadingProxy) { $this->company->_loadRealInstance(); } + return $this->company; + } + + public function getFirstCompany(): ?Company { + if ($this->company instanceof LazyLoadingProxy) { + $this->company->_loadRealInstance(); + } + if ($this->company->count() === 0) { return NULL; } diff --git a/Classes/Domain/Repository/JobRepository.php b/Classes/Domain/Repository/JobRepository.php index 7c1acccd61c05aa7779c7220986252e90ea503f9..ca99220f4439cd2b6fc353ac2f34f9ddaa142979 100644 --- a/Classes/Domain/Repository/JobRepository.php +++ b/Classes/Domain/Repository/JobRepository.php @@ -339,7 +339,7 @@ class JobRepository extends Repository { $query->getQuerySettings()->setRespectStoragePage(FALSE); } - $company = $job->getCompany(); + $company = $job->getFirstCompany(); $department = $job->getDepartment(); if ($limit > 0) { diff --git a/Configuration/SgMail/ApplicantMail.php b/Configuration/SgMail/ApplicantMail.php index f83256bc39da121c2fcf9cf974158cc69d8d0512..037178259e4a4204645f4e01239466de3dc9fc04 100644 --- a/Configuration/SgMail/ApplicantMail.php +++ b/Configuration/SgMail/ApplicantMail.php @@ -26,7 +26,7 @@ EOT 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.jobtitle' ], [ - 'marker' => 'application.company.location', + 'marker' => 'application.firstCompany.location', 'type' => MailTemplateService::MARKER_TYPE_STRING, 'value' => 'München', 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location' diff --git a/Configuration/SgMail/ApplicationMail.php b/Configuration/SgMail/ApplicationMail.php index a0e9197c07b9c5b2ce96412b6871bd0bb175e9b3..36e187c592ec5279374d325508d689c392b83391 100644 --- a/Configuration/SgMail/ApplicationMail.php +++ b/Configuration/SgMail/ApplicationMail.php @@ -8,7 +8,7 @@ return [ 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:mail.application.description', 'subject' => 'Eine neue Bewerbung', 'templateContent' => <<<EOT -Eine neue {f:if(condition: '{application.jobTitle}', then: 'Bewerbung als <b>{application.jobTitle}</b> für den Standort <b>{application.company.city}</b>.', else: 'Initiativbewerbung für den Standort <b>{application.company.city}</b>.')} +Eine neue {f:if(condition: '{application.jobTitle}', then: 'Bewerbung als <b>{application.jobTitle}</b> für den Standort <b>{application.firstCompany.city}</b>.', else: 'Initiativbewerbung für den Standort <b>{application.firstCompany.city}</b>.')} Geschlecht: {f:translate(key: 'frontend.apply.gender.{application.gender}', extensionName: 'SgJobs')} @@ -51,7 +51,7 @@ EOT 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.jobtitle' ], [ - 'marker' => 'application.company.location', + 'marker' => 'application.firstCompany.location', 'type' => MailTemplateService::MARKER_TYPE_STRING, 'value' => 'München', 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location' diff --git a/Configuration/TCA/tx_sgjobs_domain_model_job.php b/Configuration/TCA/tx_sgjobs_domain_model_job.php index dc086e2343498e2cca079c9dea883bdb11f5a0a2..b434ac1c59d4bf35151c836647244a350eed0775 100644 --- a/Configuration/TCA/tx_sgjobs_domain_model_job.php +++ b/Configuration/TCA/tx_sgjobs_domain_model_job.php @@ -311,6 +311,7 @@ $columns = [ 'foreign_table' => 'tx_sgjobs_domain_model_company', 'foreign_table_where' => ' AND tx_sgjobs_domain_model_company.sys_language_uid IN (0,-1) ORDER BY tx_sgjobs_domain_model_company.sorting ASC', 'minitems' => 1, + 'multiple' => 1, 'fieldControl' => [ 'editPopup' => [ 'disabled' => FALSE, diff --git a/Resources/Private/Partials/ApplyFormSchema.html b/Resources/Private/Partials/ApplyFormSchema.html index ab35b14a548385cadb9a3b960bd5e8f7d3602a0f..00efd97b8fcc21c32669b6d902efef10131c23d3 100644 --- a/Resources/Private/Partials/ApplyFormSchema.html +++ b/Resources/Private/Partials/ApplyFormSchema.html @@ -76,8 +76,8 @@ "hiringOrganization": {leftBrace} "@type": "Organization", - "name": "{job.company.name}", - "sameAs": "{f:uri.typolink(parameter: job.company.identifyingUrl, absolute: 'TRUE')}", + "name": "{job.firstCompany.name}", + "sameAs": "{f:uri.typolink(parameter: job.firstCompany.identifyingUrl, absolute: 'TRUE')}", "department": {leftBrace} "@type": "Organization", "name": "{job.department.title}" diff --git a/Resources/Private/Templates/Backend/Index.html b/Resources/Private/Templates/Backend/Index.html index 03f386983edcf64a514ab518deeb73ac58caf541..b2f26076200995e6212db005bbb6a13e7754d814 100644 --- a/Resources/Private/Templates/Backend/Index.html +++ b/Resources/Private/Templates/Backend/Index.html @@ -46,7 +46,7 @@ </td> <td> <be:link.editRecord uid="{job.uid}" table="tx_sgjobs_domain_model_job"> - <span>{job.title} - <sg:backend.companyLabel uid="{job.uid}" companyraw="{job.company}"></sg:backend.companyLabel> </span> + <span>{job.title} - <sg:backend.companyLabel uid="{job.uid}" companyraw="{job.firstCompany}"></sg:backend.companyLabel> </span> </be:link.editRecord> </td> <td nowrap="nowrap" class="col-control"> diff --git a/Resources/Private/Templates/Joblist/ApplyForm.html b/Resources/Private/Templates/Joblist/ApplyForm.html index 68110fb631f8441946def34a2c4436dc728a928b..99443c5e2cf12051b2342ecb9e6d20747c279d0e 100644 --- a/Resources/Private/Templates/Joblist/ApplyForm.html +++ b/Resources/Private/Templates/Joblist/ApplyForm.html @@ -91,13 +91,13 @@ <f:if condition="!{job.hideApplyByPostal}"> <p> <f:format.raw><f:translate key="frontend.job.via.post" /></f:format.raw><br> - {job.company.name}<br> + {job.firstCompany.name}<br> <f:if condition="{job.contact}"> <f:then> {job.contact.title} {job.contact.firstName} {job.contact.lastName}<br> </f:then> <f:else> - {job.company.contact.title} {job.company.contact.firstName} {job.company.contact.lastName}<br> + {job.firstCompany.contact.title} {job.firstCompany.contact.firstName} {job.firstCompany.contact.lastName}<br> </f:else> </f:if> <f:if condition="{job.contact} && {job.contact.street}"> @@ -112,25 +112,25 @@ </f:if> </f:then> <f:else> - <f:if condition="{job.company.contact} && {job.company.contact.street}"> + <f:if condition="{job.firstCompany.contact} && {job.firstCompany.contact.street}"> <f:then> - {job.company.contact.street}<br> - <f:if condition="{job.company.contact.state}"> - {job.company.contact.state}<br> + {job.firstCompany.contact.street}<br> + <f:if condition="{job.firstCompany.contact.state}"> + {job.firstCompany.contact.state}<br> </f:if> - {job.company.contact.zip} {job.company.contact.city} - <f:if condition="{job.company.contact.country}"> - <br>{job.company.contact.country} + {job.firstCompany.contact.zip} {job.firstCompany.contact.city} + <f:if condition="{job.firstCompany.contact.country}"> + <br>{job.firstCompany.contact.country} </f:if> </f:then> <f:else> - {job.company.street}<br> - <f:if condition="{job.company.state}"> - {job.company.state}<br> + {job.firstCompany.street}<br> + <f:if condition="{job.firstCompany.state}"> + {job.firstCompany.state}<br> </f:if> - {job.company.zip} {job.company.city} - <f:if condition="{job.company.country}"> - <br>{job.company.country} + {job.firstCompany.zip} {job.firstCompany.city} + <f:if condition="{job.firstCompany.country}"> + <br>{job.firstCompany.country} </f:if> </f:else> </f:if> @@ -149,7 +149,7 @@ <f:format.html parseFuncTSPath="lib.parseFunc"><a href="mailto:{job.contact.email}"><f:translate key="frontend.emailContact"/></a></f:format.html> </f:then> <f:else> - <f:format.html parseFuncTSPath="lib.parseFunc"><a href="mailto:{job.company.contact.email}"><f:translate key="frontend.emailContact"/></a></f:format.html> + <f:format.html parseFuncTSPath="lib.parseFunc"><a href="mailto:{job.firstCompany.contact.email}"><f:translate key="frontend.emailContact"/></a></f:format.html> </f:else> </f:if> </p> @@ -170,7 +170,7 @@ <f:render section="contactBox" arguments="{contact: job.contact, hideApplyByEmail: job.hideApplyByEmail}" /> </f:then> <f:else> - <f:render section="contactBox" arguments="{contact: job.company.contact, hideApplyByEmail: job.hideApplyByEmail}" /> + <f:render section="contactBox" arguments="{contact: job.firstCompany.contact, hideApplyByEmail: job.hideApplyByEmail}" /> </f:else> </f:if> <f:if condition="{job.attachment}">