adamjakab /
SuiteCRM
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | if(!defined('sugarEntry'))define('sugarEntry', true); |
||
| 3 | /********************************************************************************* |
||
| 4 | * SugarCRM Community Edition is a customer relationship management program developed by |
||
| 5 | * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. |
||
| 6 | |||
| 7 | * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd. |
||
| 8 | * Copyright (C) 2011 - 2014 Salesagility Ltd. |
||
| 9 | * |
||
| 10 | * This program is free software; you can redistribute it and/or modify it under |
||
| 11 | * the terms of the GNU Affero General Public License version 3 as published by the |
||
| 12 | * Free Software Foundation with the addition of the following permission added |
||
| 13 | * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK |
||
| 14 | * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY |
||
| 15 | * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. |
||
| 16 | * |
||
| 17 | * This program is distributed in the hope that it will be useful, but WITHOUT |
||
| 18 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
||
| 19 | * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more |
||
| 20 | * details. |
||
| 21 | * |
||
| 22 | * You should have received a copy of the GNU Affero General Public License along with |
||
| 23 | * this program; if not, see http://www.gnu.org/licenses or write to the Free |
||
| 24 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
||
| 25 | * 02110-1301 USA. |
||
| 26 | * |
||
| 27 | * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, |
||
| 28 | * SW2-130, Cupertino, CA 95014, USA. or at email address [email protected]. |
||
| 29 | * |
||
| 30 | * The interactive user interfaces in modified source and object code versions |
||
| 31 | * of this program must display Appropriate Legal Notices, as required under |
||
| 32 | * Section 5 of the GNU Affero General Public License version 3. |
||
| 33 | * |
||
| 34 | * In accordance with Section 7(b) of the GNU Affero General Public License version 3, |
||
| 35 | * these Appropriate Legal Notices must retain the display of the "Powered by |
||
| 36 | * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not |
||
| 37 | * reasonably feasible for technical reasons, the Appropriate Legal Notices must |
||
| 38 | * display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM". |
||
| 39 | ********************************************************************************/ |
||
| 40 | |||
| 41 | @session_start(); |
||
|
0 ignored issues
–
show
|
|||
| 42 | if(isset($_REQUEST['clear_session']) || !empty($_SESSION['loginAttempts'])) { |
||
| 43 | session_destroy(); |
||
| 44 | header('Location: install.php'); |
||
| 45 | echo 'session clean, page refresh...'; |
||
| 46 | exit; |
||
| 47 | } |
||
| 48 | |||
| 49 | // recover smtp settings |
||
| 50 | if(isset($_POST['smtp_tab_selected'])) { |
||
| 51 | $_POST = array_merge($_POST, $_POST[$_POST['smtp_tab_selected']]); |
||
| 52 | } |
||
| 53 | |||
| 54 | //session_destroy(); |
||
| 55 | if (version_compare(phpversion(),'5.2.0') < 0) { |
||
| 56 | $msg = 'Minimum PHP version required is 5.2.0. You are using PHP version '. phpversion(); |
||
| 57 | die($msg); |
||
| 58 | } |
||
| 59 | $session_id = session_id(); |
||
| 60 | if(empty($session_id)){ |
||
| 61 | @session_start(); |
||
| 62 | } |
||
| 63 | $GLOBALS['installing'] = true; |
||
| 64 | define('SUGARCRM_IS_INSTALLING', $GLOBALS['installing']); |
||
| 65 | $GLOBALS['sql_queries'] = 0; |
||
| 66 | require_once('include/SugarLogger/LoggerManager.php'); |
||
| 67 | require_once('sugar_version.php'); |
||
| 68 | require_once('suitecrm_version.php'); |
||
| 69 | require_once('include/utils.php'); |
||
| 70 | require_once('install/install_utils.php'); |
||
| 71 | require_once('install/install_defaults.php'); |
||
| 72 | require_once('include/TimeDate.php'); |
||
| 73 | require_once('include/Localization/Localization.php'); |
||
| 74 | require_once('include/SugarTheme/SugarTheme.php'); |
||
| 75 | require_once('include/utils/LogicHook.php'); |
||
| 76 | require_once('data/SugarBean.php'); |
||
| 77 | require_once('include/entryPoint.php'); |
||
| 78 | //check to see if the script files need to be rebuilt, add needed variables to request array |
||
| 79 | $_REQUEST['root_directory'] = getcwd(); |
||
| 80 | $_REQUEST['js_rebuild_concat'] = 'rebuild'; |
||
| 81 | if(isset($_REQUEST['goto']) && $_REQUEST['goto'] != 'SilentInstall') { |
||
| 82 | require_once('jssource/minify.php'); |
||
| 83 | } |
||
| 84 | |||
| 85 | $timedate = TimeDate::getInstance(); |
||
| 86 | // cn: set php.ini settings at entry points |
||
| 87 | setPhpIniSettings(); |
||
| 88 | $locale = new Localization(); |
||
| 89 | |||
| 90 | if(get_magic_quotes_gpc() == 1) { |
||
| 91 | $_REQUEST = array_map("stripslashes_checkstrings", $_REQUEST); |
||
| 92 | $_POST = array_map("stripslashes_checkstrings", $_POST); |
||
| 93 | $_GET = array_map("stripslashes_checkstrings", $_GET); |
||
| 94 | } |
||
| 95 | |||
| 96 | |||
| 97 | $GLOBALS['log'] = LoggerManager::getLogger('SugarCRM'); |
||
| 98 | $setup_sugar_version = $suitecrm_version; |
||
| 99 | $install_script = true; |
||
| 100 | |||
| 101 | /////////////////////////////////////////////////////////////////////////////// |
||
| 102 | //// INSTALL RESOURCE SETUP |
||
| 103 | $css = 'install/install.css'; |
||
| 104 | $icon = 'include/images/sugar_icon.ico'; |
||
| 105 | $sugar_md = 'include/images/sugar_md_open.png'; |
||
| 106 | $loginImage = 'include/images/sugarcrm_login.png'; |
||
| 107 | $common = 'install/installCommon.js'; |
||
| 108 | |||
| 109 | /////////////////////////////////////////////////////////////////////////////// |
||
| 110 | //// INSTALLER LANGUAGE |
||
| 111 | function getSupportedInstallLanguages(){ |
||
| 112 | $supportedLanguages = array( |
||
| 113 | 'en_us' => 'English (US)', |
||
| 114 | ); |
||
| 115 | if(file_exists('install/lang.config.php')){ |
||
| 116 | include('install/lang.config.php'); |
||
| 117 | if(!empty($config['languages'])){ |
||
| 118 | |||
| 119 | foreach($config['languages'] as $k=>$v){ |
||
| 120 | if(file_exists('install/language/' . $k . '.lang.php')){ |
||
| 121 | $supportedLanguages[$k] = $v; |
||
| 122 | } |
||
| 123 | } |
||
| 124 | } |
||
| 125 | } |
||
| 126 | return $supportedLanguages; |
||
| 127 | } |
||
| 128 | $supportedLanguages = getSupportedInstallLanguages(); |
||
| 129 | |||
| 130 | // after install language is selected, use that pack |
||
| 131 | $default_lang = 'en_us'; |
||
| 132 | if(!isset($_POST['language']) && (!isset($_SESSION['language']) && empty($_SESSION['language']))) { |
||
| 133 | if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { |
||
| 134 | $lang = parseAcceptLanguage(); |
||
| 135 | if(isset($supportedLanguages[$lang])) { |
||
| 136 | $_POST['language'] = $lang; |
||
| 137 | } else { |
||
| 138 | $_POST['language'] = $default_lang; |
||
| 139 | } |
||
| 140 | } |
||
| 141 | } |
||
| 142 | |||
| 143 | if(isset($_POST['language'])) { |
||
| 144 | $_SESSION['language'] = str_replace('-','_',$_POST['language']); |
||
| 145 | } |
||
| 146 | |||
| 147 | $current_language = isset($_SESSION['language']) ? $_SESSION['language'] : $default_lang; |
||
| 148 | |||
| 149 | if(file_exists("install/language/{$current_language}.lang.php")) { |
||
| 150 | require_once("install/language/{$current_language}.lang.php"); |
||
| 151 | } else { |
||
| 152 | require_once("install/language/{$default_lang}.lang.php"); |
||
| 153 | } |
||
| 154 | |||
| 155 | if($current_language != 'en_us') { |
||
| 156 | $my_mod_strings = $mod_strings; |
||
| 157 | include('install/language/en_us.lang.php'); |
||
| 158 | $mod_strings = sugarLangArrayMerge($mod_strings, $my_mod_strings); |
||
| 159 | } |
||
| 160 | |||
| 161 | $app_list_strings = return_app_list_strings_language($current_language); |
||
| 162 | //// END INSTALLER LANGUAGE |
||
| 163 | /////////////////////////////////////////////////////////////////////////////// |
||
| 164 | |||
| 165 | //get the url for the helper link |
||
| 166 | $help_url = get_help_button_url(); |
||
| 167 | |||
| 168 | //if this license print, then redirect and exit, |
||
| 169 | if(isset($_REQUEST['page']) && $_REQUEST['page'] == 'licensePrint') |
||
| 170 | { |
||
| 171 | include('install/licensePrint.php'); |
||
| 172 | exit (); |
||
| 173 | } |
||
| 174 | |||
| 175 | if(isset($_REQUEST['sugar_body_only']) && $_REQUEST['sugar_body_only'] == "1") { |
||
| 176 | //if this is a system check, then just run the check and return, |
||
| 177 | //this is an ajax call and there is no need for further processing |
||
| 178 | |||
| 179 | if(isset($_REQUEST['uploadLogoFrame']) && ($_REQUEST['uploadLogoFrame'])){ |
||
| 180 | echo 'I\'m an uploader iframe!'; |
||
| 181 | return; |
||
| 182 | } |
||
| 183 | |||
| 184 | // upload company logo |
||
| 185 | if(isset($_REQUEST['uploadLogo']) && ($_REQUEST['uploadLogo'])){ |
||
| 186 | $filepath = ''; |
||
| 187 | $errors = array(); |
||
| 188 | |||
| 189 | switch($_FILES['company_logo']['error']) { |
||
| 190 | |||
| 191 | case UPLOAD_ERR_OK: |
||
| 192 | $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG/*, IMAGETYPE_GIF */); |
||
| 193 | $detectedType = exif_imagetype($_FILES['company_logo']['tmp_name']); |
||
| 194 | if(!in_array($detectedType, $allowedTypes)) { |
||
| 195 | $errors[] = $mod_strings['ERR_UPLOAD_FILETYPE']; |
||
| 196 | } |
||
| 197 | else { |
||
| 198 | // uploaded image stored in the /custom path instead of put into the original theme directory.. |
||
| 199 | |||
| 200 | mkdir_recursive('custom/' . SugarThemeRegistry::current()->getDefaultImagePath(), true); |
||
| 201 | $tmpvar = explode('?', SugarThemeRegistry::current()->getImageURL('company_logo.png')); |
||
| 202 | $destFile = 'custom/' . $tmpvar[0]; |
||
| 203 | if (!move_uploaded_file($_FILES['company_logo']['tmp_name'], $destFile)) { |
||
| 204 | $errors[] = $mod_strings['ERR_LANG_UPLOAD_1']; |
||
| 205 | } |
||
| 206 | else { |
||
| 207 | $filepath = $destFile; |
||
| 208 | } |
||
| 209 | } |
||
| 210 | break; |
||
| 211 | |||
| 212 | case UPLOAD_ERR_INI_SIZE: |
||
| 213 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_INI_SIZE']; |
||
| 214 | break; |
||
| 215 | |||
| 216 | case UPLOAD_ERR_FORM_SIZE: |
||
| 217 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_FORM_SIZE']; |
||
| 218 | break; |
||
| 219 | |||
| 220 | case UPLOAD_ERR_PARTIAL: |
||
| 221 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_PARTIAL']; |
||
| 222 | break; |
||
| 223 | |||
| 224 | case UPLOAD_ERR_NO_FILE: |
||
| 225 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_NO_FILE']; |
||
| 226 | break; |
||
| 227 | |||
| 228 | case UPLOAD_ERR_NO_TMP_DIR: |
||
| 229 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_NO_TMP_DIR']; |
||
| 230 | break; |
||
| 231 | |||
| 232 | case UPLOAD_ERR_CANT_WRITE: |
||
| 233 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_CANT_WRITE']; |
||
| 234 | break; |
||
| 235 | |||
| 236 | case UPLOAD_ERR_EXTENSION: |
||
| 237 | $errors[] = $mod_strings['ERR_UPLOAD_FILE_UPLOAD_ERR_EXTENSION']; |
||
| 238 | break; |
||
| 239 | default: |
||
| 240 | $errors[] = $mod_strings['ERR_LANG_UPLOAD_UNKNOWN']; |
||
| 241 | break; |
||
| 242 | } |
||
| 243 | |||
| 244 | |||
| 245 | $result['filepath'] = $filepath; |
||
| 246 | $result['errors'] = $errors ? $errors : false; |
||
| 247 | |||
| 248 | // TODO--low: validate file size & image width/height and save, show status result to client js |
||
| 249 | |||
| 250 | echo "<script>window.top.window.{$_REQUEST['callback']}(" . json_encode($result) . ");</script>"; |
||
| 251 | return; |
||
| 252 | } |
||
| 253 | |||
| 254 | if(isset($_REQUEST['storeConfig']) && ($_REQUEST['storeConfig'])){ |
||
| 255 | // store configuration by form to session |
||
| 256 | if(!isset($_SESSION)) session_start(); |
||
| 257 | $_SESSION = array_merge($_SESSION, $_POST); |
||
| 258 | |||
| 259 | // TODO--low: don't forget the custom type install settings! validate here.. |
||
| 260 | // if(count($validation_errors = validate_dbConfig('a')) > 0) { |
||
| 261 | // $si_errors = true; |
||
| 262 | // } |
||
| 263 | // else if(count($validation_errors = validate_siteConfig('a')) > 0) { |
||
| 264 | // $si_errors = true; |
||
| 265 | // } |
||
| 266 | // else if(count($validation_errors = validate_siteConfig('b')) > 0) { |
||
| 267 | // $si_errors = true; |
||
| 268 | // } |
||
| 269 | $errors = ''; |
||
| 270 | if( isset($validation_errors) && is_array($validation_errors)){ |
||
| 271 | if( count($validation_errors) > 0 ){ |
||
| 272 | // $errors = '<div id="errorMsgs">'; |
||
| 273 | $errors .= '<p>'.$mod_strings['LBL_SITECFG_FIX_ERRORS'].'</p><ul>'; |
||
| 274 | foreach( $validation_errors as $error ){ |
||
| 275 | $errors .= '<li class="error">' . $error . '</li>'; |
||
| 276 | } |
||
| 277 | $errors .= '</ul>'; //</div>'; |
||
| 278 | } |
||
| 279 | } |
||
| 280 | echo $errors; |
||
| 281 | return; |
||
| 282 | } |
||
| 283 | |||
| 284 | if(isset($_REQUEST['checkInstallSystem']) && ($_REQUEST['checkInstallSystem'])){ |
||
| 285 | require_once('install/installSystemCheck.php'); |
||
| 286 | echo runCheck($install_script, $mod_strings); |
||
| 287 | return; |
||
| 288 | } |
||
| 289 | |||
| 290 | //if this is a DB Settings check, then just run the check and return, |
||
| 291 | //this is an ajax call and there is no need for further processing |
||
| 292 | if(isset($_REQUEST['checkDBSettings']) && ($_REQUEST['checkDBSettings'])){ |
||
| 293 | require_once('install/checkDBSettings.php'); |
||
| 294 | echo checkDBSettings(); |
||
| 295 | return; |
||
| 296 | } |
||
| 297 | } |
||
| 298 | |||
| 299 | //maintaining the install_type if earlier set to custom |
||
| 300 | if(isset($_REQUEST['install_type']) && $_REQUEST['install_type'] == 'custom'){ |
||
| 301 | $_SESSION['install_type'] = $_REQUEST['install_type']; |
||
| 302 | } |
||
| 303 | |||
| 304 | //set the default settings into session |
||
| 305 | foreach($installer_defaults as $key =>$val){ |
||
| 306 | if(!isset($_SESSION[$key])){ |
||
| 307 | $_SESSION[$key] = $val; |
||
| 308 | } |
||
| 309 | } |
||
| 310 | |||
| 311 | // always perform |
||
| 312 | clean_special_arguments(); |
||
| 313 | print_debug_comment(); |
||
| 314 | $next_clicked = false; |
||
| 315 | $next_step = 0; |
||
| 316 | |||
| 317 | // use a simple array to map out the steps of the installer page flow |
||
| 318 | $workflow = array( 'welcome.php', |
||
| 319 | 'ready.php', |
||
| 320 | |||
| 321 | // TODO-g: remove these files.. |
||
| 322 | //'license.php', |
||
| 323 | //'installType.php', |
||
| 324 | ); |
||
| 325 | $workflow[] = 'installConfig.php'; |
||
| 326 | //$workflow[] = 'systemOptions.php'; |
||
| 327 | //$workflow[] = 'dbConfig_a.php'; |
||
| 328 | //$workflow[] = 'dbConfig_b.php'; |
||
| 329 | |||
| 330 | //define web root, which will be used as default for site_url |
||
| 331 | if($_SERVER['SERVER_PORT']=='80'){ |
||
| 332 | $web_root = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; |
||
| 333 | }else{ |
||
| 334 | $web_root = $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']; |
||
| 335 | } |
||
| 336 | $web_root = str_replace("/install.php", "", $web_root); |
||
| 337 | $web_root = "http://$web_root"; |
||
| 338 | |||
| 339 | if (!isset($_SESSION['oc_install']) || $_SESSION['oc_install'] == false) { |
||
| 340 | //$workflow[] = 'siteConfig_a.php'; |
||
| 341 | if (isset($_SESSION['install_type']) && !empty($_SESSION['install_type']) && |
||
| 342 | $_SESSION['install_type'] == 'custom') { |
||
| 343 | $workflow[] = 'siteConfig_b.php'; |
||
| 344 | } |
||
| 345 | } else { |
||
| 346 | if (is_readable('config.php')) { |
||
| 347 | require_once ('config.php'); |
||
| 348 | } |
||
| 349 | } |
||
| 350 | |||
| 351 | if(empty($sugar_config['cache_dir']) && !empty($_SESSION['cache_dir'])) { |
||
| 352 | $sugar_config['cache_dir'] = $_SESSION['cache_dir']; |
||
| 353 | } |
||
| 354 | |||
| 355 | // set the form's php var to the loaded config's var else default to sane settings |
||
| 356 | if(!isset($_SESSION['setup_site_url']) || empty($_SESSION['setup_site_url'])) { |
||
| 357 | if(isset($sugar_config['site_url']) && !empty($sugar_config['site_url'])) { |
||
| 358 | $_SESSION['setup_site_url']= $sugar_config['site_url']; |
||
| 359 | } else { |
||
| 360 | $_SESSION['setup_site_url']= $web_root; |
||
| 361 | } |
||
| 362 | } |
||
| 363 | |||
| 364 | if (!isset($_SESSION['setup_system_name']) || empty($_SESSION['setup_system_name'])) { |
||
| 365 | $_SESSION['setup_system_name'] = 'SugarCRM'; |
||
| 366 | } |
||
| 367 | if (!isset($_SESSION['setup_site_session_path']) || empty($_SESSION['setup_site_session_path'])) { |
||
| 368 | $_SESSION['setup_site_session_path'] = (isset($sugar_config['session_dir'])) ? $sugar_config['session_dir'] : ''; |
||
| 369 | } |
||
| 370 | if (!isset($_SESSION['setup_site_log_dir']) || empty($_SESSION['setup_site_log_dir'])) { |
||
| 371 | $_SESSION['setup_site_log_dir'] = (isset($sugar_config['log_dir'])) ? $sugar_config['log_dir'] : '.'; |
||
| 372 | } |
||
| 373 | if (!isset($_SESSION['setup_site_guid']) || empty($_SESSION['setup_site_guid'])) { |
||
| 374 | $_SESSION['setup_site_guid'] = (isset($sugar_config['unique_key'])) ? $sugar_config['unique_key'] : ''; |
||
| 375 | } |
||
| 376 | if (!isset($_SESSION['cache_dir']) || empty($_SESSION['cache_dir'])) { |
||
| 377 | $_SESSION['cache_dir'] = isset($sugar_config['cache_dir']) ? $sugar_config['cache_dir'] : 'cache/'; |
||
| 378 | } |
||
| 379 | |||
| 380 | //$workflow[] = 'confirmSettings.php'; |
||
| 381 | $workflow[] = 'performSetup.php'; |
||
| 382 | |||
| 383 | if(!isset($_SESSION['oc_install']) || $_SESSION['oc_install'] == false){ |
||
| 384 | if(isset($_SESSION['install_type']) && !empty($_SESSION['install_type']) && $_SESSION['install_type']=='custom'){ |
||
| 385 | //$workflow[] = 'download_patches.php'; |
||
| 386 | $workflow[] = 'download_modules.php'; |
||
| 387 | } |
||
| 388 | } |
||
| 389 | |||
| 390 | //$workflow[] = 'register.php'; |
||
| 391 | $workflow[] = 'complete_install.php'; |
||
| 392 | |||
| 393 | |||
| 394 | // increment/decrement the workflow pointer |
||
| 395 | if(!empty($_REQUEST['goto'])) { |
||
| 396 | switch($_REQUEST['goto']) { |
||
| 397 | case $mod_strings['LBL_CHECKSYS_RECHECK']: |
||
| 398 | $next_step = $_REQUEST['current_step']; |
||
| 399 | break; |
||
| 400 | case $mod_strings['LBL_BACK']: |
||
| 401 | $next_step = $_REQUEST['current_step'] - 1; |
||
| 402 | break; |
||
| 403 | case 'resend': |
||
| 404 | case $mod_strings['LBL_NEXT']: |
||
| 405 | case $mod_strings['LBL_START']: |
||
| 406 | $next_step = $_REQUEST['current_step'] + 1; |
||
| 407 | $next_clicked = true; |
||
| 408 | break; |
||
| 409 | case 'SilentInstall': |
||
| 410 | $next_step = 9999; |
||
| 411 | break; |
||
| 412 | case 'oc_convert': |
||
| 413 | $next_step = 9191; |
||
| 414 | break; |
||
| 415 | } |
||
| 416 | } |
||
| 417 | // Add check here to see if a silent install config file exists; if so then launch silent installer |
||
| 418 | elseif ( is_file('config_si.php') && empty($sugar_config['installer_locked'])) { |
||
| 419 | |||
| 420 | $langHeader = get_language_header(); |
||
| 421 | |||
| 422 | echo <<<EOHTML |
||
| 423 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||
| 424 | <html {$langHeader}> |
||
| 425 | <head> |
||
| 426 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||
| 427 | <meta http-equiv="Content-Style-Type" content="text/css"> |
||
| 428 | <meta http-equiv="Refresh" content="1; url=install.php?goto=SilentInstall&cli=true"> |
||
| 429 | <title>{$mod_strings['LBL_WIZARD_TITLE']} {$mod_strings['LBL_TITLE_WELCOME']} {$setup_sugar_version} {$mod_strings['LBL_WELCOME_SETUP_WIZARD']}</title> |
||
| 430 | <link REL="SHORTCUT ICON" HREF="{$icon}"> |
||
| 431 | <link rel="stylesheet" href="{$css}" type="text/css"> |
||
| 432 | </head> |
||
| 433 | <body> |
||
| 434 | <table cellspacing="0" cellpadding="0" border="0" align="center" class="shell"> |
||
| 435 | <tr> |
||
| 436 | <td colspan="2" id="help"><a href="{$help_url}" target='_blank'>{$mod_strings['LBL_HELP']} </a></td></tr> |
||
| 437 | <tr> |
||
| 438 | <th width="500"> |
||
| 439 | <p> |
||
| 440 | <img src="{$sugar_md}" alt="SugarCRM" border="0"> |
||
| 441 | </p> |
||
| 442 | {$mod_strings['LBL_TITLE_WELCOME']} {$setup_sugar_version} {$mod_strings['LBL_WELCOME_SETUP_WIZARD']}</th> |
||
| 443 | |||
| 444 | <th width="200" height="30" style="text-align: right;"><a href="http://www.sugarcrm.com" target="_blank"><IMG src="{$loginImage}" alt="SugarCRM" border="0"></a> |
||
| 445 | </th> |
||
| 446 | </tr> |
||
| 447 | <tr> |
||
| 448 | <td colspan="2" id="ready_image"><IMG src="include/images/install_themes.jpg" width="698" height="247" alt="Sugar Themes" border="0"></td> |
||
| 449 | </tr> |
||
| 450 | |||
| 451 | <tr> |
||
| 452 | <td colspan="2" id="ready">{$mod_strings['LBL_LAUNCHING_SILENT_INSTALL']} </td> |
||
| 453 | </tr> |
||
| 454 | </table> |
||
| 455 | </body> |
||
| 456 | </html> |
||
| 457 | EOHTML; |
||
| 458 | die(); |
||
| 459 | } |
||
| 460 | |||
| 461 | |||
| 462 | |||
| 463 | $exclude_files = array('complete_install.php','register.php','download_modules.php'); |
||
| 464 | |||
| 465 | if(isset($next_step) && isset($workflow[$next_step]) && !in_array($workflow[$next_step],$exclude_files) && isset($sugar_config['installer_locked']) && $sugar_config['installer_locked'] == true) { |
||
| 466 | $the_file = 'installDisabled.php'; |
||
| 467 | $disabled_title = $mod_strings['LBL_DISABLED_DESCRIPTION']; |
||
| 468 | $disabled_title_2 = $mod_strings['LBL_DISABLED_TITLE_2']; |
||
| 469 | $disabled_text =<<<EOQ |
||
| 470 | <p>{$mod_strings['LBL_DISABLED_DESCRIPTION']}</p> |
||
| 471 | <pre> |
||
| 472 | 'installer_locked' => false, |
||
| 473 | </pre> |
||
| 474 | <p>{$mod_strings['LBL_DISABLED_DESCRIPTION_2']}</p> |
||
| 475 | |||
| 476 | <p>{$mod_strings['LBL_DISABLED_HELP_1']} <a href="{$mod_strings['LBL_DISABLED_HELP_LNK']}" target="_blank">{$mod_strings['LBL_DISABLED_HELP_2']}</a>.</p> |
||
| 477 | EOQ; |
||
| 478 | } |
||
| 479 | else{ |
||
| 480 | $validation_errors = array(); |
||
| 481 | // process the data posted |
||
| 482 | if($next_clicked) { |
||
| 483 | // store the submitted data because the 'Next' button was clicked |
||
| 484 | switch($workflow[trim($_REQUEST['current_step'])]) { |
||
| 485 | case 'welcome.php': |
||
| 486 | $_SESSION['language'] = $_REQUEST['language']; |
||
| 487 | $_SESSION['setup_site_admin_user_name'] = 'admin'; |
||
| 488 | // break; |
||
| 489 | // case 'license.php': |
||
| 490 | $_SESSION['setup_license_accept'] = get_boolean_from_request('setup_license_accept'); |
||
| 491 | $_SESSION['license_submitted'] = true; |
||
| 492 | |||
| 493 | |||
| 494 | // eventually default all vars here, with overrides from config.php |
||
| 495 | if(is_readable('config.php')) { |
||
| 496 | global $sugar_config; |
||
| 497 | include_once('config.php'); |
||
| 498 | } |
||
| 499 | |||
| 500 | $default_db_type = 'mysql'; |
||
| 501 | |||
| 502 | if(!isset($_SESSION['setup_db_type'])) { |
||
| 503 | $_SESSION['setup_db_type'] = empty($sugar_config['dbconfig']['db_type']) ? $default_db_type : $sugar_config['dbconfig']['db_type']; |
||
| 504 | } |
||
| 505 | |||
| 506 | break; |
||
| 507 | //TODO--low: add this functionality to installConfig.php |
||
| 508 | case 'installType.php': |
||
| 509 | $_SESSION['install_type'] = $_REQUEST['install_type']; |
||
| 510 | if(isset($_REQUEST['setup_license_key']) && !empty($_REQUEST['setup_license_key'])){ |
||
| 511 | $_SESSION['setup_license_key'] = $_REQUEST['setup_license_key']; |
||
| 512 | } |
||
| 513 | $_SESSION['licenseKey_submitted'] = true; |
||
| 514 | |||
| 515 | |||
| 516 | |||
| 517 | break; |
||
| 518 | |||
| 519 | case 'installConfig.php': |
||
| 520 | |||
| 521 | //case 'systemOptions.php': |
||
| 522 | if(isset($_REQUEST['setup_db_type'])) { |
||
| 523 | $_SESSION['setup_db_type'] = $_REQUEST['setup_db_type']; |
||
| 524 | } |
||
| 525 | $validation_errors = validate_systemOptions(); |
||
| 526 | if(count($validation_errors) > 0) { |
||
| 527 | $next_step--; |
||
| 528 | } |
||
| 529 | //break; |
||
| 530 | |||
| 531 | //case 'dbConfig_a.php': |
||
| 532 | //validation is now done through ajax call to checkDBSettings.php |
||
| 533 | if(isset($_REQUEST['setup_db_drop_tables'])){ |
||
| 534 | $_SESSION['setup_db_drop_tables'] = $_REQUEST['setup_db_drop_tables']; |
||
| 535 | if($_SESSION['setup_db_drop_tables']=== true || $_SESSION['setup_db_drop_tables'] == 'true'){ |
||
| 536 | $_SESSION['setup_db_create_database'] = false; |
||
| 537 | } |
||
| 538 | } |
||
| 539 | //break; |
||
| 540 | |||
| 541 | //case 'siteConfig_a.php': |
||
| 542 | if(isset($_REQUEST['setup_site_url'])){$_SESSION['setup_site_url'] = $_REQUEST['setup_site_url'];} |
||
| 543 | if(isset($_REQUEST['setup_system_name'])){$_SESSION['setup_system_name'] = $_REQUEST['setup_system_name'];} |
||
| 544 | if(isset($_REQUEST['setup_db_collation'])) { |
||
| 545 | $_SESSION['setup_db_options']['collation'] = $_REQUEST['setup_db_collation']; |
||
| 546 | } |
||
| 547 | $_SESSION['setup_site_admin_user_name'] = $_REQUEST['setup_site_admin_user_name']; |
||
| 548 | $_SESSION['setup_site_admin_password'] = $_REQUEST['setup_site_admin_password']; |
||
| 549 | $_SESSION['setup_site_admin_password_retype'] = $_REQUEST['setup_site_admin_password_retype']; |
||
| 550 | $_SESSION['siteConfig_submitted'] = true; |
||
| 551 | |||
| 552 | $validation_errors = array(); |
||
| 553 | $validation_errors = validate_siteConfig('a'); |
||
| 554 | if(count($validation_errors) > 0 || $_REQUEST['goto'] == 'resend') { |
||
| 555 | $next_step--; |
||
| 556 | } |
||
| 557 | //break; |
||
| 558 | // add old custom install settings to new install form |
||
| 559 | //case 'siteConfig_b.php': |
||
| 560 | $_SESSION['setup_site_sugarbeet_automatic_checks'] = get_boolean_from_request('setup_site_sugarbeet_automatic_checks'); |
||
| 561 | |||
| 562 | $_SESSION['setup_site_custom_session_path'] = get_boolean_from_request('setup_site_custom_session_path'); |
||
| 563 | if($_SESSION['setup_site_custom_session_path']){ |
||
| 564 | $_SESSION['setup_site_session_path'] = $_REQUEST['setup_site_session_path']; |
||
| 565 | }else{ |
||
| 566 | $_SESSION['setup_site_session_path'] = ''; |
||
| 567 | } |
||
| 568 | |||
| 569 | $_SESSION['setup_site_custom_log_dir'] = get_boolean_from_request('setup_site_custom_log_dir'); |
||
| 570 | if($_SESSION['setup_site_custom_log_dir']){ |
||
| 571 | $_SESSION['setup_site_log_dir'] = $_REQUEST['setup_site_log_dir']; |
||
| 572 | }else{ |
||
| 573 | $_SESSION['setup_site_log_dir'] = '.'; |
||
| 574 | } |
||
| 575 | |||
| 576 | $_SESSION['setup_site_specify_guid'] = get_boolean_from_request('setup_site_specify_guid'); |
||
| 577 | if($_SESSION['setup_site_specify_guid']){ |
||
| 578 | $_SESSION['setup_site_guid'] = $_REQUEST['setup_site_guid']; |
||
| 579 | }else{ |
||
| 580 | $_SESSION['setup_site_guid'] = ''; |
||
| 581 | } |
||
| 582 | $_SESSION['siteConfig_submitted'] = true; |
||
| 583 | if(isset($_REQUEST['setup_site_sugarbeet_anonymous_stats'])){ |
||
| 584 | $_SESSION['setup_site_sugarbeet_anonymous_stats'] = get_boolean_from_request('setup_site_sugarbeet_anonymous_stats'); |
||
| 585 | }else{ |
||
| 586 | $_SESSION['setup_site_sugarbeet_anonymous_stats'] = 0; |
||
| 587 | } |
||
| 588 | |||
| 589 | $validation_errors = array(); |
||
| 590 | $validation_errors = validate_siteConfig('b'); |
||
| 591 | if(count($validation_errors) > 0) { |
||
| 592 | $next_step--; |
||
| 593 | } |
||
| 594 | break; |
||
| 595 | } |
||
| 596 | } |
||
| 597 | |||
| 598 | if($next_step == 9999) { |
||
| 599 | $the_file = 'SilentInstall'; |
||
| 600 | }else if($next_step == 9191) { |
||
| 601 | $_SESSION['oc_server_url'] = $_REQUEST['oc_server_url']; |
||
| 602 | $_SESSION['oc_username'] = $_REQUEST['oc_username']; |
||
| 603 | $_SESSION['oc_password'] = $_REQUEST['oc_password']; |
||
| 604 | $the_file = 'oc_convert.php'; |
||
| 605 | } |
||
| 606 | else{ |
||
| 607 | $the_file = $workflow[$next_step]; |
||
| 608 | |||
| 609 | } |
||
| 610 | |||
| 611 | switch($the_file) { |
||
| 612 | case 'welcome.php': |
||
| 613 | case 'license.php': |
||
| 614 | // |
||
| 615 | // Check to see if session variables are working properly |
||
| 616 | // |
||
| 617 | $_SESSION['test_session'] = 'sessions are available'; |
||
| 618 | @session_write_close(); |
||
| 619 | unset($_SESSION['test_session']); |
||
| 620 | @session_start(); |
||
| 621 | |||
| 622 | if(!isset($_SESSION['test_session'])) |
||
| 623 | { |
||
| 624 | $the_file = 'installDisabled.php'; |
||
| 625 | // PHP.ini location - |
||
| 626 | $phpIniLocation = get_cfg_var("cfg_file_path"); |
||
| 627 | $disabled_title = $mod_strings['LBL_SESSION_ERR_TITLE']; |
||
| 628 | $disabled_title_2 = $mod_strings['LBL_SESSION_ERR_TITLE']; |
||
| 629 | $disabled_text = $mod_strings['LBL_SESSION_ERR_DESCRIPTION']."<pre>{$phpIniLocation}</pre>"; |
||
| 630 | break; |
||
| 631 | } |
||
| 632 | // check to see if installer has been disabled |
||
| 633 | if(is_readable('config.php') && (filesize('config.php') > 0)) { |
||
| 634 | include_once('config.php'); |
||
| 635 | |||
| 636 | if(!isset($sugar_config['installer_locked']) || $sugar_config['installer_locked'] == true) { |
||
| 637 | $the_file = 'installDisabled.php'; |
||
| 638 | $disabled_title = $mod_strings['LBL_DISABLED_DESCRIPTION']; |
||
| 639 | $disabled_title_2 = $mod_strings['LBL_DISABLED_TITLE_2']; |
||
| 640 | $disabled_text =<<<EOQ |
||
| 641 | <p>{$mod_strings['LBL_DISABLED_DESCRIPTION']}</p> |
||
| 642 | <pre> |
||
| 643 | 'installer_locked' => false, |
||
| 644 | </pre> |
||
| 645 | <p>{$mod_strings['LBL_DISABLED_DESCRIPTION_2']}</p> |
||
| 646 | |||
| 647 | <p>{$mod_strings['LBL_DISABLED_HELP_1']} <a href="{$mod_strings['LBL_DISABLED_HELP_LNK']}" target="_blank">{$mod_strings['LBL_DISABLED_HELP_2']}</a>.</p> |
||
| 648 | EOQ; |
||
| 649 | //if this is an offline client installation but the conversion did not succeed, |
||
| 650 | //then try to convert again |
||
| 651 | if(isset($sugar_config['disc_client']) && $sugar_config['disc_client'] == true && isset($sugar_config['oc_converted']) && $sugar_config['oc_converted'] == false) { |
||
| 652 | header('Location: index.php?entryPoint=oc_convert&first_time=true'); |
||
| 653 | exit (); |
||
| 654 | } |
||
| 655 | } |
||
| 656 | } |
||
| 657 | break; |
||
| 658 | case 'register.php': |
||
| 659 | case 'complete_install.php': |
||
| 660 | session_unset(); |
||
| 661 | break; |
||
| 662 | case 'SilentInstall': |
||
| 663 | $si_errors = false; |
||
| 664 | pullSilentInstallVarsIntoSession(); |
||
| 665 | |||
| 666 | /* |
||
| 667 | * Make sure we are using the correct unique_key. The logic |
||
| 668 | * to save a custom unique_key happens lower in the process. |
||
| 669 | * However because of the initial FTS check we are already |
||
| 670 | * relying on this value which will not get reinitialized |
||
| 671 | * when we actual need it during index creation because |
||
| 672 | * SilentInstaller runs in one single process. |
||
| 673 | */ |
||
| 674 | if (!empty($_SESSION['setup_site_specify_guid']) && !empty($_SESSION['setup_site_guid'])) { |
||
| 675 | $sugar_config['unique_key'] = $_SESSION['setup_site_guid']; |
||
| 676 | } else { |
||
| 677 | $sugar_config['unique_key'] = md5(create_guid()); |
||
| 678 | } |
||
| 679 | |||
| 680 | $validation_errors = validate_dbConfig('a'); |
||
| 681 | if(count($validation_errors) > 0) { |
||
| 682 | $the_file = 'dbConfig_a.php'; |
||
| 683 | $si_errors = true; |
||
| 684 | } |
||
| 685 | $validation_errors = validate_siteConfig('a'); |
||
| 686 | if(count($validation_errors) > 0) { |
||
| 687 | $the_file = 'siteConfig_a.php'; |
||
| 688 | $si_errors = true; |
||
| 689 | } |
||
| 690 | $validation_errors = validate_siteConfig('b'); |
||
| 691 | if(count($validation_errors) > 0) { |
||
| 692 | $the_file = 'siteConfig_b.php'; |
||
| 693 | $si_errors = true; |
||
| 694 | } |
||
| 695 | |||
| 696 | if(!$si_errors){ |
||
| 697 | $the_file = 'performSetup.php'; |
||
| 698 | } |
||
| 699 | require_once('jssource/minify.php'); |
||
| 700 | //since this is a SilentInstall we still need to make sure that |
||
| 701 | //the appropriate files are writable |
||
| 702 | // config.php |
||
| 703 | make_writable('./config.php'); |
||
| 704 | |||
| 705 | // custom dir |
||
| 706 | make_writable('./custom'); |
||
| 707 | |||
| 708 | // modules dir |
||
| 709 | recursive_make_writable('./modules'); |
||
| 710 | |||
| 711 | // cache dir |
||
| 712 | create_writable_dir(sugar_cached('custom_fields')); |
||
| 713 | create_writable_dir(sugar_cached('dyn_lay')); |
||
| 714 | create_writable_dir(sugar_cached('images')); |
||
| 715 | create_writable_dir(sugar_cached('modules')); |
||
| 716 | create_writable_dir(sugar_cached('layout')); |
||
| 717 | create_writable_dir(sugar_cached('pdf')); |
||
| 718 | create_writable_dir(sugar_cached('upload/import')); |
||
| 719 | create_writable_dir(sugar_cached('xml')); |
||
| 720 | create_writable_dir(sugar_cached('include/javascript')); |
||
| 721 | recursive_make_writable(sugar_cached('modules')); |
||
| 722 | |||
| 723 | // check whether we're getting this request from a command line tool |
||
| 724 | // we want to output brief messages if we're outputting to a command line tool |
||
| 725 | $cli_mode = false; |
||
| 726 | if(isset($_REQUEST['cli']) && ($_REQUEST['cli'] == 'true')) { |
||
| 727 | $_SESSION['cli'] = true; |
||
| 728 | // if we have errors, just shoot them back now |
||
| 729 | if(count($validation_errors) > 0) { |
||
| 730 | foreach($validation_errors as $error) { |
||
| 731 | print($mod_strings['ERR_ERROR_GENERAL']."\n"); |
||
| 732 | print(" " . $error . "\n"); |
||
| 733 | print("Exit 1\n"); |
||
| 734 | exit(1); |
||
| 735 | } |
||
| 736 | } |
||
| 737 | } |
||
| 738 | break; |
||
| 739 | } |
||
| 740 | } |
||
| 741 | |||
| 742 | |||
| 743 | $the_file = clean_string($the_file, 'FILE'); |
||
| 744 | |||
| 745 | installerHook('pre_installFileRequire', array('the_file' => $the_file)); |
||
| 746 | |||
| 747 | // change to require to get a good file load error message if the file is not available. |
||
| 748 | |||
| 749 | require('install/' . $the_file); |
||
| 750 | |||
| 751 | installerHook('post_installFileRequire', array('the_file' => $the_file)); |
||
| 752 | |||
| 753 | ?> |
||
| 754 |
If you suppress an error, we recommend checking for the error condition explicitly: