Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/PageCache/ChainRequestPolicy.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/PageCache/ChainRequestPolicy.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,60 @@ +<?php + +namespace Drupal\Core\PageCache; + +use Symfony\Component\HttpFoundation\Request; + +/** + * Implements a compound request policy. + * + * When evaluating the compound policy, all of the contained rules are applied + * to the request. The overall result is computed according to the following + * rules: + * + * <ol> + * <li>Returns static::DENY if any of the rules evaluated to static::DENY</li> + * <li>Returns static::ALLOW if at least one of the rules evaluated to + * static::ALLOW and none to static::DENY</li> + * <li>Otherwise returns NULL</li> + * </ol> + */ +class ChainRequestPolicy implements ChainRequestPolicyInterface { + + /** + * A list of policy rules to apply when this policy is evaluated. + * + * @var \Drupal\Core\PageCache\RequestPolicyInterface[] + */ + protected $rules = []; + + /** + * {@inheritdoc} + */ + public function check(Request $request) { + $final_result = NULL; + + foreach ($this->rules as $rule) { + $result = $rule->check($request); + if ($result === static::DENY) { + return $result; + } + elseif ($result === static::ALLOW) { + $final_result = $result; + } + elseif (isset($result)) { + throw new \UnexpectedValueException('Return value of RequestPolicyInterface::check() must be one of RequestPolicyInterface::ALLOW, RequestPolicyInterface::DENY or NULL'); + } + } + + return $final_result; + } + + /** + * {@inheritdoc} + */ + public function addPolicy(RequestPolicyInterface $policy) { + $this->rules[] = $policy; + return $this; + } + +}