You are here

public function EntityExtraField::hasConditionsBeenMet in Entity Extra Field 2.0.x

Same name and namespace in other branches
  1. 8 src/Entity/EntityExtraField.php \Drupal\entity_extra_field\Entity\EntityExtraField::hasConditionsBeenMet()

Has extra field conditions been met.

Parameters

array $contexts: An array of context values.

bool $all_must_pass: Determine if all conditions must pass.

Return value

bool Return TRUE if the extra field conditions have been met; otherwise FALSE.

Throws

\Drupal\Component\Plugin\Exception\PluginException

Overrides EntityExtraFieldInterface::hasConditionsBeenMet

File

src/Entity/EntityExtraField.php, line 376

Class

EntityExtraField
Define entity extra field.

Namespace

Drupal\entity_extra_field\Entity

Code

public function hasConditionsBeenMet(array $contexts, bool $all_must_pass = FALSE) : bool {
  $conditions = $this
    ->getActiveFieldTypeConditions();
  if (empty($conditions)) {
    return TRUE;
  }
  $verdicts = [];
  foreach ($conditions as $plugin_id => $configuration) {

    /** @var \Drupal\Core\Condition\ConditionPluginBase $condition */
    $condition = $this
      ->conditionPluginManager()
      ->createInstance($plugin_id, $configuration);
    if ($condition instanceof ContextAwarePluginInterface) {
      try {
        $this
          ->applyPluginRuntimeContexts($condition, [
          'entity_extra_field' => EntityContext::fromEntity($this),
        ] + $contexts);
      } catch (\Exception $exception) {
        return FALSE;
      }
    }
    $verdict = $condition
      ->evaluate();
    if ($verdict && !$all_must_pass) {
      return TRUE;
    }
    $verdicts[] = $verdict;
  }
  $verdicts = array_unique($verdicts);
  return count($verdicts) === 1 && current($verdicts) === TRUE;
}