Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 4  | 
      CRAP |         | 
      42.86%  | 
      6 / 14  | 
     
| LinkAccessConstraintValidator |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 4  | 
      19.94 |         | 
      42.86%  | 
      6 / 14  | 
     
| __construct |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| create |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| initialize |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| validate |         | 
      0.00%  | 
      0 / 1  | 
      5.39 |         | 
      75.00%  | 
      6 / 8  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\link\Plugin\Validation\Constraint\LinkAccessConstraintValidator. | |
| */ | |
| namespace Drupal\link\Plugin\Validation\Constraint; | |
| use Drupal\Core\Session\AccountProxyInterface; | |
| use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| use Symfony\Component\Validator\Constraint; | |
| use Symfony\Component\Validator\ConstraintValidatorInterface; | |
| use Symfony\Component\Validator\ExecutionContextInterface; | |
| /** | |
| * Validates the LinkAccess constraint. | |
| */ | |
| class LinkAccessConstraintValidator implements ConstraintValidatorInterface, ContainerInjectionInterface { | |
| /** | |
| * Stores the validator's state during validation. | |
| * | |
| * @var \Symfony\Component\Validator\ExecutionContextInterface | |
| */ | |
| protected $context; | |
| /** | |
| * Proxy for the current user account. | |
| * | |
| * @var \Drupal\Core\Session\AccountProxyInterface | |
| */ | |
| protected $current_user; | |
| /** | |
| * Constructs an instance of the LinkAccessConstraintValidator class. | |
| * | |
| * @param \Drupal\Core\Session\AccountProxyInterface $current_user | |
| * The current user account. | |
| */ | |
| public function __construct(AccountProxyInterface $current_user) { | |
| $this->current_user = $current_user; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('current_user') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function initialize(ExecutionContextInterface $context) { | |
| $this->context = $context; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validate($value, Constraint $constraint) { | |
| if (isset($value)) { | |
| try { | |
| $url = $value->getUrl(); | |
| } | |
| // If the URL is malformed this constraint cannot check access. | |
| catch (\InvalidArgumentException $e) { | |
| return; | |
| } | |
| // Disallow URLs if the current user doesn't have the 'link to any page' | |
| // permission nor can access this URI. | |
| $allowed = $this->current_user->hasPermission('link to any page') || $url->access(); | |
| if (!$allowed) { | |
| $this->context->addViolation($constraint->message, array('@uri' => $value->uri)); | |
| } | |
| } | |
| } | |
| } |