{$mod_strings['LBL_UW_PREFLIGHT_QUERY']}
";
$out .= round((($persistence['sql_total'] - $whatsLeft) / $persistence['sql_total']) * 100, 1)."%
{$mod_strings['LBL_UW_DONE']} - {$mod_strings['LBL_UW_PREFLIGHT_QUERIES_LEFT']}: {$whatsLeft}";
$out .= "
";
echo $out;
ob_flush();
if($whatsLeft < 1) {
$persistence['sql_check_done'] = true;
}
return $persistence;
}
///////////////////////////////////////////////////////////////////////////////
//// COMMIT AJAX
/**
* does post-post-install stuff
* @param array persistence
* @return array persistence
*/
function commitAjaxFinalTouches($persistence) {
global $current_user;
global $timedate;
global $mod_strings;
global $sugar_version;
if(empty($sugar_version)) {
require('sugar_version.php');
}
// convert to UTF8 if needed
if(!empty($persistence['allTables']))
executeConvertTablesSql($GLOBALS['db']->dbType, $persistence['allTables']);
// rebuild
logThis('Performing UWrebuild()...');
UWrebuild();
logThis('UWrebuild() done.');
// upgrade history
registerUpgrade($persistence);
// flag to say upgrade has completed
$persistence['upgrade_complete'] = true;
// reminders if needed
///////////////////////////////////////////////////////////////////////////////
//// HANDLE REMINDERS
if(count($persistence['skipped_files']) > 0) {
$desc = $mod_strings['LBL_UW_COMMIT_ADD_TASK_OVERVIEW']."\n\n";
$desc .= $mod_strings['LBL_UW_COMMIT_ADD_TASK_DESC_1'];
$desc .= $persistence['uw_restore_dir']."\n\n";
$desc .= $mod_strings['LBL_UW_COMMIT_ADD_TASK_DESC_2']."\n\n";
foreach($persistence['skipped_files'] as $file) {
$desc .= $file."\n";
}
//MFH #13468
$nowDate = $timedate->nowDbDate();
$nowTime = $timedate->asDbTime($timedate->getNow());
$nowDateTime = $nowDate.' '.$nowTime;
if($_REQUEST['addTaskReminder'] == 'remind') {
logThis('Adding Task for admin for manual merge.');
$task = new Task();
$task->name = $mod_strings['LBL_UW_COMMIT_ADD_TASK_NAME'];
$task->description = $desc;
$task->date_due = $nowDate;
$task->time_due = $nowTime;
$task->priority = 'High';
$task->status = 'Not Started';
$task->assigned_user_id = $current_user->id;
$task->created_by = $current_user->id;
$task->date_entered = $nowDateTime;
$task->date_modified = $nowDateTime;
$task->save();
}
if($_REQUEST['addEmailReminder'] == 'remind') {
logThis('Sending Reminder for admin for manual merge.');
$email = new Email();
$email->assigned_user_id = $current_user->id;
$email->name = $mod_strings['LBL_UW_COMMIT_ADD_TASK_NAME'];
$email->description = $desc;
$email->description_html = nl2br($desc);
$email->from_name = $current_user->full_name;
$email->from_addr = $current_user->email1;
$email->to_addrs_arr = $email->parse_addrs($current_user->email1,'','','');
$email->cc_addrs_arr = array();
$email->bcc_addrs_arr = array();
$email->date_entered = $nowDateTime;
$email->date_modified = $nowDateTime;
$email->send();
$email->save();
}
}
//// HANDLE REMINDERS
///////////////////////////////////////////////////////////////////////////////
// clean up
unlinkTempFiles();
ob_start();
echo 'done';
ob_flush();
return $persistence;
}
/**
* runs one line of sql
* @param array $persistence
* @return array $persistence
*/
function commitAjaxRunSql($persistence) {
global $db;
if(!isset($persistence['commit_sql_errors'])) {
$persistence['commit_sql_errors'] = array();
}
// This flag is determined by the preflight check in the installer
if($persistence['schema_change'] == 'sugar') {
if(isset($persistence['sql_to_run'])
&& count($persistence['sql_to_run']) > 0
&& !empty($persistence['sql_to_run'])) {
$sql = array_shift($persistence['sql_to_run']);
$sql = trim($sql);
if(!empty($sql)) {
logThis("[RUNNING SQL QUERY] {$sql}");
$db->query($sql);
$error = '';
switch($db->dbType) {
case 'mysql':
$error = mysql_error();
break;
case 'oci8':
break;
case 'mssql':
break;
}
if(!empty($error)) {
logThis('************************************************************');
logThis('*** ERROR: SQL Commit Error!');
logThis('*** Query: [ '.$sql.' ]');
logThis('************************************************************');
$persistence['commit_sql_errors'][] = getFormattedError($error, $sql);
}
$persistence = ajaxSqlProgress($persistence, $sql, 'sql_to_run');
}
} else {
ob_start();
echo 'done';
ob_flush();
}
} else {
ob_start();
echo 'done';
ob_flush();
}
return $persistence;
}
/**
* returns errors found during SQL operations
* @param array persistence
* @return string Error message or empty string on success
*/
function commitAjaxGetSqlErrors($persistence) {
global $mod_strings;
$out = '';
if(isset($persistence['commit_sql_errors']) && !empty($persistence['commit_sql_errors'])) {
$out = "
{$mod_strings['LBL_UW_PREFLIGHT_ADD_TASK']} | |
{$mod_strings['LBL_UW_PREFLIGHT_EMAIL_REMINDER']} |
"; $preserve .= $mod_strings['LBL_UW_PREFLIGHT_PRESERVE_FILES']; $preserve .= " |
".str_replace(getcwd(), '.', $pf)." |
{$mod_strings['LBL_UW_SHOW_SCHEMA']}"; $schema .= "
"; } //// END SCHEMA SCRIPT HANDLING /////////////////////////////////////////////////////////////////////////////// ob_start(); echo $schema; ob_flush(); } function preflightCheckJsonAlterTableCharset() { global $mod_strings; global $sugar_db_version; global $persistence; if(empty($sugar_db_version)) include('sugar_version.php'); $current_version = substr(preg_replace("#[^0-9]#", "", $sugar_db_version),0,3); if(version_compare($current_version, '450', "<")) { if(isset($persistence['allTables']) && !empty($persistence['allTables'])) { $alterTableContents = printAlterTableSql($persistence['allTables']); $alterTableSchema = "{$mod_strings['LBL_UW_CHARSET_SCHEMA_CHANGE']}"; $alterTableSchema .= "
"; } } else { $alterTableSchema = ''.$mod_strings['LBL_UW_PREFLIGHT_NOT_NEEDED'].''; } ob_start(); echo $alterTableSchema; ob_flush(); } /////////////////////////////////////////////////////////////////////////////// //// SYSTEMCHECK AJAX FUNCTIONS function systemCheckJsonGetFiles($persistence) { global $sugar_config; global $mod_strings; // add directories here that should be skipped when doing file permissions checks (cache/upload is the nasty one) $skipDirs = array( $sugar_config['upload_dir'], getcwd().'/themes', ); if(!isset($persistence['dirs_checked'])) { $the_array = array(); $files = array(); $dir = getcwd(); $d = dir($dir); while($f = $d->read()) { if($f == "." || $f == "..") // skip *nix self/parent continue; if(is_dir("$dir/$f")) $the_array[] = clean_path("$dir/$f"); else { $files[] = clean_path("$dir/$f"); } } $persistence['files_to_check'] = $files; $persistence['dirs_to_check'] = $the_array; $persistence['dirs_total'] = count($the_array); $persistence['dirs_checked'] = false; $out = "1% {$mod_strings['LBL_UW_DONE']}"; return $persistence; } elseif($persistence['dirs_checked'] == false) { $dir = array_pop($persistence['dirs_to_check']); $files = uwFindAllFiles($dir, array(), true, $skipDirs); $persistence['files_to_check'] = array_merge($persistence['files_to_check'], $files); $whatsLeft = count($persistence['dirs_to_check']); if(!isset($persistence['dirs_to_check']) || $whatsLeft < 1) { $whatsLeft = 0; $persistence['dirs_checked'] = true; } $out = round((($persistence['dirs_total'] - $whatsLeft) / 21) * 100, 1)."% {$mod_strings['LBL_UW_DONE']}"; $out .= " [{$mod_strings['LBL_UW_SYSTEM_CHECK_CHECKING_JSON']} {$dir}]"; } else { $out = "Done"; } echo trim($out); return $persistence; } /** * checks files for permissions * @param array files Array of files with absolute paths * @return string result of check */ function systemCheckJsonCheckFiles($persistence) { global $mod_strings; global $persistence; $filesNotWritable = array(); $i=0; $filesOut = " {$mod_strings['LBL_UW_SHOW_NW_FILES']} '; // not a stop error $persistence['filesNotWritable'] = (count($filesNotWritable) > 0) ? true : false; if(count($filesNotWritable) < 1) { $filesOut = "{$mod_strings['LBL_UW_FILE_NO_ERRORS']}"; $persistence['step']['systemCheck'] = 'success'; } echo $filesOut; return $persistence; } ?>