LeaveReviewAccessCheck.php in Reviews 1.0.x
Namespace
Drupal\reviews\AccessFile
src/Access/LeaveReviewAccessCheck.phpView source
<?php
namespace Drupal\reviews\Access;
use Drupal\Core\Routing\Access\AccessInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityTypeManager;
/**
* Checks access for displaying reviews pages.
*/
class LeaveReviewAccessCheck implements AccessInterface {
/**
* Drupal EntityTypeManager.
*
* @var \Drupal\Core\Entity\EntityTypeManager
*/
protected $entityTypeManager;
/**
* ReviewsAccessCheck constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManager $entity_type_manager
* Entity Type Manager.
*/
public function __construct(EntityTypeManager $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
/**
* Access check to determine if reviews are enabled and accessible.
*
* @return \Drupal\Core\Access\AccessResultInterface
* The access result.
*/
public function access() {
// Get the node ID being viewed.
$node = \Drupal::routeMatch()
->getParameter('node');
$config = \Drupal::config('reviews.settings');
$reviews_enabled = $config
->get('reviews.enabled');
// Check if multiple reviews are allowed and if not
// check if the user has already reviewed this node.
$previous_review = FALSE;
if (!$config
->get('reviews.multiple') && $node instanceof \Drupal\node\NodeInterface) {
$query = \Drupal::entityQuery('review')
->condition('node_id', $node
->id(), '=')
->condition('user_id', \Drupal::currentUser()
->id(), '=')
->execute();
$previous_review = (bool) count($query);
}
// Return access allowed only if reviews are enabled and
// the type (bundle) of the node being viewed is included
// in the reviewable node types.
return AccessResult::allowedif($reviews_enabled && !$previous_review);
}
}
Classes
Name | Description |
---|---|
LeaveReviewAccessCheck | Checks access for displaying reviews pages. |