diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php index 3d0c07fb1a7e9938ce1f357d44ec21866e4919e1..c1a60fc1b6cf19cc19dea382c17e8ea814fc2fc5 100644 --- a/Classes/Controller/JoblistController.php +++ b/Classes/Controller/JoblistController.php @@ -164,17 +164,9 @@ class JoblistController extends ActionController { ->setTypeConverterOptions(UploadedFileReferenceConverter::class, $uploadConfiguration); $propertyMappingConfiguration->forProperty('cv') ->setTypeConverterOptions(UploadedFileReferenceConverter::class, $uploadConfiguration); - $propertyMappingConfiguration->forProperty('certificates') + $propertyMappingConfiguration->forProperty('certificates.0') ->setTypeConverterOptions(UploadedFileReferenceConverter::class, $uploadConfiguration); -// try { -// $this->handleFileUpload('coverLetter', $uniqueFolderName); -// $this->handleFileUpload('cv', $uniqueFolderName); -// $this->handleFileUpload('certificates', $uniqueFolderName); -// } catch (\Exception $exception) { -// $this->redirect('applyForm', NULL, NULL, ['error' => $exception->getMessage()]); -// } - $uploadedFiles = $this->getExistingApplicationFiles($uniqueFolderName); $this->request->setArgument('uploadedFiles', $uploadedFiles); $this->request->setArgument('folderName', $uniqueFolderName); diff --git a/Classes/Property/TypeConverter/UploadedFileReferenceConverter.php b/Classes/Property/TypeConverter/UploadedFileReferenceConverter.php index c3748b68e0478fabd5ca1ca2f868f1717fc97df1..d5def79e998da1854092d024859176711ce1cd91 100644 --- a/Classes/Property/TypeConverter/UploadedFileReferenceConverter.php +++ b/Classes/Property/TypeConverter/UploadedFileReferenceConverter.php @@ -108,14 +108,14 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { * Actually convert from $source to $targetType, taking into account the fully * built $convertedChildProperties and $configuration. * - * @param string|int $source + * @param array $source * @param string $targetType * @param array $convertedChildProperties * @param \TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationInterface $configuration + * @return null|\TYPO3\CMS\Core\Resource\FileInterface|FileReference|Error * @throws \TYPO3\CMS\Extbase\Security\Exception\InvalidHashException * @throws \TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationException * @throws \TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException - * @return \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder * @api * @throws \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException */ @@ -165,7 +165,9 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { } try { - $resource = $this->importUploadedResource($source, $configuration); + if ($configuration) { + $resource = $this->importUploadedResource($source, $configuration); + } } catch (\Exception $e) { return new Error($e->getMessage(), $e->getCode()); } @@ -184,7 +186,8 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { * @throws \TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationException * @throws \TYPO3\CMS\Extbase\Security\Exception\InvalidHashException */ - protected function importUploadedResource(array $uploadInfo, PropertyMappingConfigurationInterface $configuration) { + protected function importUploadedResource(array $uploadInfo, PropertyMappingConfigurationInterface $configuration + ): FileReference { if (!GeneralUtility::verifyFilenameAgainstDenyPattern($uploadInfo['name'])) { throw new TypeConverterException('Uploading files with PHP file extensions is not allowed!', 1399312430); } @@ -204,9 +207,7 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { $uploadFolderId = $configuration->getConfigurationValue( UploadedFileReferenceConverter::class, self::CONFIGURATION_UPLOAD_FOLDER ) ?: $this->defaultUploadFolder; - if (class_exists(DuplicationBehavior::class)) { - $defaultConflictMode = \TYPO3\CMS\Core\Resource\DuplicationBehavior::RENAME; - } + $defaultConflictMode = DuplicationBehavior::RENAME; $conflictMode = $configuration->getConfigurationValue( UploadedFileReferenceConverter::class, self::CONFIGURATION_UPLOAD_CONFLICT_MODE @@ -230,7 +231,8 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { * @param int $resourcePointer * @return \SGalinski\SgJobs\Domain\Model\FileReference */ - protected function createFileReferenceFromFalFileObject(FalFile $file, $resourcePointer = NULL) { + protected function createFileReferenceFromFalFileObject(FalFile $file, $resourcePointer = NULL + ): \SGalinski\SgJobs\Domain\Model\FileReference { $fileReference = $this->resourceFactory->createFileReferenceObject( [ 'uid_local' => $file->getUid(), @@ -251,6 +253,7 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { FalFileReference $falFileReference, $resourcePointer = NULL ) { if ($resourcePointer === NULL) { + /** @var \SGalinski\SgJobs\Domain\Model\FileReference $fileReference */ $fileReference = $this->objectManager->get(FileReference::class); } else { $fileReference = $this->persistenceManager->getObjectByIdentifier( diff --git a/Resources/Private/Templates/Joblist/ApplyForm.html b/Resources/Private/Templates/Joblist/ApplyForm.html index 3d61413950c9c8fabbbd237c503dc121e1811e85..c9adeffd3ab913ae07b4720cef8401090ac350e9 100644 --- a/Resources/Private/Templates/Joblist/ApplyForm.html +++ b/Resources/Private/Templates/Joblist/ApplyForm.html @@ -164,7 +164,7 @@ <p> <label for="apply-email"><f:translate key="frontend.apply.email" /></label> - <f:form.textfield type="email" property="email" id="apply-email" data="{}" /> + <f:form.textfield type="email" property="email" id="apply-email" /> <f:form.validationResults for="applyData.email"> <f:for each="{validationResults.errors}" as="error"> <div class="sg-jobs-validation-error"> @@ -229,6 +229,13 @@ <a href="#" filetype="certificates" class="remove-file">(remove)</a> </div> </f:for> + <f:form.validationResults for="applyData.certificates"> + <f:for each="{validationResults.errors}" as="error"> + <div class="sg-jobs-validation-error"> + {error.message} + </div> + </f:for> + </f:form.validationResults> </p> <p> diff --git a/ext_typoscript_setup.txt b/ext_typoscript_setup.txt new file mode 100644 index 0000000000000000000000000000000000000000..9e7800a80c7448d6fb846e914e41e2a749cfd2b9 --- /dev/null +++ b/ext_typoscript_setup.txt @@ -0,0 +1,18 @@ +config.tx_extbase { + persistence { + classes { + SGalinski\SgJobs\Domain\Model\FileReference { + mapping { + tableName = sys_file_reference + columns { + uid_local.mapOnProperty = originalFileIdentifier + } + } + } + } + } + + objects { + TYPO3\CMS\Extbase\Domain\Model\FileReference.className = SGalinski\SgJobs\Domain\Model\FileReference + } +}