Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
All Data Structures Namespaces Files Functions Variables Pages
SetLinkStatusObserver.php
Go to the documentation of this file.
1 <?php
7 
10 
12 {
18  protected $_scopeConfig;
19 
23  protected $_itemsFactory;
24 
29  public function __construct(
30  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
31  \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
32  ) {
33  $this->_scopeConfig = $scopeConfig;
34  $this->_itemsFactory = $itemsFactory;
35  }
36 
46  public function execute(\Magento\Framework\Event\Observer $observer)
47  {
48  $order = $observer->getEvent()->getOrder();
49 
50  if (!$order->getId()) {
51  //order not saved in the database
52  return $this;
53  }
54 
55  /* @var $order \Magento\Sales\Model\Order */
56  $status = '';
57  $linkStatuses = [
58  'pending' => \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_PENDING,
59  'expired' => \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_EXPIRED,
60  'avail' => \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_AVAILABLE,
61  'payment_pending' => \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_PENDING_PAYMENT,
62  'payment_review' => \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_PAYMENT_REVIEW,
63  ];
64 
65  $downloadableItemsStatuses = [];
66  $orderItemStatusToEnable = $this->_scopeConfig->getValue(
67  \Magento\Downloadable\Model\Link\Purchased\Item::XML_PATH_ORDER_ITEM_STATUS,
69  $order->getStoreId()
70  );
71 
73  $status = $linkStatuses['pending'];
74  } elseif ($order->isCanceled()
77  ) {
78  $expiredStatuses = [
79  \Magento\Sales\Model\Order\Item::STATUS_CANCELED,
80  \Magento\Sales\Model\Order\Item::STATUS_REFUNDED,
81  ];
82  foreach ($order->getAllItems() as $item) {
85  ) {
86  if ($order->isCanceled() || in_array($item->getStatusId(), $expiredStatuses)) {
87  $downloadableItemsStatuses[$item->getId()] = $linkStatuses['expired'];
88  } else {
89  $downloadableItemsStatuses[$item->getId()] = $linkStatuses['avail'];
90  }
91  }
92  }
94  $status = $linkStatuses['payment_pending'];
96  $status = $linkStatuses['payment_review'];
97  } else {
98  $availableStatuses = [$orderItemStatusToEnable, \Magento\Sales\Model\Order\Item::STATUS_INVOICED];
99  foreach ($order->getAllItems() as $item) {
102  ) {
103  if ($item->getStatusId() == \Magento\Sales\Model\Order\Item::STATUS_BACKORDERED
104  && $orderItemStatusToEnable == \Magento\Sales\Model\Order\Item::STATUS_PENDING
105  && !in_array(
106  \Magento\Sales\Model\Order\Item::STATUS_BACKORDERED,
107  $availableStatuses,
108  true
109  )
110  ) {
111  $availableStatuses[] = \Magento\Sales\Model\Order\Item::STATUS_BACKORDERED;
112  }
113 
114  if (in_array($item->getStatusId(), $availableStatuses)) {
115  $downloadableItemsStatuses[$item->getId()] = $linkStatuses['avail'];
116  }
117  }
118  }
119  }
120  if (!$downloadableItemsStatuses && $status) {
121  foreach ($order->getAllItems() as $item) {
124  ) {
125  $downloadableItemsStatuses[$item->getId()] = $status;
126  }
127  }
128  }
129 
130  if ($downloadableItemsStatuses) {
131  $linkPurchased = $this->_createItemsCollection()->addFieldToFilter(
132  'order_item_id',
133  ['in' => array_keys($downloadableItemsStatuses)]
134  );
135  foreach ($linkPurchased as $link) {
136  if ($link->getStatus() != $linkStatuses['expired']
137  && !empty($downloadableItemsStatuses[$link->getOrderItemId()])
138  ) {
139  $link->setStatus($downloadableItemsStatuses[$link->getOrderItemId()])->save();
140  }
141  }
142  }
143 
144  return $this;
145  }
146 
150  protected function _createItemsCollection()
151  {
152  return $this->_itemsFactory->create();
153  }
154 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$order
Definition: order.php:55
$status
Definition: order_status.php:8