mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
183 lines
4.9 KiB
PHP
183 lines
4.9 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Review\Model;
|
|
|
|
use Magento\Framework\DataObject\IdentityInterface;
|
|
|
|
/**
|
|
* Rating model
|
|
*
|
|
* @api
|
|
* @method array getRatingCodes()
|
|
* @method \Magento\Review\Model\Rating setRatingCodes(array $value)
|
|
* @method array getStores()
|
|
* @method \Magento\Review\Model\Rating setStores(array $value)
|
|
* @method string getRatingCode()
|
|
*
|
|
* @since 100.0.2
|
|
*/
|
|
class Rating extends \Magento\Framework\Model\AbstractModel implements IdentityInterface
|
|
{
|
|
/**
|
|
* rating entity codes
|
|
*/
|
|
public const ENTITY_PRODUCT_CODE = 'product';
|
|
|
|
public const ENTITY_PRODUCT_REVIEW_CODE = 'product_review';
|
|
|
|
public const ENTITY_REVIEW_CODE = 'review';
|
|
|
|
/**
|
|
* @var \Magento\Review\Model\Rating\OptionFactory
|
|
*/
|
|
protected $_ratingOptionFactory;
|
|
|
|
/**
|
|
* @var \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory
|
|
*/
|
|
protected $_ratingCollectionF;
|
|
|
|
/**
|
|
* @param \Magento\Framework\Model\Context $context
|
|
* @param \Magento\Framework\Registry $registry
|
|
* @param \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory
|
|
* @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
|
|
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
|
|
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
|
|
* @param array $data
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\Model\Context $context,
|
|
\Magento\Framework\Registry $registry,
|
|
\Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory,
|
|
\Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
|
|
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
|
|
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
|
|
array $data = []
|
|
) {
|
|
$this->_ratingOptionFactory = $ratingOptionFactory;
|
|
$this->_ratingCollectionF = $ratingCollectionF;
|
|
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
|
|
}
|
|
|
|
/**
|
|
* Define resource model
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _construct()
|
|
{
|
|
$this->_init(\Magento\Review\Model\ResourceModel\Rating::class);
|
|
}
|
|
|
|
/**
|
|
* Add a vote to an option
|
|
*
|
|
* @param int $optionId
|
|
* @param int $entityPkValue
|
|
* @return $this
|
|
*/
|
|
public function addOptionVote($optionId, $entityPkValue)
|
|
{
|
|
$this->_ratingOptionFactory->create()->setOptionId(
|
|
$optionId
|
|
)->setRatingId(
|
|
$this->getId()
|
|
)->setReviewId(
|
|
$this->getReviewId()
|
|
)->setEntityPkValue(
|
|
$entityPkValue
|
|
)->addVote();
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Update a vote for an option
|
|
*
|
|
* @param int $optionId
|
|
* @return $this
|
|
*/
|
|
public function updateOptionVote($optionId)
|
|
{
|
|
$this->_ratingOptionFactory->create()->setOptionId(
|
|
$optionId
|
|
)->setVoteId(
|
|
$this->getVoteId()
|
|
)->setReviewId(
|
|
$this->getReviewId()
|
|
)->setDoUpdate(
|
|
1
|
|
)->addVote();
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Retrieve rating options
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getOptions()
|
|
{
|
|
$options = $this->getData('options');
|
|
if ($options) {
|
|
return $options;
|
|
} elseif ($this->getId()) {
|
|
return $this->_ratingCollectionF->create()->addRatingFilter(
|
|
$this->getId()
|
|
)->setPositionOrder()->load()->getItems();
|
|
}
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Get rating collection object
|
|
*
|
|
* @param int $entityPkValue
|
|
* @param bool $onlyForCurrentStore
|
|
* @return \Magento\Framework\Data\Collection\AbstractDb
|
|
*/
|
|
public function getEntitySummary($entityPkValue, $onlyForCurrentStore = true)
|
|
{
|
|
$this->setEntityPkValue($entityPkValue);
|
|
return $this->_getResource()->getEntitySummary($this, $onlyForCurrentStore);
|
|
}
|
|
|
|
/**
|
|
* Get summary of review
|
|
*
|
|
* @param int $reviewId
|
|
* @param bool $onlyForCurrentStore
|
|
* @return array
|
|
*/
|
|
public function getReviewSummary($reviewId, $onlyForCurrentStore = true)
|
|
{
|
|
$this->setReviewId($reviewId);
|
|
return $this->_getResource()->getReviewSummary($this, $onlyForCurrentStore);
|
|
}
|
|
|
|
/**
|
|
* Get rating entity type id by code
|
|
*
|
|
* @param string $entityCode
|
|
* @return int
|
|
*/
|
|
public function getEntityIdByCode($entityCode)
|
|
{
|
|
return $this->getResource()->getEntityIdByCode($entityCode);
|
|
}
|
|
|
|
/**
|
|
* Return unique ID(s) for each object in system
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getIdentities()
|
|
{
|
|
// clear cache for all reviews
|
|
return [Review::CACHE_TAG];
|
|
}
|
|
}
|