/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param LinkInterface $link * @param bool $isGlobalScopeContent * @return mixed * @throws InputException * @throws NoSuchEntityException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function updateLink(\Magento\Catalog\Api\Data\ProductInterface $product, LinkInterface $link, $isGlobalScopeContent) { /** @var $existingLink \Magento\Downloadable\Model\Link */ $existingLink = $this->linkFactory->create()->load($link->getId()); if (!$existingLink->getId()) { throw new NoSuchEntityException(__('There is no downloadable link with provided ID.')); } if ($existingLink->getProductId() != $product->getId()) { throw new InputException(__('Provided downloadable link is not related to given product.')); } $validateLinkContent = $link->getLinkFileContent() === null ? false : true; $validateSampleContent = $link->getSampleFileContent() === null ? false : true; if (!$this->contentValidator->isValid($link, $validateLinkContent, $validateSampleContent)) { throw new InputException(__('Provided link information is invalid.')); } if ($isGlobalScopeContent) { $product->setStoreId(0); } $title = $link->getTitle(); if (empty($title)) { if ($isGlobalScopeContent) { throw new InputException(__('Link title cannot be empty.')); } } if ($link->getLinkType() == 'file' && $link->getLinkFileContent() === null) { $link->setLinkFile($existingLink->getLinkFile()); } if ($link->getSampleType() == 'file' && $link->getSampleFileContent() === null) { $link->setSampleFile($existingLink->getSampleFile()); } $this->saveLink($product, $link, $isGlobalScopeContent); return $existingLink->getId(); }
/** * Add Link File info into $linkData * * @param array $linkData * @param LinkInterface $link * @return array */ protected function addLinkFile(array $linkData, LinkInterface $link) { $linkFile = $link->getLinkFile(); if ($linkFile) { $file = $this->downloadableFile->getFilePath($this->linkModel->getBasePath(), $linkFile); if ($this->downloadableFile->ensureFileInFilesystem($file)) { $linkData['file'][0] = ['file' => $linkFile, 'name' => $this->downloadableFile->getFileFromPathFile($linkFile), 'size' => $this->downloadableFile->getFileSize($file), 'status' => 'old', 'url' => $this->urlBuilder->addSessionParam()->getUrl('adminhtml/downloadable_product_edit/link', ['id' => $link->getId(), 'type' => 'link', '_secure' => true])]; } } return $linkData; }