diff --git a/cache/classes/factory.php b/cache/classes/factory.php index 016b5c32f62..b32bc15645d 100644 --- a/cache/classes/factory.php +++ b/cache/classes/factory.php @@ -236,6 +236,11 @@ class cache_factory { public function create_cache(cache_definition $definition) { $class = $definition->get_cache_class(); $stores = cache_helper::get_stores_suitable_for_definition($definition); + foreach ($stores as $key => $store) { + if (!$store::are_requirements_met()) { + unset($stores[$key]); + } + } if (count($stores) === 0) { // Hmm still no stores, better provide a dummy store to mimic functionality. The dev will be none the wiser. $stores[] = $this->create_dummy_store($definition); @@ -253,7 +258,7 @@ class cache_factory { /** * Creates a store instance given its name and configuration. * - * If the store has already been instantiated then the original objetc will be returned. (reused) + * If the store has already been instantiated then the original object will be returned. (reused) * * @param string $name The name of the store (must be unique remember) * @param array $details @@ -267,8 +272,9 @@ class cache_factory { $store = new $class($details['name'], $details['configuration']); $this->stores[$name] = $store; } + /* @var cache_store $store */ $store = $this->stores[$name]; - if (!$store->is_ready() || !$store->is_supported_mode($definition->get_mode())) { + if (!$store::are_requirements_met() || !$store->is_ready() || !$store->is_supported_mode($definition->get_mode())) { return false; } // We always create a clone of the original store. diff --git a/cache/classes/helper.php b/cache/classes/helper.php index aff02d11654..407bf53a0b2 100644 --- a/cache/classes/helper.php +++ b/cache/classes/helper.php @@ -455,8 +455,9 @@ class cache_helper { $class = $store['class']; // Found the store: is it ready? + /* @var cache_store $instance */ $instance = new $class($store['name'], $store['configuration']); - if (!$instance->is_ready()) { + if (!$instance::are_requirements_met() || !$instance->is_ready()) { unset($instance); return false; }