Newer
Older
<?php
namespace SGalinski\SgJobs\Controller;
/***************************************************************
* Copyright notice
*
* (c) sgalinski Internet Services (https://www.sgalinski.de)
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use SGalinski\SgJobs\Service\BackendService;
use SGalinski\SgMail\Service\MailTemplateService;
use TYPO3\CMS\Core\Exception;
use TYPO3\CMS\Core\Resource\DuplicationBehavior;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Core\Utility\File\ExtendedFileUtility;
/**
* The joblist plugin controller
*/
class JoblistController extends ActionController {
/**
* @var \TYPO3\CMS\Extbase\Object\ObjectManager
* @inject
*/
protected $objectManager;
* @var \SGalinski\SgJobs\Domain\Repository\CompanyRepository
/**
* @var \SGalinski\SgJobs\Domain\Repository\JobRepository
* @inject
*/
private $jobRepository;
/**
* Show all job offers and options to manage them
*
* @return void
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
* @throws \InvalidArgumentException
*/
public function indexAction() {
$pageUid = (int) GeneralUtility::_GP('id');
$recordPageId = $this->configurationManager->getConfiguration(
\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK
)['persistence']['storagePid'];

Torsten Oppermann
committed
$this->assignFilterValues($recordPageId);
// get all jobs for the next root page
$jobs = $this->jobRepository->findJobs($recordPageId);
$this->view->assign('jobs', $jobs);
}
/**
* @param string $jobTitle
*/
public function applyFormAction($jobTitle = '') {
$this->view->assign('jobTitle', $jobTitle);
/**
* @param array $applyData
* @return void
* @throws \BadFunctionCallException
* @throws \TYPO3\CMS\Core\Resource\Exception\InsufficientFolderWritePermissionsException
* @throws \TYPO3\CMS\Core\Resource\Exception\InsufficientFolderAccessPermissionsException
* @throws \TYPO3\CMS\Core\Resource\Exception\ExistingTargetFolderException
* @throws \Exception
* @throws \InvalidArgumentException
*/
public function applyAction(array $applyData = []) {
$this->handleFileUpload('coverLetter');
$this->handleFileUpload('cv');
$this->handleFileUpload('certificates');
// get an instance of the mail service
/** @var MailTemplateService $mailService */
$mailService = $this->objectManager->get(
MailTemplateService::class, 'application_mail', 'sg_jobs', $this->getApplicationMailMarkers($applyData)
);
$mailService->setIgnoreMailQueue(TRUE);
$mailService->setToAddresses('torsten@sgalinski.de');
try {
$mailService->sendEmail();
} catch (Exception $exception) {

Torsten Oppermann
committed
/**
* @param int $rootPageId
*/
private function assignFilterValues($rootPageId) {

Torsten Oppermann
committed
// get all countries
$countries = $this->companyRepository->getAllCountries($rootPageId);
$this->view->assign('countries', $countries);
// get all cities
$cities = $this->companyRepository->getAllCities($rootPageId);
$this->view->assign('cities', $cities);
// get all cities
$companies = $this->companyRepository->getAllCompanyNames($rootPageId);
$this->view->assign('companies', $companies);
// get all areas
$areas = $this->jobRepository->getAllAreas($rootPageId);
$this->view->assign('areas', $areas);
// get all areas
$functions = $this->jobRepository->getAllFunctions($rootPageId);
$this->view->assign('functions', $functions);
}
/**
* @param array $applyData
* @return array
*/
private function getApplicationMailMarkers(array $applyData = []): array {
return [
'jobtitle' => $applyData['jobTitle'],
'salutation' => $applyData['salutation'],
'firstname' => $applyData['firstName'],
'lastname' => $applyData['lastName'],
'street' => $applyData['street'],
'city' => $applyData['city'],
'country' => $applyData['country'],
'phone' => $applyData['phone'],
'mobile' => $applyData['mobile'],
'email' => $applyData['email'],
'message' => $applyData['message']
];
/**
* Registers an uploaded file for TYPO3 native upload handling.
*
* @param array &$data
* @param string $namespace
* @param string $fieldName
* @param string $targetDirectory
* @return void
*/
private function registerUploadField(array &$data, $namespace, $fieldName, $targetDirectory = '1:/_temp_/') {
if (!isset($data['upload'])) {
$data['upload'] = [];
}
$counter = count($data['upload']) + 1;
$keys = array_keys($_FILES[$namespace]);
foreach ($keys as $key) {
$_FILES['upload_' . $counter][$key] = $_FILES[$namespace][$key]['applyData'][$fieldName];
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
}
$data['upload'][$counter] = [
'data' => $counter,
'target' => $targetDirectory,
];
}
/**
* @param string $fieldName
*/
private function handleFileUpload($fieldName = '') {
$data = [];
$namespace = key($_FILES);
$applicationId = md5(uniqid('sg', TRUE));
$resourceFactory = GeneralUtility::makeInstance(
ResourceFactory::class
);
$storage = $resourceFactory->getStorageObject(1);
if (!$storage->hasFolder('/Applications/' . $applicationId . '/')) {
$storage->createFolder('/Applications/' . $applicationId . '/');
}
$targetFalDirectory = '1:/Applications/' . $applicationId . '/';
// Register every upload field from the form:
$this->registerUploadField($data, $namespace, $fieldName, $targetFalDirectory);
// Initializing:
/** @var \TYPO3\CMS\Core\Utility\File\ExtendedFileUtility $fileProcessor */
$fileProcessor = GeneralUtility::makeInstance(
ExtendedFileUtility::class
);
$fileProcessor->setActionPermissions(['addFile' => TRUE]);
// Actual upload
$fileProcessor->start($data);
$fileProcessor->setExistingFilesConflictMode(DuplicationBehavior::CANCEL); // This was previously passed as empty string, why and from where? It breaks the upload if it's not set.
$result = $fileProcessor->processData();
// Do whatever you want with $result (array of File objects)
foreach ($result['upload'] as $files) {
/** @var \TYPO3\CMS\Core\Resource\File $file */
$file = $files[0]; // Single element array due to the way we registered upload fields
}
}