/** * @param SS_HTTPRequest $request * @param SS_HTTPResponse $response * @return bool */ protected function allowSave(SS_HTTPRequest $request, SS_HTTPResponse $response) { $vars = array('request' => $request, 'response' => $response, 'member' => \Member::currentUser(), 'session' => \Session::get_all()) + $this->extraExpressionVars; if (count($this->saveExcludeRules)) { foreach ($this->saveExcludeRules as $rule) { if ($this->expressionLanguage->evaluate($rule, $vars)) { return false; } } } if (count($this->saveIncludeRules)) { foreach ($this->saveIncludeRules as $rule) { if (!$this->expressionLanguage->evaluate($rule, $vars)) { return false; } } } return true; }
/** * @param $action */ protected function onChange($action) { $vars = array('item' => $this->owner, 'action' => $action); $logger = $this->cache->getLogger(); // TODO: A bit complex. Needs refactor foreach ($this->cache->getConfig() as $name => $inst) { $hasContainsRules = isset($inst['contains']) && is_array($inst['contains']); $hasInvalidationRules = isset($inst['invalidation_rules']) && is_array($inst['invalidation_rules']); // Check to see if there are contains rules, and if there is // we want to ensure that the invalidation rules are only processed // if the class at least passes the invalidation rules if ($hasContainsRules) { $contains = false; foreach ($inst['contains'] as $contain) { if ($this->owner instanceof $contain) { $contains = $contain; break; } } // We don't want to do any more processing if the contains // rules didn't even pass if (!$contains) { continue; } } else { $contains = true; } if ($hasInvalidationRules) { foreach ($inst['invalidation_rules'] as $rule) { if ($this->expressionLanguage->evaluate($rule, $vars) && $contains) { $this->invalidate($name, sprintf("Cache name '%s' invalidated by rule '%s'", $name, $rule), $logger); break; } } } elseif ($hasContainsRules && $contains) { // If there aren't any invalidation rules then invalidate the cache // simply based on the contains rules passing $this->invalidate($name, sprintf("Cache name '%s' invalidated as it contains '%s'", $name, $contains), $logger); } } }