| Current Path : /home/rtorresani/www/vendor/magento/module-downloadable/Model/Link/ |
| Current File : //home/rtorresani/www/vendor/magento/module-downloadable/Model/Link/Builder.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Downloadable\Model\Link;
use Magento\Downloadable\Helper\File;
use Magento\Downloadable\Model\Link;
use Magento\Downloadable\Model\LinkFactory;
use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\DataObject\Copy;
/**
* Builder download link model for downloadable product
*
* @api
* @since 100.1.0
*/
class Builder
{
/**
* @var Link
*/
private $component;
/**
* @var File
*/
private $downloadableFile;
/**
* @var Copy
*/
private $objectCopyService;
/**
* @var DataObjectHelper
*/
private $dataObjectHelper;
/**
* @var LinkFactory
*/
private $componentFactory;
/**
* @var array
*/
private $data = [];
/**
* Mapper constructor.
*
* @param File $downloadableFile
* @param Copy $objectCopyService
* @param DataObjectHelper $dataObjectHelper
* @param LinkFactory $componentFactory
*/
public function __construct(
File $downloadableFile,
Copy $objectCopyService,
DataObjectHelper $dataObjectHelper,
LinkFactory $componentFactory
) {
$this->downloadableFile = $downloadableFile;
$this->objectCopyService = $objectCopyService;
$this->dataObjectHelper = $dataObjectHelper;
$this->componentFactory = $componentFactory;
}
/**
* Set Data.
*
* @param array $data
* @return $this
* @since 100.1.0
*/
public function setData(array $data)
{
$this->data = $data;
return $this;
}
/**
* Build correct data structure.
*
* @param \Magento\Downloadable\Api\Data\LinkInterface $link
* @return \Magento\Downloadable\Api\Data\LinkInterface
* @throws \Magento\Framework\Exception\LocalizedException
* @since 100.1.0
*/
public function build(\Magento\Downloadable\Api\Data\LinkInterface $link)
{
$downloadableData = $this->objectCopyService->getDataFromFieldset(
'downloadable_data',
'to_link',
$this->data
);
$this->dataObjectHelper->populateWithArray(
$link,
array_merge(
$this->data,
$downloadableData
),
\Magento\Downloadable\Api\Data\LinkInterface::class
);
if ($link->getLinkType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) {
if (!isset($this->data['file'])) {
throw new \Magento\Framework\Exception\LocalizedException(__('Link file not provided'));
}
$linkFileName = $this->downloadableFile->moveFileFromTmp(
$this->getComponent()->getBaseTmpPath(),
$this->getComponent()->getBasePath(),
$this->data['file']
);
$link->setLinkFile($linkFileName);
$link->setLinkUrl(null);
}
if (isset($this->data['sample'])) {
$link = $this->buildSample($link, $this->data['sample']);
}
if (!$link->getSortOrder()) {
$link->setSortOrder(1);
}
if (!is_numeric($link->getPrice())) {
$link->setPrice(0);
}
if (isset($this->data['is_unlimited']) && $this->data['is_unlimited']) {
$link->setNumberOfDownloads(0);
}
$useDefaultTitle = $this->data['use_default_title'] ?? false;
if ($useDefaultTitle) {
$link->setTitle(null);
}
$this->resetData();
return $link;
}
/**
* Reset data.
*
* @return void
*/
private function resetData()
{
$this->data = [];
}
/**
* Get existing component or create new.
*
* @return Link
*/
private function getComponent()
{
if (!$this->component) {
$this->component = $this->componentFactory->create();
}
return $this->component;
}
/**
* Build correct sample structure.
*
* @param \Magento\Downloadable\Api\Data\LinkInterface $link
* @param array $sample
* @return \Magento\Downloadable\Api\Data\LinkInterface
* @throws \Magento\Framework\Exception\LocalizedException
*/
private function buildSample(\Magento\Downloadable\Api\Data\LinkInterface $link, array $sample)
{
if (!empty($sample['url']) || !empty($sample['file'])) {
$downloadableLinkSampleData = $this->objectCopyService->getDataFromFieldset(
'downloadable_link_sample_data',
'to_link_sample',
$this->data['sample']
);
$this->dataObjectHelper->populateWithArray(
$link,
array_merge(
$this->data,
$downloadableLinkSampleData
),
\Magento\Downloadable\Api\Data\LinkInterface::class
);
if ($link->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE
&& isset($sample['file'])) {
$linkSampleFileName = $this->downloadableFile->moveFileFromTmp(
$this->getComponent()->getBaseSampleTmpPath(),
$this->getComponent()->getBaseSamplePath(),
$sample['file']
);
$link->setSampleFile($linkSampleFileName);
}
}
return $link;
}
}