Skip to content
Snippets Groups Projects
Commit d0c52248 authored by Stefan Galinski's avatar Stefan Galinski :video_game:
Browse files

[TASK] More fixes related to the file handling

parent d1883a5c
No related branches found
No related tags found
No related merge requests found
...@@ -155,32 +155,31 @@ class JoblistController extends ActionController { ...@@ -155,32 +155,31 @@ class JoblistController extends ActionController {
$uniqueFolderName = $this->request->getArgument('folderName'); $uniqueFolderName = $this->request->getArgument('folderName');
} else { } else {
$uniqueFolderName = uniqid('sgjobs-', TRUE); $uniqueFolderName = uniqid('sgjobs-', TRUE);
$resourceFactory = $this->objectManager->get(ResourceFactory::class);
$storage = $resourceFactory->getStorageObject(1);
$storage->createFolder('/JobApplication/' . $uniqueFolderName);
} }
$this->request->setArgument('folderName', $uniqueFolderName);
$resourceFactory = $this->objectManager->get(ResourceFactory::class);
$storage = $resourceFactory->getStorageObject(1);
$storage->createFolder('/JobApplication/' . $uniqueFolderName . '/coverLetter');
$storage->createFolder('/JobApplication/' . $uniqueFolderName . '/cv');
$storage->createFolder('/JobApplication/' . $uniqueFolderName . '/certificate');
$propertyMappingConfiguration = $this->arguments->getArgument('applyData')->getPropertyMappingConfiguration(); $propertyMappingConfiguration = $this->arguments->getArgument('applyData')->getPropertyMappingConfiguration();
$typeConverter = $this->objectManager->get(UploadedFileReferenceConverter::class); $typeConverter1 = $this->objectManager->get(UploadedFileReferenceConverter::class);
$typeConverter->setAllowedFileExtensions($this->settings['allowedFileExtensions']); $typeConverter1->setAllowedFileExtensions($this->settings['allowedFileExtensions']);
$typeConverter->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/coverLetter'); $typeConverter1->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/');
$propertyMappingConfiguration->forProperty('coverLetter')->setTypeConverter($typeConverter); $typeConverter1->setTargetUploadFileName('coverLetter');
$propertyMappingConfiguration->forProperty('coverLetter')->setTypeConverter($typeConverter1);
$typeConverter = $this->objectManager->get(UploadedFileReferenceConverter::class);
$typeConverter->setAllowedFileExtensions($this->settings['allowedFileExtensions']); $typeConverter2 = $this->objectManager->get(UploadedFileReferenceConverter::class);
$typeConverter->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/cv'); $typeConverter2->setAllowedFileExtensions($this->settings['allowedFileExtensions']);
$propertyMappingConfiguration->forProperty('cv')->setTypeConverter($typeConverter); $typeConverter2->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/');
$typeConverter2->setTargetUploadFileName('cv');
$typeConverter = $this->objectManager->get(UploadedFileReferenceConverter::class); $propertyMappingConfiguration->forProperty('cv')->setTypeConverter($typeConverter2);
$typeConverter->setAllowedFileExtensions($this->settings['allowedFileExtensions']);
$typeConverter->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/certificate'); $typeConverter3 = $this->objectManager->get(UploadedFileReferenceConverter::class);
$propertyMappingConfiguration->forProperty('certificate')->setTypeConverter($typeConverter); $typeConverter3->setAllowedFileExtensions($this->settings['allowedFileExtensions']);
$typeConverter3->setUploadFolder('1:/JobApplication/' . $uniqueFolderName . '/');
$this->request->setArgument('folderName', $uniqueFolderName); $typeConverter3->setTargetUploadFileName('certificate');
$propertyMappingConfiguration->forProperty('certificate')->setTypeConverter($typeConverter3);
} }
/** /**
......
...@@ -105,6 +105,26 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { ...@@ -105,6 +105,26 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter {
*/ */
protected $convertedResources = []; protected $convertedResources = [];
/**
* @var string
*/
protected $targetUploadFileName = '';
/**
* @return string
*/
public function getTargetUploadFileName(): string {
return $this->targetUploadFileName;
}
/**
* @param string $targetUploadFileName
* @return void
*/
public function setTargetUploadFileName($targetUploadFileName) {
$this->targetUploadFileName = $targetUploadFileName;
}
/** /**
* @return string * @return string
*/ */
...@@ -239,8 +259,8 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { ...@@ -239,8 +259,8 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter {
} }
$allowedFileExtensions = $this->getAllowedFileExtensions(); $allowedFileExtensions = $this->getAllowedFileExtensions();
$filePathInfo = PathUtility::pathinfo($uploadInfo['name']);
if ($allowedFileExtensions !== NULL) { if ($allowedFileExtensions !== NULL) {
$filePathInfo = PathUtility::pathinfo($uploadInfo['name']);
if (!GeneralUtility::inList($allowedFileExtensions, strtolower($filePathInfo['extension']))) { if (!GeneralUtility::inList($allowedFileExtensions, strtolower($filePathInfo['extension']))) {
throw new TypeConverterException('File extension is not allowed!', 1399312430); throw new TypeConverterException('File extension is not allowed!', 1399312430);
} }
...@@ -250,6 +270,7 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter { ...@@ -250,6 +270,7 @@ class UploadedFileReferenceConverter extends AbstractTypeConverter {
$conflictMode = $this->getUploadConflictMode(); $conflictMode = $this->getUploadConflictMode();
$uploadFolder = $this->resourceFactory->retrieveFileOrFolderObject($uploadFolderId); $uploadFolder = $this->resourceFactory->retrieveFileOrFolderObject($uploadFolderId);
$uploadedFile = $uploadFolder->addUploadedFile($uploadInfo, $conflictMode); $uploadedFile = $uploadFolder->addUploadedFile($uploadInfo, $conflictMode);
$uploadedFile->rename($this->getTargetUploadFileName() . '.' . $filePathInfo['extension']);
$resourcePointer = isset($uploadInfo['submittedFile']['resourcePointer']) && $resourcePointer = isset($uploadInfo['submittedFile']['resourcePointer']) &&
strpos($uploadInfo['submittedFile']['resourcePointer'], 'file:') === FALSE strpos($uploadInfo['submittedFile']['resourcePointer'], 'file:') === FALSE
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
<f:section name="main"> <f:section name="main">
<f:form action="apply" controller="Joblist" method="post" name="applyData" object="{applyData}" enctype="multipart/form-data"> <f:form action="apply" controller="Joblist" method="post" name="applyData" object="{applyData}" enctype="multipart/form-data">
<f:form.hidden name="folderName" value="{folderName}" />
<f:if condition="{internalError}"> <f:if condition="{internalError}">
<div class="errormessage"> <div class="errormessage">
<f:translate key="frontend.apply.error.general" />: {internalError} <f:translate key="frontend.apply.error.general" />: {internalError}
...@@ -177,15 +179,15 @@ ...@@ -177,15 +179,15 @@
<p> <p>
<label for="apply-cover-letter"> <label for="apply-cover-letter">
<f:translate key="frontend.apply.cover_letter" /> <f:translate key="frontend.apply.cover_letter" />
<f:translate key="frontend.apply.allowed_file_extensions" />{allowedFileExtensions} (<f:translate key="frontend.apply.allowed_file_extensions" /> {allowedFileExtensions})
</label> </label>
<h:form.upload property="coverLetter" id="apply-cover-letter" additionalAttributes="{accept: '{allowedMimeTypes}'}" /> <h:form.upload property="coverLetter" id="apply-cover-letter" additionalAttributes="{accept: '{allowedMimeTypes}'}" />
<f:for each="{uploadedFiles.coverLetter}" as="file"> <f:if condition="{applyData.coverLetter.name}">
<div class="sg-jobs-uploaded-file"> <div class="sg-jobs-uploaded-file">
<span class="filename">{file.name}</span> <span class="filename">{applyData.coverLetter.name}</span> vorhanden
<a href="#" class="remove-file">(remove)</a>
</div> </div>
</f:for> </f:if>
<f:form.validationResults for="applyData.coverLetter"> <f:form.validationResults for="applyData.coverLetter">
<f:for each="{validationResults.errors}" as="error"> <f:for each="{validationResults.errors}" as="error">
...@@ -199,15 +201,16 @@ ...@@ -199,15 +201,16 @@
<p> <p>
<label for="apply-cv"> <label for="apply-cv">
<f:translate key="frontend.apply.cv" /> <f:translate key="frontend.apply.cv" />
<f:translate key="frontend.apply.allowed_file_extensions" />{allowedFileExtensions} (<f:translate key="frontend.apply.allowed_file_extensions" /> {allowedFileExtensions})
</label> </label>
<h:form.upload property="cv" id="apply-cv" additionalAttributes="{accept: '{allowedMimeTypes}'}" /> <h:form.upload property="cv" id="apply-cv" additionalAttributes="{accept: '{allowedMimeTypes}'}" />
<f:for each="{uploadedFiles.cv}" as="file"> <f:if condition="{applyData.cv.name}">
<div class="sg-jobs-uploaded-file"> <div class="sg-jobs-uploaded-file">
<span class="filename">{file.name}</span> <span class="filename">{applyData.cv.name}</span> vorhanden
<a href="#" class="remove-file">(remove)</a>
</div> </div>
</f:for> </f:if>
<f:form.validationResults for="applyData.cv"> <f:form.validationResults for="applyData.cv">
<f:for each="{validationResults.errors}" as="error"> <f:for each="{validationResults.errors}" as="error">
<div class="sg-jobs-validation-error"> <div class="sg-jobs-validation-error">
...@@ -220,15 +223,16 @@ ...@@ -220,15 +223,16 @@
<p> <p>
<label for="apply-certificate"> <label for="apply-certificate">
<f:translate key="frontend.apply.certificate" /> <f:translate key="frontend.apply.certificate" />
<f:translate key="frontend.apply.allowed_file_extensions" />{allowedFileExtensions} (<f:translate key="frontend.apply.allowed_file_extensions" /> {allowedFileExtensions})
</label> </label>
<h:form.upload property="certificate" id="apply-certificate" additionalAttributes="{accept: '{allowedMimeTypes}'}" /> <h:form.upload property="certificate" id="apply-certificate" additionalAttributes="{accept: '{allowedMimeTypes}'}" />
<f:for each="{uploadedFiles.certificate}" as="file"> <f:if condition="{applyData.certificate.name}">
<div class="sg-jobs-uploaded-file"> <div class="sg-jobs-uploaded-file">
<span class="filename">{file.name}</span> <span class="filename">{applyData.certificate.name}</span> vorhanden
<a href="#" class="remove-file">(remove)</a>
</div> </div>
</f:for> </f:if>
<f:form.validationResults for="applyData.certificate"> <f:form.validationResults for="applyData.certificate">
<f:for each="{validationResults.errors}" as="error"> <f:for each="{validationResults.errors}" as="error">
<div class="sg-jobs-validation-error"> <div class="sg-jobs-validation-error">
......
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