Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Review.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Review\Model;
7 
12 
28 {
34  protected $_eventPrefix = 'review';
35 
39  const CACHE_TAG = 'review_block';
40 
44  const ENTITY_PRODUCT_CODE = 'product';
45 
49  const ENTITY_CUSTOMER_CODE = 'customer';
50 
54  const ENTITY_CATEGORY_CODE = 'category';
55 
59  const STATUS_APPROVED = 1;
60 
64  const STATUS_PENDING = 2;
65 
70 
77 
83  protected $_statusFactory;
84 
90  protected $_summaryFactory;
91 
98 
104  protected $_reviewSummary;
105 
111  protected $_storeManager;
112 
118  protected $_urlModel;
119 
135  public function __construct(
136  \Magento\Framework\Model\Context $context,
137  \Magento\Framework\Registry $registry,
138  \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productFactory,
139  \Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory $statusFactory,
140  \Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory $summaryFactory,
141  \Magento\Review\Model\Review\SummaryFactory $summaryModFactory,
142  \Magento\Review\Model\Review\Summary $reviewSummary,
143  \Magento\Store\Model\StoreManagerInterface $storeManager,
144  \Magento\Framework\UrlInterface $urlModel,
145  \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
146  \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
147  array $data = []
148  ) {
149  $this->productCollectionFactory = $productFactory;
150  $this->_statusFactory = $statusFactory;
151  $this->_summaryFactory = $summaryFactory;
152  $this->_summaryModFactory = $summaryModFactory;
153  $this->_reviewSummary = $reviewSummary;
154  $this->_storeManager = $storeManager;
155  $this->_urlModel = $urlModel;
156  parent::__construct($context, $registry, $resource, $resourceCollection, $data);
157  }
158 
164  protected function _construct()
165  {
166  $this->_init(\Magento\Review\Model\ResourceModel\Review::class);
167  }
168 
174  public function getProductCollection()
175  {
176  return $this->productCollectionFactory->create();
177  }
178 
184  public function getStatusCollection()
185  {
186  return $this->_statusFactory->create();
187  }
188 
197  public function getTotalReviews($entityPkValue, $approvedOnly = false, $storeId = 0)
198  {
199  return $this->getResource()->getTotalReviews($entityPkValue, $approvedOnly, $storeId);
200  }
201 
207  public function aggregate()
208  {
209  $this->getResource()->aggregate($this);
210  return $this;
211  }
212 
220  public function getEntitySummary($product, $storeId = 0)
221  {
222  $summaryData = $this->_summaryModFactory->create()->setStoreId($storeId)->load($product->getId());
223  $summary = new \Magento\Framework\DataObject();
224  $summary->setData($summaryData->getData());
225  $product->setRatingSummary($summary);
226  }
227 
233  public function getPendingStatus()
234  {
235  return self::STATUS_PENDING;
236  }
237 
243  public function getReviewUrl()
244  {
245  return $this->_urlModel->getUrl('review/product/view', ['id' => $this->getReviewId()]);
246  }
247 
256  {
257  if ($storeId) {
258  $this->_urlModel->setScope($storeId);
259  }
260 
261  return $this->_urlModel->getUrl('catalog/product/view', ['id' => $productId]);
262  }
263 
269  public function validate()
270  {
271  $errors = [];
272 
273  if (!\Zend_Validate::is($this->getTitle(), 'NotEmpty')) {
274  $errors[] = __('Please enter a review summary.');
275  }
276 
277  if (!\Zend_Validate::is($this->getNickname(), 'NotEmpty')) {
278  $errors[] = __('Please enter a nickname.');
279  }
280 
281  if (!\Zend_Validate::is($this->getDetail(), 'NotEmpty')) {
282  $errors[] = __('Please enter a review.');
283  }
284 
285  if (empty($errors)) {
286  return true;
287  }
288  return $errors;
289  }
290 
296  public function afterDeleteCommit()
297  {
298  $this->getResource()->afterDeleteCommit($this);
299  return parent::afterDeleteCommit();
300  }
301 
308  public function appendSummary($collection)
309  {
310  $entityIds = [];
311  foreach ($collection->getItems() as $item) {
312  $entityIds[] = $item->getEntityId();
313  }
314 
315  if (sizeof($entityIds) == 0) {
316  return $this;
317  }
318 
319  $summaryData = $this->_summaryFactory->create()
320  ->addEntityFilter($entityIds)
321  ->addStoreFilter($this->_storeManager->getStore()->getId())
322  ->load();
323 
324  foreach ($collection->getItems() as $item) {
325  foreach ($summaryData as $summary) {
326  if ($summary->getEntityPkValue() == $item->getEntityId()) {
327  $item->setRatingSummary($summary);
328  }
329  }
330  }
331 
332  return $this;
333  }
334 
340  public function isApproved()
341  {
342  return $this->getStatusId() == self::STATUS_APPROVED;
343  }
344 
351  public function isAvailableOnStore($store = null)
352  {
353  $store = $this->_storeManager->getStore($store);
354  if ($store) {
355  return in_array($store->getId(), (array) $this->getStores());
356  }
357  return false;
358  }
359 
366  public function getEntityIdByCode($entityCode)
367  {
368  return $this->getResource()->getEntityIdByCode($entityCode);
369  }
370 
376  public function getIdentities()
377  {
378  $tags = [];
379  if ($this->getEntityPkValue()) {
380  $tags[] = Product::CACHE_TAG . '_' . $this->getEntityPkValue();
381  }
382  return $tags;
383  }
384 }
getProductUrl($productId, $storeId)
Definition: Review.php:255
getEntitySummary($product, $storeId=0)
Definition: Review.php:220
$storeManager
__()
Definition: __.php:13
$resource
Definition: bulk.php:12
isAvailableOnStore($store=null)
Definition: Review.php:351
getEntityIdByCode($entityCode)
Definition: Review.php:366
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productFactory, \Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory $statusFactory, \Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory $summaryFactory, \Magento\Review\Model\Review\SummaryFactory $summaryModFactory, \Magento\Review\Model\Review\Summary $reviewSummary, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\UrlInterface $urlModel, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])
Definition: Review.php:135
appendSummary($collection)
Definition: Review.php:308
static is($value, $classBaseName, array $args=array(), $namespaces=array())
Definition: Validate.php:195
getTotalReviews($entityPkValue, $approvedOnly=false, $storeId=0)
Definition: Review.php:197
$errors
Definition: overview.phtml:9