Skip to content

Commit

Permalink
Merge pull request #19266 from sky-hub/api-product-reviews-55
Browse files Browse the repository at this point in the history
API: Product Reviews #55
  • Loading branch information
Stanislav Idolov authored Aug 17, 2020
2 parents 4930963 + cb53b5f commit e80fe6a
Show file tree
Hide file tree
Showing 70 changed files with 6,188 additions and 526 deletions.
72 changes: 11 additions & 61 deletions app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,91 +3,41 @@
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Review\Controller\Adminhtml\Product;

use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Review\Controller\Adminhtml\Product as ProductController;
use Magento\Framework\Controller\ResultFactory;
use Magento\Review\Model\Review;
use Magento\Review\Controller\Adminhtml\Product as ProductController;

/**
* Delete review action.
*/
class Delete extends ProductController implements HttpPostActionInterface
class Delete extends ProductController
{
/**
* @var Review
*/
private $model;

/**
* Execute action.
*
* @return \Magento\Backend\Model\View\Result\Redirect
*/
public function execute()
{
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$reviewId = $this->getRequest()->getParam('id', false);
$reviewId = (int)$this->getRequest()->getParam('id', false);
try {
$this->getModel()->aggregate()->delete();
$review = $this->reviewFactory->create(
['data' => ['review_id' => $reviewId]]
);
$review->delete();

$this->messageManager->addSuccessMessage(__('The review has been deleted.'));
$this->messageManager->addSuccess(__('The review has been deleted.'));
if ($this->getRequest()->getParam('ret') == 'pending') {
$resultRedirect->setPath('review/*/pending');
} else {
$resultRedirect->setPath('review/*/');
}
return $resultRedirect;
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
$this->messageManager->addError($e->getMessage());
} catch (\Exception $e) {
$this->messageManager->addExceptionMessage($e, __('Something went wrong deleting this review.'));
$this->messageManager->addException($e, __('Something went wrong deleting this review.'));
}

return $resultRedirect->setPath('review/*/edit/', ['id' => $reviewId]);
}

/**
* @inheritdoc
*/
protected function _isAllowed()
{
if (parent::_isAllowed()) {
return true;
}

if (!$this->_authorization->isAllowed('Magento_Review::pending')) {
return false;
}

if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) {
$this->messageManager->addErrorMessage(
__(
'You don’t have permission to perform this operation.'
. ' The selected review must be in Pending Status.'
)
);

return false;
}

return true;
}

/**
* Returns requested model.
*
* @return Review
*/
private function getModel(): Review
{
if ($this->model === null) {
$this->model = $this->reviewFactory->create()
->load($this->getRequest()->getParam('id', false));
}

return $this->model;
}
}
42 changes: 42 additions & 0 deletions app/code/Magento/Review/Model/Aggregator/Ratings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Review\Model\Aggregator;

use Magento\Review\Model\ResourceModel\Review as ReviewResource;
use Magento\ReviewApi\Api\Data\ReviewInterface;
use Magento\ReviewApi\Model\AggregatorInterface;

/**
* Class Ratings
*/
class Ratings implements AggregatorInterface
{
/**
* @var ReviewResource
*/
private $reviewResource;

/**
* Aggregator constructor
*
* @param ReviewResource $reviewResource
*/
public function __construct(
ReviewResource $reviewResource
) {
$this->reviewResource = $reviewResource;
}

/**
* @inheritdoc
*/
public function aggregate(ReviewInterface $review): void
{
$this->reviewResource->reAggregateReview($review->getReviewId(), $review->getRelatedEntityId());
}
}
42 changes: 42 additions & 0 deletions app/code/Magento/Review/Model/Aggregator/Review.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Review\Model\Aggregator;

use Magento\Review\Model\ResourceModel\Review as ReviewResource;
use Magento\ReviewApi\Api\Data\ReviewInterface;
use Magento\ReviewApi\Model\AggregatorInterface;

/**
* Class Review
*/
class Review implements AggregatorInterface
{
/**
* @var ReviewResource
*/
private $reviewResource;

/**
* Aggregator constructor
*
* @param ReviewResource $reviewResource
*/
public function __construct(
ReviewResource $reviewResource
) {
$this->reviewResource = $reviewResource;
}

/**
* @inheritdoc
*/
public function aggregate(ReviewInterface $review): void
{
$this->reviewResource->aggregate($review);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Review\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor;

use Magento\Framework\Api\Filter;
use Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor\CustomFilterInterface;
use Magento\Framework\Data\Collection\AbstractDb;

/**
* Class ReviewCustomerFilter
*/
class ReviewCustomerFilter implements CustomFilterInterface
{
/**
* Apply customer_id Filter to Review Collection
*
* @param Filter $filter
* @param AbstractDb $collection
* @return bool Whether the filter is applied
*/
public function apply(Filter $filter, AbstractDb $collection)
{
/** @var \Magento\Review\Model\ResourceModel\Review\Collection $collection */
$collection->addCustomerFilter($filter->getValue());

return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Review\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor;

use Magento\Catalog\Model\ResourceModel\Product as ProductResource;
use Magento\Framework\Api\Filter;
use Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor\CustomFilterInterface;
use Magento\Framework\Data\Collection\AbstractDb;

/**
* Class ReviewSkuFilter
*/
class ReviewSkuFilter implements CustomFilterInterface
{
/**
* Product resource
*
* @var ProductResource
*/
private $productResource;

/**
* ReviewSkuFilter constructor
*
* @param ProductResource $productResource
*/
public function __construct(
ProductResource $productResource
) {
$this->productResource = $productResource;
}

/**
* Apply sku Filter to Review Collection
*
* @param Filter $filter
* @param AbstractDb $collection
* @return bool Whether the filter is applied
*/
public function apply(Filter $filter, AbstractDb $collection)
{
$productId = $this->productResource->getIdBySku($filter->getValue());

/** @var \Magento\Review\Model\ResourceModel\Review\Collection $collection */
$collection->addEntityFilter('product', $productId);

return true;
}
}
Loading

0 comments on commit e80fe6a

Please sign in to comment.