Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Condition/ConditionAccessResolverTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Condition/ConditionAccessResolverTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,49 @@ +<?php + +namespace Drupal\Core\Condition; + +use Drupal\Component\Plugin\Exception\ContextException; + +/** + * Resolves a set of conditions. + */ +trait ConditionAccessResolverTrait { + + /** + * Resolves the given conditions based on the condition logic ('and'/'or'). + * + * @param \Drupal\Core\Condition\ConditionInterface[] $conditions + * A set of conditions. + * @param string $condition_logic + * The logic used to compute access, either 'and' or 'or'. + * + * @return bool + * Whether these conditions grant or deny access. + */ + protected function resolveConditions($conditions, $condition_logic) { + foreach ($conditions as $condition) { + try { + $pass = $condition->execute(); + } + catch (ContextException $e) { + // If a condition is missing context and is not negated, consider that a + // fail. + $pass = $condition->isNegated(); + } + + // If a condition fails and all conditions were needed, deny access. + if (!$pass && $condition_logic == 'and') { + return FALSE; + } + // If a condition passes and only one condition was needed, grant access. + elseif ($pass && $condition_logic == 'or') { + return TRUE; + } + } + + // Return TRUE if logic was 'and', meaning all rules passed. + // Return FALSE if logic was 'or', meaning no rule passed. + return $condition_logic == 'and'; + } + +}