From 430e18e4e2e722aa7b7bde2c0f708e2ebb9640ab Mon Sep 17 00:00:00 2001 From: gmorel Date: Tue, 24 Sep 2013 12:25:19 +0200 Subject: [PATCH] Working : Add a link on documents --- core/lib/Thelia/Action/Document.php | 40 +++++++++---------- core/lib/Thelia/Action/Image.php | 9 ++--- core/lib/Thelia/Config/Resources/config.xml | 8 ++-- .../Thelia/Config/Resources/routing/admin.xml | 16 +++++--- .../Event/DocumentCreateOrUpdateEvent.php | 4 +- .../Thelia/Tests/Tools/FileManagerTest.php | 4 +- core/lib/Thelia/Tools/FileManager.php | 25 +++++++----- templates/admin/default/document-edit.html | 9 ++++- .../includes/document-upload-list-ajax.html | 4 +- 9 files changed, 67 insertions(+), 52 deletions(-) diff --git a/core/lib/Thelia/Action/Document.php b/core/lib/Thelia/Action/Document.php index 2a630be2f..228dea9f5 100644 --- a/core/lib/Thelia/Action/Document.php +++ b/core/lib/Thelia/Action/Document.php @@ -93,45 +93,48 @@ class Document extends BaseCachedFile implements EventSubscriberInterface * * This method updates the cache_file_path and file_url attributes of the event * - * @param DocumentEvent $event - * @throws \InvalidArgumentException, DocumentException + * @param DocumentEvent $event Event + * + * @throws \Thelia\Exception\DocumentException + * @throws \InvalidArgumentException , DocumentException */ public function processDocument(DocumentEvent $event) { $subdir = $event->getCacheSubdirectory(); - $source_file = $event->getSourceFilepath(); + $sourceFile = $event->getSourceFilepath(); - if (null == $subdir || null == $source_file) { + if (null == $subdir || null == $sourceFile) { throw new \InvalidArgumentException("Cache sub-directory and source file path cannot be null"); } - $originalDocumentPathInCache = $this->getCacheFilePath($subdir, $source_file, true); + $originalDocumentPathInCache = $this->getCacheFilePath($subdir, $sourceFile, true); if (! file_exists($originalDocumentPathInCache)) { - if (! file_exists($source_file)) { - throw new DocumentException(sprintf("Source document file %s does not exists.", $source_file)); + if (! file_exists($sourceFile)) { + throw new DocumentException(sprintf("Source document file %s does not exists.", $sourceFile)); } $mode = ConfigQuery::read('original_document_delivery_mode', 'symlink'); if ($mode == 'symlink') { - if (false == symlink($source_file, $originalDocumentPathInCache)) { - throw new DocumentException(sprintf("Failed to create symbolic link for %s in %s document cache directory", basename($source_file), $subdir)); + if (false == symlink($sourceFile, $originalDocumentPathInCache)) { + throw new DocumentException(sprintf("Failed to create symbolic link for %s in %s document cache directory", basename($sourceFile), $subdir)); } - } else {// mode = 'copy' - if (false == @copy($source_file, $originalDocumentPathInCache)) { - throw new DocumentException(sprintf("Failed to copy %s in %s document cache directory", basename($source_file), $subdir)); + } else { + // mode = 'copy' + if (false == @copy($sourceFile, $originalDocumentPathInCache)) { + throw new DocumentException(sprintf("Failed to copy %s in %s document cache directory", basename($sourceFile), $subdir)); } } } // Compute the document URL - $document_url = $this->getCacheFileURL($subdir, basename($originalDocumentPathInCache)); + $documentUrl = $this->getCacheFileURL($subdir, basename($originalDocumentPathInCache)); // Update the event with file path and file URL - $event->setDocumentPath($originalDocumentPathInCache); - $event->setDocumentUrl(URL::getInstance()->absoluteUrl($document_url, null, URL::PATH_TO_FILE)); + $event->setDocumentPath($documentUrl); + $event->setDocumentUrl(URL::getInstance()->absoluteUrl($documentUrl, null, URL::PATH_TO_FILE)); } /** @@ -173,7 +176,7 @@ class Document extends BaseCachedFile implements EventSubscriberInterface ); } - $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getDocumentType(), $event->getModelDocument(), $event->getUploadedFile()); + $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getDocumentType(), $event->getModelDocument(), $event->getUploadedFile(), FileManager::FILE_TYPE_DOCUMENTS); $event->setUploadedFile($newUploadedFile); } @@ -206,10 +209,7 @@ class Document extends BaseCachedFile implements EventSubscriberInterface $url = $fileManager->getUploadDir($event->getDocumentType(), FileManager::FILE_TYPE_DOCUMENTS) . '/' . $event->getOldModelDocument()->getFile(); unlink(str_replace('..', '', $url)); - $newUploadedFile = $fileManager->copyUploadedFile( - $event->getModelDocument()->getParentId(), - $event->getDocumentType(), - $event->getModelDocument(), $event->getUploadedFile()); + $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getDocumentType(), $event->getModelDocument(), $event->getUploadedFile(), FileManager::FILE_TYPE_DOCUMENTS); $event->setUploadedFile($newUploadedFile); } diff --git a/core/lib/Thelia/Action/Image.php b/core/lib/Thelia/Action/Image.php index da501eef1..9de87182b 100755 --- a/core/lib/Thelia/Action/Image.php +++ b/core/lib/Thelia/Action/Image.php @@ -291,7 +291,7 @@ class Image extends BaseCachedFile implements EventSubscriberInterface ); } - $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getImageType(), $event->getModelImage(), $event->getUploadedFile()); + $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getImageType(), $event->getModelImage(), $event->getUploadedFile(), FileManager::FILE_TYPE_IMAGES); $event->setUploadedFile($newUploadedFile); } @@ -321,13 +321,10 @@ class Image extends BaseCachedFile implements EventSubscriberInterface // Copy and save file if ($event->getUploadedFile()) { // Remove old picture file from file storage - $url = $fileManager->getUploadDir($event->getImageType()) . '/' . $event->getOldModelImage()->getFile(); + $url = $fileManager->getUploadDir($event->getImageType(), FileManager::FILE_TYPE_IMAGES) . '/' . $event->getOldModelImage()->getFile(); unlink(str_replace('..', '', $url)); - $newUploadedFile = $fileManager->copyUploadedFile( - $event->getModelImage()->getParentId(), - $event->getImageType(), - $event->getModelImage(), $event->getUploadedFile()); + $newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getImageType(), $event->getModelImage(), $event->getUploadedFile(), FileManager::FILE_TYPE_IMAGES); $event->setUploadedFile($newUploadedFile); } diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index e1f3f9920..2f06e9606 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -60,25 +60,25 @@
- + - + - + - + diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index ed8f21214..2fd666896 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -56,16 +56,18 @@ Thelia\Controller\Admin\FileController::viewImageAction - \d+ + .* + \d+ Thelia\Controller\Admin\FileController::updateImageAction - \d+ + .* + \d+ Thelia\Controller\Admin\FileController::deleteImageAction .* - \d+ + \d+ @@ -85,16 +87,18 @@ Thelia\Controller\Admin\FileController::viewDocumentAction - \d+ + .* + \d+ Thelia\Controller\Admin\FileController::updateDocumentAction - \d+ + .* + \d+ Thelia\Controller\Admin\FileController::deleteDocumentAction .* - \d+ + \d+ diff --git a/core/lib/Thelia/Core/Event/DocumentCreateOrUpdateEvent.php b/core/lib/Thelia/Core/Event/DocumentCreateOrUpdateEvent.php index f19f9b23b..81e52257e 100755 --- a/core/lib/Thelia/Core/Event/DocumentCreateOrUpdateEvent.php +++ b/core/lib/Thelia/Core/Event/DocumentCreateOrUpdateEvent.php @@ -69,7 +69,7 @@ class DocumentCreateOrUpdateEvent extends ActionEvent */ public function __construct($documentType, $parentId) { - $this->imageType = $documentType; + $this->documentType = $documentType; $this->parentId = $parentId; } @@ -106,7 +106,7 @@ class DocumentCreateOrUpdateEvent extends ActionEvent */ public function setDocumentType($documentType) { - $this->imageType = $documentType; + $this->documentType = $documentType; return $this; } diff --git a/core/lib/Thelia/Tests/Tools/FileManagerTest.php b/core/lib/Thelia/Tests/Tools/FileManagerTest.php index 80552c08c..c0060637f 100644 --- a/core/lib/Thelia/Tests/Tools/FileManagerTest.php +++ b/core/lib/Thelia/Tests/Tools/FileManagerTest.php @@ -93,7 +93,7 @@ class FileManagerTest extends \PHPUnit_Framework_TestCase { $newUploadedFiles = array(); - $actual = $fileManager->copyUploadedFile(24, FileManager::TYPE_PRODUCT, $stubProductImage, $stubUploadedFile, $newUploadedFiles); + $actual = $fileManager->copyUploadedFile(24, FileManager::TYPE_PRODUCT, $stubProductImage, $stubUploadedFile, $newUploadedFiles, FileManager::FILE_TYPE_IMAGES); $this->assertCount(1, $actual); } @@ -175,7 +175,7 @@ class FileManagerTest extends \PHPUnit_Framework_TestCase { $newUploadedFiles = array(); - $actual = $fileManager->copyUploadedFile(24, FileManager::TYPE_PRODUCT, $stubProductImage, $stubUploadedFile, $newUploadedFiles); + $actual = $fileManager->copyUploadedFile(24, FileManager::TYPE_PRODUCT, $stubProductImage, $stubUploadedFile, $newUploadedFiles, FileManager::FILE_TYPE_DOCUMENTS); } diff --git a/core/lib/Thelia/Tools/FileManager.php b/core/lib/Thelia/Tools/FileManager.php index 094af65e0..b1f2ed306 100644 --- a/core/lib/Thelia/Tools/FileManager.php +++ b/core/lib/Thelia/Tools/FileManager.php @@ -103,18 +103,19 @@ class FileManager * Copy UploadedFile into the server storage directory * * @param int $parentId Parent id - * @param string $fileType Image type + * @param string $parentType Image type * @param FolderImage|ContentImage|CategoryImage|ProductImage|FolderDocument|ContentDocument|CategoryDocument|ProductDocument $model Model saved * @param UploadedFile $uploadedFile Ready to be uploaded file + * @param string $fileType File type ex FileManager::FILE_TYPE_IMAGES * * @throws \Thelia\Exception\ImageException * @return UploadedFile */ - public function copyUploadedFile($parentId, $fileType, $model, $uploadedFile) + public function copyUploadedFile($parentId, $parentType, $model, $uploadedFile, $fileType) { $newUploadedFile = null; if ($uploadedFile !== null) { - $directory = $this->getUploadDir($fileType, FileManager::FILE_TYPE_IMAGES); + $directory = $this->getUploadDir($parentType, $fileType); $fileName = $this->renameFile($model->getId(), $uploadedFile); $this->adminLogAppend( @@ -125,7 +126,7 @@ class FileManager '%fileName%' => $uploadedFile->getClientOriginalName(), '%directory%' => $directory . '/' . $fileName, '%parentId%' => $parentId, - '%parentType%' => $fileType + '%parentType%' => $parentType ), 'image' ) @@ -137,8 +138,8 @@ class FileManager if (!$model->save()) { throw new ImageException( sprintf( - '*s %s (%s) failed to be saved (image file)', - ucfirst($fileType), + '%s %s (%s) failed to be saved (image file)', + ucfirst($parentType), $model->getFile(), $fileType ) @@ -629,11 +630,17 @@ class FileManager public function renameFile($modelId, $uploadedFile) { $extension = $uploadedFile->getClientOriginalExtension(); + if (!empty($extension)) { + $extension = '.' . strtolower($extension); + } $fileName = $this->sanitizeFileName( - str_replace('.' . $extension, '', $uploadedFile->getClientOriginalName()) . "-" . $modelId . "." . strtolower( - $extension - ) + str_replace( + $extension, + '', + $uploadedFile->getClientOriginalName() + ) . '-' . $modelId . $extension ); + return $fileName; } diff --git a/templates/admin/default/document-edit.html b/templates/admin/default/document-edit.html index 0039e7d29..934d20b44 100644 --- a/templates/admin/default/document-edit.html +++ b/templates/admin/default/document-edit.html @@ -5,7 +5,7 @@ {block name="check-permissions"}admin.document.edit{/block} {block name="main-content"} -
+
@@ -48,6 +48,13 @@
+
+
+ +

{$TITLE} +

+
+
{form_field form=$form field='file'}
diff --git a/templates/admin/default/includes/document-upload-list-ajax.html b/templates/admin/default/includes/document-upload-list-ajax.html index 6dabb7c70..1233e06a8 100644 --- a/templates/admin/default/includes/document-upload-list-ajax.html +++ b/templates/admin/default/includes/document-upload-list-ajax.html @@ -13,7 +13,7 @@ Parameters: {loop type="document" name="document" source="{$documentType}" order="manual-reverse" source_id="{$parentId}"} - {$TITLE} + {$TITLE}
@@ -28,4 +28,4 @@ Parameters: {/loop} -{/ifloop} \ No newline at end of file +{/ifloop}