65 private $_deleteCache = [];
105 \
Magento\Framework\Stdlib\DateTime\DateTime $date,
111 $this->_date = $date;
113 $this->_ratingFactory = $ratingFactory;
114 $this->_ratingOptions = $ratingOptions;
126 $this->
_init(
'review',
'review_id');
127 $this->_reviewTable = $this->
getTable(
'review');
128 $this->_reviewDetailTable = $this->
getTable(
'review_detail');
129 $this->_reviewStatusTable = $this->
getTable(
'review_status');
130 $this->_reviewEntityTable = $this->
getTable(
'review_entity');
131 $this->_reviewStoreTable = $this->
getTable(
'review_store');
132 $this->_aggregateTable = $this->
getTable(
'review_entity_summary');
147 $this->_reviewDetailTable,
148 $this->
getMainTable() .
".review_id = {$this->_reviewDetailTable}.review_id" 161 if (!$object->
getId()) {
162 $object->setCreatedAt($this->_date->gmtDate());
164 if ($object->
hasData(
'stores') && is_array($object->getStores())) {
165 $stores = $object->getStores();
169 $object->setStores([$object->getStores(), 0]);
187 'title' => $object->getTitle(),
188 'detail' => $object->getDetail(),
189 'nickname' => $object->getNickname(),
191 $select =
$connection->select()->from($this->_reviewDetailTable,
'detail_id')->where(
'review_id = :review_id');
195 $condition = [
"detail_id = ?" => $detailId];
196 $connection->update($this->_reviewDetailTable, $detail, $condition);
198 $detail[
'store_id'] = $object->getStoreId();
199 $detail[
'customer_id'] = $object->getCustomerId();
200 $detail[
'review_id'] = $object->
getId();
201 $connection->insert($this->_reviewDetailTable, $detail);
207 $stores = $object->getStores();
209 $condition = [
'review_id = ?' => $object->
getId()];
210 $connection->delete($this->_reviewStoreTable, $condition);
212 $insertedStoreIds = [];
214 if (in_array(
$storeId, $insertedStoreIds)) {
219 $storeInsert = [
'store_id' =>
$storeId,
'review_id' => $object->
getId()];
220 $connection->insert($this->_reviewStoreTable, $storeInsert);
240 $this->_reviewStoreTable,
243 'review_id = :review_id' 246 if (empty(
$stores) && $this->_storeManager->hasSingleStore()) {
247 $object->setStores([$this->_storeManager->getStore(
true)->getId()]);
263 $this->_deleteCache = [
265 'entityPkValue' => $object->getEntityPkValue(),
281 $this->
_aggregateRatings($this->_deleteCache[
'ratingIds'], $this->_deleteCache[
'entityPkValue']);
282 $this->_deleteCache = [];
302 "{$this->_reviewTable}.entity_pk_value = :pk_value" 304 $bind = [
':pk_value' => $entityPkValue];
307 [
'store' => $this->_reviewStoreTable],
308 $this->_reviewTable .
'.review_id=store.review_id AND store.store_id = :store_id',
311 $bind[
':store_id'] = (int)
$storeId;
314 $select->where(
"{$this->_reviewTable}.status_id = :status_id");
328 if (!$object->getEntityPkValue() && $object->getId()) {
329 $object->load($object->getReviewId());
332 $ratingModel = $this->_ratingFactory->create();
333 $ratingSummaries = $ratingModel->getEntitySummary($object->getEntityPkValue(),
false);
335 foreach ($ratingSummaries as $ratingSummaryObject) {
351 if ($ratingSummaryObject->getCount()) {
352 $ratingSummary = round($ratingSummaryObject->getSum() / $ratingSummaryObject->getCount());
354 $ratingSummary = $ratingSummaryObject->getSum();
358 $object->getEntityPkValue(),
360 $ratingSummaryObject->getStoreId()
363 ->where(
'entity_pk_value = :pk_value')
364 ->where(
'entity_type = :entity_type')
365 ->where(
'store_id = :store_id');
367 ':pk_value' => $object->getEntityPkValue(),
368 ':entity_type' => $object->getEntityId(),
369 ':store_id' => $ratingSummaryObject->getStoreId(),
372 $data = new \Magento\Framework\DataObject();
374 $data->setReviewsCount($reviewsCount)
375 ->setEntityPkValue($object->getEntityPkValue())
376 ->setEntityType($object->getEntityId())
377 ->setRatingSummary($ratingSummary > 0 ? $ratingSummary : 0)
378 ->setStoreId($ratingSummaryObject->getStoreId());
395 if (isset($oldData[
'primary_id']) && $oldData[
'primary_id'] > 0) {
396 $condition = [
"{$this->_aggregateTable}.primary_id = ?" => $oldData[
'primary_id']];
416 if (empty($reviewId)) {
420 ->joinInner([
'r' => $this->
getTable(
'rating')],
'v.rating_id=r.rating_id')
421 ->where(
'v.review_id = :revire_id');
435 if ($ratingIds && !is_array($ratingIds)) {
436 $ratingIds = [(int)$ratingIds];
438 if ($ratingIds && $entityPkValue) {
439 foreach ($ratingIds as $ratingId) {
440 $this->_ratingOptions->aggregateEntityByRatingId($ratingId, $entityPkValue);
468 ->where(
'entity_code = :entity_code');
489 $this->
getTable(
'review_entity_summary'),
_aggregateRatings($ratingIds, $entityPkValue)
elseif(isset( $params[ 'redirect_parent']))
getTotalReviews($entityPkValue, $approvedOnly=false, $storeId=0)
deleteReviewsByProductId($productId)
_init($mainTable, $idFieldName)
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Review\Model\RatingFactory $ratingFactory, Rating\Option $ratingOptions, $connectionName=null)
writeReviewSummary($oldData, \Magento\Framework\DataObject $data)
_loadVotedRatingIds($reviewId)
aggregateReviewSummary($object, $ratingSummaryObject)
reAggregateReview($reviewId, $entityPkValue)
_beforeSave(AbstractModel $object)
_afterLoad(AbstractModel $object)
_afterSave(AbstractModel $object)
getEntityIdByCode($entityCode)
_getLoadSelect($field, $value, $object)
_beforeDelete(AbstractModel $object)
const ENTITY_PRODUCT_CODE
afterDeleteCommit(AbstractModel $object)