Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SaveDownloadableOrderItemObserver.php
Go to the documentation of this file.
1 <?php
7 
10 
15 {
21  protected $_scopeConfig;
22 
26  protected $_purchasedFactory;
27 
31  protected $_productFactory;
32 
36  protected $_itemFactory;
37 
42 
46  protected $_itemsFactory;
47 
56  public function __construct(
57  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
58  \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
59  \Magento\Catalog\Model\ProductFactory $productFactory,
60  \Magento\Downloadable\Model\Link\Purchased\ItemFactory $itemFactory,
61  \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
62  \Magento\Framework\DataObject\Copy $objectCopyService
63  ) {
64  $this->_scopeConfig = $scopeConfig;
65  $this->_purchasedFactory = $purchasedFactory;
66  $this->_productFactory = $productFactory;
67  $this->_itemFactory = $itemFactory;
68  $this->_itemsFactory = $itemsFactory;
69  $this->_objectCopyService = $objectCopyService;
70  }
71 
80  public function execute(\Magento\Framework\Event\Observer $observer)
81  {
82  $orderItem = $observer->getEvent()->getItem();
83  if (!$orderItem->getId()) {
84  //order not saved in the database
85  return $this;
86  }
88  return $this;
89  }
90  $product = $orderItem->getProduct();
91  $purchasedLink = $this->_createPurchasedModel()->load($orderItem->getId(), 'order_item_id');
92  if ($purchasedLink->getId()) {
93  return $this;
94  }
95  if (!$product) {
96  $product = $this->_createProductModel()->setStoreId(
97  $orderItem->getOrder()->getStoreId()
98  )->load(
99  $orderItem->getProductId()
100  );
101  }
103  $links = $product->getTypeInstance()->getLinks($product);
104  if ($linkIds = $orderItem->getProductOptionByCode('links')) {
105  $linkPurchased = $this->_createPurchasedModel();
106  $this->_objectCopyService->copyFieldsetToTarget(
107  \downloadable_sales_copy_order::class,
108  'to_downloadable',
109  $orderItem->getOrder(),
110  $linkPurchased
111  );
112  $this->_objectCopyService->copyFieldsetToTarget(
113  \downloadable_sales_copy_order_item::class,
114  'to_downloadable',
115  $orderItem,
116  $linkPurchased
117  );
118  $linkSectionTitle = $product->getLinksTitle() ? $product
119  ->getLinksTitle() : $this
120  ->_scopeConfig
121  ->getValue(
122  \Magento\Downloadable\Model\Link::XML_PATH_LINKS_TITLE,
124  );
125  $linkPurchased->setLinkSectionTitle($linkSectionTitle)->save();
126  foreach ($linkIds as $linkId) {
127  if (isset($links[$linkId])) {
128  $linkPurchasedItem = $this->_createPurchasedItemModel()->setPurchasedId(
129  $linkPurchased->getId()
130  )->setOrderItemId(
131  $orderItem->getId()
132  );
133 
134  $this->_objectCopyService->copyFieldsetToTarget(
135  \downloadable_sales_copy_link::class,
136  'to_purchased',
137  $links[$linkId],
138  $linkPurchasedItem
139  );
140  $linkHash = strtr(
141  base64_encode(
142  microtime() . $linkPurchased->getId() . $orderItem->getId() . $product->getId()
143  ),
144  '+/=',
145  '-_,'
146  );
147  $numberOfDownloads = $links[$linkId]->getNumberOfDownloads() * $orderItem->getQtyOrdered();
148  $linkPurchasedItem->setLinkHash(
149  $linkHash
150  )->setNumberOfDownloadsBought(
151  $numberOfDownloads
152  )->setStatus(
153  \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_PENDING
154  )->setCreatedAt(
155  $orderItem->getCreatedAt()
156  )->setUpdatedAt(
157  $orderItem->getUpdatedAt()
158  )->save();
159  }
160  }
161  }
162  }
163 
164  return $this;
165  }
166 
170  protected function _createPurchasedModel()
171  {
172  return $this->_purchasedFactory->create();
173  }
174 
178  protected function _createProductModel()
179  {
180  return $this->_productFactory->create();
181  }
182 
186  protected function _createPurchasedItemModel()
187  {
188  return $this->_itemFactory->create();
189  }
190 
194  protected function _createItemsCollection()
195  {
196  return $this->_itemsFactory->create();
197  }
198 }
$orderItem
Definition: order.php:30
__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)