02770, 'file_mode' => 0660, 'user' => '', 'group' => '', ); ksort($sugar_config); if(is_writable('config.php') && write_array_to_file("sugar_config", $sugar_config,'config.php')) { //writing to the file } } } function checkLoggerSettings(){ if(file_exists(getcwd().'/config.php')){ require(getcwd().'/config.php'); } global $sugar_config; if(!isset($sugar_config['logger'])){ $sugar_config['logger'] =array ( 'level'=>'fatal', 'file' => array ( 'ext' => '.log', 'name' => 'sugarcrm', 'dateFormat' => '%c', 'maxSize' => '10MB', 'maxLogs' => 10, 'suffix' => '%m_%Y', ), ); ksort($sugar_config); if(is_writable('config.php') && write_array_to_file("sugar_config", $sugar_config,'config.php')) { //writing to the file } } } function checkLeadConversionSettings() { if (file_exists(getcwd().'/config.php')) { require(getcwd().'/config.php'); } global $sugar_config; if (!isset($sugar_config['lead_conv_activity_opt'])) { $sugar_config['lead_conv_activity_opt'] = 'copy'; ksort($sugar_config); if (is_writable('config.php') && write_array_to_file("sugar_config", $sugar_config,'config.php')) { //writing to the file } } } function checkResourceSettings(){ if(file_exists(getcwd().'/config.php')){ require(getcwd().'/config.php'); } global $sugar_config; if(!isset($sugar_config['resource_management'])){ $sugar_config['resource_management'] = array ( 'special_query_limit' => 50000, 'special_query_modules' => array ( 0 => 'Reports', 1 => 'Export', 2 => 'Import', 3 => 'Administration', 4 => 'Sync', ), 'default_limit' => 1000, ); ksort($sugar_config); if(is_writable('config.php') && write_array_to_file("sugar_config", $sugar_config,'config.php')) { //writing to the file } } } function createMissingRels(){ $relForObjects = array('leads'=>'Leads','campaigns'=>'Campaigns','prospects'=>'Prospects'); foreach($relForObjects as $relObjName=>$relModName){ //assigned_user $guid = create_guid(); $query = "SELECT id FROM relationships WHERE relationship_name = '{$relObjName}_assigned_user'"; $result= $GLOBALS['db']->query($query, true); $a = null; $a = $GLOBALS['db']->fetchByAssoc($result); if(!isset($a['id']) && empty($a['id']) ){ $qRel = "INSERT INTO relationships (id,relationship_name, lhs_module, lhs_table, lhs_key, rhs_module, rhs_table, rhs_key, join_table, join_key_lhs, join_key_rhs, relationship_type, relationship_role_column, relationship_role_column_value, reverse, deleted) VALUES ('{$guid}', '{$relObjName}_assigned_user','Users','users','id','{$relModName}','{$relObjName}','assigned_user_id',NULL,NULL,NULL,'one-to-many',NULL,NULL,'0','0')"; $GLOBALS['db']->query($qRel); } //modified_user $guid = create_guid(); $query = "SELECT id FROM relationships WHERE relationship_name = '{$relObjName}_modified_user'"; $result= $GLOBALS['db']->query($query, true); $a = null; $a = $GLOBALS['db']->fetchByAssoc($result); if(!isset($a['id']) && empty($a['id']) ){ $qRel = "INSERT INTO relationships (id,relationship_name, lhs_module, lhs_table, lhs_key, rhs_module, rhs_table, rhs_key, join_table, join_key_lhs, join_key_rhs, relationship_type, relationship_role_column, relationship_role_column_value, reverse, deleted) VALUES ('{$guid}', '{$relObjName}_modified_user','Users','users','id','{$relModName}','{$relObjName}','modified_user_id',NULL,NULL,NULL,'one-to-many',NULL,NULL,'0','0')"; $GLOBALS['db']->query($qRel); } //created_by $guid = create_guid(); $query = "SELECT id FROM relationships WHERE relationship_name = '{$relObjName}_created_by'"; $result= $GLOBALS['db']->query($query, true); $a = null; $a = $GLOBALS['db']->fetchByAssoc($result); if(!isset($a['id']) && empty($a['id']) ){ $qRel = "INSERT INTO relationships (id,relationship_name, lhs_module, lhs_table, lhs_key, rhs_module, rhs_table, rhs_key, join_table, join_key_lhs, join_key_rhs, relationship_type, relationship_role_column, relationship_role_column_value, reverse, deleted) VALUES ('{$guid}', '{$relObjName}_created_by','Users','users','id','{$relModName}','{$relObjName}','created_by',NULL,NULL,NULL,'one-to-many',NULL,NULL,'0','0')"; $GLOBALS['db']->query($qRel); } $guid = create_guid(); $query = "SELECT id FROM relationships WHERE relationship_name = '{$relObjName}_team'"; $result= $GLOBALS['db']->query($query, true); $a = null; $a = $GLOBALS['db']->fetchByAssoc($result); if(!isset($a['id']) && empty($a['id']) ){ $qRel = "INSERT INTO relationships (id,relationship_name, lhs_module, lhs_table, lhs_key, rhs_module, rhs_table, rhs_key, join_table, join_key_lhs, join_key_rhs, relationship_type, relationship_role_column, relationship_role_column_value, reverse, deleted) VALUES ('{$guid}', '{$relObjName}_team','Teams','teams','id','{$relModName}','{$relObjName}','team_id',NULL,NULL,NULL,'one-to-many',NULL,NULL,'0','0')"; $GLOBALS['db']->query($qRel); } } //Also add tracker perf relationship $guid = create_guid(); $query = "SELECT id FROM relationships WHERE relationship_name = 'tracker_monitor_id'"; $result= $GLOBALS['db']->query($query, true); $a = null; $a = $GLOBALS['db']->fetchByAssoc($result); if(!isset($a['id']) && empty($a['id']) ){ $qRel = "INSERT INTO relationships (id,relationship_name, lhs_module, lhs_table, lhs_key, rhs_module, rhs_table, rhs_key, join_table, join_key_lhs, join_key_rhs, relationship_type, relationship_role_column, relationship_role_column_value, reverse, deleted) VALUES ('{$guid}', 'tracker_monitor_id','TrackerPerfs','tracker_perf','monitor_id','Trackers','tracker','monitor_id',NULL,NULL,NULL,'one-to-many',NULL,NULL,'0','0')"; $GLOBALS['db']->query($qRel); } } /** * This function will merge password default settings into config file * @param $sugar_config * @param $sugar_version * @return bool true if successful */ function merge_passwordsetting($sugar_config, $sugar_version) { $passwordsetting_defaults = array ( 'passwordsetting' => array ( 'minpwdlength' => '', 'maxpwdlength' => '', 'oneupper' => '', 'onelower' => '', 'onenumber' => '', 'onespecial' => '', 'SystemGeneratedPasswordON' => '', 'generatepasswordtmpl' => '', 'lostpasswordtmpl' => '', 'customregex' => '', 'regexcomment' => '', 'forgotpasswordON' => false, 'linkexpiration' => '1', 'linkexpirationtime' => '30', 'linkexpirationtype' => '1', 'userexpiration' => '0', 'userexpirationtime' => '', 'userexpirationtype' => '1', 'userexpirationlogin' => '', 'systexpiration' => '0', 'systexpirationtime' => '', 'systexpirationtype' => '0', 'systexpirationlogin' => '', 'lockoutexpiration' => '0', 'lockoutexpirationtime' => '', 'lockoutexpirationtype' => '1', 'lockoutexpirationlogin' => '', ), ); $sugar_config = sugarArrayMerge($passwordsetting_defaults, $sugar_config ); // need to override version with default no matter what $sugar_config['sugar_version'] = $sugar_version; ksort( $sugar_config ); if( write_array_to_file( "sugar_config", $sugar_config, "config.php" ) ){ return true; } else { return false; } } function addDefaultModuleRoles($defaultRoles = array()) { foreach($defaultRoles as $roleName=>$role){ foreach($role as $category=>$actions){ foreach($actions as $name=>$access_override){ $query = "SELECT * FROM acl_actions WHERE name='$name' AND category = '$category' AND acltype='$roleName' AND deleted=0 "; $result = $GLOBALS['db']->query($query); //only add if an action with that name and category don't exist $row=$GLOBALS['db']->fetchByAssoc($result); if ($row == null) { $guid = create_guid(); $currdate = gmdate('Y-m-d H:i:s'); $query= "INSERT INTO acl_actions (id,date_entered,date_modified,modified_user_id,name,category,acltype,aclaccess,deleted ) VALUES ('$guid','$currdate','$currdate','1','$name','$category','$roleName','$access_override','0')"; $GLOBALS['db']->query($query); } } } } } function verifyArguments($argv,$usage_regular){ $upgradeType = ''; $cwd = getcwd(); // default to current, assumed to be in a valid SugarCRM root dir. if(isset($argv[3])) { if(is_dir($argv[3])) { $cwd = $argv[3]; chdir($cwd); } else { echo "*******************************************************************************\n"; echo "*** ERROR: 3rd parameter must be a valid directory. Tried to cd to [ {$argv[3]} ].\n"; exit(1); } } if(is_file("{$cwd}/include/entryPoint.php")) { //this should be a regular sugar install $upgradeType = constant('SUGARCRM_INSTALL'); //check if this is a valid zip file if(!is_file($argv[1])) { // valid zip? echo "*******************************************************************************\n"; echo "*** ERROR: First argument must be a full path to the patch file. Got [ {$argv[1]} ].\n"; echo $usage_regular; echo "FAILURE\n"; exit(1); } if(count($argv) < 5) { echo "*******************************************************************************\n"; echo "*** ERROR: Missing required parameters. Received ".count($argv)." argument(s), require 5.\n"; echo $usage_regular; echo "FAILURE\n"; exit(1); } } else { //this should be a regular sugar install echo "*******************************************************************************\n"; echo "*** ERROR: Tried to execute in a non-SugarCRM root directory.\n"; exit(1); } if(isset($argv[7]) && file_exists($argv[7].'SugarTemplateUtilties.php')){ require_once($argv[7].'SugarTemplateUtilties.php'); } return $upgradeType; } function threeWayMerge(){ //using threeway merge apis } //// END UTILITIES THAT MUST BE LOCAL :( /////////////////////////////////////////////////////////////////////////////// // only run from command line if(isset($_SERVER['HTTP_USER_AGENT'])) { fwrite(STDERR,'This utility may only be run from the command line or command prompt.'); exit(1); } //Clean_string cleans out any file passed in as a parameter $_SERVER['PHP_SELF'] = 'silentUpgrade.php'; $usage_regular =<<query($q, false); $logged_user = $GLOBALS['db']->fetchByAssoc($result); if(isset($logged_user['id']) && $logged_user['id'] != null){ //do nothing $current_user->retrieve($logged_user['id']); } else{ echo "FAILURE: Not an admin user in users table. Please provide an admin user\n"; exit(1); } } else { echo "*******************************************************************************\n"; echo "*** ERROR: 4th parameter must be a valid admin user.\n"; echo $usage; echo "FAILURE\n"; exit(1); } /////retrieve admin user global $sugar_config; $configOptions = $sugar_config['dbconfig']; /////////////////////////////////////////////////////////////////////////////// //// UPGRADE PREP prepSystemForUpgradeSilent(); //repair tabledictionary.ext.php file if needed repairTableDictionaryExtFile(); $unzip_dir = sugar_cached("upgrades/temp"); $install_file = $sugar_config['upload_dir']."/upgrades/patch/".basename($argv[1]); $_SESSION['unzip_dir'] = $unzip_dir; $_SESSION['install_file'] = $install_file; $_SESSION['zip_from_dir'] = $zip_from_dir; if(is_dir($unzip_dir.'/scripts')) { rmdir_recursive($unzip_dir.'/scripts'); } if(is_file($unzip_dir.'/manifest.php')) { rmdir_recursive($unzip_dir.'/manifest.php'); } mkdir_recursive($unzip_dir); if(!is_dir($unzip_dir)) { echo "\n{$unzip_dir} is not an available directory\nFAILURE\n"; fwrite(STDERR,"\n{$unzip_dir} is not an available directory\nFAILURE\n"); exit(1); } unzip($argv[1], $unzip_dir); // mimic standard UW by copy patch zip to appropriate dir copy($argv[1], $install_file); //// END UPGRADE PREP /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //// UPGRADE UPGRADEWIZARD $zipBasePath = "$unzip_dir/{$zip_from_dir}"; $uwFiles = findAllFiles("{$zipBasePath}/modules/UpgradeWizard", array()); $destFiles = array(); foreach($uwFiles as $uwFile) { $destFile = str_replace($zipBasePath."/", '', $uwFile); copy($uwFile, $destFile); } require_once('modules/UpgradeWizard/uw_utils.php'); // must upgrade UW first removeSilentUpgradeVarsCache(); // Clear the silent upgrade vars - Note: Any calls to these functions within this file are removed here logThis("*** SILENT UPGRADE INITIATED.", $path); logThis("*** UpgradeWizard Upgraded ", $path); if(function_exists('set_upgrade_vars')){ set_upgrade_vars(); } if($configOptions['db_type'] == 'mysql'){ //Change the db wait_timeout for this session $now_timeout = $db->getOne("select @@wait_timeout"); logThis('Wait Timeout before change ***** '.$now_timeout , $path); $now_timeout = $db->getOne("set wait_timeout=28800"); logThis('Wait Timeout after change ***** '.$now_timeout , $path); } //// END UPGRADE UPGRADEWIZARD /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //// MAKE SURE PATCH IS COMPATIBLE if(is_file("$unzip_dir/manifest.php")) { // provides $manifest array include("$unzip_dir/manifest.php"); if(!isset($manifest)) { fwrite(STDERR,"\nThe patch did not contain a proper manifest.php file. Cannot continue.\n\n"); exit(1); } else { copy("$unzip_dir/manifest.php", $sugar_config['upload_dir']."/upgrades/patch/{$zip_from_dir}-manifest.php"); $error = validate_manifest($manifest); if(!empty($error)) { $error = strip_tags(br2nl($error)); fwrite(STDERR,"\n{$error}\n\nFAILURE\n"); exit(1); } } } else { fwrite(STDERR,"\nThe patch did not contain a proper manifest.php file. Cannot continue.\n\n"); exit(1); } $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); $_SESSION['upgrade_from_flavor'] = $manifest['name']; global $sugar_config; global $sugar_version; global $sugar_flavor; //// END MAKE SURE PATCH IS COMPATIBLE /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //// RUN SILENT UPGRADE ob_start(); set_time_limit(0); if(file_exists('ModuleInstall/PackageManager/PackageManagerDisplay.php')) { require_once('ModuleInstall/PackageManager/PackageManagerDisplay.php'); } //copy minimum required files including sugar_file_utils.php if(file_exists("{$zipBasePath}/include/utils/sugar_file_utils.php")){ $destFile = clean_path(str_replace($zipBasePath, $cwd, "{$zipBasePath}/include/utils/sugar_file_utils.php")); copy("{$zipBasePath}/include/utils/sugar_file_utils.php", $destFile); } if(file_exists('include/utils/sugar_file_utils.php')){ require_once('include/utils/sugar_file_utils.php'); } /* $errors = preflightCheck(); if((count($errors) == 1)) { // only diffs logThis('file preflight check passed successfully.', $path); } else{ fwrite(STDERR,"\nThe user doesn't have sufficient permissions to write to database'.\n\n"); exit(1); } */ //If version less than 500 then look for modules to be upgraded if(function_exists('set_upgrade_vars')){ set_upgrade_vars(); } //Initialize the session variables. If upgrade_progress.php is already created //look for session vars there and restore them if(function_exists('initialize_session_vars')){ initialize_session_vars(); } if(!didThisStepRunBefore('preflight')){ set_upgrade_progress('preflight','in_progress'); //Quickcreatedefs on the basis of editviewdefs if(substr($sugar_version,0,1) >= 5){ updateQuickCreateDefs(); } set_upgrade_progress('preflight','done'); } ////////////////COMMIT PROCESS BEGINS/////////////////////////////////////////////////////////////// //// MAKE BACKUPS OF TARGET FILES if(!didThisStepRunBefore('commit')){ set_upgrade_progress('commit','in_progress','commit','in_progress'); if(!didThisStepRunBefore('commit','commitMakeBackupFiles')){ set_upgrade_progress('commit','in_progress','commitMakeBackupFiles','in_progress'); $errors = commitMakeBackupFiles($rest_dir, $install_file, $unzip_dir, $zip_from_dir, array()); set_upgrade_progress('commit','in_progress','commitMakeBackupFiles','done'); } //Need to make sure we have the matching copy of SetValueAction for static/instance method matching if(file_exists("include/Expressions/Actions/SetValueAction.php")){ require_once("include/Expressions/Actions/SetValueAction.php"); } /////////////////////////////////////////////////////////////////////////////// //// HANDLE PREINSTALL SCRIPTS if(empty($errors)) { $file = "{$unzip_dir}/".constant('SUGARCRM_PRE_INSTALL_FILE'); if(is_file($file)) { include($file); if(!didThisStepRunBefore('commit','pre_install')){ set_upgrade_progress('commit','in_progress','pre_install','in_progress'); pre_install(); set_upgrade_progress('commit','in_progress','pre_install','done'); } } } //Clean smarty from cache $cachedir = sugar_cached('smarty'); if(is_dir($cachedir)){ $allModFiles = array(); $allModFiles = findAllFiles($cachedir,$allModFiles); foreach($allModFiles as $file){ //$file_md5_ref = str_replace(clean_path(getcwd()),'',$file); if(file_exists($file)){ unlink($file); } } } //Also add the three-way merge here. The idea is after the 451 html files have //been converted run the 3-way merge. If 500 then just run the 3-way merge if(file_exists('modules/UpgradeWizard/SugarMerge/SugarMerge.php')){ set_upgrade_progress('end','in_progress','threewaymerge','in_progress'); require_once('modules/UpgradeWizard/SugarMerge/SugarMerge.php'); $merger = new SugarMerge($zipBasePath); $merger->mergeAll(); set_upgrade_progress('end','in_progress','threewaymerge','done'); } /////////////////////////////////////////////////////////////////////////////// //// COPY NEW FILES INTO TARGET INSTANCE if(!didThisStepRunBefore('commit','commitCopyNewFiles')){ set_upgrade_progress('commit','in_progress','commitCopyNewFiles','in_progress'); $split = commitCopyNewFiles($unzip_dir, $zip_from_dir); $copiedFiles = $split['copiedFiles']; $skippedFiles = $split['skippedFiles']; set_upgrade_progress('commit','in_progress','commitCopyNewFiles','done'); } require_once(clean_path($unzip_dir.'/scripts/upgrade_utils.php')); $new_sugar_version = getUpgradeVersion(); $origVersion = substr(preg_replace("/[^0-9]/", "", $sugar_version),0,3); $destVersion = substr(preg_replace("/[^0-9]/", "", $new_sugar_version),0,3); $siv_varset_1 = setSilentUpgradeVar('origVersion', $origVersion); $siv_varset_2 = setSilentUpgradeVar('destVersion', $destVersion); $siv_write = writeSilentUpgradeVars(); if(!$siv_varset_1 || !$siv_varset_2 || !$siv_write){ logThis("Error with silent upgrade variables: origVersion write success is ({$siv_varset_1}) ". "-- destVersion write success is ({$siv_varset_2}) -- ". "writeSilentUpgradeVars success is ({$siv_write}) -- ". "path to cache dir is ({$GLOBALS['sugar_config']['cache_dir']})", $path); } require_once('modules/DynamicFields/templates/Fields/TemplateText.php'); /////////////////////////////////////////////////////////////////////////////// /// RELOAD NEW DEFINITIONS global $ACLActions, $beanList, $beanFiles; include('modules/ACLActions/actiondefs.php'); include('include/modules.php'); ///////////////////////////////////////////// if (!function_exists("inDeveloperMode")) { //this function was introduced from tokyo in the file include/utils.php, so when upgrading from 5.1x and 5.2x we should declare the this function function inDeveloperMode() { return isset($GLOBALS['sugar_config']['developerMode']) && $GLOBALS['sugar_config']['developerMode']; } } /////////////////////////////////////////////////////////////////////////////// //// HANDLE POSTINSTALL SCRIPTS if(empty($errors)) { logThis('Starting post_install()...', $path); $trackerManager = TrackerManager::getInstance(); $trackerManager->pause(); $trackerManager->unsetMonitors(); if(!didThisStepRunBefore('commit','post_install')){ $file = "$unzip_dir/" . constant('SUGARCRM_POST_INSTALL_FILE'); if(is_file($file)) { //set_upgrade_progress('commit','in_progress','post_install','in_progress'); $progArray['post_install']='in_progress'; post_install_progress($progArray,'set'); global $moduleList; include($file); post_install(); // cn: only run conversion if admin selects "Sugar runs SQL" if(!empty($_SESSION['allTables']) && $_SESSION['schema_change'] == 'sugar') executeConvertTablesSql($_SESSION['allTables']); //set process to done $progArray['post_install']='done'; //set_upgrade_progress('commit','in_progress','post_install','done'); post_install_progress($progArray,'set'); } } //clean vardefs logThis('Performing UWrebuild()...', $path); ob_start(); @UWrebuild(); ob_end_clean(); logThis('UWrebuild() done.', $path); logThis('begin check default permissions .', $path); checkConfigForPermissions(); logThis('end check default permissions .', $path); logThis('begin check logger settings .', $path); checkLoggerSettings(); logThis('begin check logger settings .', $path); logThis('begin check lead conversion settings .', $path); checkLeadConversionSettings(); logThis('end check lead conversion settings .', $path); logThis('begin check resource settings .', $path); checkResourceSettings(); logThis('begin check resource settings .', $path); require("sugar_version.php"); require('config.php'); global $sugar_config; if($ce_to_pro_ent){ if(isset($sugar_config['sugarbeet'])) { //$sugar_config['sugarbeet'] is only set in COMM unset($sugar_config['sugarbeet']); } if(isset($sugar_config['disable_team_access_check'])) { //$sugar_config['disable_team_access_check'] is a runtime configration, //no need to write to config.php unset($sugar_config['disable_team_access_check']); } if(!merge_passwordsetting($sugar_config, $sugar_version)) { logThis('*** ERROR: could not write config.php! - upgrade will fail!', $path); $errors[] = 'Could not write config.php!'; } } logThis('Set default_theme to Sugar', $path); $sugar_config['default_theme'] = 'Sugar'; if( !write_array_to_file( "sugar_config", $sugar_config, "config.php" ) ) { logThis('*** ERROR: could not write config.php! - upgrade will fail!', $path); $errors[] = 'Could not write config.php!'; } logThis('Set default_max_tabs to 7', $path); $sugar_config['default_max_tabs'] = '7'; if( !write_array_to_file( "sugar_config", $sugar_config, "config.php" ) ) { logThis('*** ERROR: could not write config.php! - upgrade will fail!', $path); $errors[] = 'Could not write config.php!'; } logThis('Upgrade the sugar_version', $path); $sugar_config['sugar_version'] = $sugar_version; if($destVersion == $origVersion) require('config.php'); if( !write_array_to_file( "sugar_config", $sugar_config, "config.php" ) ) { logThis('*** ERROR: could not write config.php! - upgrade will fail!', $path); $errors[] = 'Could not write config.php!'; } logThis('post_install() done.', $path); } /////////////////////////////////////////////////////////////////////////////// //// REGISTER UPGRADE if(empty($errors)) { logThis('Registering upgrade with UpgradeHistory', $path); if(!didThisStepRunBefore('commit','upgradeHistory')){ set_upgrade_progress('commit','in_progress','upgradeHistory','in_progress'); $file_action = "copied"; // if error was encountered, script should have died before now $new_upgrade = new UpgradeHistory(); $new_upgrade->filename = $install_file; $new_upgrade->md5sum = md5_file($install_file); $new_upgrade->name = $zip_from_dir; $new_upgrade->description = $manifest['description']; $new_upgrade->type = 'patch'; $new_upgrade->version = $sugar_version; $new_upgrade->status = "installed"; $new_upgrade->manifest = (!empty($_SESSION['install_manifest']) ? $_SESSION['install_manifest'] : ''); if($new_upgrade->description == null){ $new_upgrade->description = "Silent Upgrade was used to upgrade the instance"; } else{ $new_upgrade->description = $new_upgrade->description." Silent Upgrade was used to upgrade the instance."; } $new_upgrade->save(); set_upgrade_progress('commit','in_progress','upgradeHistory','done'); set_upgrade_progress('commit','done','commit','done'); } } //Clean modules from cache $cachedir = sugar_cached('smarty'); if(is_dir($cachedir)){ $allModFiles = array(); $allModFiles = findAllFiles($cachedir,$allModFiles); foreach($allModFiles as $file){ //$file_md5_ref = str_replace(clean_path(getcwd()),'',$file); if(file_exists($file)){ unlink($file); } } } //delete cache/modules before rebuilding the relations //Clean modules from cache $cachedir = sugar_cached('modules'); if(is_dir($cachedir)){ $allModFiles = array(); $allModFiles = findAllFiles($cachedir,$allModFiles); foreach($allModFiles as $file){ //$file_md5_ref = str_replace(clean_path(getcwd()),'',$file); if(file_exists($file)){ unlink($file); } } } //delete cache/themes $cachedir = sugar_cached('themes'); if(is_dir($cachedir)){ $allModFiles = array(); $allModFiles = findAllFiles($cachedir,$allModFiles); foreach($allModFiles as $file){ //$file_md5_ref = str_replace(clean_path(getcwd()),'',$file); if(file_exists($file)){ unlink($file); } } } ob_start(); if(!isset($_REQUEST['silent'])){ $_REQUEST['silent'] = true; } else if(isset($_REQUEST['silent']) && $_REQUEST['silent'] != true){ $_REQUEST['silent'] = true; } //logThis('Checking for leads_assigned_user relationship and if not found then create.', $path); @createMissingRels(); //logThis('Checked for leads_assigned_user relationship.', $path); ob_end_clean(); //// run fix on dropdown lists that may have been incorrectly named //fix_dropdown_list(); } set_upgrade_progress('end','in_progress','end','in_progress'); /////////////////////////Old Logger settings/////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// if(function_exists('deleteCache')){ set_upgrade_progress('end','in_progress','deleteCache','in_progress'); @deleteCache(); set_upgrade_progress('end','in_progress','deleteCache','done'); } /////////////////////////////////////////////////////////////////////////////// //// HANDLE REMINDERS if(empty($errors)) { commitHandleReminders($skippedFiles, $path); } if(file_exists(clean_path(getcwd()).'/original451files')){ rmdir_recursive(clean_path(getcwd()).'/original451files'); } require_once('modules/Administration/Administration.php'); $admin = new Administration(); $admin->saveSetting('system','adminwizard',1); if($ce_to_pro_ent) { //check to see if there are any new files that need to be added to systems tab //retrieve old modules list logThis('check to see if new modules exist',$path); $oldModuleList = array(); $newModuleList = array(); include($argv[3].'/include/modules.php'); $oldModuleList = $moduleList; include('include/modules.php'); $newModuleList = $moduleList; //include tab controller require_once('modules/MySettings/TabController.php'); $newTB = new TabController(); //make sure new modules list has a key we can reference directly $newModuleList = $newTB->get_key_array($newModuleList); $oldModuleList = $newTB->get_key_array($oldModuleList); //iterate through list and remove commonalities to get new modules foreach ($newModuleList as $remove_mod){ if(in_array($remove_mod, $oldModuleList)){ unset($newModuleList[$remove_mod]); } } $must_have_modules= array( 'Activities'=>'Activities', 'Calendar'=>'Calendar', 'Reports' => 'Reports', 'Quotes' => 'Quotes', 'Products' => 'Products', 'Forecasts' => 'Forecasts', 'Contracts' => 'Contracts', 'KBDocuments' => 'KBDocuments' ); $newModuleList = array_merge($newModuleList,$must_have_modules); //new modules list now has left over modules which are new to this install, so lets add them to the system tabs logThis('new modules to add are '.var_export($newModuleList,true),$path); //grab the existing system tabs $tabs = $newTB->get_system_tabs(); //add the new tabs to the array foreach($newModuleList as $nm ){ $tabs[$nm] = $nm; } //now assign the modules to system tabs $newTB->set_system_tabs($tabs); logThis('module tabs updated',$path); } //Also set the tracker settings if flavor conversion ce->pro or ce->ent if(isset($_SESSION['current_db_version']) && isset($_SESSION['target_db_version'])){ if($_SESSION['current_db_version'] == $_SESSION['target_db_version']){ $_REQUEST['upgradeWizard'] = true; ob_start(); include('include/Smarty/internals/core.write_file.php'); ob_end_clean(); $db =& DBManagerFactory::getInstance(); if($ce_to_pro_ent){ //Also set license information $admin = new Administration(); $category = 'license'; $value = 0; $admin->saveSetting($category, 'users', $value); $key = array('num_lic_oc','key','expire_date'); $value = ''; foreach($key as $k){ $admin->saveSetting($category, $k, $value); } } } } $phpErrors = ob_get_contents(); ob_end_clean(); logThis("**** Potential PHP generated error messages: {$phpErrors}", $path); if(count($errors) > 0) { foreach($errors as $error) { logThis("****** SilentUpgrade ERROR: {$error}", $path); } echo "FAILED\n"; } } /** * repairTableDictionaryExtFile * * There were some scenarios in 6.0.x whereby the files loaded in the extension tabledictionary.ext.php file * did not exist. This would cause warnings to appear during the upgrade. As a result, this * function scans the contents of tabledictionary.ext.php and then remove entries where the file does exist. */ function repairTableDictionaryExtFile() { $tableDictionaryExtDirs = array('custom/Extension/application/Ext/TableDictionary', 'custom/application/Ext/TableDictionary'); foreach($tableDictionaryExtDirs as $tableDictionaryExt) { if(is_dir($tableDictionaryExt) && is_writable($tableDictionaryExt)){ $dir = dir($tableDictionaryExt); while(($entry = $dir->read()) !== false) { $entry = $tableDictionaryExt . '/' . $entry; if(is_file($entry) && preg_match('/\.php$/i', $entry) && is_writeable($entry)) { if(function_exists('sugar_fopen')) { $fp = @sugar_fopen($entry, 'r'); } else { $fp = fopen($entry, 'r'); } if($fp) { $altered = false; $contents = ''; while($line = fgets($fp)) { if(preg_match('/\s*include\s*\(\s*[\'|\"](.*?)[\"|\']\s*\)\s*;/', $line, $match)) { if(!file_exists($match[1])) { $altered = true; } else { $contents .= $line; } } else { $contents .= $line; } } fclose($fp); } if($altered) { if(function_exists('sugar_fopen')) { $fp = @sugar_fopen($entry, 'w'); } else { $fp = fopen($entry, 'w'); } if($fp && fwrite($fp, $contents)) { fclose($fp); } } } //if } //while } //if } } ?>