![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-downloadable/Observer/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Downloadable\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Store\Model\ScopeInterface; /** * Saves data from order to purchased links. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class SaveDownloadableOrderItemObserver implements ObserverInterface { /** * Core store config * * @var \Magento\Framework\App\Config\ScopeConfigInterface */ protected $_scopeConfig; /** * @var \Magento\Downloadable\Model\Link\PurchasedFactory */ protected $_purchasedFactory; /** * @var \Magento\Catalog\Model\ProductFactory */ protected $_productFactory; /** * @var \Magento\Downloadable\Model\Link\Purchased\ItemFactory */ protected $_itemFactory; /** * @var \Magento\Framework\DataObject\Copy */ protected $_objectCopyService; /** * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory */ protected $_itemsFactory; /** * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Downloadable\Model\Link\Purchased\ItemFactory $itemFactory * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory * @param \Magento\Framework\DataObject\Copy $objectCopyService */ public function __construct( \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Downloadable\Model\Link\Purchased\ItemFactory $itemFactory, \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory, \Magento\Framework\DataObject\Copy $objectCopyService ) { $this->_scopeConfig = $scopeConfig; $this->_purchasedFactory = $purchasedFactory; $this->_productFactory = $productFactory; $this->_itemFactory = $itemFactory; $this->_itemsFactory = $itemsFactory; $this->_objectCopyService = $objectCopyService; } /** * Save data from order to purchased links * * @param \Magento\Framework\DataObject $observer * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function execute(\Magento\Framework\Event\Observer $observer) { /** @var \Magento\Sales\Model\Order\Item $orderItem */ $orderItem = $observer->getEvent()->getItem(); if (!$orderItem->getId()) { //order not saved in the database return $this; } $productType = $orderItem->getRealProductType() ?: $orderItem->getProductType(); if ($productType !== \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) { return $this; } $product = $orderItem->getProduct(); $purchasedLink = $this->_createPurchasedModel()->load($orderItem->getId(), 'order_item_id'); if ($purchasedLink->getId()) { return $this; } $storeId = $orderItem->getOrder()->getStoreId(); $orderStatusToEnableItem = $this->_scopeConfig->getValue( \Magento\Downloadable\Model\Link\Purchased\Item::XML_PATH_ORDER_ITEM_STATUS, ScopeInterface::SCOPE_STORE, $storeId ); if (!$product) { $product = $this->_createProductModel()->setStoreId( $storeId )->load( $orderItem->getProductId() ); } if ($product->getTypeId() == \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) { $links = $product->getTypeInstance()->getLinks($product); if ($linkIds = $orderItem->getProductOptionByCode('links')) { $linkPurchased = $this->_createPurchasedModel(); $this->_objectCopyService->copyFieldsetToTarget( 'downloadable_sales_copy_order', 'to_downloadable', $orderItem->getOrder(), $linkPurchased ); $this->_objectCopyService->copyFieldsetToTarget( 'downloadable_sales_copy_order_item', 'to_downloadable', $orderItem, $linkPurchased ); $linkSectionTitle = $product->getLinksTitle() ? $product ->getLinksTitle() : $this ->_scopeConfig ->getValue( \Magento\Downloadable\Model\Link::XML_PATH_LINKS_TITLE, ScopeInterface::SCOPE_STORE ); $linkPurchased->setLinkSectionTitle($linkSectionTitle)->save(); $linkStatus = \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_PENDING; if ($orderStatusToEnableItem == \Magento\Sales\Model\Order\Item::STATUS_PENDING || $orderItem->getOrder()->getState() == \Magento\Sales\Model\Order::STATE_COMPLETE ) { $linkStatus = \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_AVAILABLE; } foreach ($linkIds as $linkId) { if (isset($links[$linkId])) { $linkPurchasedItem = $this->_createPurchasedItemModel()->setPurchasedId( $linkPurchased->getId() )->setOrderItemId( $orderItem->getId() ); $this->_objectCopyService->copyFieldsetToTarget( 'downloadable_sales_copy_link', 'to_purchased', $links[$linkId], $linkPurchasedItem ); $linkHash = strtr( base64_encode( microtime() . $linkPurchased->getId() . $orderItem->getId() . $product->getId() ), '+/=', '-_,' ); $numberOfDownloads = $links[$linkId]->getNumberOfDownloads() * $orderItem->getQtyOrdered(); $linkPurchasedItem->setLinkHash( $linkHash )->setNumberOfDownloadsBought( $numberOfDownloads )->setStatus( $linkStatus )->setCreatedAt( $orderItem->getCreatedAt() )->setUpdatedAt( $orderItem->getUpdatedAt() )->save(); } } } } return $this; } /** * Create purchased model. * * @return \Magento\Downloadable\Model\Link\Purchased */ protected function _createPurchasedModel() { return $this->_purchasedFactory->create(); } /** * Create product model. * * @return \Magento\Catalog\Model\Product */ protected function _createProductModel() { return $this->_productFactory->create(); } /** * Create purchased item model. * * @return \Magento\Downloadable\Model\Link\Purchased\Item */ protected function _createPurchasedItemModel() { return $this->_itemFactory->create(); } /** * Create items collection. * * @return \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection */ protected function _createItemsCollection() { return $this->_itemsFactory->create(); } }