public function ContextDefinition::isSatisfiedBy in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php \Drupal\Core\Plugin\Context\ContextDefinition::isSatisfiedBy()
Determines if this definition is satisfied by a context object.
Parameters
\Drupal\Core\Plugin\Context\ContextInterface $context: The context object.
Return value
bool TRUE if this definition is satisfiable by the context object, FALSE otherwise.
Overrides ContextDefinitionInterface::isSatisfiedBy
File
- core/lib/ Drupal/ Core/ Plugin/ Context/ ContextDefinition.php, line 345 
Class
- ContextDefinition
- Defines a class for context definitions.
Namespace
Drupal\Core\Plugin\ContextCode
public function isSatisfiedBy(ContextInterface $context) {
  $definition = $context
    ->getContextDefinition();
  if (!$this
    ->dataTypeMatches($context)) {
    return FALSE;
  }
  // Get the value for this context, either directly if possible or by
  // introspecting the definition.
  if ($context
    ->hasContextValue()) {
    $values = [
      $context
        ->getContextData(),
    ];
  }
  elseif ($definition instanceof self) {
    $this
      ->initializeEntityContextDefinition();
    if ($this->entityContextDefinition) {
      $values = $this->entityContextDefinition
        ->getSampleValues();
    }
    else {
      $values = $definition
        ->getSampleValues();
    }
  }
  else {
    $values = [];
  }
  $validator = $this
    ->getTypedDataManager()
    ->getValidator();
  foreach ($values as $value) {
    $constraints = array_values($this
      ->getConstraintObjects());
    $violations = $validator
      ->validate($value, $constraints);
    foreach ($violations as $delta => $violation) {
      // Remove any violation that does not correspond to the constraints.
      if (!in_array($violation
        ->getConstraint(), $constraints)) {
        $violations
          ->remove($delta);
      }
    }
    // If a value has no violations then the requirement is satisfied.
    if (!$violations
      ->count()) {
      return TRUE;
    }
  }
  return FALSE;
}