diff --git a/cache/admin.php b/cache/admin.php index f3e3acb120d..c9c35db6adb 100644 --- a/cache/admin.php +++ b/cache/admin.php @@ -282,6 +282,7 @@ if (!empty($action) && confirm_sesskey()) { $PAGE->set_title($title); $PAGE->set_heading($SITE->fullname); +/* @var core_cache_renderer $renderer */ $renderer = $PAGE->get_renderer('core_cache'); echo $renderer->header(); diff --git a/cache/classes/helper.php b/cache/classes/helper.php index 970cbd500e5..0d0529ebc64 100644 --- a/cache/classes/helper.php +++ b/cache/classes/helper.php @@ -678,4 +678,28 @@ class cache_helper { } } } + + /** + * Returns an array of stores that would meet the requirements for every definition. + * + * These stores would be 100% suitable to map as defaults for cache modes. + * + * @return array[] An array of stores, keys are the store names. + */ + public static function get_stores_suitable_for_mode_default() { + $factory = cache_factory::instance(); + $config = $factory->create_config_instance(); + $requirements = 0; + foreach ($config->get_definitions() as $definition) { + $definition = cache_definition::load($definition['component'].'/'.$definition['area'], $definition); + $requirements = $requirements | $definition->get_requirements_bin(); + } + $stores = array(); + foreach ($config->get_all_stores() as $name => $store) { + if (!empty($store['features']) && ($store['features'] & $requirements)) { + $stores[$name] = $store; + } + } + return $stores; + } } diff --git a/cache/locallib.php b/cache/locallib.php index c72c52c5e87..2d83b9447cb 100644 --- a/cache/locallib.php +++ b/cache/locallib.php @@ -1126,7 +1126,10 @@ abstract class cache_administration_helper extends cache_helper { * @return array An array containing sub-arrays, one for each mode. */ public static function get_default_mode_stores() { + global $OUTPUT; $instance = cache_config::instance(); + $adequatestores = cache_helper::get_stores_suitable_for_mode_default(); + $icon = new pix_icon('i/warning', new lang_string('inadequatestoreformapping', 'cache')); $storenames = array(); foreach ($instance->get_all_stores() as $key => $store) { if (!empty($store['default'])) { @@ -1149,6 +1152,9 @@ abstract class cache_administration_helper extends cache_helper { } else { $modemappings[$mode][$mapping['store']] = $mapping['store']; } + if (!array_key_exists($mapping['store'], $adequatestores)) { + $modemappings[$mode][$mapping['store']] = $modemappings[$mode][$mapping['store']].' '.$OUTPUT->render($icon); + } } return $modemappings; } diff --git a/lang/en/cache.php b/lang/en/cache.php index 461edde1acf..6d4eab72f76 100644 --- a/lang/en/cache.php +++ b/lang/en/cache.php @@ -92,6 +92,7 @@ $string['ex_unabletolock'] = 'Unable to acquire a lock for caching.'; $string['ex_unmetstorerequirements'] = 'You are unable to use this store at the present time. Please refer to the documentation to determine its requirements.'; $string['gethit'] = 'Get - Hit'; $string['getmiss'] = 'Get - Miss'; +$string['inadequatestoreformapping'] = 'This store doesn\'t meet the requirements for all known definitions. Definitions for which this store is inadequate will be given the original default store instead of the selected store.'; $string['invalidlock'] = 'Invalid lock'; $string['invalidplugin'] = 'Invalid plugin'; $string['invalidstore'] = 'Invalid cache store provided';