NewOrder.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Rss;
  7. use Magento\Framework\App\Rss\DataProviderInterface;
  8. /**
  9. * Class NewOrder
  10. * @package Magento\Sales\Model\Rss
  11. */
  12. class NewOrder implements DataProviderInterface
  13. {
  14. /**
  15. * @var \Magento\Sales\Model\OrderFactory
  16. */
  17. protected $orderFactory;
  18. /**
  19. * Url Builder
  20. *
  21. * @var \Magento\Framework\UrlInterface
  22. */
  23. protected $urlBuilder;
  24. /**
  25. * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
  26. */
  27. protected $localeDate;
  28. /**
  29. * @var \Magento\Framework\Stdlib\DateTime
  30. */
  31. protected $dateTime;
  32. /**
  33. * System event manager
  34. * @var \Magento\Framework\Event\ManagerInterface
  35. */
  36. protected $eventManager;
  37. /**
  38. * Parent layout of the block
  39. *
  40. * @var \Magento\Framework\View\LayoutInterface
  41. */
  42. protected $layout;
  43. /**
  44. * @var \Magento\Framework\App\Rss\UrlBuilderInterface
  45. */
  46. protected $rssUrlBuilder;
  47. /**
  48. * @param \Magento\Sales\Model\OrderFactory $orderFactory
  49. * @param \Magento\Framework\UrlInterface $urlBuilder
  50. * @param \Magento\Framework\App\Rss\UrlBuilderInterface $rssUrlBuilder
  51. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  52. * @param \Magento\Framework\Stdlib\DateTime $dateTime
  53. * @param \Magento\Framework\Event\ManagerInterface $eventManager
  54. * @param \Magento\Framework\View\LayoutInterface $layout
  55. */
  56. public function __construct(
  57. \Magento\Sales\Model\OrderFactory $orderFactory,
  58. \Magento\Framework\UrlInterface $urlBuilder,
  59. \Magento\Framework\App\Rss\UrlBuilderInterface $rssUrlBuilder,
  60. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  61. \Magento\Framework\Stdlib\DateTime $dateTime,
  62. \Magento\Framework\Event\ManagerInterface $eventManager,
  63. \Magento\Framework\View\LayoutInterface $layout
  64. ) {
  65. $this->orderFactory = $orderFactory;
  66. $this->urlBuilder = $urlBuilder;
  67. $this->localeDate = $localeDate;
  68. $this->dateTime = $dateTime;
  69. $this->eventManager = $eventManager;
  70. $this->layout = $layout;
  71. $this->rssUrlBuilder = $rssUrlBuilder;
  72. }
  73. /**
  74. * Check if RSS feed allowed
  75. *
  76. * @return mixed
  77. */
  78. public function isAllowed()
  79. {
  80. return true;
  81. }
  82. /**
  83. * Get RSS feed items
  84. *
  85. * @return array
  86. */
  87. public function getRssData()
  88. {
  89. $dateTime = new \DateTime('now', new \DateTimeZone('UTC'));
  90. $interval = new \DateInterval('P7D');
  91. $dateTime->sub($interval);
  92. $fromDate = $this->dateTime->formatDate($dateTime->getTimestamp());
  93. $newUrl = $this->rssUrlBuilder->getUrl(['_secure' => true, '_nosecret' => true, 'type' => 'new_order']);
  94. $title = __('New Orders');
  95. $data = ['title' => $title, 'description' => $title, 'link' => $newUrl, 'charset' => 'UTF-8'];
  96. /** @var $order \Magento\Sales\Model\Order */
  97. $order = $this->orderFactory->create();
  98. /** @var $collection \Magento\Sales\Model\ResourceModel\Order\Collection */
  99. $collection = $order->getResourceCollection();
  100. $collection->addAttributeToFilter('created_at', ['date' => true, 'from' => $fromDate])
  101. ->addAttributeToSort('created_at', 'desc');
  102. $this->eventManager->dispatch('rss_order_new_collection_select', ['collection' => $collection]);
  103. $detailBlock = $this->layout->getBlockSingleton(\Magento\Sales\Block\Adminhtml\Order\Details::class);
  104. foreach ($collection as $item) {
  105. $title = __('Order #%1 created at %2', $item->getIncrementId(), $this->localeDate->formatDate(
  106. $item->getCreatedAt()
  107. ));
  108. $url = $this->urlBuilder->getUrl(
  109. 'sales/order/view',
  110. ['_secure' => true, 'order_id' => $item->getId(), '_nosecret' => true]
  111. );
  112. $detailBlock->setOrder($item);
  113. $data['entries'][] = (['title' => $title, 'link' => $url, 'description' => $detailBlock->toHtml()]);
  114. }
  115. return $data;
  116. }
  117. /**
  118. * @return string
  119. */
  120. public function getCacheKey()
  121. {
  122. return 'rss_new_orders_data';
  123. }
  124. /**
  125. * @return int
  126. */
  127. public function getCacheLifetime()
  128. {
  129. return 60;
  130. }
  131. /**
  132. * @return array
  133. */
  134. public function getFeeds()
  135. {
  136. return [];
  137. }
  138. /**
  139. * {@inheritdoc}
  140. */
  141. public function isAuthRequired()
  142. {
  143. return true;
  144. }
  145. }