Skip to content
Snippets Groups Projects
Verified Commit 2bf9f89f authored by Kevin Ditscheid's avatar Kevin Ditscheid
Browse files

[BUGFIX] Fix wrongly named property getter so validation doesn't crash in the applyAction

parent a9e79303
No related branches found
No related tags found
No related merge requests found
...@@ -532,19 +532,6 @@ class JoblistController extends ActionController { ...@@ -532,19 +532,6 @@ class JoblistController extends ActionController {
* @throws NoSuchArgumentException * @throws NoSuchArgumentException
*/ */
protected function initializeApplyAction(): void { 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 { ...@@ -565,11 +552,11 @@ class JoblistController extends ActionController {
$job = $applyData->getJob(); $job = $applyData->getJob();
if ($job) { if ($job) {
$applyData->setJobId($job->getJobId()); $applyData->setJobId($job->getJobId());
foreach ($job->getCompanies() as $company) { foreach ($job->getCompany() as $company) {
/** @var Company $company */ /** @var Company $company */
$applyData->setCompany($company); $applyData->setCompany($company);
} }
} elseif (!$applyData->getCompany()) { } elseif (!$applyData->getFirstCompany()) {
/** @var Company $company */ /** @var Company $company */
$company = $this->companyRepository->findByUid( $company = $this->companyRepository->findByUid(
(int) $_POST['tx_sgjobs_jobapplication']['applyData']['company'] (int) $_POST['tx_sgjobs_jobapplication']['applyData']['company']
...@@ -581,8 +568,8 @@ class JoblistController extends ActionController { ...@@ -581,8 +568,8 @@ class JoblistController extends ActionController {
// look for a configured default job, in case of unsolicited application // look for a configured default job, in case of unsolicited application
$applyData->setPid($GLOBALS['TSFE']->id); $applyData->setPid($GLOBALS['TSFE']->id);
if ((!$job || !$applyData->getJobId()) && $applyData->getCompany()) { if ((!$job || !$applyData->getJobId()) && $applyData->getFirstCompany()) {
$applyData->setJobId($applyData->getCompany()->getJobId()); $applyData->setJobId($applyData->getFirstCompany()->getJobId());
} }
if ($applyData->_isNew()) { if ($applyData->_isNew()) {
...@@ -627,7 +614,7 @@ class JoblistController extends ActionController { ...@@ -627,7 +614,7 @@ class JoblistController extends ActionController {
if ($contact !== NULL) { if ($contact !== NULL) {
$mailService->setToAddresses($contact->getEmail()); $mailService->setToAddresses($contact->getEmail());
} else { } else {
$company = $applyData->getCompany(); $company = $applyData->getFirstCompany();
if (($company !== NULL) && $company->getContact() !== NULL) { if (($company !== NULL) && $company->getContact() !== NULL) {
$mailService->setToAddresses($company->getContact()->getEmail()); $mailService->setToAddresses($company->getContact()->getEmail());
} }
...@@ -730,8 +717,8 @@ class JoblistController extends ActionController { ...@@ -730,8 +717,8 @@ class JoblistController extends ActionController {
*/ */
protected function getApplicationMailMarkers(JobApplication $applyData): array { protected function getApplicationMailMarkers(JobApplication $applyData): array {
$location = ''; $location = '';
if ($applyData->getCompany() !== NULL) { if ($applyData->getFirstCompany() !== NULL) {
$location = $applyData->getCompany()->getCity(); $location = $applyData->getFirstCompany()->getCity();
} }
return [ return [
......
...@@ -107,7 +107,7 @@ class Job extends AbstractEntity { ...@@ -107,7 +107,7 @@ class Job extends AbstractEntity {
* @var ObjectStorage<Company> * @var ObjectStorage<Company>
*/ */
#[Lazy] #[Lazy]
protected $company; protected $company = NULL;
/** /**
* @var ObjectStorage<Job> * @var ObjectStorage<Job>
...@@ -287,25 +287,28 @@ class Job extends AbstractEntity { ...@@ -287,25 +287,28 @@ class Job extends AbstractEntity {
} }
/** /**
* @return Company|NULL * @return ObjectStorage|NULL
*/ */
public function getCompany() { public function getCompany() {
if ($this->company instanceof LazyLoadingProxy) { if ($this->company instanceof LazyLoadingProxy) {
$this->company->_loadRealInstance(); $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) { if ($this->company instanceof LazyLoadingProxy) {
$this->company->_loadRealInstance(); $this->company->_loadRealInstance();
} }
return $this->company; if ($this->company->count() === 0) {
return NULL;
}
return $this->company->offsetGet(0);
} }
/** /**
......
...@@ -53,7 +53,7 @@ class JobApplication extends AbstractEntity { ...@@ -53,7 +53,7 @@ class JobApplication extends AbstractEntity {
* @var ObjectStorage<Company> * @var ObjectStorage<Company>
*/ */
#[Lazy] #[Lazy]
protected $company; protected $company = NULL;
/** /**
* @var Job $job * @var Job $job
...@@ -477,13 +477,21 @@ class JobApplication extends AbstractEntity { ...@@ -477,13 +477,21 @@ class JobApplication extends AbstractEntity {
} }
/** /**
* @return Company|NULL * @return ObjectStorage|NULL
*/ */
public function getCompany() { public function getCompany() {
if ($this->company instanceof LazyLoadingProxy) { if ($this->company instanceof LazyLoadingProxy) {
$this->company->_loadRealInstance(); $this->company->_loadRealInstance();
} }
return $this->company;
}
public function getFirstCompany(): ?Company {
if ($this->company instanceof LazyLoadingProxy) {
$this->company->_loadRealInstance();
}
if ($this->company->count() === 0) { if ($this->company->count() === 0) {
return NULL; return NULL;
} }
......
...@@ -339,7 +339,7 @@ class JobRepository extends Repository { ...@@ -339,7 +339,7 @@ class JobRepository extends Repository {
$query->getQuerySettings()->setRespectStoragePage(FALSE); $query->getQuerySettings()->setRespectStoragePage(FALSE);
} }
$company = $job->getCompany(); $company = $job->getFirstCompany();
$department = $job->getDepartment(); $department = $job->getDepartment();
if ($limit > 0) { if ($limit > 0) {
......
...@@ -26,7 +26,7 @@ EOT ...@@ -26,7 +26,7 @@ EOT
'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.jobtitle' '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, 'type' => MailTemplateService::MARKER_TYPE_STRING,
'value' => 'München', 'value' => 'München',
'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location' 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location'
......
...@@ -8,7 +8,7 @@ return [ ...@@ -8,7 +8,7 @@ return [
'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:mail.application.description', 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:mail.application.description',
'subject' => 'Eine neue Bewerbung', 'subject' => 'Eine neue Bewerbung',
'templateContent' => <<<EOT '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')} Geschlecht: {f:translate(key: 'frontend.apply.gender.{application.gender}', extensionName: 'SgJobs')}
...@@ -51,7 +51,7 @@ EOT ...@@ -51,7 +51,7 @@ EOT
'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.jobtitle' '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, 'type' => MailTemplateService::MARKER_TYPE_STRING,
'value' => 'München', 'value' => 'München',
'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location' 'description' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang.xlf:application_mail.marker.location'
......
...@@ -311,6 +311,7 @@ $columns = [ ...@@ -311,6 +311,7 @@ $columns = [
'foreign_table' => 'tx_sgjobs_domain_model_company', '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', '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, 'minitems' => 1,
'multiple' => 1,
'fieldControl' => [ 'fieldControl' => [
'editPopup' => [ 'editPopup' => [
'disabled' => FALSE, 'disabled' => FALSE,
......
...@@ -76,8 +76,8 @@ ...@@ -76,8 +76,8 @@
"hiringOrganization": {leftBrace} "hiringOrganization": {leftBrace}
"@type": "Organization", "@type": "Organization",
"name": "{job.company.name}", "name": "{job.firstCompany.name}",
"sameAs": "{f:uri.typolink(parameter: job.company.identifyingUrl, absolute: 'TRUE')}", "sameAs": "{f:uri.typolink(parameter: job.firstCompany.identifyingUrl, absolute: 'TRUE')}",
"department": {leftBrace} "department": {leftBrace}
"@type": "Organization", "@type": "Organization",
"name": "{job.department.title}" "name": "{job.department.title}"
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</td> </td>
<td> <td>
<be:link.editRecord uid="{job.uid}" table="tx_sgjobs_domain_model_job"> <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> </be:link.editRecord>
</td> </td>
<td nowrap="nowrap" class="col-control"> <td nowrap="nowrap" class="col-control">
......
...@@ -91,13 +91,13 @@ ...@@ -91,13 +91,13 @@
<f:if condition="!{job.hideApplyByPostal}"> <f:if condition="!{job.hideApplyByPostal}">
<p> <p>
<f:format.raw><f:translate key="frontend.job.via.post" /></f:format.raw><br> <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:if condition="{job.contact}">
<f:then> <f:then>
{job.contact.title} {job.contact.firstName} {job.contact.lastName}<br> {job.contact.title} {job.contact.firstName} {job.contact.lastName}<br>
</f:then> </f:then>
<f:else> <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:else>
</f:if> </f:if>
<f:if condition="{job.contact} && {job.contact.street}"> <f:if condition="{job.contact} && {job.contact.street}">
...@@ -112,25 +112,25 @@ ...@@ -112,25 +112,25 @@
</f:if> </f:if>
</f:then> </f:then>
<f:else> <f:else>
<f:if condition="{job.company.contact} && {job.company.contact.street}"> <f:if condition="{job.firstCompany.contact} && {job.firstCompany.contact.street}">
<f:then> <f:then>
{job.company.contact.street}<br> {job.firstCompany.contact.street}<br>
<f:if condition="{job.company.contact.state}"> <f:if condition="{job.firstCompany.contact.state}">
{job.company.contact.state}<br> {job.firstCompany.contact.state}<br>
</f:if> </f:if>
{job.company.contact.zip} {job.company.contact.city} {job.firstCompany.contact.zip} {job.firstCompany.contact.city}
<f:if condition="{job.company.contact.country}"> <f:if condition="{job.firstCompany.contact.country}">
<br>{job.company.contact.country} <br>{job.firstCompany.contact.country}
</f:if> </f:if>
</f:then> </f:then>
<f:else> <f:else>
{job.company.street}<br> {job.firstCompany.street}<br>
<f:if condition="{job.company.state}"> <f:if condition="{job.firstCompany.state}">
{job.company.state}<br> {job.firstCompany.state}<br>
</f:if> </f:if>
{job.company.zip} {job.company.city} {job.firstCompany.zip} {job.firstCompany.city}
<f:if condition="{job.company.country}"> <f:if condition="{job.firstCompany.country}">
<br>{job.company.country} <br>{job.firstCompany.country}
</f:if> </f:if>
</f:else> </f:else>
</f:if> </f:if>
...@@ -149,7 +149,7 @@ ...@@ -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:format.html parseFuncTSPath="lib.parseFunc"><a href="mailto:{job.contact.email}"><f:translate key="frontend.emailContact"/></a></f:format.html>
</f:then> </f:then>
<f:else> <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:else>
</f:if> </f:if>
</p> </p>
...@@ -170,7 +170,7 @@ ...@@ -170,7 +170,7 @@
<f:render section="contactBox" arguments="{contact: job.contact, hideApplyByEmail: job.hideApplyByEmail}" /> <f:render section="contactBox" arguments="{contact: job.contact, hideApplyByEmail: job.hideApplyByEmail}" />
</f:then> </f:then>
<f:else> <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:else>
</f:if> </f:if>
<f:if condition="{job.attachment}"> <f:if condition="{job.attachment}">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment