File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-review/Block/Adminhtml/Grid.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Review\Block\Adminhtml;
/**
* Adminhtml reviews grid
*
* @method int getProductId()
* @method Grid setProductId(int $productId)
* @method int getCustomerId()
* @method Grid setCustomerId(int $customerId)
* @method Grid setMassactionIdFieldOnlyIndexValue(bool $onlyIndex)
*/
class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
{
/**
* Review action pager
*
* @var \Magento\Review\Helper\Action\Pager
*/
protected $_reviewActionPager = null;
/**
* Review data
*
* @var \Magento\Review\Helper\Data
*/
protected $_reviewData = null;
/**
* Core registry
*
* @var \Magento\Framework\Registry
*/
protected $_coreRegistry = null;
/**
* Review collection model factory
*
* @var \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory
*/
protected $_productsFactory;
/**
* Review model factory
*
* @var \Magento\Review\Model\ReviewFactory
*/
protected $_reviewFactory;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Backend\Helper\Data $backendHelper
* @param \Magento\Review\Model\ReviewFactory $reviewFactory
* @param \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productsFactory
* @param \Magento\Review\Helper\Data $reviewData
* @param \Magento\Review\Helper\Action\Pager $reviewActionPager
* @param \Magento\Framework\Registry $coreRegistry
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Helper\Data $backendHelper,
\Magento\Review\Model\ReviewFactory $reviewFactory,
\Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productsFactory,
\Magento\Review\Helper\Data $reviewData,
\Magento\Review\Helper\Action\Pager $reviewActionPager,
\Magento\Framework\Registry $coreRegistry,
array $data = []
) {
$this->_productsFactory = $productsFactory;
$this->_coreRegistry = $coreRegistry;
$this->_reviewData = $reviewData;
$this->_reviewActionPager = $reviewActionPager;
$this->_reviewFactory = $reviewFactory;
parent::__construct($context, $backendHelper, $data);
}
/**
* Initialize grid
*
* @return void
*/
protected function _construct()
{
parent::_construct();
$this->setId('reviewGrid');
$this->setDefaultSort('created_at');
}
/**
* Save search results
*
* @return \Magento\Backend\Block\Widget\Grid
*/
protected function _afterLoadCollection()
{
/** @var $actionPager \Magento\Review\Helper\Action\Pager */
$actionPager = $this->_reviewActionPager;
$actionPager->setStorageId('reviews');
$actionPager->setItems($this->getCollection()->getResultingIds());
return parent::_afterLoadCollection();
}
/**
* @inheritDoc
*/
protected function _prepareCollection()
{
/** @var $model \Magento\Review\Model\Review */
$model = $this->_reviewFactory->create();
/** @var $collection \Magento\Review\Model\ResourceModel\Review\Product\Collection */
$collection = $this->_productsFactory->create();
if ($this->getProductId() || $this->getRequest()->getParam('productId', false)) {
$productId = $this->getProductId();
if (!$productId) {
$productId = $this->getRequest()->getParam('productId');
}
$this->setProductId($productId);
$collection->addEntityFilter($this->getProductId());
}
if ($this->getCustomerId() || $this->getRequest()->getParam('customerId', false)) {
$customerId = $this->getCustomerId();
if (!$customerId) {
$customerId = $this->getRequest()->getParam('customerId');
}
$this->setCustomerId($customerId);
$collection->addCustomerFilter($this->getCustomerId());
}
if ($this->_coreRegistry->registry('usePendingFilter') === true) {
$collection->addStatusFilter($model->getPendingStatus());
}
$collection->addStoreData();
$this->setCollection($collection);
return parent::_prepareCollection();
}
/**
* Prepare grid columns
*
* @return \Magento\Backend\Block\Widget\Grid
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
protected function _prepareColumns()
{
$this->addColumn(
'review_id',
[
'header' => __('ID'),
'filter_index' => 'rt.review_id',
'index' => 'review_id',
'header_css_class' => 'col-id',
'column_css_class' => 'col-id'
]
);
$this->addColumn(
'created_at',
[
'header' => __('Created'),
'type' => 'datetime',
'filter_index' => 'rt.created_at',
'index' => 'review_created_at',
'header_css_class' => 'col-date col-date-min-width',
'column_css_class' => 'col-date'
]
);
if (!$this->_coreRegistry->registry('usePendingFilter')) {
$this->addColumn(
'status',
[
'header' => __('Status'),
'type' => 'options',
'options' => $this->_reviewData->getReviewStatuses(),
'filter_index' => 'rt.status_id',
'index' => 'status_id'
]
);
}
$this->addColumn(
'title',
[
'header' => __('Title'),
'filter_index' => 'rdt.title',
'index' => 'title',
'type' => 'text',
'truncate' => 50,
'escape' => true
]
);
$this->addColumn(
'nickname',
[
'header' => __('Nickname'),
'filter_index' => 'rdt.nickname',
'index' => 'nickname',
'type' => 'text',
'truncate' => 50,
'escape' => true,
'header_css_class' => 'col-name',
'column_css_class' => 'col-name'
]
);
$this->addColumn(
'detail',
[
'header' => __('Review'),
'index' => 'detail',
'filter_index' => 'rdt.detail',
'type' => 'text',
'truncate' => 50,
'nl2br' => true,
'escape' => true
]
);
/**
* Check is single store mode
*/
if (!$this->_storeManager->isSingleStoreMode()) {
$this->addColumn(
'visible_in',
[
'header' => __('Visibility'),
'index' => 'stores',
'type' => 'store',
'store_view' => true,
'sortable' => false
]
);
}
$this->addColumn(
'type',
[
'header' => __('Type'),
'type' => 'select',
'index' => 'type',
'filter' => \Magento\Review\Block\Adminhtml\Grid\Filter\Type::class,
'renderer' => \Magento\Review\Block\Adminhtml\Grid\Renderer\Type::class
]
);
$this->addColumn(
'name',
['header' => __('Product'), 'type' => 'text', 'index' => 'name', 'escape' => true]
);
$this->addColumn(
'sku',
[
'header' => __('SKU'),
'type' => 'text',
'index' => 'sku',
'escape' => true
]
);
$this->addColumn(
'action',
[
'header' => __('Action'),
'type' => 'action',
'getter' => 'getReviewId',
'actions' => [
[
'caption' => __('Edit'),
'url' => [
'base' => 'review/product/edit',
'params' => [
'productId' => $this->getProductId(),
'customerId' => $this->getCustomerId(),
'ret' => $this->_coreRegistry->registry('usePendingFilter') ? 'pending' : null,
],
],
'field' => 'id',
],
],
'filter' => false,
'sortable' => false
]
);
$block = $this->getLayout()->getBlock('grid.bottom.links');
if ($block) {
$this->setChild('grid.bottom.links', $block);
}
return parent::_prepareColumns();
}
/**
* Prepare grid mass actions
*
* @return void
*/
protected function _prepareMassaction()
{
$this->setMassactionIdField('review_id');
$this->setMassactionIdFilter('rt.review_id');
$this->setMassactionIdFieldOnlyIndexValue(true);
$this->getMassactionBlock()->setFormFieldName('reviews');
$this->getMassactionBlock()->addItem(
'delete',
[
'label' => __('Delete'),
'url' => $this->getUrl(
'*/*/massDelete',
['ret' => $this->_coreRegistry->registry('usePendingFilter') ? 'pending' : 'index']
),
'confirm' => __('Are you sure?')
]
);
$statuses = $this->_reviewData->getReviewStatusesOptionArray();
array_unshift($statuses, ['label' => '', 'value' => '']);
$this->getMassactionBlock()->addItem(
'update_status',
[
'label' => __('Update Status'),
'url' => $this->getUrl(
'*/*/massUpdateStatus',
['ret' => $this->_coreRegistry->registry('usePendingFilter') ? 'pending' : 'index']
),
'additional' => [
'status' => [
'name' => 'status',
'type' => 'select',
'class' => 'required-entry',
'label' => __('Status'),
'values' => $statuses,
],
]
]
);
}
/**
* @inheritdoc
*/
protected function _prepareMassactionColumn()
{
parent::_prepareMassactionColumn();
/** needs for correct work of mass action select functionality */
$this->setMassactionIdField('rt.review_id');
return $this;
}
/**
* Get row url
*
* @param \Magento\Review\Model\Review|\Magento\Framework\DataObject $row
* @return string
*/
public function getRowUrl($row)
{
return $this->getUrl(
'review/product/edit',
[
'id' => $row->getReviewId(),
'productId' => $this->getProductId(),
'customerId' => $this->getCustomerId(),
'ret' => $this->_coreRegistry->registry('usePendingFilter') ? 'pending' : null
]
);
}
/**
* Get grid url
*
* @return string
*/
public function getGridUrl()
{
if ($this->getProductId() || $this->getCustomerId()) {
return $this->getUrl(
'review/product' . ($this->_coreRegistry->registry('usePendingFilter') ? 'pending' : ''),
['productId' => $this->getProductId(), 'customerId' => $this->getCustomerId()]
);
} else {
return $this->getCurrentUrl();
}
}
}