Skip to content
Snippets Groups Projects
Commit c1c13b10 authored by Vadim Justus's avatar Vadim Justus
Browse files

Implement logic for media file rollout

parent 0e8b8596
No related branches found
No related tags found
1 merge request!14Introduce logic for handling with media files
<?php
declare(strict_types=1);
namespace Firegento\ContentProvisioning\Api;
interface TargetMediaDirectoryPathProviderInterface
{
/**
* @return string
*/
public function get(): string;
}
......@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Firegento\ContentProvisioning\Model;
use Firegento\ContentProvisioning\Model\Command\ApplyBlockEntry;
use Firegento\ContentProvisioning\Model\Command\ApplyMediaFiles;
use Firegento\ContentProvisioning\Model\Query\GetBlockEntryList;
use Firegento\ContentProvisioning\Model\Validator\CanApplyBlockEntry;
use Psr\Log\LoggerInterface;
......@@ -30,22 +31,30 @@ class BlockInstaller
*/
private $applyBlockEntry;
/**
* @var ApplyMediaFiles
*/
private $applyMediaFiles;
/**
* @param LoggerInterface $logger
* @param GetBlockEntryList $getAllBlockEntries
* @param CanApplyBlockEntry $canApplyBlockEntry
* @param ApplyBlockEntry $applyBlockEntry
* @param ApplyMediaFiles $applyMediaFiles
*/
public function __construct(
LoggerInterface $logger,
GetBlockEntryList $getAllBlockEntries,
CanApplyBlockEntry $canApplyBlockEntry,
ApplyBlockEntry $applyBlockEntry
ApplyBlockEntry $applyBlockEntry,
ApplyMediaFiles $applyMediaFiles
) {
$this->logger = $logger;
$this->getAllBlockEntries = $getAllBlockEntries;
$this->canApplyBlockEntry = $canApplyBlockEntry;
$this->applyBlockEntry = $applyBlockEntry;
$this->applyMediaFiles = $applyMediaFiles;
}
/**
......@@ -59,6 +68,7 @@ class BlockInstaller
try {
if ($this->canApplyBlockEntry->execute($blockEntry)) {
$this->applyBlockEntry->execute($blockEntry);
$this->applyMediaFiles->execute($blockEntry);
}
} catch (\Exception $exception) {
$this->logger->error(sprintf(
......
......@@ -9,16 +9,9 @@ use Magento\Cms\Api\BlockRepositoryInterface;
use Magento\Cms\Api\Data\BlockInterface;
use Magento\Cms\Api\Data\BlockInterfaceFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Psr\Log\LoggerInterface;
class ApplyBlockEntry
{
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var BlockInterfaceFactory
*/
......@@ -40,20 +33,17 @@ class ApplyBlockEntry
private $normalizeData;
/**
* @param LoggerInterface $logger
* @param BlockInterfaceFactory $blockFactory
* @param GetFirstBlockByBlockEntry $getFirstBlockByBlockEntry
* @param BlockRepositoryInterface $blockRepository
* @param NormalizeData $normalizeData
*/
public function __construct(
LoggerInterface $logger,
BlockInterfaceFactory $blockFactory,
GetFirstBlockByBlockEntry $getFirstBlockByBlockEntry,
BlockRepositoryInterface $blockRepository,
NormalizeData $normalizeData
) {
$this->logger = $logger;
$this->blockFactory = $blockFactory;
$this->getFirstBlockByBlockEntry = $getFirstBlockByBlockEntry;
$this->blockRepository = $blockRepository;
......
<?php
declare(strict_types=1);
namespace Firegento\ContentProvisioning\Model\Command;
use Firegento\ContentProvisioning\Api\Data\EntryInterface;
use Firegento\ContentProvisioning\Api\TargetMediaDirectoryPathProviderInterface;
use SplFileInfo;
class ApplyMediaFiles
{
/**
* @var TargetMediaDirectoryPathProviderInterface
*/
private $targetMediaDirectoryPathProvider;
/**
* @param TargetMediaDirectoryPathProviderInterface $targetMediaDirectoryPathProvider
*/
public function __construct(
TargetMediaDirectoryPathProviderInterface $targetMediaDirectoryPathProvider
) {
$this->targetMediaDirectoryPathProvider = $targetMediaDirectoryPathProvider;
}
/**
* @param EntryInterface $entry
*/
public function execute(EntryInterface $entry): void
{
if ($entry[EntryInterface::MEDIA_DIRECTORY] === null) {
return;
}
$sourceDirPath = $entry[EntryInterface::MEDIA_DIRECTORY];
foreach ($entry[EntryInterface::MEDIA_FILES] as $fileName) {
$this->copyFile($sourceDirPath, $fileName);
}
}
/**
* @param string $sourceDirPath
* @param string $fileName
*/
private function copyFile(string $sourceDirPath, string $fileName): void
{
$targetDirPath = $this->targetMediaDirectoryPathProvider->get();
$sourcePathname = $sourceDirPath . DIRECTORY_SEPARATOR . $fileName;
$targetPathname = $targetDirPath . DIRECTORY_SEPARATOR . $fileName;
$sourceInfo = new SplFileInfo($sourcePathname);
if ($sourceInfo->isFile() && $sourceInfo->isReadable()) {
$this->createDirectory($targetDirPath, $sourceDirPath, $sourceInfo);
copy($sourceInfo->getRealPath(), $targetPathname);
}
}
/**
* @param string $targetDirPath
* @param string $sourceDirPath
* @param SplFileInfo $sourceInfo
*/
private function createDirectory(string $targetDirPath, string $sourceDirPath, SplFileInfo $sourceInfo): void
{
$subPath = str_replace($sourceDirPath, '', $sourceInfo->getPath());
$pathname = $targetDirPath . DIRECTORY_SEPARATOR . $subPath;
if (!is_dir($pathname)) {
mkdir($pathname, 0775, true);
}
}
}
......@@ -9,8 +9,6 @@ use Magento\Cms\Api\Data\PageInterface;
use Magento\Cms\Api\Data\PageInterfaceFactory;
use Magento\Cms\Api\PageRepositoryInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Psr\Log\LoggerInterface;
class ApplyPageEntry
{
......@@ -24,11 +22,6 @@ class ApplyPageEntry
*/
private $getFirstPageByPageEntry;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var PageRepositoryInterface
*/
......@@ -43,19 +36,16 @@ class ApplyPageEntry
* @param PageInterfaceFactory $pageFactory
* @param GetFirstPageByPageEntry $getFirstPageByPageEntry
* @param PageRepositoryInterface $pageRepository
* @param LoggerInterface $logger
* @param NormalizeData $normalizeData
*/
public function __construct(
PageInterfaceFactory $pageFactory,
GetFirstPageByPageEntry $getFirstPageByPageEntry,
PageRepositoryInterface $pageRepository,
LoggerInterface $logger,
NormalizeData $normalizeData
) {
$this->pageFactory = $pageFactory;
$this->getFirstPageByPageEntry = $getFirstPageByPageEntry;
$this->logger = $logger;
$this->pageRepository = $pageRepository;
$this->normalizeData = $normalizeData;
}
......
<?php
declare(strict_types=1);
namespace Firegento\ContentProvisioning\Model\Configuration;
use Firegento\ContentProvisioning\Api\TargetMediaDirectoryPathProviderInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Exception\FileSystemException;
class TargetMediaDirectoryPathProvider implements TargetMediaDirectoryPathProviderInterface
{
/**
* @var DirectoryList
*/
private $directoryList;
/**
* @param DirectoryList $directoryList
*/
public function __construct(
DirectoryList $directoryList
) {
$this->directoryList = $directoryList;
}
/**
* {@inheritdoc}
* @throws FileSystemException
*/
public function get(): string
{
return (string)$this->directoryList->getPath(DirectoryList::MEDIA);
}
}
......@@ -3,15 +3,19 @@ declare(strict_types=1);
namespace Firegento\ContentProvisioning\Model;
use Firegento\ContentProvisioning\Model\Command\ApplyMediaFiles;
use Firegento\ContentProvisioning\Model\Command\ApplyPageEntry;
use Firegento\ContentProvisioning\Model\Query\GetPageEntryList;
use Firegento\ContentProvisioning\Model\Validator\CanApplyPageEntry;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Psr\Log\LoggerInterface;
class PageInstaller
{
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var GetPageEntryList
*/
......@@ -28,26 +32,29 @@ class PageInstaller
private $canApplyPageEntry;
/**
* @var LoggerInterface
* @var ApplyMediaFiles
*/
private $logger;
private $applyMediaFiles;
/**
* @param LoggerInterface $logger
* @param GetPageEntryList $getAllPageEntries
* @param ApplyPageEntry $applyPageEntry
* @param CanApplyPageEntry $canApplyPageEntry
* @param LoggerInterface $logger
* @param ApplyMediaFiles $applyMediaFiles
*/
public function __construct(
LoggerInterface $logger,
GetPageEntryList $getAllPageEntries,
ApplyPageEntry $applyPageEntry,
CanApplyPageEntry $canApplyPageEntry,
LoggerInterface $logger
ApplyMediaFiles $applyMediaFiles
) {
$this->logger = $logger;
$this->getAllPageEntries = $getAllPageEntries;
$this->applyPageEntry = $applyPageEntry;
$this->canApplyPageEntry = $canApplyPageEntry;
$this->logger = $logger;
$this->applyMediaFiles = $applyMediaFiles;
}
/**
......@@ -61,6 +68,7 @@ class PageInstaller
try {
if ($this->canApplyPageEntry->execute($pageEntry)) {
$this->applyPageEntry->execute($pageEntry);
$this->applyMediaFiles->execute($pageEntry);
}
} catch (\Exception $exception) {
$this->logger->error(sprintf(
......
......@@ -4,6 +4,7 @@
<preference for="Firegento\ContentProvisioning\Api\StoreCodeResolverInterface" type="Firegento\ContentProvisioning\Model\Resolver\StoreCodeResolver" />
<preference for="Firegento\ContentProvisioning\Api\Data\PageEntryInterface" type="Firegento\ContentProvisioning\Model\PageEntry" />
<preference for="Firegento\ContentProvisioning\Api\Data\BlockEntryInterface" type="Firegento\ContentProvisioning\Model\BlockEntry" />
<preference for="Firegento\ContentProvisioning\Api\TargetMediaDirectoryPathProviderInterface" type="Firegento\ContentProvisioning\Model\Configuration\TargetMediaDirectoryPathProvider" />
<virtualType name="Firegento\ContentProvisioning\Virtual\Config\Parser\PageContentParser" type="Firegento\ContentProvisioning\Model\Config\Parser\ContentParser">
<arguments>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment