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
Tags 7.0.3
1 merge request!3Version 1 5
......@@ -156,12 +156,18 @@ class JoblistController extends ActionController {
$this->view->assign('folderName', $folderName);
$job = NULL;
if (!$uid !== NULL) {
/** @var Job $job */
$job = $this->jobRepository->findByUid($uid);
if ($job) {
$GLOBALS['TSFE']->page['titlebyextension'] = $job->getTitle();
$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);
}
......@@ -299,7 +305,10 @@ class JoblistController extends ActionController {
if ($contact !== NULL) {
$mailService->setToAddresses($contact->getEmail());
} else {
$mailService->setToAddresses($applyData->getCompany()->getContact()->getEmail());
}
$mailService->setMarkers(['application' => $applyData]);
$mailService->setIgnoreMailQueue(TRUE);
......
......@@ -57,6 +57,11 @@ class Company extends AbstractEntity {
*/
protected $description = '';
/**
* @var \SGalinski\SgJobs\Domain\Model\Contact $contact
*/
protected $contact;
/**
* @return string
*/
......@@ -126,4 +131,18 @@ class Company extends AbstractEntity {
public function setStreet(string $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 {
protected $startDate = 0;
/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SGalinski\SgJobs\Domain\Model\Company> $company
* @var \SGalinski\SgJobs\Domain\Model\Company $company
*/
protected $company = '';
......@@ -159,16 +159,16 @@ class Job extends AbstractEntity {
}
/**
* @return string
* @return Company
*/
public function getCompany() {
return $this->company;
}
/**
* @param ObjectStorage $company
* @param Company $company
*/
public function setCompany(ObjectStorage $company) {
public function setCompany(Company $company) {
$this->company = $company;
}
......
......@@ -46,6 +46,12 @@ class JobApplication extends AbstractEntity {
*/
protected $jobTitle = '';
/**
* @var \SGalinski\SgJobs\Domain\Model\Company $company
* @validate NotEmpty
*/
protected $company;
/**
* @var \SGalinski\SgJobs\Domain\Model\Job $job
*/
......@@ -430,4 +436,18 @@ class JobApplication extends AbstractEntity {
public function setJob(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 {
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 [
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE,
'searchFields' => 'city, country, description, name, street',
'searchFields' => 'city, country, description, name, street, contact',
'versioningWS' => 2,
'versioning_followPages' => TRUE,
'origUid' => 't3_origuid',
......@@ -26,12 +26,12 @@ return [
'Resources/Public/Icons/tx_sgjobs_domain_model_company.svg'
],
'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' => [
'1' => [
'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',
],
],
......@@ -167,5 +167,27 @@ return [
'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 = [
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'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,
'versioning_followPages' => TRUE,
'origUid' => 't3_origuid',
......@@ -30,12 +30,12 @@ $tx_sgjobs_domain_model_job_application = [
'Resources/Public/Icons/tx_sgjobs_domain_model_job.svg'
],
'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',
],
'types' => [
'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,
div;;richtext[*]:rte_transform[mode=ts],
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
......@@ -167,6 +167,28 @@ $tx_sgjobs_domain_model_job_application = [
'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' => [
'exclude' => 0,
'label' => 'LLL:EXT:sg_jobs/Resources/Private/Language/locallang_db.xlf:tx_sgjobs_domain_model_job_application.gender',
......
......@@ -202,6 +202,10 @@
<source>Last name *</source>
<target>Nachname *</target>
</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">
<source>Message</source>
<target>Ihre Nachricht</target>
......
......@@ -153,6 +153,9 @@
<trans-unit id="frontend.apply.last_name">
<source>Last name *</source>
</trans-unit>
<trans-unit id="frontend.apply.location">
<source>Location*</source>
</trans-unit>
<trans-unit id="frontend.apply.message">
<source>Message</source>
</trans-unit>
......
......@@ -31,14 +31,14 @@
<h3><f:translate key="frontend.location" /></h3>
<p>
{job.company.0.country} - {job.company.0.city}
{job.company.country} - {job.company.city}
</p>
<h3><f:translate key="frontend.area" /></h3>
<p>{job.area}</p>
<h3><f:translate key="frontend.organisation" /></h3>
<p>{job.company.0.name}</p>
<p>{job.company.name}</p>
<f:if condition="{job.task}">
<h3><f:translate key="frontend.task" /></h3>
......@@ -64,12 +64,12 @@
<f:if condition="{job.contact.email} && !{job.contact.hideInFrontend}">
<h3><f:translate key="frontend.apply_by_mail" /></h3>
<p>
<f:for each="{job.company}" as="company">{company.name}</f:for>
{job.company.name}
<br>
{job.contact.firstName} {job.contact.lastName}<br>
<f:for each="{job.company}" as="company">{company.street}</f:for>
{job.company.street}
<br>
<f:for each="{job.company}" as="company">{company.city}</f:for>
{job.company.city}
<br>
{job.contact.email}<br>
{job.contact.phone}
......
......@@ -21,6 +21,7 @@
<f:form.hidden property="job" value="{job}" />
<f:form.hidden property="jobId" value="{job.jobId}" />
<f:form.hidden property="jobTitle" value="{job.title}" />
<f:form.hidden property="company" value="{job.company.uid}" />
</f:then>
</f:if>
<input type="hidden" name="tx_sgjobs_jobapplication[folderName]" value="{folderName}" />
......@@ -51,6 +52,24 @@
</ul>
</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">
<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\')}'}" />
......
......@@ -58,6 +58,7 @@ CREATE TABLE tx_sgjobs_domain_model_company (
street varchar(255) DEFAULT '' NOT NULL,
country varchar(255) DEFAULT '' NOT NULL,
description text DEFAULT '' NOT NULL,
contact int(11) unsigned DEFAULT '0' NOT NULL,
-- TYPO3 fields
sorting int(11) unsigned DEFAULT '0' NOT NULL,
......@@ -99,7 +100,7 @@ CREATE TABLE tx_sgjobs_domain_model_contact (
-- Custom fields
first_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,
zip varchar(255) DEFAULT '' NOT NULL,
email varchar(255) DEFAULT '' NOT NULL,
......@@ -147,6 +148,7 @@ CREATE TABLE tx_sgjobs_domain_model_job_application (
job_id text DEFAULT '' NOT NULL,
job int(11) unsigned DEFAULT '0' NOT NULL,
job_title text DEFAULT '' NOT NULL,
company text DEFAULT '' NOT NULL,
gender varchar(30) DEFAULT '' NOT NULL,
first_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