Files
2026-09-15 10:35:56 +08:00

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()]); }
}