commerce_api-8.x-1.x-dev/src/EntityAccessibleAvailabilityChecker.php
src/EntityAccessibleAvailabilityChecker.php
<?php
declare(strict_types=1);
namespace Drupal\commerce_api;
use Drupal\commerce\Context;
use Drupal\commerce_order\AvailabilityCheckerInterface;
use Drupal\commerce_order\AvailabilityResult;
use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\Core\Entity\EntityPublishedInterface;
final class EntityAccessibleAvailabilityChecker implements AvailabilityCheckerInterface {
/**
* {@inheritdoc}
*/
public function applies(OrderItemInterface $order_item) {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function check(OrderItemInterface $order_item, Context $context) {
$purchasable_entity = $order_item->getPurchasedEntity();
// If the purchasable entity is publishable, immediately return false if
// it is unpublished and skip entity access checks for performance.
if ($purchasable_entity instanceof EntityPublishedInterface && $purchasable_entity->isPublished() === FALSE) {
return AvailabilityResult::unavailable();
}
if (!$purchasable_entity->access('view', $context->getCustomer())) {
return AvailabilityResult::unavailable();
}
return AvailabilityResult::neutral();
}
}
