Refactoring of images and documents management

This commit is contained in:
Franck Allimant
2014-06-26 10:36:12 +02:00
parent b49f8a6423
commit 114a55c1e8
33 changed files with 1795 additions and 2216 deletions

View File

@@ -12,6 +12,7 @@
namespace Thelia\Action;
use Thelia\Core\Event\CachedFileEvent;
use Thelia\Files\FileManager;
use Thelia\Tools\URL;
/**
@@ -32,6 +33,16 @@ use Thelia\Tools\URL;
*/
abstract class BaseCachedFile extends BaseAction
{
/**
* @var FileManager
*/
protected $fileManager;
public function __construct(FileManager $fileManager)
{
$this->fileManager = $fileManager;
}
/**
* @return string root of the file cache directory in web space
*/
@@ -60,6 +71,7 @@ abstract class BaseCachedFile extends BaseAction
{
$iterator = new \DirectoryIterator($path);
/** @var \DirectoryIterator $fileinfo */
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDot()) continue;
@@ -75,8 +87,8 @@ abstract class BaseCachedFile extends BaseAction
/**
* Return the absolute URL to the cached file
*
* @param string $subdir the subdirectory related to cache base
* @param string $filename the safe filename, as returned by getCacheFilePath()
* @param string $subdir the subdirectory related to cache base
* @param string $safe_filename the safe filename, as returned by getCacheFilePath()
* @return string the absolute URL to the cached file
*/
protected function getCacheFileURL($subdir, $safe_filename)
@@ -89,10 +101,10 @@ abstract class BaseCachedFile extends BaseAction
/**
* Return the full path of the cached file
*
* @param string $subdir the subdirectory related to cache base
* @param string $filename the filename
* @param string $hashed_options a hash of transformation options, or null if no transformations have been applied
* @param boolean $forceOriginalDocument if true, the original file path in the cache dir is returned.
* @param string $subdir the subdirectory related to cache base
* @param string $filename the filename
* @param boolean $forceOriginalFile if true, the original file path in the cache dir is returned.
* @param string $hashed_options a hash of transformation options, or null if no transformations have been applied
* @return string the cache directory path relative to Web Root
*/
protected function getCacheFilePath($subdir, $filename, $forceOriginalFile = false, $hashed_options = null)
@@ -132,9 +144,13 @@ abstract class BaseCachedFile extends BaseAction
/**
* Return the absolute cache directory path
*
* @param string $subdir the subdirectory related to cache base, or null to get the cache base directory.
* @throws \RuntimeException if cache directory cannot be created
* @return string the absolute cache directory path
* @param string $subdir the subdirectory related to cache base, or null to get the cache base directory.
* @param bool $create_if_not_exists create the directory if it is not found
*
* @throws \RuntimeException if cache directory cannot be created
* @throws \InvalidArgumentException ii path is invalid, e.g. not in the cache dir
*
* @return string the absolute cache directory path
*/
protected function getCachePath($subdir = null, $create_if_not_exists = true)
{

View File

@@ -12,19 +12,16 @@
namespace Thelia\Action;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Document\DocumentCreateOrUpdateEvent;
use Thelia\Core\Event\Document\DocumentDeleteEvent;
use Thelia\Core\Event\Document\DocumentEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\UpdateFilePositionEvent;
use Thelia\Exception\DocumentException;
use Thelia\Exception\ImageException;
use Thelia\Model\ConfigQuery;
use Thelia\Tools\FileManager;
use Thelia\Tools\URL;
use Thelia\Exception\DocumentException;
use Thelia\Core\Event\TheliaEvents;
/**
*
* Document management actions. This class handles document processing an caching.
@@ -71,7 +68,7 @@ class Document extends BaseCachedFile implements EventSubscriberInterface
*/
public function processDocument(DocumentEvent $event)
{
$subdir = $event->getCacheSubdirectory();
$subdir = $event->getCacheSubdirectory();
$sourceFile = $event->getSourceFilepath();
if (null == $subdir || null == $sourceFile) {
@@ -118,7 +115,6 @@ class Document extends BaseCachedFile implements EventSubscriberInterface
*/
public function saveDocument(DocumentCreateOrUpdateEvent $event)
{
$fileManager = new FileManager();
$model = $event->getModelDocument();
$nbModifiedLines = $model->save();
@@ -128,15 +124,15 @@ class Document extends BaseCachedFile implements EventSubscriberInterface
if (!$nbModifiedLines) {
throw new ImageException(
sprintf(
'Document "%s" with parent id %s (%s) failed to be saved',
'Document "%s" with parent id %s failed to be saved',
$event->getParentName(),
$event->getParentId(),
$event->getDocumentType()
$event->getParentId()
)
);
}
$newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getDocumentType(), $event->getModelDocument(), $event->getUploadedFile(), FileManager::FILE_TYPE_DOCUMENTS);
$newUploadedFile = $this->fileManager->copyUploadedFile($event->getModelDocument(), $event->getUploadedFile());
$event->setUploadedFile($newUploadedFile);
}
@@ -154,14 +150,15 @@ class Document extends BaseCachedFile implements EventSubscriberInterface
$event->getModelDocument()->setTitle($event->getUploadedFile()->getClientOriginalName());
}
$fileManager = new FileManager();
// Copy and save file
if ($event->getUploadedFile()) {
// Remove old picture file from file storage
$url = $fileManager->getUploadDir($event->getDocumentType(), FileManager::FILE_TYPE_DOCUMENTS) . '/' . $event->getOldModelDocument()->getFile();
$url = $event->getModelDocument()->getUploadDir() . '/' . $event->getOldModelDocument()->getFile();
unlink(str_replace('..', '', $url));
$newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getDocumentType(), $event->getModelDocument(), $event->getUploadedFile(), FileManager::FILE_TYPE_DOCUMENTS);
$newUploadedFile = $this->fileManager->copyUploadedFile($event->getModelDocument(), $event->getUploadedFile());
$event->setUploadedFile($newUploadedFile);
}
@@ -181,13 +178,10 @@ class Document extends BaseCachedFile implements EventSubscriberInterface
* @param \Thelia\Core\Event\Document\DocumentDeleteEvent $event Image event
*
* @throws \Exception
* @todo refactor make all documents using propel inheritance and factorise image behaviour into one single clean action
*/
public function deleteDocument(DocumentDeleteEvent $event)
{
$fileManager = new FileManager();
$fileManager->deleteFile($event->getDocumentToDelete(), $event->getDocumentType(), FileManager::FILE_TYPE_DOCUMENTS);
$this->fileManager->deleteFile($event->getDocumentToDelete());
}
public static function getSubscribedEvents()

View File

@@ -12,23 +12,20 @@
namespace Thelia\Action;
use Imagine\Image\Box;
use Imagine\Image\Color;
use Imagine\Image\ImageInterface;
use Imagine\Image\ImagineInterface;
use Imagine\Image\Point;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Image\ImageCreateOrUpdateEvent;
use Thelia\Core\Event\Image\ImageDeleteEvent;
use Thelia\Core\Event\Image\ImageEvent;
use Thelia\Core\Event\UpdateFilePositionEvent;
use Thelia\Model\ConfigQuery;
use Thelia\Tools\FileManager;
use Thelia\Tools\URL;
use Imagine\Image\ImagineInterface;
use Imagine\Image\ImageInterface;
use Imagine\Image\Box;
use Imagine\Image\Color;
use Imagine\Image\Point;
use Thelia\Exception\ImageException;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\UpdateFilePositionEvent;
use Thelia\Exception\ImageException;
use Thelia\Model\ConfigQuery;
use Thelia\Tools\URL;
/**
*
@@ -242,7 +239,6 @@ class Image extends BaseCachedFile implements EventSubscriberInterface
*/
public function saveImage(ImageCreateOrUpdateEvent $event)
{
$fileManager = new FileManager();
$model = $event->getModelImage();
$nbModifiedLines = $model->save();
@@ -251,15 +247,14 @@ class Image extends BaseCachedFile implements EventSubscriberInterface
if (!$nbModifiedLines) {
throw new ImageException(
sprintf(
'Image "%s" with parent id %s (%s) failed to be saved',
'Image "%s" with parent id %s failed to be saved',
$event->getParentName(),
$event->getParentId(),
$event->getImageType()
$event->getParentId()
)
);
}
$newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getImageType(), $event->getModelImage(), $event->getUploadedFile(), FileManager::FILE_TYPE_IMAGES);
$newUploadedFile = $this->fileManager->copyUploadedFile($event->getModelImage(), $event->getUploadedFile());
$event->setUploadedFile($newUploadedFile);
}
@@ -273,14 +268,13 @@ class Image extends BaseCachedFile implements EventSubscriberInterface
*/
public function updateImage(ImageCreateOrUpdateEvent $event)
{
$fileManager = new FileManager();
// Copy and save file
if ($event->getUploadedFile()) {
// Remove old picture file from file storage
$url = $fileManager->getUploadDir($event->getImageType(), FileManager::FILE_TYPE_IMAGES) . '/' . $event->getOldModelImage()->getFile();
$url = $event->getModelImage()->getUploadDir() . '/' . $event->getOldModelImage()->getFile();
unlink(str_replace('..', '', $url));
$newUploadedFile = $fileManager->copyUploadedFile($event->getParentId(), $event->getImageType(), $event->getModelImage(), $event->getUploadedFile(), FileManager::FILE_TYPE_IMAGES);
$newUploadedFile = $this->fileManager->copyUploadedFile($event->getModelImage(), $event->getUploadedFile());
$event->setUploadedFile($newUploadedFile);
}
@@ -304,9 +298,7 @@ class Image extends BaseCachedFile implements EventSubscriberInterface
*/
public function deleteImage(ImageDeleteEvent $event)
{
$fileManager = new FileManager();
$fileManager->deleteFile($event->getImageToDelete(), $event->getImageType(), FileManager::FILE_TYPE_IMAGES);
$this->fileManager->deleteFile($event->getImageToDelete());
}
/**