12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- namespace Dotdigitalgroup\Email\Plugin;
- /**
- * Class ReportsProductCollection
- *
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- class ReportsProductCollectionPlugin
- {
- /**
- * @var \Magento\Reports\Model\Event\TypeFactory
- */
- private $eventTypeFactory;
- /**
- * ReportsProductCollection constructor.
- *
- * @param \Magento\Reports\Model\Event\TypeFactory $typeFactory
- */
- public function __construct(\Magento\Reports\Model\Event\TypeFactory $typeFactory)
- {
- $this->eventTypeFactory = $typeFactory;
- }
- /**
- * @param \Magento\Reports\Model\ResourceModel\Product\Collection $collection
- * @param callable $proceed
- * @param string $from
- * @param string $to
- *
- * @return \Magento\Reports\Model\ResourceModel\Product\Collection
- */
- public function aroundAddViewsCount(
- \Magento\Reports\Model\ResourceModel\Product\Collection $collection,
- callable $proceed,
- $from = '',
- $to = ''
- ) {
- /**
- * Getting event type id for catalog_product_view event
- */
- $eventTypes = $this->eventTypeFactory->create()->getCollection();
- foreach ($eventTypes as $eventType) {
- if ($eventType->getEventName() == 'catalog_product_view') {
- $productViewEvent = (int)$eventType->getId();
- break;
- }
- }
- $collection->getSelect()->reset()->from(
- ['report_table_views' => $collection->getTable('report_event')],
- ['views' => 'COUNT(report_table_views.event_id)']
- )->join(
- ['e' => $collection->getProductEntityTableName()],
- 'e.entity_id = report_table_views.object_id'
- )->where(
- 'report_table_views.event_type_id = ?',
- $productViewEvent
- )->group(
- 'e.entity_id'
- )->order(
- 'views ' . $collection::SORT_ORDER_DESC
- )->having(
- 'COUNT(report_table_views.event_id) > ?',
- 0
- );
- if ($from != '' && $to != '') {
- $collection->getSelect()->where('logged_at >= ?', $from)->where('logged_at <= ?', $to);
- }
-
- return $collection;
- }
- }
|