function preflightCheck() { require_once 'modules/UpgradeWizard/uw_files.php'; global $sugar_config; global $mod_strings; global $sugar_version; if (!isset($sugar_version) || empty($sugar_version)) { require_once './sugar_version.php'; } unset($_SESSION['rebuild_relationships']); unset($_SESSION['rebuild_extensions']); // don't bother if are rechecking $manualDiff = array(); if (!isset($_SESSION['unzip_dir']) || empty($_SESSION['unzip_dir'])) { logThis('unzipping files in upgrade archive...'); $errors = array(); list($base_upgrade_dir, $base_tmp_upgrade_dir) = getUWDirs(); $unzip_dir = ''; //Following is if User logged out unexpectedly and then logged into UpgradeWizard again. //also come up with mechanism to read from upgrade-progress file. if (!isset($_SESSION['install_file']) || empty($_SESSION['install_file']) || !is_file($_SESSION['install_file'])) { if (file_exists($base_tmp_upgrade_dir) && ($handle = opendir($base_tmp_upgrade_dir))) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_file($base_tmp_upgrade_dir . "/" . $file . "/manifest.php")) { require_once $base_tmp_upgrade_dir . "/" . $file . "/manifest.php"; $package_name = $manifest['copy_files']['from_dir']; if (file_exists($base_tmp_upgrade_dir . "/" . $file . "/" . $package_name) && file_exists($base_tmp_upgrade_dir . "/" . $file . "/scripts") && file_exists($base_tmp_upgrade_dir . "/" . $file . "/manifest.php")) { $unzip_dir = $base_tmp_upgrade_dir . "/" . $file; if (file_exists("{$base_upgrade_dir}/patch/" . $package_name . '.zip')) { $_SESSION['install_file'] = $package_name . ".zip"; break; } } } } } } } if (empty($_SESSION['install_file'])) { unlinkUWTempFiles(); resetUwSession(); echo 'Upload File not found so redirecting to Upgrade Start '; $redirect_new_wizard = $sugar_config['site_url'] . '/index.php?module=UpgradeWizard&action=index'; echo '<form name="redirect" action="' . $redirect_new_wizard . '" method="POST">'; $upgrade_directories_not_found = <<<eoq \t<table cellpadding="3" cellspacing="0" border="0"> \t\t<tr> \t\t\t<th colspan="2" align="left"> \t\t\t\t<span class='error'><b>'Upload file missing or has been deleted. Refresh the page to go back to UpgradeWizard start'</b></span> \t\t\t</th> \t\t</tr> \t</table> eoq; $uwMain = $upgrade_directories_not_found; return ''; } $install_file = "{$base_upgrade_dir}/patch/" . basename(urldecode($_SESSION['install_file'])); $show_files = true; if (empty($unzip_dir)) { $unzip_dir = mk_temp_dir($base_tmp_upgrade_dir); } $zip_from_dir = "."; $zip_to_dir = "."; $zip_force_copy = array(); if (!$unzip_dir) { logThis('Could not create a temporary directory using mk_temp_dir( $base_tmp_upgrade_dir )'); die($mod_strings['ERR_UW_NO_CREATE_TMP_DIR']); } //double check whether unzipped . if (file_exists($unzip_dir . "/scripts") && file_exists($unzip_dir . "/manifest.php")) { //already unzipped } else { unzip($install_file, $unzip_dir); } // assumption -- already validated manifest.php at time of upload require_once "{$unzip_dir}/manifest.php"; if (isset($manifest['copy_files']['from_dir']) && $manifest['copy_files']['from_dir'] != "") { $zip_from_dir = $manifest['copy_files']['from_dir']; } if (isset($manifest['copy_files']['to_dir']) && $manifest['copy_files']['to_dir'] != "") { $zip_to_dir = $manifest['copy_files']['to_dir']; } if (isset($manifest['copy_files']['force_copy']) && $manifest['copy_files']['force_copy'] != "") { $zip_force_copy = $manifest['copy_files']['force_copy']; } if (isset($manifest['version'])) { $version = $manifest['version']; } if (!is_writable("config.php")) { return $mod_strings['ERR_UW_CONFIG']; } $_SESSION['unzip_dir'] = clean_path($unzip_dir); $_SESSION['zip_from_dir'] = clean_path($zip_from_dir); //logThis('unzip done.'); } else { $unzip_dir = $_SESSION['unzip_dir']; $zip_from_dir = $_SESSION['zip_from_dir']; } //check if $_SESSION['unzip_dir'] and $_SESSION['zip_from_dir'] exist if (!isset($_SESSION['unzip_dir']) || !file_exists($_SESSION['unzip_dir']) || !isset($_SESSION['install_file']) || empty($_SESSION['install_file']) || !file_exists($_SESSION['install_file'])) { //redirect to start unlinkUWTempFiles(); resetUwSession(); echo 'Upload File not found so redirecting to Upgrade Start '; $redirect_new_wizard = $sugar_config['site_url'] . '/index.php?module=UpgradeWizard&action=index'; echo '<form name="redirect" action="' . $redirect_new_wizard . '" method="POST">'; $upgrade_directories_not_found = <<<eoq \t<table cellpadding="3" cellspacing="0" border="0"> \t\t<tr> \t\t\t<th colspan="2" align="left"> \t\t\t\t<span class='error'><b>'Upload file missing or has been deleted. Refresh the page to go back to UpgradeWizard start'</b></span> \t\t\t</th> \t\t</tr> \t</table> eoq; $uwMain = $upgrade_directories_not_found; return ''; } //copy minimum required files fileCopy('include/utils/sugar_file_utils.php'); $upgradeFiles = findAllFiles(clean_path("{$unzip_dir}/{$zip_from_dir}"), array()); $cache_html_files = array(); // get md5 sums $md5_string = array(); if (file_exists(clean_path(getcwd() . '/files.md5'))) { require clean_path(getcwd() . '/files.md5'); } // file preflight checks logThis('verifying md5 checksums for files...'); foreach ($upgradeFiles as $file) { if (in_array(str_replace(clean_path("{$unzip_dir}/{$zip_from_dir}") . "/", '', $file), $uw_files)) { continue; } // skip already loaded files if (strpos($file, '.md5')) { continue; } // skip md5 file // normalize file paths $file = clean_path($file); // check that we can move/delete the upgraded file if (!is_writable($file)) { $errors[] = $mod_strings['ERR_UW_FILE_NOT_WRITABLE'] . ": " . $file; } // check that destination files are writable $destFile = getcwd() . str_replace(clean_path($unzip_dir . '/' . $zip_from_dir), '', $file); if (is_file($destFile)) { // of course it needs to exist first... if (!is_writable($destFile)) { $errors[] = $mod_strings['ERR_UW_FILE_NOT_WRITABLE'] . ": " . $destFile; } } /////////////////////////////////////////////////////////////////////// //// DIFFS // compare md5s and build up a manual merge list $targetFile = clean_path("." . str_replace(getcwd(), '', $destFile)); $targetMd5 = '0'; if (is_file($destFile)) { if (strpos($targetFile, '.php')) { // handle PHP files that were hit with the security regex $fp = ''; if (function_exists('sugar_fopen')) { $fp = sugar_fopen($destFile, 'r'); } else { $fp = fopen($destFile, 'r'); } $filesize = filesize($destFile); if ($filesize > 0) { $fileContents = stream_get_contents($fp); $targetMd5 = md5($fileContents); } } else { $targetMd5 = md5_file($destFile); } } if (isset($md5_string[$targetFile]) && $md5_string[$targetFile] != $targetMd5) { logThis('found a file with a differing md5: [' . $targetFile . ']'); $manualDiff[] = $destFile; } //// END DIFFS /////////////////////////////////////////////////////////////////////// } logThis('md5 verification done.'); $errors['manual'] = $manualDiff; return $errors; }
function fileCopyDir($fromDir, $toDir) { $result = false; $readFromDir = $fromDir; $readToDir = $toDir; createDir($toDir); if (is_dir($readFromDir)) { $filesArray = array(); $filesArray = fileReadDirContents($readFromDir); foreach ($filesArray as $name) { if (is_dir($readFromDir . '/' . $name)) { $result = fileCopyDir($fromDir . '/' . $name, $toDir . '/' . $name); } elseif (file_exists($readFromDir . '/' . $name)) { $result = fileCopy($fromDir . '/' . $name, $toDir . '/' . $name); } } } return $result; }
public function copyModule($moduleComponentId, $newId) { $gallQuery = "SELECT * FROM `gallery_pics` WHERE page_modulecomponentid = '" . $moduleComponentId . "'"; $gallResult = mysql_query($gallQuery); $gallRow = mysql_fetch_assoc($gallResult); $destinationPage_moduleComponentId = $newId; while ($gallRow) { fileCopy($moduleComponentId, 'gallery', $gallRow['upload_filename'], $destinationPage_moduleComponentId, 'gallery', $gallRow['upload_filename'], $this->userId); $thumb = "thumb_" . $gallRow['upload_filename']; fileCopy($moduleComponentId, 'gallery', $thumb, $destinationPage_moduleComponentId, 'gallery', $gallRow['upload_filename'], $this->userId); } return true; }
function createWebsiteCopyTheme($fromDir, $toDir) { $readFromDir = $fromDir; $readToDir = $toDir; createDir($toDir); if (is_dir($readFromDir)) { $filesArray = array(); $filesArray = fileReadDirContents($readFromDir); foreach ($filesArray as $name) { if (is_dir($readFromDir . '/' . $name)) { $result = fileCopyDir($fromDir . '/' . $name, $toDir . '/' . $name); } elseif (file_exists($readFromDir . '/' . $name)) { if ($name == 'style.css' || $name == 'style.ie6.css' || $name == 'style.ie7.css' || $name == 'favicon.ico') { $result = fileCopy($fromDir . '/' . $name, $toDir . '/' . $name); } } } } }