22 lines
1.8 KiB
PHP
22 lines
1.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Esun\Review\Block\Order;
|
|
|
|
use Esun\Review\Model\Order\ReviewEligibilityService;
|
|
use Magento\Customer\Model\Session;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\View\Element\Template;
|
|
use Magento\Review\Model\RatingFactory;
|
|
|
|
class ReviewableItems extends Template
|
|
{
|
|
public function __construct(Template\Context $context, private readonly Registry $registry, private readonly Session $session, private readonly ReviewEligibilityService $eligibility, private readonly RatingFactory $ratings, array $data = []) { parent::__construct($context, $data); }
|
|
public function getOrder(): \Magento\Sales\Model\Order { return $this->registry->registry('current_order'); }
|
|
public function getItems(): array { return array_values(array_filter($this->getOrder()->getAllVisibleItems(), fn($item) => (float)$item->getQtyOrdered() - (float)$item->getQtyCanceled() > 0)); }
|
|
public function canReview(\Magento\Sales\Model\Order\Item $item): bool { return $this->eligibility->canReview($item, (int)$this->session->getCustomerId()); }
|
|
public function hasReviewed(\Magento\Sales\Model\Order\Item $item): bool { return $this->eligibility->hasReviewed((int)$this->session->getCustomerId(), (int)$item->getProductId()); }
|
|
public function getRatings(): \Magento\Review\Model\ResourceModel\Rating\Collection { return $this->ratings->create()->getResourceCollection()->addEntityFilter('product')->setPositionOrder()->addRatingPerStoreName((int)$this->_storeManager->getStore()->getId())->setStoreFilter((int)$this->_storeManager->getStore()->getId())->setActiveFilter(true)->load()->addOptionToItems(); }
|
|
public function getPostUrl(int $productId): string { return $this->getUrl('review/product/post', ['id' => $productId, '_secure' => $this->getRequest()->isSecure()]); }
|
|
}
|