diff --git a/cache/stores/memcache/classes/environment_check.php b/cache/stores/memcache/classes/environment_check.php new file mode 100644 index 00000000000..d65fdb51025 --- /dev/null +++ b/cache/stores/memcache/classes/environment_check.php @@ -0,0 +1,49 @@ +. + +/** + * Validate that the current db structure matches the install.xml files. + * + * @package core + * @copyright 2014 Totara Learning Solutions Ltd {@link http://www.totaralms.com/} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @author Petr Skoda + */ + +class cachestore_memcache_environment_check { + public static function check_memcache_version(environment_results $result) { + global $CFG; + + if (empty($CFG->version) or !get_config('cachestore_memcache', 'testservers')) { + // Do not display warnings when plugin not configured, + // admins will see the warning after setting memcache server. + return null; + } + if (!extension_loaded('memcache') or !$version = phpversion('memcache')) { + // No need to mention this when not used. + return null; + } + $minversion = '3.0.3'; + $result->setInfo(get_string('memcacheversioncheck', 'cachestore_memcache')); + if (version_compare($version, $minversion) < 0) { + $result->setStatus(false); + $result->setFeedbackStr(array('memcacheversionwarning', 'cachestore_memcache', array('minversion' => $minversion, 'version' => $version))); + } else { + $result->setStatus(true); + } + return $result; + } +} diff --git a/cache/stores/memcache/environment.xml b/cache/stores/memcache/environment.xml new file mode 100644 index 00000000000..1b4a246a8ef --- /dev/null +++ b/cache/stores/memcache/environment.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cache/stores/memcache/lang/en/cachestore_memcache.php b/cache/stores/memcache/lang/en/cachestore_memcache.php index 26f1c9ed974..f1bcaa592a5 100644 --- a/cache/stores/memcache/lang/en/cachestore_memcache.php +++ b/cache/stores/memcache/lang/en/cachestore_memcache.php @@ -33,6 +33,8 @@ The intended use case is to create an improved store for load-balanced configura When this setting is enabled, the server listed above will be used for fetching.'; $string['clusteredheader'] = 'Split servers'; +$string['memcacheversioncheck'] = 'memcache PHP extension'; +$string['memcacheversionwarning'] = 'The installed memcache extension {$a->version} is lower than the recommended version {$a->minversion}, upgrading to at least the minimum version will result in better performance when using memcache.'; $string['pluginname'] = 'Memcache'; $string['prefix'] = 'Key prefix'; $string['prefix_help'] = 'This prefix is used for all key names on the memcache server. @@ -67,4 +69,4 @@ ipaddress:port $string['sessionhandlerconflict'] = 'Warning: A memcache instance ({$a}) has being configured to use the same memcached server as sessions. Purging all caches will lead to sessions also being purged.'; $string['testservers'] = 'Test servers'; $string['testservers_desc'] = 'The test servers get used for unit tests and for performance tests. It is entirely optional to set up test servers. Servers should be defined one per line and consist of a server address and optionally a port and weight. -If no port is provided then the default port (11211) is used.'; \ No newline at end of file +If no port is provided then the default port (11211) is used.'; diff --git a/cache/stores/memcache/settings.php b/cache/stores/memcache/settings.php index 26d8984a8f2..16c8350d01d 100644 --- a/cache/stores/memcache/settings.php +++ b/cache/stores/memcache/settings.php @@ -26,8 +26,22 @@ defined('MOODLE_INTERNAL') || die; -$settings->add(new admin_setting_configtextarea( +if ($ADMIN->fulltree) { + $settings->add(new admin_setting_configtextarea( 'cachestore_memcache/testservers', new lang_string('testservers', 'cachestore_memcache'), new lang_string('testservers_desc', 'cachestore_memcache'), '', PARAM_RAW, 60, 3)); + + // This is an ugly hack, but the env page skips the warning if server not set... + require_once("$CFG->libdir/environmentlib.php"); + $result = new environment_results('custom_check'); + $result = cachestore_memcache_environment_check::check_memcache_version($result); + if ($result and $feedbackstr = $result->getFeedbackStr()) { + $settings->add(new admin_setting_heading( + 'cachestoremucwarning', + new lang_string('warning'), + $result->strToReport($feedbackstr, 'statuswarning'))); + } + unset($result); +} diff --git a/cache/stores/memcache/version.php b/cache/stores/memcache/version.php index 6b201e45d1d..3e78a83684c 100644 --- a/cache/stores/memcache/version.php +++ b/cache/stores/memcache/version.php @@ -26,6 +26,6 @@ defined('MOODLE_INTERNAL') || die; -$plugin->version = 2014051200; // The current module version (Date: YYYYMMDDXX) +$plugin->version = 2014080400; // The current module version (Date: YYYYMMDDXX) $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'cachestore_memcache'; // Full name of the plugin.