/** * @param SampleInterface $sample * @return SampleInterface * @throws \Magento\Framework\Exception\LocalizedException */ public function build(SampleInterface $sample) { $downloadableData = $this->objectCopyService->getDataFromFieldset('downloadable_data', 'to_sample', $this->data); $this->dataObjectHelper->populateWithArray($sample, array_merge($this->data, $downloadableData), SampleInterface::class); if ($sample->getSampleType() === \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { if (!isset($this->data['file'])) { throw new \Magento\Framework\Exception\LocalizedException(__('Sample file not provided')); } $fileName = $this->downloadableFile->moveFileFromTmp($this->getComponent()->getBaseTmpPath(), $this->getComponent()->getBasePath(), $this->data['file']); $sample->setSampleFile($fileName); } if (!$sample->getSortOrder()) { $sample->setSortOrder(1); } $this->resetData(); return $sample; }
/** * Load file and set path to sample * * @param SampleInterface $sample * @return void */ protected function setFiles(SampleInterface $sample) { if ($sample->getSampleType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE && $sample->getFile()) { $sampleFileName = $this->downloadableFile->moveFileFromTmp($sample->getBaseTmpPath(), $sample->getBasePath(), $this->jsonHelper->jsonDecode($sample->getFile())); $sample->setSampleFile($sampleFileName); $sample->setSampleUrl(null); } }
/** * @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) { $linkSampleFileName = $this->downloadableFile->moveFileFromTmp($this->getComponent()->getBaseSampleTmpPath(), $this->getComponent()->getBaseSamplePath(), $sample['file']); $link->setSampleFile($linkSampleFileName); } } return $link; }
/** * Load files and set paths to link and sample of link * * @param LinkInterface $link * @return void */ protected function setFiles(LinkInterface $link) { if ($link->getSampleType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE && $link->getSampleFileData()) { $linkSampleFileName = $this->downloadableFile->moveFileFromTmp($link->getBaseSampleTmpPath(), $link->getBaseSamplePath(), $this->jsonHelper->jsonDecode($link->getSampleFileData())); $link->setSampleFile($linkSampleFileName); $link->setSampleUrl(null); } if ($link->getLinkType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE && $link->getFile()) { $linkFileName = $this->downloadableFile->moveFileFromTmp($link->getBaseTmpPath(), $link->getBasePath(), $this->jsonHelper->jsonDecode($link->getFile())); $link->setLinkFile($linkFileName); $link->setLinkUrl(null); } }
/** * Save Product downloadable information (links and samples) * * @param \Magento\Catalog\Model\Product $product * @return $this */ public function save($product) { parent::save($product); if ($data = $product->getDownloadableData()) { if (isset($data['sample'])) { $_deleteItems = array(); foreach ($data['sample'] as $sampleItem) { if ($sampleItem['is_delete'] == '1') { if ($sampleItem['sample_id']) { $_deleteItems[] = $sampleItem['sample_id']; } } else { unset($sampleItem['is_delete']); if (!$sampleItem['sample_id']) { unset($sampleItem['sample_id']); } $sampleModel = $this->_createSample(); $files = array(); if (isset($sampleItem['file'])) { $files = $this->_coreData->jsonDecode($sampleItem['file']); unset($sampleItem['file']); } $sampleModel->setData($sampleItem)->setSampleType($sampleItem['type'])->setProductId($product->getId())->setStoreId($product->getStoreId()); if ($sampleModel->getSampleType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { $sampleFileName = $this->_downloadableFile->moveFileFromTmp($sampleModel->getBaseTmpPath(), $sampleModel->getBasePath(), $files); $sampleModel->setSampleFile($sampleFileName); } $sampleModel->save(); $product->setLastAddedSampleId($sampleModel->getId()); } } if ($_deleteItems) { $this->_sampleResFactory->create()->deleteItems($_deleteItems); } } if (isset($data['link'])) { $_deleteItems = array(); foreach ($data['link'] as $linkItem) { if (isset($linkItem['is_delete']) && $linkItem['is_delete'] == '1') { if ($linkItem['link_id']) { $_deleteItems[] = $linkItem['link_id']; } } else { unset($linkItem['is_delete']); if (isset($linkItem['link_id']) && !$linkItem['link_id']) { unset($linkItem['link_id']); } $files = array(); if (isset($linkItem['file'])) { $files = $this->_coreData->jsonDecode($linkItem['file']); unset($linkItem['file']); } $sample = array(); if (isset($linkItem['sample'])) { $sample = $linkItem['sample']; unset($linkItem['sample']); } $linkModel = $this->_createLink()->setData($linkItem)->setLinkType($linkItem['type'])->setProductId($product->getId())->setStoreId($product->getStoreId())->setWebsiteId($product->getStore()->getWebsiteId())->setProductWebsiteIds($product->getWebsiteIds()); if (null === $linkModel->getPrice()) { $linkModel->setPrice(0); } if ($linkModel->getIsUnlimited()) { $linkModel->setNumberOfDownloads(0); } $sampleFile = array(); if ($sample && isset($sample['type'])) { if ($sample['type'] == 'url' && $sample['url'] != '') { $linkModel->setSampleUrl($sample['url']); } $linkModel->setSampleType($sample['type']); if (isset($sample['file'])) { $sampleFile = $this->_coreData->jsonDecode($sample['file']); } } if ($linkModel->getLinkType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { $linkFileName = $this->_downloadableFile->moveFileFromTmp($this->_createLink()->getBaseTmpPath(), $this->_createLink()->getBasePath(), $files); $linkModel->setLinkFile($linkFileName); } if ($linkModel->getSampleType() == \Magento\Downloadable\Helper\Download::LINK_TYPE_FILE) { $linkSampleFileName = $this->_downloadableFile->moveFileFromTmp($this->_createLink()->getBaseSampleTmpPath(), $this->_createLink()->getBaseSamplePath(), $sampleFile); $linkModel->setSampleFile($linkSampleFileName); } $linkModel->save(); $product->setLastAddedLinkId($linkModel->getId()); } } if ($_deleteItems) { $this->_linkResource->deleteItems($_deleteItems); } if ($product->getLinksPurchasedSeparately()) { $product->setIsCustomOptionChanged(); } } } return $this; }