From 6128fd536603a73ff2b8f5ba5f6e5ebcd9b9710a Mon Sep 17 00:00:00 2001
From: Torsten Oppermann <torsten@sgalinski.de>
Date: Thu, 14 Dec 2017 18:37:39 +0100
Subject: [PATCH] [TASK] Using contact for email addreess, ts setting for
 default contact. General issues with the models

---
 Classes/Controller/JoblistController.php   | 25 ++++++++++++++++++++++
 Classes/Domain/Model/Job.php               |  8 +++----
 Classes/Domain/Model/JobApplication.php    |  9 ++++----
 Configuration/TypoScript/Frontend/setup.ts |  1 +
 Resources/Private/Partials/Job.html        | 10 ++++-----
 5 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php
index 598577ff..d21f63a3 100644
--- a/Classes/Controller/JoblistController.php
+++ b/Classes/Controller/JoblistController.php
@@ -26,6 +26,7 @@ namespace SGalinski\SgJobs\Controller;
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
+use SGalinski\SgJobs\Domain\Model\Contact;
 use SGalinski\SgJobs\Domain\Model\Job;
 use SGalinski\SgJobs\Domain\Model\JobApplication;
 use SGalinski\SgJobs\Property\TypeConverter\UploadedFileReferenceConverter;
@@ -55,6 +56,12 @@ class JoblistController extends ActionController {
 	 */
 	private $jobRepository;
 
+	/**
+	 * @var \SGalinski\SgJobs\Domain\Repository\ContactRepository
+	 * @inject
+	 */
+	private $contactRepository;
+
 	/**
 	 * @var \SGalinski\SgJobs\Domain\Repository\JobApplicationRepository
 	 * @inject
@@ -243,6 +250,24 @@ class JoblistController extends ActionController {
 				MailTemplateService::class, 'application_mail', 'sg_jobs',
 				$this->getApplicationMailMarkers($applyData)
 			);
+
+			// get email from the job contact, fallback is TS settings
+			/** @var Job $job */
+			$job = $applyData->getJob();
+
+			if ($job !== NULL) {
+				/** @var Contact $contact */
+				$contact = $job->getContact();
+				if ($contact === NULL) {
+					$contact = $this->contactRepository->findByUid((int) $this->settings['defaultContactId']);
+				}
+			} else {
+				$contact = $this->contactRepository->findByUid((int) $this->settings['defaultContactId']);
+			}
+
+			if ($contact !== NULL) {
+				$mailService->setToAddresses($contact->getEmail());
+			}
 			$mailService->setMarkers(['application' => $applyData]);
 			$mailService->setIgnoreMailQueue(TRUE);
 
diff --git a/Classes/Domain/Model/Job.php b/Classes/Domain/Model/Job.php
index 66fcc0a0..ae33b09a 100644
--- a/Classes/Domain/Model/Job.php
+++ b/Classes/Domain/Model/Job.php
@@ -79,7 +79,7 @@ class Job extends AbstractEntity {
 	protected $description = '';
 
 	/**
-	 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SGalinski\SgJobs\Domain\Model\Contact> $contact
+	 * @var \SGalinski\SgJobs\Domain\Model\Contact $contact
 	 */
 	protected $contact;
 
@@ -182,16 +182,16 @@ class Job extends AbstractEntity {
 	}
 
 	/**
-	 * @return ObjectStorage
+	 * @return \SGalinski\SgJobs\Domain\Model\Contact
 	 */
 	public function getContact() {
 		return $this->contact;
 	}
 
 	/**
-	 * @param ObjectStorage $contact
+	 * @param \SGalinski\SgJobs\Domain\Model\Contact $contact
 	 */
-	public function setContact(ObjectStorage $contact) {
+	public function setContact(Contact $contact) {
 		$this->contact = $contact;
 	}
 
diff --git a/Classes/Domain/Model/JobApplication.php b/Classes/Domain/Model/JobApplication.php
index 5898cce5..03c76e6e 100644
--- a/Classes/Domain/Model/JobApplication.php
+++ b/Classes/Domain/Model/JobApplication.php
@@ -27,6 +27,7 @@ namespace SGalinski\SgJobs\Domain\Model;
  ***************************************************************/
 
 use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
+use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy;
 use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
 
 /**
@@ -46,7 +47,7 @@ class JobApplication extends AbstractEntity {
 	protected $jobTitle = '';
 
 	/**
-	 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SGalinski\SgJobs\Domain\Model\Job> $job
+	 * @var \SGalinski\SgJobs\Domain\Model\Job $job
 	 */
 	protected $job;
 
@@ -417,16 +418,16 @@ class JobApplication extends AbstractEntity {
 	}
 
 	/**
-	 * @return ObjectStorage
+	 * @return \SGalinski\SgJobs\Domain\Model\Job
 	 */
 	public function getJob() {
 		return $this->job;
 	}
 
 	/**
-	 * @param ObjectStorage $job
+	 * @param \SGalinski\SgJobs\Domain\Model\Job $job
 	 */
-	public function setJob(ObjectStorage $job) {
+	public function setJob(Job $job) {
 		$this->job = $job;
 	}
 }
diff --git a/Configuration/TypoScript/Frontend/setup.ts b/Configuration/TypoScript/Frontend/setup.ts
index a47d96a2..8badd407 100644
--- a/Configuration/TypoScript/Frontend/setup.ts
+++ b/Configuration/TypoScript/Frontend/setup.ts
@@ -24,6 +24,7 @@ plugin.tx_sgjobs {
 	settings {
 		allowedFileExtensions = {$plugin.tx_sgjobs.settings.allowedFileExtensions}
 		allowedMimeTypes = {$plugin.tx_sgjobs.settings.allowedMimeTypes}
+		defaultContactId = 
 	}
 
 	features {
diff --git a/Resources/Private/Partials/Job.html b/Resources/Private/Partials/Job.html
index 5bd19031..89f7a039 100644
--- a/Resources/Private/Partials/Job.html
+++ b/Resources/Private/Partials/Job.html
@@ -81,21 +81,21 @@
 <div>
 	<h3><f:translate key="frontend.email" /></h3>
 	<p>
-		{job.contact.0.email}
+		{job.contact.email}
 	</p>
 </div>
-
+<f:debug>{job}</f:debug>
 <div>
 	<h3><f:translate key="frontend.apply_by_mail" /></h3>
 	{job.company.0.name}
 	<br />
-	{job.contact.0.firstName} {job.contact.0.lastName}
+	{job.contact.firstName} {job.contact.0.lastName}
 	<br />
 	{job.company.0.street}
 	<br />
 	{job.company.0.city}
 	<br />
-	{job.contact.0.email}
+	{job.contact.email}
 	<br />
-	{job.contact.0.phone}
+	{job.contact.phone}
 </div>
-- 
GitLab