|
@@ -5,8 +5,10 @@ namespace App\Service\Export;
|
|
|
|
|
|
|
|
use App\ApiResources\Export\ExportRequest;
|
|
use App\ApiResources\Export\ExportRequest;
|
|
|
use App\Entity\Core\File;
|
|
use App\Entity\Core\File;
|
|
|
|
|
+use App\Enum\Core\FileStatusEnum;
|
|
|
use App\Enum\Export\ExportFormatEnum;
|
|
use App\Enum\Export\ExportFormatEnum;
|
|
|
use App\Repository\Access\AccessRepository;
|
|
use App\Repository\Access\AccessRepository;
|
|
|
|
|
+use App\Repository\Core\FileRepository;
|
|
|
use App\Service\Export\Model\ExportModelInterface;
|
|
use App\Service\Export\Model\ExportModelInterface;
|
|
|
use App\Service\ServiceIterator\EncoderIterator;
|
|
use App\Service\ServiceIterator\EncoderIterator;
|
|
|
use App\Service\Storage\TemporaryFileStorage;
|
|
use App\Service\Storage\TemporaryFileStorage;
|
|
@@ -24,6 +26,7 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
{
|
|
{
|
|
|
// dependencies injections
|
|
// dependencies injections
|
|
|
protected AccessRepository $accessRepository;
|
|
protected AccessRepository $accessRepository;
|
|
|
|
|
+ protected FileRepository $fileRepository;
|
|
|
protected Environment $twig;
|
|
protected Environment $twig;
|
|
|
protected EncoderIterator $encoderIterator;
|
|
protected EncoderIterator $encoderIterator;
|
|
|
protected EntityManagerInterface $entityManager;
|
|
protected EntityManagerInterface $entityManager;
|
|
@@ -31,17 +34,26 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
protected LoggerInterface $logger;
|
|
protected LoggerInterface $logger;
|
|
|
|
|
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setAccessRepository(AccessRepository $accessRepository) { $this->accessRepository = $accessRepository; }
|
|
|
|
|
|
|
+ public function setAccessRepository(AccessRepository $accessRepository): void
|
|
|
|
|
+ { $this->accessRepository = $accessRepository; }
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setTwig(Environment $twig) { $this->twig = $twig; }
|
|
|
|
|
|
|
+ public function setFileRepository(FileRepository $fileRepository): void
|
|
|
|
|
+ { $this->fileRepository = $fileRepository; }
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setEncoderIterator(EncoderIterator $encoderIterator) { $this->encoderIterator = $encoderIterator; }
|
|
|
|
|
|
|
+ public function setTwig(Environment $twig): void
|
|
|
|
|
+ { $this->twig = $twig; }
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setEntityManager(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; }
|
|
|
|
|
|
|
+ public function setEncoderIterator(EncoderIterator $encoderIterator): void
|
|
|
|
|
+ { $this->encoderIterator = $encoderIterator; }
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setStorage(TemporaryFileStorage $storage) { $this->storage = $storage; }
|
|
|
|
|
|
|
+ public function setEntityManager(EntityManagerInterface $entityManager): void
|
|
|
|
|
+ { $this->entityManager = $entityManager; }
|
|
|
#[Required]
|
|
#[Required]
|
|
|
- public function setLogger(LoggerInterface $logger) { $this->logger = $logger; }
|
|
|
|
|
|
|
+ public function setStorage(TemporaryFileStorage $storage): void
|
|
|
|
|
+ { $this->storage = $storage; }
|
|
|
|
|
+ #[Required]
|
|
|
|
|
+ public function setLogger(LoggerInterface $logger): void
|
|
|
|
|
+ { $this->logger = $logger; }
|
|
|
|
|
|
|
|
public function support(ExportRequest $exportRequest): bool
|
|
public function support(ExportRequest $exportRequest): bool
|
|
|
{
|
|
{
|
|
@@ -75,26 +87,30 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
|
|
|
|
|
$path = $this->store($filename, $content);
|
|
$path = $this->store($filename, $content);
|
|
|
|
|
|
|
|
- // Met à jour l'enregistrement du fichier en base
|
|
|
|
|
- // <-- [refactoring] cette partie pourrait être faite en amont du service
|
|
|
|
|
- $file = new File();
|
|
|
|
|
-
|
|
|
|
|
- $requesterId = $exportRequest->getRequesterId();
|
|
|
|
|
- $organization = $this->accessRepository->find($requesterId)->getOrganization();
|
|
|
|
|
|
|
+ // Met à jour ou créé l'enregistrement du fichier en base
|
|
|
|
|
+ if ($exportRequest->getFileId() !== null) {
|
|
|
|
|
+ $file = $this->fileRepository->find($exportRequest->getFileId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $file = new File();
|
|
|
|
|
+
|
|
|
|
|
+ $requesterId = $exportRequest->getRequesterId();
|
|
|
|
|
+ $organization = $this->accessRepository->find($requesterId)?->getOrganization();
|
|
|
|
|
+ if ($organization === null) {
|
|
|
|
|
+ throw new \RuntimeException('Unable to determine the organization of the curent user; abort.');
|
|
|
|
|
+ }
|
|
|
|
|
+ $file->setOrganization($organization);
|
|
|
|
|
+ $file->setVisibility('NOBODY');
|
|
|
|
|
+ $file->setFolder('DOCUMENTS');
|
|
|
|
|
+ $file->setCreateDate(new \DateTime());
|
|
|
|
|
+ $file->setCreatedBy($requesterId);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- $file->setOrganization($organization);
|
|
|
|
|
- $file->setVisibility('NOBODY');
|
|
|
|
|
- $file->setFolder('DOCUMENTS');
|
|
|
|
|
- $file->setCreateDate(new \DateTime());
|
|
|
|
|
- $file->setCreatedBy($requesterId);
|
|
|
|
|
- // -->
|
|
|
|
|
- // <-- [refactoring] cette partie doit être faite après la création du fichier (storage ? service ?)
|
|
|
|
|
$file->setType($this->getFileType());
|
|
$file->setType($this->getFileType());
|
|
|
$file->setMimeType(ExportFormatEnum::getMimeType($exportRequest->getFormat()));
|
|
$file->setMimeType(ExportFormatEnum::getMimeType($exportRequest->getFormat()));
|
|
|
$file->setName($filename);
|
|
$file->setName($filename);
|
|
|
$file->setPath($path);
|
|
$file->setPath($path);
|
|
|
$file->setSlug($path);
|
|
$file->setSlug($path);
|
|
|
- // -->
|
|
|
|
|
|
|
+ $file->setStatus(FileStatusEnum::READY()->getValue());
|
|
|
|
|
|
|
|
$this->entityManager->persist($file);
|
|
$this->entityManager->persist($file);
|
|
|
$this->entityManager->flush();
|
|
$this->entityManager->flush();
|
|
@@ -112,7 +128,7 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
*/
|
|
*/
|
|
|
protected function buildModel(ExportRequest $exportRequest): ExportModelInterface
|
|
protected function buildModel(ExportRequest $exportRequest): ExportModelInterface
|
|
|
{
|
|
{
|
|
|
- throw new Exception('not implemented error');
|
|
|
|
|
|
|
+ throw new \RuntimeException('not implemented error');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -128,7 +144,7 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
$classname = end($arr);
|
|
$classname = end($arr);
|
|
|
return StringsUtils::camelToSnake(
|
|
return StringsUtils::camelToSnake(
|
|
|
preg_replace(
|
|
preg_replace(
|
|
|
- '/^([\w\d]+)Exporter$/',
|
|
|
|
|
|
|
+ '/^([\w]+)Exporter$/',
|
|
|
'$1',
|
|
'$1',
|
|
|
$classname,
|
|
$classname,
|
|
|
1)
|
|
1)
|
|
@@ -173,8 +189,7 @@ abstract class BaseExporter implements ExporterInterface
|
|
|
*/
|
|
*/
|
|
|
protected function encode(string $html, string $format): string
|
|
protected function encode(string $html, string $format): string
|
|
|
{
|
|
{
|
|
|
- $encoder = $this->encoderIterator->getEncoderFor($format);
|
|
|
|
|
- return $encoder->encode($html);
|
|
|
|
|
|
|
+ return $this->encoderIterator->getEncoderFor($format)->encode($html);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|