Working : Add a link on documents
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -60,25 +60,25 @@
|
||||
<form name="thelia.admin.category.creation" class="Thelia\Form\CategoryCreationForm"/>
|
||||
<form name="thelia.admin.category.modification" class="Thelia\Form\CategoryModificationForm"/>
|
||||
<form name="thelia.admin.category.image.modification" class="Thelia\Form\CategoryImageModification"/>
|
||||
<form name="thelia.admin.category.image.modification" class="Thelia\Form\CategoryDocumentModification"/>
|
||||
<form name="thelia.admin.category.document.modification" class="Thelia\Form\CategoryDocumentModification"/>
|
||||
|
||||
<form name="thelia.admin.product.creation" class="Thelia\Form\ProductCreationForm"/>
|
||||
<form name="thelia.admin.product.modification" class="Thelia\Form\ProductModificationForm"/>
|
||||
<form name="thelia.admin.product.details.modification" class="Thelia\Form\ProductDetailsModificationForm"/>
|
||||
<form name="thelia.admin.product.image.modification" class="Thelia\Form\ProductImageModification"/>
|
||||
<form name="thelia.admin.product.image.modification" class="Thelia\Form\ProductDocumentModification"/>
|
||||
<form name="thelia.admin.product.document.modification" class="Thelia\Form\ProductDocumentModification"/>
|
||||
|
||||
<form name="thelia.admin.product.deletion" class="Thelia\Form\ProductModificationForm"/>
|
||||
|
||||
<form name="thelia.admin.folder.creation" class="Thelia\Form\FolderCreationForm"/>
|
||||
<form name="thelia.admin.folder.modification" class="Thelia\Form\FolderModificationForm"/>
|
||||
<form name="thelia.admin.folder.image.modification" class="Thelia\Form\FolderImageModification"/>
|
||||
<form name="thelia.admin.folder.image.modification" class="Thelia\Form\FolderDocumentModification"/>
|
||||
<form name="thelia.admin.folder.document.modification" class="Thelia\Form\FolderDocumentModification"/>
|
||||
|
||||
<form name="thelia.admin.content.creation" class="Thelia\Form\ContentCreationForm"/>
|
||||
<form name="thelia.admin.content.modification" class="Thelia\Form\ContentModificationForm"/>
|
||||
<form name="thelia.admin.content.image.modification" class="Thelia\Form\ContentImageModification"/>
|
||||
<form name="thelia.admin.content.image.modification" class="Thelia\Form\ContentDocumentModification"/>
|
||||
<form name="thelia.admin.content.document.modification" class="Thelia\Form\ContentDocumentModification"/>
|
||||
|
||||
<form name="thelia.cart.add" class="Thelia\Form\CartAdd"/>
|
||||
|
||||
|
||||
@@ -56,16 +56,18 @@
|
||||
</route>
|
||||
<route id="admin.image.update.view" path="/admin/image/type/{parentType}/{imageId}/update" methods="get">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::viewImageAction</default>
|
||||
<requirement key="customer_id">\d+</requirement>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="imageId">\d+</requirement>
|
||||
</route>
|
||||
<route id="admin.image.update.process" path="/admin/image/type/{parentType}/{imageId}/update" methods="post">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::updateImageAction</default>
|
||||
<requirement key="customer_id">\d+</requirement>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="imageId">\d+</requirement>
|
||||
</route>
|
||||
<route id="admin.image.delete" path="/admin/image/type/{parentType}/delete/{imageId}">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::deleteImageAction</default>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="parentId">\d+</requirement>
|
||||
<requirement key="imageId">\d+</requirement>
|
||||
</route>
|
||||
|
||||
<route id="admin.document.save-ajax" path="/admin/document/type/{parentType}/{parentId}/save-ajax">
|
||||
@@ -85,16 +87,18 @@
|
||||
</route>
|
||||
<route id="admin.document.update.view" path="/admin/document/type/{parentType}/{documentId}/update" methods="get">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::viewDocumentAction</default>
|
||||
<requirement key="customer_id">\d+</requirement>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="documentId">\d+</requirement>
|
||||
</route>
|
||||
<route id="admin.document.update.process" path="/admin/document/type/{parentType}/{documentId}/update" methods="post">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::updateDocumentAction</default>
|
||||
<requirement key="customer_id">\d+</requirement>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="documentId">\d+</requirement>
|
||||
</route>
|
||||
<route id="admin.document.delete" path="/admin/document/type/{parentType}/delete/{documentId}">
|
||||
<default key="_controller">Thelia\Controller\Admin\FileController::deleteDocumentAction</default>
|
||||
<requirement key="parentType">.*</requirement>
|
||||
<requirement key="parentId">\d+</requirement>
|
||||
<requirement key="documentId">\d+</requirement>
|
||||
</route>
|
||||
|
||||
<!-- Customer rule management -->
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{block name="check-permissions"}admin.document.edit{/block}
|
||||
|
||||
{block name="main-content"}
|
||||
<div class="documents edit-image">
|
||||
<div class="documents edit-document">
|
||||
|
||||
<div id="wrapper" class="container">
|
||||
|
||||
@@ -48,6 +48,13 @@
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label">{intl l="File"} : </label>
|
||||
<p><a href="{$DOCUMENT_PATH}" title="{$TITLE}" target="_blank">{$TITLE}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{form_field form=$form field='file'}
|
||||
<div class="form-group {if $error}has-error{/if}">
|
||||
|
||||
@@ -13,7 +13,7 @@ Parameters:
|
||||
{loop type="document" name="document" source="{$documentType}" order="manual-reverse" source_id="{$parentId}"}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{$DOCUMENT_URL}" title="{$TITLE}" class="">{$TITLE}</a>
|
||||
<a href="{$DOCUMENT_PATH}" title="{$TITLE}" class="" target="_blank">{$TITLE}</a>
|
||||
</td>
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
@@ -28,4 +28,4 @@ Parameters:
|
||||
</tr>
|
||||
{/loop}
|
||||
</table>
|
||||
{/ifloop}
|
||||
{/ifloop}
|
||||
|
||||
Reference in New Issue
Block a user