Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/environmentlib.php
Go to the documentation of this file.
00001 <?php
00002 
00003 // This file is part of Moodle - http://moodle.org/
00004 //
00005 // Moodle is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // Moodle is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
00017 
00032 defined('MOODLE_INTERNAL') || die();
00033 
00035 
00038     require_once($CFG->libdir.'/xmlize.php');
00039 
00041 
00042     define('NO_ERROR',                           0);
00044     define('NO_VERSION_DATA_FOUND',              1);
00046     define('NO_DATABASE_SECTION_FOUND',          2);
00048     define('NO_DATABASE_VENDORS_FOUND',          3);
00050     define('NO_DATABASE_VENDOR_MYSQL_FOUND',     4);
00052     define('NO_DATABASE_VENDOR_POSTGRES_FOUND',  5);
00054     define('NO_PHP_SECTION_FOUND',               6);
00056     define('NO_PHP_VERSION_FOUND',               7);
00058     define('NO_PHP_EXTENSIONS_SECTION_FOUND',    8);
00060     define('NO_PHP_EXTENSIONS_NAME_FOUND',       9);
00062     define('NO_DATABASE_VENDOR_VERSION_FOUND',  10);
00064     define('NO_UNICODE_SECTION_FOUND',          11);
00066     define('NO_CUSTOM_CHECK_FOUND',             12);
00068     define('CUSTOM_CHECK_FILE_MISSING',         13);
00070     define('CUSTOM_CHECK_FUNCTION_MISSING',     14);
00072     define('NO_PHP_SETTINGS_NAME_FOUND',        15);
00073 
00075 
00076     define('ENV_SELECT_NEWER',                   0);
00078     define('ENV_SELECT_DATAROOT',                1);
00080     define('ENV_SELECT_RELEASE',                 2);
00081 
00095 function check_moodle_environment($version, $env_select = ENV_SELECT_NEWER) {
00096 
00097     $status = true;
00098 
00100     static $result = true;
00101     static $env_results;
00102     static $cache_exists = false;
00103 
00105     if ($cache_exists) {
00106         $environment_results = $env_results;
00108     } else {
00110         if (!$version = get_latest_version_available($version, $env_select)) {
00111             $status = false;
00112         }
00113 
00115         if (!($environment_results = environment_check($version, $env_select)) && $status) {
00116             $status = false;
00117         }
00118 
00121         if ($status) {
00122             foreach ($environment_results as $environment_result) {
00123                 if (!$environment_result->getStatus() && $environment_result->getLevel() == 'required'
00124                   && !$environment_result->getBypassStr()) {
00125                     $result = false; // required item that is not bypased
00126                 } else if ($environment_result->getStatus() && $environment_result->getLevel() == 'required'
00127                   && $environment_result->getRestrictStr()) {
00128                     $result = false; // required item that is restricted
00129                 } else if ($environment_result->getErrorCode()) {
00130                     $result = false;
00131                 }
00132             }
00133         }
00135         $env_results = $environment_results;
00136         $cache_exists = true;
00137     } 
00138 
00139     return array($result && $status, $environment_results);
00140 }
00141 
00142 
00148 function environment_get_errors($environment_results) {
00149     global $CFG;
00150     $errors = array();
00151 
00152     // Iterate over each environment_result
00153     foreach ($environment_results as $environment_result) {
00154         $type = $environment_result->getPart();
00155         $info = $environment_result->getInfo();
00156         $status = $environment_result->getStatus();
00157         $error_code = $environment_result->getErrorCode();
00158 
00159         $a = new stdClass();
00160         if ($error_code) {
00161             $a->error_code = $error_code;
00162             $errors[] = array($info, get_string('environmentxmlerror', 'admin', $a));
00163             return $errors;
00164         }
00165 
00167         if ($environment_result->getBypassStr() != '') {
00168             // not interesting
00169             continue;
00170         } else if ($environment_result->getRestrictStr() != '') {
00171             // error
00172         } else {
00173             if ($status) {
00174                 // ok
00175                 continue;
00176             } else {
00177                 if ($environment_result->getLevel() == 'optional') {
00178                     // just a warning
00179                     continue;
00180                 } else {
00181                     // error
00182                 }
00183             }
00184         }
00185 
00186         // We are comparing versions
00187         $rec = new stdClass();
00188         if ($rec->needed = $environment_result->getNeededVersion()) {
00189             $rec->current = $environment_result->getCurrentVersion();
00190             if ($environment_result->getLevel() == 'required') {
00191                 $stringtouse = 'environmentrequireversion';
00192             } else {
00193                 $stringtouse = 'environmentrecommendversion';
00194             }
00195         // We are checking installed & enabled things
00196         } else if ($environment_result->getPart() == 'custom_check') {
00197             if ($environment_result->getLevel() == 'required') {
00198                 $stringtouse = 'environmentrequirecustomcheck';
00199             } else {
00200                 $stringtouse = 'environmentrecommendcustomcheck';
00201             }
00202         } else if ($environment_result->getPart() == 'php_setting') {
00203             if ($status) {
00204                 $stringtouse = 'environmentsettingok';
00205             } else if ($environment_result->getLevel() == 'required') {
00206                 $stringtouse = 'environmentmustfixsetting';
00207             } else {
00208                 $stringtouse = 'environmentshouldfixsetting';
00209             }
00210         } else {
00211             if ($environment_result->getLevel() == 'required') {
00212                 $stringtouse = 'environmentrequireinstall';
00213             } else {
00214                 $stringtouse = 'environmentrecommendinstall';
00215             }
00216         }
00217         $report = get_string($stringtouse, 'admin', $rec);
00218 
00219         // Here we'll store all the feedback found
00220         $feedbacktext = '';
00221         // Append  the feedback if there is some
00222         $feedbacktext .= $environment_result->strToReport($environment_result->getFeedbackStr(), 'error');
00223         // Append the restrict if there is some
00224         $feedbacktext .= $environment_result->strToReport($environment_result->getRestrictStr(), 'error');
00225 
00226         $report .= html_to_text($feedbacktext);
00227 
00228         if ($environment_result->getPart() == 'custom_check'){
00229             $errors[] = array($info, $report);
00230         } else {
00231             $errors[] = array(($info !== '' ? "$type $info" : $type), $report);
00232         }
00233     }
00234 
00235     return $errors;
00236 }
00237 
00238 
00246 function normalize_version($version) {
00247 
00250     $version = trim($version);
00251     $versionarr = explode(" ",$version);
00252     if (!empty($versionarr)) {
00253         $version = $versionarr[0];
00254     }
00256     $version = preg_replace('/[^\.\d]/', '.', $version);
00258     $version = preg_replace('/(\.{2,})/', '.', $version);
00260     $version = trim($version, '.');
00261 
00262     return $version;
00263 }
00264 
00265 
00277 function load_environment_xml($env_select=ENV_SELECT_NEWER) {
00278 
00279     global $CFG;
00280 
00281     static $data; //Only load and xmlize once by request
00282 
00283     if (!empty($data)) {
00284         return $data;
00285     }
00286 
00288     $file = $CFG->dataroot.'/environment/environment.xml';
00289     $internalfile = $CFG->dirroot.'/'.$CFG->admin.'/environment.xml';
00290     switch ($env_select) {
00291         case ENV_SELECT_NEWER:
00292             if (!is_file($file) || !is_readable($file) || filemtime($file) < filemtime($internalfile) ||
00293                 !$contents = file_get_contents($file)) {
00295                 if (!is_file($internalfile) || !is_readable($internalfile) || !$contents = file_get_contents($internalfile)) {
00296                     return false;
00297                 }
00298             }
00299             break;
00300         case ENV_SELECT_DATAROOT:
00301             if (!is_file($file) || !is_readable($file) || !$contents = file_get_contents($file)) {
00302                 return false;
00303             }
00304             break;
00305         case ENV_SELECT_RELEASE:
00306             if (!is_file($internalfile) || !is_readable($internalfile) || !$contents = file_get_contents($internalfile)) {
00307                 return false;
00308             }
00309             break;
00310     }
00312     $data = xmlize($contents);
00313 
00314     return $data;
00315 }
00316 
00317 
00324 function get_list_of_environment_versions ($contents) {
00325 
00326     static $versions = array();
00327 
00328     if (!empty($versions)) {
00329         return $versions;
00330     }
00331 
00332     if (isset($contents['COMPATIBILITY_MATRIX']['#']['MOODLE'])) {
00333         foreach ($contents['COMPATIBILITY_MATRIX']['#']['MOODLE'] as $version) {
00334             $versions[] = $version['@']['version'];
00335         }
00336     }
00337 
00338     return $versions;
00339 }
00340 
00341 
00350 function get_latest_version_available ($version, $env_select) {
00351 
00353     $version = normalize_version($version);
00354 
00356     if (!$contents = load_environment_xml($env_select)) {
00357         return false;
00358     }
00359 
00361     if (!$versions = get_list_of_environment_versions($contents)) {
00362         return false;
00363     }
00365     if (in_array($version, $versions)) {
00366         return $version;
00367     } else {
00368         $found_version = false;
00371         foreach ($versions as $arrversion) {
00372             if (version_compare($arrversion, $version, '<')) {
00373                 $found_version = $arrversion;
00374             }
00375         }
00376     }
00377 
00378     return $found_version;
00379 }
00380 
00381 
00389 function get_environment_for_version($version, $env_select) {
00390 
00392     $version = normalize_version($version);
00393 
00395     if (!$contents = load_environment_xml($env_select)) {
00396         return false;
00397     }
00398 
00400     if (!$versions = get_list_of_environment_versions($contents)) {
00401         return false;
00402     }
00403 
00405     if (!in_array($version, $versions)) {
00406         return false;
00407     }
00408 
00410     $fl_arr = array_flip($versions);
00411 
00412     return $contents['COMPATIBILITY_MATRIX']['#']['MOODLE'][$fl_arr[$version]];
00413 }
00414 
00415 
00425 function environment_check($version, $env_select) {
00426     global $CFG;
00427 
00429     $version = normalize_version($version);
00430 
00431     $results = array(); //To store all the results
00432 
00434     if (!empty($CFG->version)) {
00435         $results[] = environment_check_moodle($version, $env_select);
00436     }
00437     $results[] = environment_check_unicode($version, $env_select);
00438     $results[] = environment_check_database($version, $env_select);
00439     $results[] = environment_check_php($version, $env_select);
00440 
00441     $phpext_results = environment_check_php_extensions($version, $env_select);
00442     $results = array_merge($results, $phpext_results);
00443 
00444     $phpsetting_results = environment_check_php_settings($version, $env_select);
00445     $results = array_merge($results, $phpsetting_results);
00446 
00447     $custom_results = environment_custom_checks($version, $env_select);
00448     $results = array_merge($results, $custom_results);
00449 
00450     return $results;
00451 }
00452 
00453 
00464 function environment_check_php_extensions($version, $env_select) {
00465 
00466     $results = array();
00467 
00469     if (!$data = get_environment_for_version($version, $env_select)) {
00471         $result = new environment_results('php_extension');
00472         $result->setStatus(false);
00473         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00474         return array($result);
00475     }
00476 
00478     if (!isset($data['#']['PHP_EXTENSIONS']['0']['#']['PHP_EXTENSION'])) {
00480         $result = new environment_results('php_extension');
00481         $result->setStatus(false);
00482         $result->setErrorCode(NO_PHP_EXTENSIONS_SECTION_FOUND);
00483         return array($result);
00484     }
00486     foreach($data['#']['PHP_EXTENSIONS']['0']['#']['PHP_EXTENSION'] as $extension) {
00487         $result = new environment_results('php_extension');
00489         $level = get_level($extension);
00491         if (!isset($extension['@']['name'])) {
00492             $result->setStatus(false);
00493             $result->setErrorCode(NO_PHP_EXTENSIONS_NAME_FOUND);
00494         } else {
00495             $extension_name = $extension['@']['name'];
00497             if (!extension_loaded($extension_name)) {
00498                 $result->setStatus(false);
00499             } else {
00500                 $result->setStatus(true);
00501             }
00502             $result->setLevel($level);
00503             $result->setInfo($extension_name);
00504         }
00505 
00507         process_environment_result($extension, $result);
00508 
00510         $results[] = $result;
00511     }
00512 
00513 
00514     return $results;
00515 }
00516 
00526 function environment_check_php_settings($version, $env_select) {
00527 
00528     $results = array();
00529 
00531     if (!$data = get_environment_for_version($version, $env_select)) {
00533         $result = new environment_results('php_setting');
00534         $result->setStatus(false);
00535         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00536         $results[] = $result;
00537         return $results;
00538     }
00539 
00541     if (!isset($data['#']['PHP_SETTINGS']['0']['#']['PHP_SETTING'])) {
00543         return $results;
00544     }
00546     foreach($data['#']['PHP_SETTINGS']['0']['#']['PHP_SETTING'] as $setting) {
00547         $result = new environment_results('php_setting');
00549         $level = get_level($setting);
00550         $result->setLevel($level);
00552         if (!isset($setting['@']['name'])) {
00553             $result->setStatus(false);
00554             $result->setErrorCode(NO_PHP_SETTINGS_NAME_FOUND);
00555         } else {
00556             $setting_name  = $setting['@']['name'];
00557             $setting_value = $setting['@']['value'];
00558             $result->setInfo($setting_name);
00559 
00560             if ($setting_name == 'memory_limit') {
00561                 $current = ini_get('memory_limit');
00562                 if ($current == -1) {
00563                     $result->setStatus(true);
00564                 } else {
00565                     $current  = get_real_size($current);
00566                     $minlimit = get_real_size($setting_value);
00567                     if ($current < $minlimit) {
00568                         @ini_set('memory_limit', $setting_value);
00569                         $current = ini_get('memory_limit');
00570                         $current = get_real_size($current);
00571                     }
00572                     $result->setStatus($current >= $minlimit);
00573                 }
00574 
00575             } else {
00576                 $current = ini_get_bool($setting_name);
00578                 if ($current == $setting_value) {
00579                     $result->setStatus(true);
00580                 } else {
00581                     $result->setStatus(false);
00582                 }
00583             }
00584         }
00585 
00587         process_environment_result($setting, $result);
00588 
00590         $results[] = $result;
00591     }
00592 
00593 
00594     return $results;
00595 }
00596 
00608 function environment_custom_checks($version, $env_select) {
00609     global $CFG;
00610 
00611     $results = array();
00612 
00614     $release = isset($CFG->release) ? $CFG->release : $version; 
00615     $current_version = normalize_version($release);
00616 
00618     if (!$data = get_environment_for_version($version, $env_select)) {
00620         return $results;
00621     }
00622 
00624     if (!isset($data['#']['CUSTOM_CHECKS']['0']['#']['CUSTOM_CHECK'])) {
00626         return $results;
00627     }
00628 
00630     foreach($data['#']['CUSTOM_CHECKS']['0']['#']['CUSTOM_CHECK'] as $check) {
00631         $result = new environment_results('custom_check');
00632 
00634         $level = get_level($check);
00635 
00637         if (isset($check['@']['file']) && isset($check['@']['function'])) {
00638             $file = $CFG->dirroot . '/' . $check['@']['file'];
00639             $function = $check['@']['function'];
00640             if (is_readable($file)) {
00641                 include_once($file);
00642                 if (function_exists($function)) {
00643                     $result->setLevel($level);
00644                     $result->setInfo($function);
00645                     $result = $function($result);
00646                 } else {
00651                     if (version_compare($current_version, $version, '>=')) {
00652                         $result->setStatus(false);
00653                         $result->setInfo($function);
00654                         $result->setErrorCode(CUSTOM_CHECK_FUNCTION_MISSING);
00655                     } else {
00656                         $result = null;
00657                     }
00658                 }
00659             } else {
00664                 if (version_compare($current_version, $version, '>=')) {
00665                     $result->setStatus(false);
00666                     $result->setInfo($function);
00667                     $result->setErrorCode(CUSTOM_CHECK_FILE_MISSING);
00668                 } else {
00669                     $result = null;
00670                 }
00671             }
00672         } else {
00673             $result->setStatus(false);
00674             $result->setErrorCode(NO_CUSTOM_CHECK_FOUND);
00675         }
00676 
00677         if (!is_null($result)) {
00679             process_environment_result($check, $result);
00680 
00682             $results[] = $result;
00683         }
00684     }
00685 
00686     return $results;
00687 }
00688 
00697 function environment_check_moodle($version, $env_select) {
00698 
00699     $result = new environment_results('moodle');
00700 
00702     if (!$data = get_environment_for_version($version, $env_select)) {
00704         $result->setStatus(false);
00705         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00706         return $result;
00707     }
00708 
00710     if (!isset($data['@']['requires'])) {
00711         $needed_version = '1.0'; 
00712     } else {
00714         $needed_version = $data['@']['requires'];
00715     }
00716 
00718     $current_version = normalize_version(get_config('', 'release'));
00719 
00721     if (version_compare($current_version, $needed_version, '>=')) {
00722         $result->setStatus(true);
00723     } else {
00724         $result->setStatus(false);
00725     }
00726     $result->setLevel('required');
00727     $result->setCurrentVersion($current_version);
00728     $result->setNeededVersion($needed_version);
00729 
00730     return $result;
00731 }
00732 
00743 function environment_check_php($version, $env_select) {
00744 
00745     $result = new environment_results('php');
00746 
00748     if (!$data = get_environment_for_version($version, $env_select)) {
00750         $result->setStatus(false);
00751         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00752         return $result;
00753     }
00754 
00756     if (!isset($data['#']['PHP'])) {
00758         $result->setStatus(false);
00759         $result->setErrorCode(NO_PHP_SECTION_FOUND);
00760         return $result;
00761     } else {
00763         $level = get_level($data['#']['PHP']['0']);
00764         if (!isset($data['#']['PHP']['0']['@']['version'])) {
00765             $result->setStatus(false);
00766             $result->setErrorCode(NO_PHP_VERSION_FOUND);
00767             return $result;
00768         } else {
00769             $needed_version = $data['#']['PHP']['0']['@']['version'];
00770         }
00771     }
00772 
00774     $current_version = normalize_version(phpversion());
00775 
00777     if (version_compare($current_version, $needed_version, '>=')) {
00778         $result->setStatus(true);
00779     } else {
00780         $result->setStatus(false);
00781     }
00782     $result->setLevel($level);
00783     $result->setCurrentVersion($current_version);
00784     $result->setNeededVersion($needed_version);
00785 
00787     process_environment_result($data['#']['PHP'][0], $result);
00788 
00789     return $result;
00790 }
00791 
00792 
00803 function environment_check_unicode($version, $env_select) {
00804     global $DB;
00805 
00806     $result = new environment_results('unicode');
00807 
00809     if (!$data = get_environment_for_version($version, $env_select)) {
00811         $result->setStatus(false);
00812         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00813         return $result;
00814     }
00815 
00817 
00818     if (!isset($data['#']['UNICODE'])) {
00820         $result->setStatus(false);
00821         $result->setErrorCode(NO_UNICODE_SECTION_FOUND);
00822         return $result;
00823     } else {
00825         $level = get_level($data['#']['UNICODE']['0']);
00826     }
00827 
00828     if (!$unicodedb = $DB->setup_is_unicodedb()) {
00829         $result->setStatus(false);
00830     } else {
00831         $result->setStatus(true);
00832     }
00833 
00834     $result->setLevel($level);
00835 
00837     process_environment_result($data['#']['UNICODE'][0], $result);
00838 
00839     return $result;
00840 }
00841 
00856 function environment_check_database($version, $env_select) {
00857 
00858     global $DB;
00859 
00860     $result = new environment_results('database');
00861 
00862     $vendors = array();  //Array of vendors in version
00863 
00865     if (!$data = get_environment_for_version($version, $env_select)) {
00867         $result->setStatus(false);
00868         $result->setErrorCode(NO_VERSION_DATA_FOUND);
00869         return $result;
00870     }
00871 
00873     if (!isset($data['#']['DATABASE'])) {
00875         $result->setStatus(false);
00876         $result->setErrorCode(NO_DATABASE_SECTION_FOUND);
00877         return $result;
00878     } else {
00880         $level = get_level($data['#']['DATABASE']['0']);
00881     }
00882 
00884     if (!isset($data['#']['DATABASE']['0']['#']['VENDOR'])) {
00886         $result->setStatus(false);
00887         $result->setErrorCode(NO_DATABASE_VENDORS_FOUND);
00888         return $result;
00889     } else {
00891         foreach ($data['#']['DATABASE']['0']['#']['VENDOR'] as $vendor) {
00892             if (isset($vendor['@']['name']) && isset($vendor['@']['version'])) {
00893                 $vendors[$vendor['@']['name']] = $vendor['@']['version'];
00894                 $vendorsxml[$vendor['@']['name']] = $vendor;
00895             }
00896         }
00897     }
00899     if (empty($vendors['mysql'])) {
00900         $result->setStatus(false);
00901         $result->setErrorCode(NO_DATABASE_VENDOR_MYSQL_FOUND);
00902         return $result;
00903     }
00905     if (empty($vendors['postgres'])) {
00906         $result->setStatus(false);
00907         $result->setErrorCode(NO_DATABASE_VENDOR_POSTGRES_FOUND);
00908         return $result;
00909     }
00910 
00912     $current_vendor = $DB->get_dbfamily();
00913 
00914     $dbinfo = $DB->get_server_info();
00915     $current_version = normalize_version($dbinfo['version']);
00916     $needed_version = $vendors[$current_vendor];
00917 
00919     if (!$needed_version) {
00920         $result->setStatus(false);
00921         $result->setErrorCode(NO_DATABASE_VENDOR_VERSION_FOUND);
00922         return $result;
00923     }
00924 
00926     if (version_compare($current_version, $needed_version, '>=')) {
00927         $result->setStatus(true);
00928     } else {
00929         $result->setStatus(false);
00930     }
00931     $result->setLevel($level);
00932     $result->setCurrentVersion($current_version);
00933     $result->setNeededVersion($needed_version);
00934     $result->setInfo($current_vendor);
00935 
00937     process_environment_result($vendorsxml[$current_vendor], $result);
00938 
00939     return $result;
00940 
00941 }
00942 
00956 function process_environment_bypass($xml, &$result) {
00957 
00959     if ($result->getStatus() || $result->getLevel() == 'optional') {
00960         return;
00961     }
00962 
00964     if (is_array($xml['#']) && isset($xml['#']['BYPASS'][0]['@']['function']) && isset($xml['#']['BYPASS'][0]['@']['message'])) {
00965         $function = $xml['#']['BYPASS'][0]['@']['function'];
00966         $message  = $xml['#']['BYPASS'][0]['@']['message'];
00968         if (function_exists($function)) {
00970             if ($function($result)) {
00972                 if (empty($result->getBypassStr)) {
00973                     $result->setBypassStr($message);
00974                 }
00975             }
00976         }
00977     }
00978 }
00979 
00993 function process_environment_restrict($xml, &$result) {
00994 
00996     if (!$result->getStatus() || $result->getLevel() == 'optional') {
00997         return;
00998     }
01000     if (is_array($xml['#']) && isset($xml['#']['RESTRICT'][0]['@']['function']) && isset($xml['#']['RESTRICT'][0]['@']['message'])) {
01001         $function = $xml['#']['RESTRICT'][0]['@']['function'];
01002         $message  = $xml['#']['RESTRICT'][0]['@']['message'];
01004         if (function_exists($function)) {
01006             if ($function($result)) {
01008                 if (empty($result->getRestrictStr)) {
01009                     $result->setRestrictStr($message);
01010                 }
01011             }
01012         }
01013     }
01014 }
01015 
01023 function process_environment_messages($xml, &$result) {
01024 
01026     if (is_array($xml['#']) && isset($xml['#']['FEEDBACK'][0]['#'])) {
01027         $feedbackxml = $xml['#']['FEEDBACK'][0]['#'];
01028 
01029         if (!$result->status and $result->getLevel() == 'required') {
01030             if (isset($feedbackxml['ON_ERROR'][0]['@']['message'])) {
01031                 $result->setFeedbackStr($feedbackxml['ON_ERROR'][0]['@']['message']);
01032             }
01033         } else if (!$result->status and $result->getLevel() == 'optional') {
01034             if (isset($feedbackxml['ON_CHECK'][0]['@']['message'])) {
01035                 $result->setFeedbackStr($feedbackxml['ON_CHECK'][0]['@']['message']);
01036             }
01037         } else {
01038             if (isset($feedbackxml['ON_OK'][0]['@']['message'])) {
01039                 $result->setFeedbackStr($feedbackxml['ON_OK'][0]['@']['message']);
01040             }
01041         }
01042     }
01043 }
01044 
01045 
01046 //--- Helper Class to return results to caller ---//
01047 
01048 
01056 class environment_results {
01060     var $part;
01064     var $status;
01068     var $error_code;
01072     var $level;
01076     var $current_version;
01080     var $needed_version;
01084     var $info;
01088     var $feedback_str;
01092     var $bypass_str;
01096     var $restrict_str;
01097 
01103     function environment_results($part) {
01104         $this->part=$part;
01105         $this->status=false;
01106         $this->error_code=NO_ERROR;
01107         $this->level='required';
01108         $this->current_version='';
01109         $this->needed_version='';
01110         $this->info='';
01111         $this->feedback_str='';
01112         $this->bypass_str='';
01113         $this->restrict_str='';
01114     }
01115 
01121     function setStatus($status) {
01122         $this->status=$status;
01123         if ($status) {
01124             $this->setErrorCode(NO_ERROR);
01125         }
01126     }
01127 
01133     function setErrorCode($error_code) {
01134         $this->error_code=$error_code;
01135     }
01136 
01142     function setLevel($level) {
01143         $this->level=$level;
01144     }
01145 
01151     function setCurrentVersion($current_version) {
01152         $this->current_version=$current_version;
01153     }
01154 
01160     function setNeededVersion($needed_version) {
01161         $this->needed_version=$needed_version;
01162     }
01163 
01169     function setInfo($info) {
01170         $this->info=$info;
01171     }
01172 
01181     function setFeedbackStr($str) {
01182         $this->feedback_str=$str;
01183     }
01184 
01185 
01194     function setBypassStr($str) {
01195         $this->bypass_str=$str;
01196     }
01197 
01206     function setRestrictStr($str) {
01207         $this->restrict_str=$str;
01208     }
01209 
01215     function getStatus() {
01216         return $this->status;
01217     }
01218 
01224     function getErrorCode() {
01225         return $this->error_code;
01226     }
01227 
01233     function getLevel() {
01234         return $this->level;
01235     }
01236 
01242     function getCurrentVersion() {
01243         return $this->current_version;
01244     }
01245 
01251     function getNeededVersion() {
01252         return $this->needed_version;
01253     }
01254 
01260     function getInfo() {
01261         return $this->info;
01262     }
01263 
01269     function getPart() {
01270         return $this->part;
01271     }
01272 
01279     function getFeedbackStr() {
01280         return $this->feedback_str;
01281     }
01282 
01289     function getBypassStr() {
01290         return $this->bypass_str;
01291     }
01292 
01299     function getRestrictStr() {
01300         return $this->restrict_str;
01301     }
01302 
01312     function strToReport($string, $class){
01313         if (!empty($string)){
01314             if (is_array($string)){
01315                 $str = call_user_func_array('get_string', $string);
01316             } else {
01317                 $str = get_string($string, 'admin');
01318             }
01319             return '<p class="'.$class.'">'.$str.'</p>';
01320         } else {
01321             return '';
01322         }
01323     }
01324 }
01325 
01329 
01337 function bypass_mysql416_reqs ($result) {
01339     if (version_compare($result->getCurrentVersion(), '4.1.12', '>=')) {
01340         return true;
01341     }
01342 
01343     return false;
01344 }
01345 
01349 
01357 function restrict_php50_version($result) {
01358     if (version_compare($result->getCurrentVersion(), '5.0.0', '>=')
01359       and version_compare($result->getCurrentVersion(), '5.0.99', '<')) {
01360         return true;
01361     }
01362     return false;
01363 }
01364 
01370 function get_level($element) {
01371     $level = 'required';
01372     if (isset($element['@']['level'])) {
01373         $level = $element['@']['level'];
01374         if (!in_array($level, array('required', 'optional'))) {
01375             debugging('The level of a check in the environment.xml file must be "required" or "optional".', DEBUG_DEVELOPER);
01376             $level = 'required';
01377         }
01378     } else {
01379         debugging('Checks in the environment.xml file must have a level="required" or level="optional" attribute.', DEBUG_DEVELOPER);
01380     }
01381     return $level;
01382 }
01383 
01393 function process_environment_result($element, &$result) {
01395     process_environment_messages($element, $result);
01397     process_environment_bypass($element, $result);
01399     process_environment_restrict($element, $result);
01400 }
 All Data Structures Namespaces Files Functions Variables Enumerations