diff --git a/admin/environment.php b/admin/environment.php index 08927756a6d..89871e57d78 100644 --- a/admin/environment.php +++ b/admin/environment.php @@ -1,4 +1,4 @@ -result) && $environment_result->level == 'required') { + return false; + } + } + + return true; +} + + + /** * This function will normalize any version to just a serie of numbers * separated by dots. Everything else will be removed. @@ -113,12 +164,52 @@ function get_list_of_environment_versions ($contents) { return $versions; } +/** + * This function will return the most recent version in the environment.xml + * file previous or equal to the version requested + * @param string version top version from which we start to look backwards + * @return string more recent version or false if not found + */ +function get_latest_version_available ($version) { + +/// Normalize the version requested + $version = normalize_version($version); + +/// Load xml file + if (!$contents = load_environment_xml()) { + return false; + } + +/// Detect available versions + if (!$versions = get_list_of_environment_versions($contents)) { + return false; + } +/// First we look for exact version + if (in_array($version, $versions)) { + return $version; + } else { + $found_version = false; + /// Not exact match, so we are going to iterate over the list searching + /// for the latest version before the requested one + foreach ($versions as $arrversion) { + if (version_compare($arrversion, $version, '<')) { + $found_version = $arrversion; + } + } + } + + return $found_version; +} + /** * This function will return the xmlized data belonging to one Moodle version * @return mixed the xmlized structure or false on error */ function get_environment_for_version($version) { +/// Normalize the version requested + $version = normalize_version($version); + /// Load xml file if (!$contents = load_environment_xml()) { return false; @@ -148,6 +239,9 @@ function get_environment_for_version($version) { */ function environment_check($version) { +/// Normalize the version requested + $version = normalize_version($version); + $results = array(); //To store all the results $results[] = environment_check_database($version); @@ -172,6 +266,7 @@ function environment_check_php_extensions($version) { /// Get the enviroment version we need if (!$data = get_environment_for_version($version)) { /// Error. No version data found + $result = new environment_results('php_extensions'); $result->setStatus(false); $result->setErrorCode(NO_VERSION_DATA_FOUND); return $result; @@ -180,6 +275,7 @@ function environment_check_php_extensions($version) { /// Extract the php_extension part if (!isset($data['#']['PHP_EXTENSIONS']['0']['#']['PHP_EXTENSION'])) { /// Error. No PHP section found + $result = new environment_results('php_extensions'); $result->setStatus(false); $result->setErrorCode(NO_PHP_EXTENSIONS_SECTION_FOUND); return $result; @@ -190,7 +286,7 @@ function environment_check_php_extensions($version) { /// Check for level if (isset($extension['@']['level'])) { $level = $extension['@']['level']; - if ($level != 'recommended') { + if ($level != 'optional') { $level = 'required'; } } @@ -245,7 +341,7 @@ function environment_check_php($version) { /// Extract level and version if (isset($data['#']['PHP']['0']['@']['level'])) { $level = $data['#']['PHP']['0']['level']; - if ($level != 'recommended') { + if ($level != 'optional') { $level = 'required'; } } @@ -306,7 +402,7 @@ function environment_check_database($version) { /// Extract level if (isset($data['#']['DATABASE']['0']['@']['level'])) { $level = $data['#']['DATABASE']['0']['level']; - if ($level != 'recommended') { + if ($level != 'optional') { $level = 'required'; } } @@ -366,6 +462,10 @@ function environment_check_database($version) { //--- Helper Class to return results to caller ---// + + + + /** * This class is used to return the results of the environment * main functions (environment_check_xxxx) @@ -374,7 +474,7 @@ class environment_results { var $result; //true/false var $error_code; //integer. See constants at the beginning of the file - var $level; //required/recommended + var $level; //required/optional var $current_version; //current version detected var $needed_version; //version needed var $info; //Aux. info (DB vendor, library...) @@ -413,7 +513,7 @@ class environment_results { /** * Set the level - * @param string the level (required, recommended) + * @param string the level (required, optional) */ function setLevel($level) { $this->level=$level; @@ -444,6 +544,4 @@ class environment_results { } } - - ?>