2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4 * SugarCRM Community Edition is a customer relationship management program developed by
5 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
7 * This program is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Affero General Public License version 3 as published by the
9 * Free Software Foundation with the addition of the following permission added
10 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
19 * You should have received a copy of the GNU Affero General Public License along with
20 * this program; if not, see http://www.gnu.org/licenses or write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU Affero General Public License version 3.
31 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34 * technical reasons, the Appropriate Legal Notices must display the words
35 * "Powered by SugarCRM".
36 ********************************************************************************/
39 $_SESSION['setup_license_accept'] = true;
41 function runCheck($install_script = false, $mod_strings){
42 installLog("Begin System Check Process *************");
44 if( !isset( $install_script ) || !$install_script ){
45 installLog("Error:: ".$mod_strings['ERR_NO_DIRECT_SCRIPT']);
46 die($mod_strings['ERR_NO_DIRECT_SCRIPT']);
49 if(!defined('SUGARCRM_MIN_MEM')) {
50 define('SUGARCRM_MIN_MEM', 40);
55 // for keeping track of whether to enable/disable the 'Next' button
60 // check IIS and FastCGI
61 $server_software = $_SERVER["SERVER_SOFTWARE"];
62 if ((strpos($_SERVER["SERVER_SOFTWARE"],'Microsoft-IIS') !== false)
63 && php_sapi_name() == 'cgi-fcgi'
64 && ini_get('fastcgi.logging') != '0')
66 installLog($mod_strings['ERR_CHECKSYS_FASTCGI_LOGGING']);
67 $iisVersion = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_FASTCGI_LOGGING']}</span></b>";
71 <td><b>'.$mod_strings['LBL_CHECKSYS_FASTCGI'].'</b></td>
72 <td ><span class="error">'.$iisVersion.'</span></td>
76 if(strpos($server_software,'Microsoft-IIS') !== false)
79 if(preg_match_all("/^.*\/(\d+\.?\d*)$/", $server_software, $out))
80 $iis_version = $out[1][0];
82 $check_iis_version_result = check_iis_version($iis_version);
83 if($check_iis_version_result == -1) {
84 installLog($mod_strings['ERR_CHECKSYS_IIS_INVALID_VER'].' '.$iis_version);
85 $iisVersion = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_IIS_INVALID_VER']} {$iis_version}</span></b>";
89 <td><b>'.$mod_strings['LBL_CHECKSYS_IISVER'].'</b></td>
90 <td ><span class="error">'.$iisVersion.'</span></td>
92 } else if(php_sapi_name() != 'cgi-fcgi')
94 installLog($mod_strings['ERR_CHECKSYS_FASTCGI'].' '.$iis_version);
95 $iisVersion = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_FASTCGI']}</span></b>";
99 <td><b>'.$mod_strings['LBL_CHECKSYS_FASTCGI'].'</b></td>
100 <td ><span class="error">'.$iisVersion.'</span></td>
102 } else if(ini_get('fastcgi.logging') != '0')
104 installLog($mod_strings['ERR_CHECKSYS_FASTCGI_LOGGING'].' '.$iis_version);
105 $iisVersion = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_FASTCGI_LOGGING']}</span></b>";
109 <td><b>'.$mod_strings['LBL_CHECKSYS_FASTCGI'].'</b></td>
110 <td ><span class="error">'.$iisVersion.'</span></td>
116 $php_version = constant('PHP_VERSION');
117 $check_php_version_result = check_php_version($php_version);
119 if($check_php_version_result == -1) {
120 installLog($mod_strings['ERR_CHECKSYS_PHP_INVALID_VER'].' '.$php_version);
121 $phpVersion = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_PHP_INVALID_VER']} {$php_version} )</span></b>";
125 <td><b>'.$mod_strings['LBL_CHECKSYS_PHPVER'].'</b></td>
126 <td ><span class="error">'.$phpVersion.'</span></td>
131 //Php Backward compatibility checks
132 if(ini_get("zend.ze1_compatibility_mode")) {
133 installLog($mod_strings['LBL_BACKWARD_COMPATIBILITY_ON'].' '.'Php Backward Compatibility');
134 $phpCompatibility = "<b><span class=stop>{$mod_strings['LBL_BACKWARD_COMPATIBILITY_ON']}</span></b>";
138 <td><b>Php Backward Compatibility</b></td>
139 <td ><span class="error">'.$phpCompatibility.'</span></td>
144 // database and connect
146 if (!empty($_REQUEST['setup_db_type']))
147 $_SESSION['setup_db_type'] = $_REQUEST['setup_db_type'];
151 // Removed php_sqlsrv install support until the driver support is out of beta status
152 $supported_dbs = array("mysql_connect",
158 $db_support_exists = false;
160 foreach ($supported_dbs as $dbfunct){
162 if( function_exists( $dbfunct) ){
163 $db_support_exists = true;
164 installLog("Found at least one supported DB Type");
168 if( !$db_support_exists ){
169 $db_name = $mod_strings['LBL_DB_UNAVAILABLE'];
170 installLog("ERROR:: {$mod_strings['LBL_CHECKSYS_DB_SUPPORT_NOT_AVAILABLE']}");
171 $dbStatus = "<b><span class=stop>{$mod_strings['LBL_CHECKSYS_DB_SUPPORT_NOT_AVAILABLE']}</span></b>";
175 <td><strong>'.$db_name.'</strong></td>
176 <td class="error">'.$dbStatus.'</td>
181 if(!function_exists('xml_parser_create')) {
182 $xmlStatus = "<b><span class=stop>{$mod_strings['LBL_CHECKSYS_XML_NOT_AVAILABLE']}</span></b>";
183 installLog("ERROR:: {$mod_strings['LBL_CHECKSYS_XML_NOT_AVAILABLE']}");
187 <td><strong>'.$mod_strings['LBL_CHECKSYS_XML'].'</strong></td>
188 <td class="error">'.$xmlStatus.'</td>
191 installLog("XML Parsing Support Found");
196 if(!function_exists('mb_strlen')) {
197 $mbstringStatus = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_MBSTRING']}</font></b>";
198 installLog("ERROR:: {$mod_strings['ERR_CHECKSYS_MBSTRING']}");
202 <td><strong>'.$mod_strings['LBL_CHECKSYS_MBSTRING'].'</strong></td>
203 <td class="error">'.$mbstringStatus.'</td>
206 installLog("MBString Support Found");
210 if(!class_exists('ZipArchive')) {
211 $zipStatus = "<b><span class=stop>{$mod_strings['ERR_CHECKSYS_ZIP']}</font></b>";
212 installLog("ERROR:: {$mod_strings['ERR_CHECKSYS_ZIP']}");
214 installLog("ZIP Support Found");
218 if(file_exists('./config.php') && (!(make_writable('./config.php')) || !(is_writable('./config.php')))) {
219 installLog("ERROR:: {$mod_strings['ERR_CHECKSYS_CONFIG_NOT_WRITABLE']}");
220 $configStatus = "<b><span class='stop'>{$mod_strings['ERR_CHECKSYS_CONFIG_NOT_WRITABLE']}</span></b>";
224 <td><strong>'.$mod_strings['LBL_CHECKSYS_CONFIG'].'</strong></td>
225 <td class="error">'.$configStatus.'</td>
230 if(!make_writable('./custom')) {
231 $customStatus = "<b><span class='stop'>{$mod_strings['ERR_CHECKSYS_CUSTOM_NOT_WRITABLE']}</font></b>";
232 installLog("ERROR:: {$mod_strings['ERR_CHECKSYS_CUSTOM_NOT_WRITABLE']}");
236 <td><strong>'.$mod_strings['LBL_CHECKSYS_CUSTOM'].'</strong></td>
237 <td class="error">'.$customStatus.'</td>
240 installLog("/custom directory and subdirectory check passed");
244 if(!make_writable('./data') || !make_writable('./data/upload')) {
245 $dataStatus = "<b><span class='stop'>{$mod_strings['ERR_CHECKSYS_FILES_NOT_WRITABLE']}</span></b>";
246 installLog("ERROR:: {$mod_strings['ERR_CHECKSYS_FILES_NOT_WRITABLE']}");
250 <td><strong>'.$mod_strings['LBL_CHECKSYS_DATA'].'</strong></td>
251 <td class="error">'.$dataStatus
255 <b>'.$mod_strings['LBL_CHECKSYS_FIX_FILES'].'</b>';
256 if(!make_writable('./data')) {
257 $error_txt .='<br>'.getcwd().'/data';
259 if(!make_writable('./data/upload')) {
260 $error_txt .='<br>'.getcwd().'/data/upload';
265 installLog("/data/upoad directory and subdirectory check passed");
270 $cache_files[] = '/cache';
271 $cache_files[] = '/cache/images';
272 $cache_files[] = '/cache/import';
273 $cache_files[] = '/cache/layout';
274 $cache_files[] = '/cache/pdf';
275 $cache_files[] = '/cache/upload';
276 $cache_files[] = '/cache/xml';
279 foreach($cache_files as $c_file)
281 $dirname = ".".$c_file;
283 if ((is_dir($dirname)) || @sugar_mkdir($dirname,0555)) // set permissions to restrictive - use make_writable to change in a standard way to the required permissions
285 $ok = make_writable($dirname);
289 $filelist .= '<br>'.getcwd().$c_file;
293 if (strlen($filelist)>0)
296 installLog("ERROR:: Some subdirectories in cache subfolder were not read/writeable:");
297 installLog($filelist);
300 <td><strong>'.$mod_strings['LBL_CHECKSYS_CACHE'].'</strong></td>
301 <td align="right" class="error" class="error"><b><span class="stop">'.$mod_strings['ERR_CHECKSYS_FILES_NOT_WRITABLE'].'</span></b></td>
304 <td colspan="2"><b>'.$mod_strings['LBL_CHECKSYS_FIX_FILES'].'</b>'.$filelist. '</td>
307 installLog("/cache directory and subdirectory check passed");
312 $_SESSION['unwriteable_module_files'] = array();
313 //if(!$writeableFiles['ret_val']) {
314 $passed_write = recursive_make_writable('./modules');
315 if (isset($_SESSION['unwriteable_module_files']['failed']) && $_SESSION['unwriteable_module_files']['failed']){
316 $passed_write = false;
321 $moduleStatus = "<b><span class='stop'>{$mod_strings['ERR_CHECKSYS_NOT_WRITABLE']}</span></b>";
322 installLog("ERROR:: Module directories and the files under them are not writeable.");
326 <td><strong>'.$mod_strings['LBL_CHECKSYS_MODULE'].'</strong></td>
327 <td align="right" class="error">'.$moduleStatus.'</td>
330 //list which module directories are not writeable, if there are less than 10
334 <b>'.$mod_strings['LBL_CHECKSYS_FIX_MODULE_FILES'].'</b>';
335 foreach($_SESSION['unwriteable_module_files'] as $key=>$file){
336 if($key !='.' && $key != 'failed'){
337 $error_txt .='<br>'.$file;
345 installLog("/module directory and subdirectory check passed");
351 $phpIniLocation = get_cfg_var("cfg_file_path");
352 installLog("php.ini location found. {$phpIniLocation}");
353 // disable form if error found
356 installLog("Outputting HTML for System check");
357 installLog("Errors were found *************");
358 $disabled = $error_found ? 'disabled="disabled"' : '';
360 $help_url = get_help_button_url();
361 ///////////////////////////////////////////////////////////////////////////////
362 //// BEGIN PAGE OUTPUT
365 <table cellspacing="0" cellpadding="0" border="0" align="center" class="shell">
367 <th width="400">{$mod_strings['LBL_CHECKSYS_TITLE']}</th>
368 <th width="200" height="30" style="text-align: right;"><a href="http://www.sugarcrm.com" target=
369 "_blank"><IMG src="include/images/sugarcrm_login.png" width="145" height="30" alt="SugarCRM" border="0"></a>
370 <br><a href="{$help_url}" target='_blank'>{$mod_strings['LBL_HELP']} </a>
375 <td colspan="2" width="600">
376 <p>{$mod_strings['ERR_CHECKSYS']}</p>
378 <table cellpadding="0" cellspacing="0" border="0" width="100%" class="StyleDottedHr">
380 <th align="left">{$mod_strings['LBL_CHECKSYS_COMPONENT']}</th>
381 <th style="text-align: right;">{$mod_strings['LBL_CHECKSYS_STATUS']}</th>
387 <div align="center" style="margin: 5px;">
388 <i>{$mod_strings['LBL_CHECKSYS_PHP_INI']}<br>{$phpIniLocation}</i>
394 <td align="right" colspan="2">
396 <form action="install3.php" method="post" name="theForm" id="theForm">
398 <table cellspacing="0" cellpadding="0" border="0" class="stdTable">
400 <td><input class="button" type="button" onclick="window.open('http://www.sugarcrm.com/forums/');" value="{$mod_strings['LBL_HELP']}" /></td>
402 <input class="button" type="button" name="Re-check" value="{$mod_strings['LBL_CHECKSYS_RECHECK']}" onclick="callSysCheck();" id="button_next2"/>
413 installLog("Outputting HTML for System check");
414 installLog("No Errors were found *************");
420 ///////////////////////////////////////////////////////////////////////////////