56 $this->_reviewSummary = $reviewSummary;
67 $this->
_init(
'rating',
'rating_id');
77 $this->_uniqueFields = [[
'field' =>
'rating_code',
'title' =>
'']];
96 $codeExpr =
$connection->getIfNullSql(
'title.value',
"{$table}.rating_code");
99 [
'title' => $this->
getTable(
'rating_title')],
100 $connection->quoteInto(
"{$table}.rating_id = title.rating_id AND title.store_id = ?",
$storeId),
101 [
'rating_code' => $codeExpr]
115 parent::_afterLoad($object);
117 if (!$object->getId()) {
122 $bind = [
':rating_id' => (int)$object->getId()];
126 [
'store_id',
'value']
128 'rating_id=:rating_id' 133 $object->setRatingCodes(
$result);
137 $object->setStores($this->
getStores((
int)$object->getId()));
168 parent::_afterSave($object);
169 if ($object->hasRatingCodes()) {
173 if ($object->hasStores()) {
187 $ratingId = (int)$object->getId();
190 ->where(
'rating_id = :rating_id');
192 $new = array_filter(array_map(
'trim', $object->getRatingCodes()));
197 $insert[] = [
'rating_id' => $ratingId,
'store_id' => (int)
$storeId,
'value' =>
$title];
210 $ratingId = (int)$object->getId();
213 ->where(
'rating_id = :rating_id');
215 $new = $object->getStores();
220 $insert[] = [
'rating_id' => $ratingId,
'store_id' => (int)
$storeId];
234 if (empty($storeIds)) {
240 $where = [
'rating_id = ?' => $ratingId,
'store_id IN(?)' => $storeIds];
244 $this->_logger->critical($e);
265 $this->_logger->critical($e);
279 parent::_afterDelete($object);
280 if (!$this->moduleManager->isEnabled(
'Magento_Review')) {
286 $clone = clone $object;
287 $clone->addData(
$row);
288 $summary[$clone->getStoreId()][$clone->getEntityPkValue()] = $clone;
290 $this->_reviewSummary->reAggregate($summary);
305 if ($onlyForCurrentStore) {
307 if (
$row[
'store_id'] == $this->_storeManager->getStore()->getId()) {
308 $object->addData(
$row);
314 $stores = $this->_storeManager->getStores();
318 $clone = clone $object;
319 $clone->addData(
$row);
320 $result[$clone->getStoreId()] = $clone;
323 $usedStoresId = array_keys(
$result);
325 if (!in_array(
$store->getId(), $usedStoresId)) {
326 $clone = clone $object;
329 $clone->setStoreId(
$store->getId());
346 $sumColumn = new \Zend_Db_Expr(
"SUM(rating_vote.{$connection->quoteIdentifier('percent')})");
347 $countColumn = new \Zend_Db_Expr(
"COUNT(*)");
350 [
'rating_vote' => $this->
getTable(
'rating_option_vote')],
351 [
'entity_pk_value' =>
'rating_vote.entity_pk_value',
'sum' => $sumColumn,
'count' => $countColumn]
353 [
'review' => $this->
getTable(
'review')],
354 'rating_vote.review_id=review.review_id',
357 [
'review_store' => $this->
getTable(
'review_store')],
358 'rating_vote.review_id=review_store.review_id',
359 [
'review_store.store_id']
361 if (!$this->_storeManager->isSingleStoreMode()) {
363 [
'rating_store' => $this->
getTable(
'rating_store')],
364 'rating_store.rating_id = rating_vote.rating_id AND rating_store.store_id = review_store.store_id',
369 [
'review_status' => $this->
getTable(
'review_status')],
370 'review.status_id = review_status.status_id',
373 'review_status.status_code = :status_code' 375 'rating_vote.entity_pk_value' 377 'review_store.store_id' 381 $entityPkValue = $object->getEntityPkValue();
382 if ($entityPkValue) {
383 $select->where(
'rating_vote.entity_pk_value = :pk_value');
384 $bind[
':pk_value'] = $entityPkValue;
401 $sumColumn = new \Zend_Db_Expr(
"SUM(rating_vote.{$connection->quoteIdentifier('percent')})");
402 $countColumn = new \Zend_Db_Expr(
'COUNT(*)');
404 [
'rating_vote' => $this->
getTable(
'rating_option_vote')],
405 [
'sum' => $sumColumn,
'count' => $countColumn]
407 [
'review_store' => $this->
getTable(
'review_store')],
408 'rating_vote.review_id = review_store.review_id',
409 [
'review_store.store_id']
411 if (!$this->_storeManager->isSingleStoreMode()) {
413 [
'rating_store' => $this->
getTable(
'rating_store')],
414 'rating_store.rating_id = rating_vote.rating_id AND rating_store.store_id = review_store.store_id',
419 'rating_vote.review_id = :review_id' 421 'rating_vote.review_id' 423 'review_store.store_id' 428 if ($onlyForCurrentStore) {
430 if (
$row[
'store_id'] == $this->_storeManager->getStore()->getId()) {
431 $object->addData(
$row);
439 $stores = $this->_storeManager->getStore()->getResourceCollection()->load();
442 $clone = clone $object;
443 $clone->addData(
$row);
444 $result[$clone->getStoreId()] = $clone;
447 $usedStoresId = array_keys(
$result);
450 if (!in_array(
$store->getId(), $usedStoresId)) {
451 $clone = clone $object;
454 $clone->setStoreId(
$store->getId());
474 'entity_code = :entity_code' 494 $where = [
'entity_pk_value = ?' => (int)
$productId,
'rating_id IN(?)' => $ratingIds];
_getEntitySummaryData($object)
_afterDelete(\Magento\Framework\Model\AbstractModel $object)
getEntityIdByCode($entityCode)
_afterSave(\Magento\Framework\Model\AbstractModel $object)
getReviewSummary($object, $onlyForCurrentStore=true)
_init($mainTable, $idFieldName)
processRatingStores(\Magento\Framework\Model\AbstractModel $object)
_afterLoad(\Magento\Framework\Model\AbstractModel $object)
processRatingCodes(\Magento\Framework\Model\AbstractModel $object)
deleteAggregatedRatingsByProductId($productId)
_getLoadSelect($field, $value, $object)
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Module\Manager $moduleManager, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Review\Model\ResourceModel\Review\Summary $reviewSummary, $connectionName=null)
getEntitySummary($object, $onlyForCurrentStore=true)
insertRatingData($table, array $data)
const ENTITY_PRODUCT_CODE
deleteRatingData($ratingId, $table, array $storeIds)
const RATING_STATUS_APPROVED