/** * Validate sample resource (file or URL) * * @param LinkInterface $link * @throws InputException * @return void */ protected function validateSampleResource(LinkInterface $link) { if ($link->getSampleType() == 'url' && !$this->urlValidator->isValid($link->getSampleUrl())) { throw new InputException(__('Sample URL must have valid format.')); } if ($link->getSampleType() == 'file' && (!$link->getSampleFileContent() || !$this->fileContentValidator->isValid($link->getSampleFileContent()))) { throw new InputException(__('Provided file content must be valid base64 encoded data.')); } }
/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param LinkInterface $link * @param bool $isGlobalScopeContent * @return int */ protected function saveLink(\Magento\Catalog\Api\Data\ProductInterface $product, LinkInterface $link, $isGlobalScopeContent) { $linkData = ['link_id' => $link->getid() === null ? 0 : $link->getid(), 'is_delete' => 0, 'type' => $link->getLinkType(), 'sort_order' => $link->getSortOrder(), 'title' => $link->getTitle(), 'price' => $link->getPrice(), 'number_of_downloads' => $link->getNumberOfDownloads(), 'is_shareable' => $link->getIsShareable()]; if ($link->getLinkType() == 'file' && $link->getLinkFile() === null) { $linkData['file'] = $this->jsonEncoder->encode([$this->fileContentUploader->upload($link->getLinkFileContent(), 'link_file')]); } elseif ($link->getLinkType() === 'url') { $linkData['link_url'] = $link->getLinkUrl(); } else { //existing link file $linkData['file'] = $this->jsonEncoder->encode([['file' => $link->getLinkFile(), 'status' => 'old']]); } if ($link->getSampleType() == 'file' && $link->getSampleFile() === null) { $linkData['sample']['type'] = 'file'; $linkData['sample']['file'] = $this->jsonEncoder->encode([$this->fileContentUploader->upload($link->getSampleFileContent(), 'link_sample_file')]); } elseif ($link->getSampleType() == 'url') { $linkData['sample']['type'] = 'url'; $linkData['sample']['url'] = $link->getSampleUrl(); } $downloadableData = ['link' => [$linkData]]; $product->setDownloadableData($downloadableData); if ($isGlobalScopeContent) { $product->setStoreId(0); } $this->downloadableType->save($product); return $product->getLastAddedLinkId(); }
/** * 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); } }