Inital commit
This commit is contained in:
@@ -12,9 +12,9 @@
|
||||
|
||||
namespace Thelia\Files;
|
||||
|
||||
use Propel\Runtime\Connection\ConnectionInterface;
|
||||
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||
use Thelia\Core\Event\Document\DocumentCreateOrUpdateEvent;
|
||||
use Thelia\Core\Event\Image\ImageCreateOrUpdateEvent;
|
||||
use Thelia\Core\Event\File\FileCreateOrUpdateEvent;
|
||||
use Thelia\Exception\FileException;
|
||||
use Thelia\Exception\ImageException;
|
||||
|
||||
@@ -34,33 +34,34 @@ class FileManager
|
||||
*
|
||||
* @param array $supportedFileModels The key should have form type.parent, where type is the file type (document or image) and parent is the parent object of the file, form example product, brand, folder, etc.
|
||||
*/
|
||||
public function __construct($supportedFileModels) {
|
||||
|
||||
public function __construct($supportedFileModels)
|
||||
{
|
||||
$this->supportedFileModels = $supportedFileModels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the file type identifier, to access the related class in the supportedFileModels table.
|
||||
*
|
||||
* @param string $fileType the file type, e.g. document or image.
|
||||
* @param string $parentType the parent object type, e.g. product, folder, brand, etc.
|
||||
* @param string $fileType the file type, e.g. document or image.
|
||||
* @param string $parentType the parent object type, e.g. product, folder, brand, etc.
|
||||
* @return string
|
||||
*/
|
||||
protected function getFileTypeIdentifier($fileType, $parentType) {
|
||||
protected function getFileTypeIdentifier($fileType, $parentType)
|
||||
{
|
||||
return strtolower("$fileType.$parentType");
|
||||
}
|
||||
/**
|
||||
* Create a new FileModelInterface instance, from the supportedFileModels table
|
||||
*
|
||||
* @param string $fileType the file type, such as document, image, etc.
|
||||
* @param string $fileType the file type, such as document, image, etc.
|
||||
* @param string $parentType the parent type, such as product, category, etc.
|
||||
*
|
||||
* @return FileModelInterface a file model interface instance
|
||||
*
|
||||
* @throws FileException if the file type is not supported, or if the class does not implements FileModelInterface
|
||||
*/
|
||||
public function getModelInstance($fileType, $parentType) {
|
||||
|
||||
public function getModelInstance($fileType, $parentType)
|
||||
{
|
||||
if (! isset($this->supportedFileModels[$this->getFileTypeIdentifier($fileType, $parentType)])) {
|
||||
throw new FileException(
|
||||
sprintf("Unsupported file type '%s' for parent type '%s'", $fileType, $parentType)
|
||||
@@ -73,8 +74,11 @@ class FileManager
|
||||
|
||||
if (! $instance instanceof FileModelInterface) {
|
||||
throw new FileException(
|
||||
sprintf("Wrong class type for file type '%s', parent type '%s'. Class '%s' should implements FileModelInterface",
|
||||
$fileType, $parentType, $className
|
||||
sprintf(
|
||||
"Wrong class type for file type '%s', parent type '%s'. Class '%s' should implements FileModelInterface",
|
||||
$fileType,
|
||||
$parentType,
|
||||
$className
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -85,11 +89,12 @@ class FileManager
|
||||
/**
|
||||
* A a new FileModelInterface class name to the supported class list.
|
||||
*
|
||||
* @param string $fileType the file type, such as document, image, etc.
|
||||
* @param string $parentType the parent type, such as Product, Category, etc.
|
||||
* @param string $fileType the file type, such as document, image, etc.
|
||||
* @param string $parentType the parent type, such as Product, Category, etc.
|
||||
* @param string $fullyQualifiedClassName the fully qualified class name
|
||||
*/
|
||||
public function addFileModel($fileType, $parentType, $fullyQualifiedClassName) {
|
||||
public function addFileModel($fileType, $parentType, $fullyQualifiedClassName)
|
||||
{
|
||||
$this->supportedFileModels[$this->getFileTypeIdentifier($fileType, $parentType)] = $fullyQualifiedClassName;
|
||||
}
|
||||
|
||||
@@ -97,17 +102,17 @@ class FileManager
|
||||
* Copy UploadedFile into the server storage directory
|
||||
*
|
||||
* @param FileModelInterface $model Model saved
|
||||
* @param UploadedFile $uploadedFile Ready to be uploaded file
|
||||
* @param UploadedFile $uploadedFile Ready to be uploaded file
|
||||
* @param ConnectionInterface $con current transaction with database
|
||||
*
|
||||
* @throws \Thelia\Exception\ImageException
|
||||
* @return UploadedFile
|
||||
* @return UploadedFile|null
|
||||
*/
|
||||
public function copyUploadedFile($model, $uploadedFile)
|
||||
public function copyUploadedFile(FileModelInterface $model, UploadedFile $uploadedFile, ConnectionInterface $con = null)
|
||||
{
|
||||
$newUploadedFile = null;
|
||||
|
||||
if ($uploadedFile !== null) {
|
||||
|
||||
$directory = $model->getUploadDir();
|
||||
|
||||
$fileName = $this->renameFile($model->getId(), $uploadedFile);
|
||||
@@ -115,7 +120,7 @@ class FileManager
|
||||
$newUploadedFile = $uploadedFile->move($directory, $fileName);
|
||||
$model->setFile($fileName);
|
||||
|
||||
if (!$model->save()) {
|
||||
if (!$model->save($con)) {
|
||||
throw new ImageException(
|
||||
sprintf(
|
||||
'Failed to update model after copy of uploaded file %s to %s',
|
||||
@@ -131,19 +136,18 @@ class FileManager
|
||||
/**
|
||||
* Save file into the database
|
||||
*
|
||||
* @param int $parentId the parent object ID
|
||||
* @param int $parentId the parent object ID
|
||||
* @param FileModelInterface $fileModel the file model object (image or document) to save.
|
||||
*
|
||||
* @return int number of modified rows in database
|
||||
*
|
||||
* @throws \Thelia\Exception\ImageException
|
||||
*/
|
||||
protected function saveFile($parentId, $fileModel)
|
||||
protected function saveFile($parentId, FileModelInterface $fileModel)
|
||||
{
|
||||
$nbModifiedLines = 0;
|
||||
|
||||
if ($fileModel->getFile() !== null) {
|
||||
|
||||
$fileModel->setParentId($parentId);
|
||||
|
||||
$nbModifiedLines = $fileModel->save();
|
||||
@@ -164,12 +168,12 @@ class FileManager
|
||||
/**
|
||||
* Save file into the database
|
||||
*
|
||||
* @param ImageCreateOrUpdateEvent $event the event
|
||||
* @param FileModelInterface $imageModel the file model object (image or document) to save.
|
||||
* @param FileCreateOrUpdateEvent $event the event
|
||||
* @param FileModelInterface $imageModel the file model object (image or document) to save.
|
||||
*
|
||||
* @return int number of modified rows in database
|
||||
*/
|
||||
public function saveImage($event, $imageModel)
|
||||
public function saveImage(FileCreateOrUpdateEvent $event, FileModelInterface $imageModel)
|
||||
{
|
||||
return $this->saveFile($event->getParentId(), $imageModel);
|
||||
}
|
||||
@@ -177,12 +181,12 @@ class FileManager
|
||||
/**
|
||||
* Save file into the database
|
||||
*
|
||||
* @param DocumentCreateOrUpdateEvent $event the event
|
||||
* @param FileModelInterface $documentModel the file model object (image or document) to save.
|
||||
* @param FileCreateOrUpdateEvent $event the event
|
||||
* @param FileModelInterface $documentModel the file model object (image or document) to save.
|
||||
*
|
||||
* @return int number of modified rows in database
|
||||
*/
|
||||
public function saveDocument($event, $documentModel)
|
||||
public function saveDocument(FileCreateOrUpdateEvent $event, FileModelInterface $documentModel)
|
||||
{
|
||||
return $this->saveFile($event->getParentId(), $documentModel);
|
||||
}
|
||||
@@ -208,7 +212,7 @@ class FileManager
|
||||
*
|
||||
* @param FileModelInterface $model File being deleted
|
||||
*/
|
||||
public function deleteFile($model)
|
||||
public function deleteFile(FileModelInterface $model)
|
||||
{
|
||||
$url = $model->getUploadDir() . DS . $model->getFile();
|
||||
|
||||
@@ -225,7 +229,7 @@ class FileManager
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function renameFile($modelId, $uploadedFile)
|
||||
public function renameFile($modelId, UploadedFile $uploadedFile)
|
||||
{
|
||||
$extension = $uploadedFile->getClientOriginalExtension();
|
||||
if (!empty($extension)) {
|
||||
|
||||
Reference in New Issue
Block a user