Mostviewed.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Dotdigitalgroup\Email\Block\Recommended;
  3. /**
  4. * Most viewed block
  5. *
  6. * @api
  7. */
  8. class Mostviewed extends \Magento\Catalog\Block\Product\AbstractProduct
  9. {
  10. /**
  11. * @var \Dotdigitalgroup\Email\Helper\Data
  12. */
  13. public $helper;
  14. /**
  15. * @var \Magento\Framework\Pricing\Helper\Data
  16. */
  17. public $priceHelper;
  18. /**
  19. * @var \Dotdigitalgroup\Email\Helper\Recommended
  20. */
  21. public $recommnededHelper;
  22. /**
  23. * @var \Dotdigitalgroup\Email\Model\ResourceModel\CatalogFactory
  24. */
  25. public $catalog;
  26. /**
  27. * Mostviewed constructor.
  28. *
  29. * @param \Magento\Catalog\Block\Product\Context $context
  30. * @param \Dotdigitalgroup\Email\Helper\Data $helper
  31. * @param \Magento\Framework\Pricing\Helper\Data $priceHelper
  32. * @param \Dotdigitalgroup\Email\Model\ResourceModel\Catalog $catalog
  33. * @param \Dotdigitalgroup\Email\Helper\Recommended $recommended
  34. * @param array $data
  35. */
  36. public function __construct(
  37. \Magento\Catalog\Block\Product\Context $context,
  38. \Dotdigitalgroup\Email\Helper\Data $helper,
  39. \Magento\Framework\Pricing\Helper\Data $priceHelper,
  40. \Dotdigitalgroup\Email\Model\ResourceModel\Catalog $catalog,
  41. \Dotdigitalgroup\Email\Helper\Recommended $recommended,
  42. array $data = []
  43. ) {
  44. $this->catalog = $catalog;
  45. $this->helper = $helper;
  46. $this->recommnededHelper = $recommended;
  47. $this->priceHelper = $priceHelper;
  48. parent::__construct($context, $data);
  49. }
  50. /**
  51. * Get product collection.
  52. *
  53. * @return array
  54. */
  55. public function getLoadedProductCollection()
  56. {
  57. $params = $this->getRequest()->getParams();
  58. if (! isset($params['code']) || ! $this->helper->isCodeValid($params['code'])) {
  59. $this->helper->log('Most viewed no valid code is set');
  60. return [];
  61. }
  62. $productsToDisplay = [];
  63. $mode = $this->getRequest()->getActionName();
  64. $limit = $this->recommnededHelper->getDisplayLimitByMode($mode);
  65. $from = $this->recommnededHelper->getTimeFromConfig($mode);
  66. $to = $this->_localeDate->date()->format(\Zend_Date::ISO_8601);
  67. $catId = $this->getRequest()->getParam('category_id');
  68. $catName = $this->getRequest()->getParam('category_name');
  69. $reportProductCollection = $this->catalog->getMostViewedProductCollection($from, $to, $limit, $catId, $catName);
  70. //product ids from the report product collection
  71. $productIds = $reportProductCollection->getColumnValues('entity_id');
  72. $productCollection = $this->catalog->getProductCollectionFromIds($productIds);
  73. //product collection
  74. foreach ($productCollection as $_product) {
  75. //add only saleable products
  76. if ($_product->isSalable()) {
  77. $productsToDisplay[] = $_product;
  78. }
  79. }
  80. return $productsToDisplay;
  81. }
  82. /**
  83. * Display mode type.
  84. *
  85. * @return string|boolean
  86. */
  87. public function getMode()
  88. {
  89. return $this->recommnededHelper->getDisplayType();
  90. }
  91. /**
  92. * @param null|string|bool|int|\Magento\Store\Api\Data\StoreInterface $store
  93. *
  94. * @return string|boolean
  95. */
  96. public function getTextForUrl($store)
  97. {
  98. $store = $this->_storeManager->getStore($store);
  99. return $store->getConfig(
  100. \Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_DYNAMIC_CONTENT_LINK_TEXT
  101. );
  102. }
  103. }