Skip to content
Snippets Groups Projects
Commit acfb655f authored by Torsten Oppermann's avatar Torsten Oppermann
Browse files

[TASK] Implementing new features, fixing massive model issues

parent 6ffd4c61
No related branches found
No related tags found
1 merge request!3Version 1 5
...@@ -156,12 +156,18 @@ class JoblistController extends ActionController { ...@@ -156,12 +156,18 @@ class JoblistController extends ActionController {
$this->view->assign('folderName', $folderName); $this->view->assign('folderName', $folderName);
$job = NULL; $job = NULL;
if (!$uid !== NULL) { if (!$uid !== NULL) {
/** @var Job $job */ /** @var Job $job */
$job = $this->jobRepository->findByUid($uid); $job = $this->jobRepository->findByUid($uid);
if ($job) { if ($job) {
$GLOBALS['TSFE']->page['titlebyextension'] = $job->getTitle(); $GLOBALS['TSFE']->page['titlebyextension'] = $job->getTitle();
$GLOBALS['TSFE']->page['description'] = substr($job->getDescription(), 0, 200); $GLOBALS['TSFE']->page['description'] = substr($job->getDescription(), 0, 200);
} else {
$storagePid = (int) $this->configurationManager->getConfiguration(
ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK
)['persistence']['storagePid'];
$this->view->assign('companies', $this->companyRepository->getAllCompanies($storagePid));
} }
$this->view->assign('job', $job); $this->view->assign('job', $job);
} }
...@@ -299,7 +305,10 @@ class JoblistController extends ActionController { ...@@ -299,7 +305,10 @@ class JoblistController extends ActionController {
if ($contact !== NULL) { if ($contact !== NULL) {
$mailService->setToAddresses($contact->getEmail()); $mailService->setToAddresses($contact->getEmail());
} else {
$mailService->setToAddresses($applyData->getCompany()->getContact()->getEmail());
} }
$mailService->setMarkers(['application' => $applyData]); $mailService->setMarkers(['application' => $applyData]);
$mailService->setIgnoreMailQueue(TRUE); $mailService->setIgnoreMailQueue(TRUE);
......
...@@ -57,6 +57,11 @@ class Company extends AbstractEntity { ...@@ -57,6 +57,11 @@ class Company extends AbstractEntity {
*/ */
protected $description = ''; protected $description = '';
/**
* @var \SGalinski\SgJobs\Domain\Model\Contact $contact
*/
protected $contact;
/** /**
* @return string * @return string
*/ */
...@@ -126,4 +131,18 @@ class Company extends AbstractEntity { ...@@ -126,4 +131,18 @@ class Company extends AbstractEntity {
public function setStreet(string $street) { public function setStreet(string $street) {
$this->street = $street; $this->street = $street;
} }
/**
* @return \SGalinski\SgJobs\Domain\Model\Contact
*/
public function getContact() {
return $this->contact;
}
/**
* @param \SGalinski\SgJobs\Domain\Model\Contact $contact
*/
public function setContact(Contact $contact) {
$this->contact = $contact;
}
} }
...@@ -74,7 +74,7 @@ class Job extends AbstractEntity { ...@@ -74,7 +74,7 @@ class Job extends AbstractEntity {
protected $startDate = 0; protected $startDate = 0;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SGalinski\SgJobs\Domain\Model\Company> $company * @var \SGalinski\SgJobs\Domain\Model\Company $company
*/ */
protected $company = ''; protected $company = '';
...@@ -159,16 +159,16 @@ class Job extends AbstractEntity { ...@@ -159,16 +159,16 @@ class Job extends AbstractEntity {
} }
/** /**
* @return string * @return Company
*/ */
public function getCompany() { public function getCompany() {
return $this->company; return $this->company;
} }
/** /**
* @param ObjectStorage $company * @param Company $company
*/ */
public function setCompany(ObjectStorage $company) { public function setCompany(Company $company) {
$this->company = $company; $this->company = $company;
} }
......
...@@ -46,6 +46,12 @@ class JobApplication extends AbstractEntity { ...@@ -46,6 +46,12 @@ class JobApplication extends AbstractEntity {
*/ */
protected $jobTitle = ''; protected $jobTitle = '';
/**
* @var \SGalinski\SgJobs\Domain\Model\Company $company
* @validate NotEmpty
*/
protected $company;
/** /**
* @var \SGalinski\SgJobs\Domain\Model\Job $job * @var \SGalinski\SgJobs\Domain\Model\Job $job
*/ */
...@@ -430,4 +436,18 @@ class JobApplication extends AbstractEntity { ...@@ -430,4 +436,18 @@ class JobApplication extends AbstractEntity {
public function setJob(Job $job) { public function setJob(Job $job) {
$this->job = $job; $this->job = $job;
} }
/**
* @return Company
*/
public function getCompany() {
return $this->company;
}
/**
* @param Company $company
*/
public function setCompany(Company $company) {
$this->company = $company;
}
} }
...@@ -152,4 +152,34 @@ class CompanyRepository extends Repository { ...@@ -152,4 +152,34 @@ class CompanyRepository extends Repository {
return $namesArray; return $namesArray;
} }
/**
* Returns all companies filtered by page id
*
* @param int $pageUid
* @return mixed
* @throws \InvalidArgumentException
*/
public function getAllCompanies($pageUid) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
self::TABLENAME
);
$queryBuilder
->getRestrictions()
->removeAll()
->add(GeneralUtility::makeInstance(DeletedRestriction::class))
->add(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
$statement = $queryBuilder->select('*')->from('tx_sgjobs_domain_model_company');
$statement->where(
$queryBuilder->expr()->eq(
'pid', $queryBuilder->createNamedParameter($pageUid)
)
);
return $statement->execute();
}
} }
...@@ -8,7 +8,7 @@ return [ ...@@ -8,7 +8,7 @@ return [
'crdate' => 'crdate', 'crdate' => 'crdate',
'cruser_id' => 'cruser_id', 'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE, 'dividers2tabs' => TRUE,
'searchFields' => 'city, country, description, name, street', 'searchFields' => 'city, country, description, name, street, contact',
'versioningWS' => 2, 'versioningWS' => 2,
'versioning_followPages' => TRUE, 'versioning_followPages' => TRUE,
'origUid' => 't3_origuid', 'origUid' => 't3_origuid',
...@@ -26,12 +26,12 @@ return [ ...@@ -26,12 +26,12 @@ return [
'Resources/Public/Icons/tx_sgjobs_domain_model_company.svg' 'Resources/Public/Icons/tx_sgjobs_domain_model_company.svg'
], ],
'interface' => [ 'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, pid, city, street name, country, description', 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, pid, city, street name, country, description, contact',
], ],
'types' => [ 'types' => [
'1' => [ '1' => [
'showitem' => '--palette--;;sysLanguageAndHidden, 'showitem' => '--palette--;;sysLanguageAndHidden,
city, street,name, country, description;;;richtext[*]:rte_transform[mode=ts], city, street,name, country, description, contact;;;richtext[*]:rte_transform[mode=ts],
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime', --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
], ],
], ],
...@@ -167,5 +167,27 @@ return [ ...@@ -167,5 +167,27 @@ return [
'eval' => 'trim' 'eval' => 'trim'
], ],
], ],
'contact' => [
'exclude' => 0,
'label' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang_db.xlf:tx_sgjobs_domain_model_job.contact',
'config' => [
'type' => 'select',
'eval' => 'required',
'renderType' => 'selectSingle',
'internal_type' => 'db',
'foreign_table' => 'tx_sgjobs_domain_model_contact',
'size' => 1,
'maxitems' => 1,
'multiple' => 0,
'fieldControl' => [
'editPopup' => [
'disabled' => FALSE,
],
'addRecord' => [
'disabled' => FALSE,
]
],
]
]
], ],
]; ];
\ No newline at end of file
...@@ -12,7 +12,7 @@ $tx_sgjobs_domain_model_job_application = [ ...@@ -12,7 +12,7 @@ $tx_sgjobs_domain_model_job_application = [
'crdate' => 'crdate', 'crdate' => 'crdate',
'cruser_id' => 'cruser_id', 'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE, 'dividers2tabs' => TRUE,
'searchFields' => 'job_id, job, job_title, gender, first_name, last_name, street, city, zip, country, nationality, education, birth_date, phone, mobile, email, message, cover_letter, certificate, cv', 'searchFields' => 'job_id, job, job_title, company, gender, first_name, last_name, street, city, zip, country, nationality, education, birth_date, phone, mobile, email, message, cover_letter, certificate, cv',
'versioningWS' => 2, 'versioningWS' => 2,
'versioning_followPages' => TRUE, 'versioning_followPages' => TRUE,
'origUid' => 't3_origuid', 'origUid' => 't3_origuid',
...@@ -30,12 +30,12 @@ $tx_sgjobs_domain_model_job_application = [ ...@@ -30,12 +30,12 @@ $tx_sgjobs_domain_model_job_application = [
'Resources/Public/Icons/tx_sgjobs_domain_model_job.svg' 'Resources/Public/Icons/tx_sgjobs_domain_model_job.svg'
], ],
'interface' => [ 'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, pid, job, job_id, job_title, area, start_date, alternative_start_date, 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, pid, job, job_id, job_title, company, area, start_date, alternative_start_date,
company, task, qualification, description, contact', company, task, qualification, description, contact',
], ],
'types' => [ 'types' => [
'1' => [ '1' => [
'showitem' => '--palette--;;sysLanguageAndHidden,job_id, job, job_title, gender, first_name, last_name, street, city, zip, 'showitem' => '--palette--;;sysLanguageAndHidden,job_id, job, job_title, company, gender, first_name, last_name, street, city, zip,
country, nationality, education, birth_date, phone, mobile, email, message, cover_letter, cv, certificate, country, nationality, education, birth_date, phone, mobile, email, message, cover_letter, cv, certificate,
div;;richtext[*]:rte_transform[mode=ts], div;;richtext[*]:rte_transform[mode=ts],
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime', --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
...@@ -167,6 +167,28 @@ $tx_sgjobs_domain_model_job_application = [ ...@@ -167,6 +167,28 @@ $tx_sgjobs_domain_model_job_application = [
'eval' => 'trim' 'eval' => 'trim'
], ],
], ],
'company' => [
'exclude' => 0,
'label' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang_db.xlf:tx_sgjobs_domain_model_job.company',
'config' => [
'type' => 'select',
'eval' => 'required',
'renderType' => 'selectSingle',
'internal_type' => 'db',
'foreign_table' => 'tx_sgjobs_domain_model_company',
'size' => 1,
'maxitems' => 1,
'multiple' => 0,
'fieldControl' => [
'editPopup' => [
'disabled' => FALSE,
],
'addRecord' => [
'disabled' => FALSE,
]
],
]
],
'gender' => [ 'gender' => [
'exclude' => 0, 'exclude' => 0,
'label' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang_db.xlf:tx_sgjobs_domain_model_job_application.gender', 'label' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang_db.xlf:tx_sgjobs_domain_model_job_application.gender',
......
...@@ -202,6 +202,10 @@ ...@@ -202,6 +202,10 @@
<source>Last name *</source> <source>Last name *</source>
<target>Nachname *</target> <target>Nachname *</target>
</trans-unit> </trans-unit>
<trans-unit id="frontend.apply.location" approved="yes">
<source>Location*</source>
<target>Standort*</target>
</trans-unit>
<trans-unit id="frontend.apply.message" approved="yes"> <trans-unit id="frontend.apply.message" approved="yes">
<source>Message</source> <source>Message</source>
<target>Ihre Nachricht</target> <target>Ihre Nachricht</target>
......
...@@ -153,6 +153,9 @@ ...@@ -153,6 +153,9 @@
<trans-unit id="frontend.apply.last_name"> <trans-unit id="frontend.apply.last_name">
<source>Last name *</source> <source>Last name *</source>
</trans-unit> </trans-unit>
<trans-unit id="frontend.apply.location">
<source>Location*</source>
</trans-unit>
<trans-unit id="frontend.apply.message"> <trans-unit id="frontend.apply.message">
<source>Message</source> <source>Message</source>
</trans-unit> </trans-unit>
......
...@@ -31,14 +31,14 @@ ...@@ -31,14 +31,14 @@
<h3><f:translate key="frontend.location" /></h3> <h3><f:translate key="frontend.location" /></h3>
<p> <p>
{job.company.0.country} - {job.company.0.city} {job.company.country} - {job.company.city}
</p> </p>
<h3><f:translate key="frontend.area" /></h3> <h3><f:translate key="frontend.area" /></h3>
<p>{job.area}</p> <p>{job.area}</p>
<h3><f:translate key="frontend.organisation" /></h3> <h3><f:translate key="frontend.organisation" /></h3>
<p>{job.company.0.name}</p> <p>{job.company.name}</p>
<f:if condition="{job.task}"> <f:if condition="{job.task}">
<h3><f:translate key="frontend.task" /></h3> <h3><f:translate key="frontend.task" /></h3>
...@@ -64,12 +64,12 @@ ...@@ -64,12 +64,12 @@
<f:if condition="{job.contact.email} && !{job.contact.hideInFrontend}"> <f:if condition="{job.contact.email} && !{job.contact.hideInFrontend}">
<h3><f:translate key="frontend.apply_by_mail" /></h3> <h3><f:translate key="frontend.apply_by_mail" /></h3>
<p> <p>
<f:for each="{job.company}" as="company">{company.name}</f:for> {job.company.name}
<br> <br>
{job.contact.firstName} {job.contact.lastName}<br> {job.contact.firstName} {job.contact.lastName}<br>
<f:for each="{job.company}" as="company">{company.street}</f:for> {job.company.street}
<br> <br>
<f:for each="{job.company}" as="company">{company.city}</f:for> {job.company.city}
<br> <br>
{job.contact.email}<br> {job.contact.email}<br>
{job.contact.phone} {job.contact.phone}
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<f:form.hidden property="job" value="{job}" /> <f:form.hidden property="job" value="{job}" />
<f:form.hidden property="jobId" value="{job.jobId}" /> <f:form.hidden property="jobId" value="{job.jobId}" />
<f:form.hidden property="jobTitle" value="{job.title}" /> <f:form.hidden property="jobTitle" value="{job.title}" />
<f:form.hidden property="company" value="{job.company.uid}" />
</f:then> </f:then>
</f:if> </f:if>
<input type="hidden" name="tx_sgjobs_jobapplication[folderName]" value="{folderName}" /> <input type="hidden" name="tx_sgjobs_jobapplication[folderName]" value="{folderName}" />
...@@ -51,6 +52,24 @@ ...@@ -51,6 +52,24 @@
</ul> </ul>
</f:if> </f:if>
<f:if condition="!{job}">
<f:then>
<div class="form-group">
<label for="apply-company"><f:translate key="frontend.apply.company" /></label>
<f:form.select class="form-control" property="company" id="apply-company" multiple="0" size="1"
optionValueField="uid" optionLabelField="city" options="{companies}"
/>
<f:form.validationResults for="applyData.location">
<ul class="sg-jobs-validation-error parsley-errors-list filled">
<f:for each="{validationResults.errors}" as="error">
<li class="parsley-required">{error.message}</li>
</f:for>
</ul>
</f:form.validationResults>
</div>
</f:then>
</f:if>
<div class="form-group"> <div class="form-group">
<label for="apply-gender"><f:translate key="frontend.apply.gender" /></label> <label for="apply-gender"><f:translate key="frontend.apply.gender" /></label>
<f:form.select property="gender" id="apply-gender" class="form-control" options="{Male: '{f:translate(key: \'frontend.apply.gender.male\')}', Female: '{f:translate(key: \'frontend.apply.gender.female\')}'}" /> <f:form.select property="gender" id="apply-gender" class="form-control" options="{Male: '{f:translate(key: \'frontend.apply.gender.male\')}', Female: '{f:translate(key: \'frontend.apply.gender.female\')}'}" />
......
...@@ -58,6 +58,7 @@ CREATE TABLE tx_sgjobs_domain_model_company ( ...@@ -58,6 +58,7 @@ CREATE TABLE tx_sgjobs_domain_model_company (
street varchar(255) DEFAULT '' NOT NULL, street varchar(255) DEFAULT '' NOT NULL,
country varchar(255) DEFAULT '' NOT NULL, country varchar(255) DEFAULT '' NOT NULL,
description text DEFAULT '' NOT NULL, description text DEFAULT '' NOT NULL,
contact int(11) unsigned DEFAULT '0' NOT NULL,
-- TYPO3 fields -- TYPO3 fields
sorting int(11) unsigned DEFAULT '0' NOT NULL, sorting int(11) unsigned DEFAULT '0' NOT NULL,
...@@ -99,7 +100,7 @@ CREATE TABLE tx_sgjobs_domain_model_contact ( ...@@ -99,7 +100,7 @@ CREATE TABLE tx_sgjobs_domain_model_contact (
-- Custom fields -- Custom fields
first_name varchar(255) DEFAULT '' NOT NULL, first_name varchar(255) DEFAULT '' NOT NULL,
last_name varchar(255) DEFAULT '' NOT NULL, last_name varchar(255) DEFAULT '' NOT NULL,
company varchar(255) DEFAULT '' NOT NULL, company int(11) unsigned DEFAULT '0' NOT NULL,
city varchar(255) DEFAULT '' NOT NULL, city varchar(255) DEFAULT '' NOT NULL,
zip varchar(255) DEFAULT '' NOT NULL, zip varchar(255) DEFAULT '' NOT NULL,
email varchar(255) DEFAULT '' NOT NULL, email varchar(255) DEFAULT '' NOT NULL,
...@@ -147,6 +148,7 @@ CREATE TABLE tx_sgjobs_domain_model_job_application ( ...@@ -147,6 +148,7 @@ CREATE TABLE tx_sgjobs_domain_model_job_application (
job_id text DEFAULT '' NOT NULL, job_id text DEFAULT '' NOT NULL,
job int(11) unsigned DEFAULT '0' NOT NULL, job int(11) unsigned DEFAULT '0' NOT NULL,
job_title text DEFAULT '' NOT NULL, job_title text DEFAULT '' NOT NULL,
company text DEFAULT '' NOT NULL,
gender varchar(30) DEFAULT '' NOT NULL, gender varchar(30) DEFAULT '' NOT NULL,
first_name text DEFAULT '' NOT NULL, first_name text DEFAULT '' NOT NULL,
last_name text DEFAULT '' NOT NULL, last_name text DEFAULT '' NOT NULL,
......
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