|
Moodle
2.2.1
http://www.collinsharper.com
|
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 }