123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace Dotdigitalgroup\Email\Block\Recommended;
- /**
- * Product block
- *
- * @api
- */
- class Product extends \Magento\Catalog\Block\Product\AbstractProduct
- {
- /**
- * @var \Dotdigitalgroup\Email\Helper\Data
- */
- public $helper;
- /**
- * @var \Dotdigitalgroup\Email\Helper\Recommended
- */
- public $recommendedHelper;
- /**
- * @var \Magento\Sales\Model\OrderFactory
- */
- public $orderFactory;
- /**
- * @var \Magento\Sales\Model\ResourceModel\Order
- */
- private $orderResource;
- /**
- * Product constructor.
- *
- * @param \Magento\Catalog\Block\Product\Context $context
- * @param \Magento\Sales\Model\ResourceModel\Order $orderResource
- * @param \Magento\Sales\Model\OrderFactory $orderFactory
- * @param \Dotdigitalgroup\Email\Helper\Recommended $recommended
- * @param \Dotdigitalgroup\Email\Helper\Data $helper
- * @param array $data
- */
- public function __construct(
- \Magento\Catalog\Block\Product\Context $context,
- \Magento\Sales\Model\ResourceModel\Order $orderResource,
- \Magento\Sales\Model\OrderFactory $orderFactory,
- \Dotdigitalgroup\Email\Helper\Recommended $recommended,
- \Dotdigitalgroup\Email\Helper\Data $helper,
- array $data = []
- ) {
- parent::__construct($context, $data);
- $this->orderFactory = $orderFactory;
- $this->recommendedHelper = $recommended;
- $this->helper = $helper;
- $this->orderResource = $orderResource;
- }
- /**
- * Get the products to display for recommendation.
- *
- * @return array
- */
- public function getLoadedProductCollection()
- {
- $params = $this->getRequest()->getParams();
- //check for param code and id
- if (! isset($params['order_id']) ||
- ! isset($params['code']) ||
- ! $this->helper->isCodeValid($params['code'])
- ) {
- $this->helper->log('Product recommendation for this order not found or invalid code');
- return [];
- }
- //products to be displayed for recommended pages
- $orderId = (int) $this->getRequest()->getParam('order_id');
- //display mode based on the action name
- $mode = $this->getRequest()->getActionName();
- $orderModel = $this->orderFactory->create();
- $this->orderResource->load($orderModel, $orderId);
- //number of product items to be displayed
- $limit = $this->recommendedHelper
- ->getDisplayLimitByMode($mode);
- $orderItems = $orderModel->getAllItems();
- $numItems = count($orderItems);
- //no product found to display
- if ($numItems == 0 || !$limit) {
- return [];
- } elseif ($numItems > $limit) {
- $maxPerChild = 1;
- } else {
- $maxPerChild = number_format($limit / $numItems);
- }
- $this->helper->log(
- 'DYNAMIC PRODUCTS : limit ' . $limit . ' products : '
- . $numItems . ', max per child : ' . $maxPerChild
- );
- $productsToDisplayCounter = 0;
- $productsToDisplay = $this->recommendedHelper->getProductsToDisplay(
- $orderItems,
- $mode,
- $productsToDisplayCounter,
- $limit,
- $maxPerChild
- );
- //check for more space to fill up the table with fallback products
- if ($productsToDisplayCounter < $limit) {
- $productsToDisplay = $this->recommendedHelper->fillProductsToDisplay(
- $productsToDisplay,
- $productsToDisplayCounter,
- $limit
- );
- }
- $this->helper->log('loaded product to display ' . count($productsToDisplay));
- return $productsToDisplay;
- }
- /**
- * Diplay mode type.
- *
- * @return mixed|string
- */
- public function getMode()
- {
- return $this->recommendedHelper->getDisplayType();
- }
- /**
- * Number of the columns.
- *
- * @return int|mixed
- */
- public function getColumnCount()
- {
- return $this->recommendedHelper->getDisplayLimitByMode(
- $this->getRequest()
- ->getActionName()
- );
- }
- /**
- * @param null|string|bool|int|\Magento\Store\Api\Data\StoreInterface $store
- *
- * @return string
- */
- public function getTextForUrl($store)
- {
- $store = $this->_storeManager->getStore($store);
- return $store->getConfig(
- \Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_DYNAMIC_CONTENT_LINK_TEXT
- );
- }
- }
|