function langPackUnpack($unpack_type, $full_file) { global $sugar_config; global $base_upgrade_dir; global $base_tmp_upgrade_dir; $manifest = array(); if (!empty($full_file)) { $base_filename = pathinfo(urldecode($full_file), PATHINFO_FILENAME); } else { return "Empty filename supplied"; } $manifest_file = extractManifest($full_file, $base_tmp_upgrade_dir); if ($unpack_type == 'module') { $license_file = extractFile($full_file, 'LICENSE.txt', $base_tmp_upgrade_dir); } if (is_file($manifest_file)) { if ($unpack_type == 'module' && is_file($license_file)) { copy($license_file, $base_upgrade_dir . '/' . $unpack_type . '/' . $base_filename . "-license.txt"); } copy($manifest_file, $base_upgrade_dir . '/' . $unpack_type . '/' . $base_filename . "-manifest.php"); require_once $manifest_file; validate_manifest($manifest); $upgrade_zip_type = $manifest['type']; mkdir_recursive("{$base_upgrade_dir}/{$upgrade_zip_type}"); $target_path = "{$base_upgrade_dir}/{$upgrade_zip_type}/{$base_filename}"; $target_manifest = $target_path . "-manifest.php"; if (isset($manifest['icon']) && $manifest['icon'] != "") { $icon_location = extractFile($full_file, $manifest['icon'], $base_tmp_upgrade_dir); $path_parts = pathinfo($icon_location); copy($icon_location, $target_path . "-icon." . $path_parts['extension']); } // move file from uploads to cache // FIXME: where should it be? if (copy($full_file, $target_path . ".zip")) { copy($manifest_file, $target_manifest); unlink($full_file); // remove tempFile return "The file {$base_filename} has been uploaded.<br>\n"; } else { unlinkTempFiles($manifest_file, $full_file); return "There was an error uploading the file, please try again!<br>\n"; } } else { die("The zip file is missing a manifest.php file. Cannot proceed."); } unlinkTempFiles($manifest_file, ''); }
function buildInstallGrid($view) { $uh = new UpgradeHistory(); $installeds = $uh->getAll(); $upgrades_installed = 0; $installed_objects = array(); foreach ($installeds as $installed) { $filename = from_html($installed->filename); $date_entered = $installed->date_entered; $type = $installed->type; $version = $installed->version; $upgrades_installed++; $link = ""; switch ($type) { case "theme": case "langpack": case "module": case "patch": $manifest_file = extractManifest($filename); require_once $manifest_file; $name = empty($manifest['name']) ? $filename : $manifest['name']; $description = empty($manifest['description']) ? $mod_strings['LBL_UW_NONE'] : $manifest['description']; if (($upgrades_installed == 0 || $uh->UninstallAvailable($installeds, $installed)) && is_file($filename) && !empty($manifest['is_uninstallable'])) { $link = urlencode($filename); } else { $link = 'false'; } break; default: break; } if ($view == 'default' && $type != 'patch') { continue; } if ($view == 'module' && $type != 'module' && $type != 'theme' && $type != 'langpack') { continue; } $target_manifest = remove_file_extension($filename) . "-manifest.php"; require_once "{$target_manifest}"; if (isset($manifest['icon']) && $manifest['icon'] != "") { $manifest_copy_files_to_dir = isset($manifest['copy_files']['to_dir']) ? clean_path($manifest['copy_files']['to_dir']) : ""; $manifest_copy_files_from_dir = isset($manifest['copy_files']['from_dir']) ? clean_path($manifest['copy_files']['from_dir']) : ""; $manifest_icon = clean_path($manifest['icon']); $icon = "<img src=\"" . $manifest_copy_files_to_dir . ($manifest_copy_files_from_dir != "" ? substr($manifest_icon, strlen($manifest_copy_files_from_dir) + 1) : $manifest_icon) . "\">"; } else { $icon = getImageForType($manifest['type']); } $installed_objects[] = array('icon' => $icon, 'name' => $name, 'type' => $type, 'version' => $version, 'date_entered' => $date_entered, 'description' => $description, 'file' => $link); //print( "<form action=\"" . $form_action . "_prepare\" method=\"post\">\n" ); //print( "<tr><td>$icon</td><td>$name</td><td>$type</td><td>$version</td><td>$date_entered</td><td>$description</td><td>$link</td></tr>\n" ); //print( "</form>\n" ); } }
} } else { if (!move_uploaded_file($_FILES['upgrade_zip']['tmp_name'], getcwd() . '/' . $sugar_config['upload_dir'] . $_FILES['upgrade_zip']['name'])) { logThis('ERROR: could not move temporary file to final destination!'); unlinkTempFiles(); $out = "<b><span class='error'>{$mod_strings['ERR_UW_NOT_VALID_UPLOAD']}</span></b><br />"; } else { $tempFile = getcwd() . '/' . $sugar_config['upload_dir'] . $_FILES['upgrade_zip']['name']; logThis('File uploaded to ' . $tempFile); $base_filename = urldecode($_REQUEST['upgrade_zip_escaped']); $perform = true; } } } if ($perform) { $manifest_file = extractManifest($tempFile); if (is_file($manifest_file)) { require_once $manifest_file; $error = validate_manifest($manifest); if (!empty($error)) { $out = "<b><span class='error'>{$error}</span></b><br />"; break; } $upgrade_zip_type = $manifest['type']; // exclude the bad permutations if ($upgrade_zip_type != "patch") { logThis('ERROR: incorrect patch type found: ' . $upgrade_zip_type); unlinkTempFiles(); $out = "<b><span class='error'>{$mod_strings['ERR_UW_ONLY_PATCHES']}</span></b><br />"; break; }
function langPackUnpack($unpack_type = 'langpack', $full_file = '') { global $sugar_config; global $base_upgrade_dir; global $base_tmp_upgrade_dir; $manifest = array(); if (!empty($full_file)) { $tempFile = $full_file; $base_filename = urldecode($tempFile); $base_filename = preg_replace("#\\\\#", "/", $base_filename); $base_filename = basename($base_filename); } else { $tempFile = getcwd() . '/' . $sugar_config['upload_dir'] . $_FILES['language_pack']['name']; $base_filename = $_FILES['language_pack']['name']; } $manifest_file = extractManifest($tempFile, $base_tmp_upgrade_dir); if ($unpack_type == 'module') { $license_file = extractFile($tempFile, 'LICENSE.txt', $base_tmp_upgrade_dir); } if (is_file($manifest_file)) { if ($unpack_type == 'module' && is_file($license_file)) { copy($license_file, getcwd() . '/' . $sugar_config['upload_dir'] . 'upgrades/' . $unpack_type . '/' . remove_file_extension($base_filename) . "-license.txt"); } copy($manifest_file, getcwd() . '/' . $sugar_config['upload_dir'] . 'upgrades/' . $unpack_type . '/' . remove_file_extension($base_filename) . "-manifest.php"); require_once $manifest_file; validate_manifest($manifest); $upgrade_zip_type = $manifest['type']; // exclude the bad permutations /*if($upgrade_zip_type != "langpack") { unlinkTempFiles($manifest_file, $tempFile); die( "You can only upload module packs, theme packs, and language packs on this page." ); }*/ //$base_filename = urldecode( $_REQUEST['language_pack_escaped'] ); $base_filename = preg_replace("#\\\\#", "/", $base_filename); $base_filename = basename($base_filename); mkdir_recursive("{$base_upgrade_dir}/{$upgrade_zip_type}"); $target_path = getcwd() . "/{$base_upgrade_dir}/{$upgrade_zip_type}/{$base_filename}"; $target_manifest = remove_file_extension($target_path) . "-manifest.php"; if (isset($manifest['icon']) && $manifest['icon'] != "") { $icon_location = extractFile($tempFile, $manifest['icon'], $base_tmp_upgrade_dir); $path_parts = pathinfo($icon_location); copy($icon_location, remove_file_extension($target_path) . "-icon." . $path_parts['extension']); } // move file from cache/upload to cache/upload/langpack if (copy($tempFile, $target_path)) { copy($manifest_file, $target_manifest); unlink($tempFile); // remove tempFile return "The file {$base_filename} has been uploaded.<br>\n"; } else { unlinkTempFiles($manifest_file, $tempFile); return "There was an error uploading the file, please try again!<br>\n"; } } else { die("The zip file is missing a manifest.php file. Cannot proceed."); } unlinkTempFiles($manifest_file, ''); }
print "<ul>\n"; print "<table>\n"; print "<tr><th></th><th align=left>{$mod_strings['LBL_ML_NAME']}</th><th align=left>{$mod_strings['LBL_ML_TYPE']}</th><th align=left>{$mod_strings['LBL_ML_VERSION']}</th><th align=left>{$mod_strings['LBL_ML_INSTALLED']}</th><th>{$mod_strings['LBL_ML_DESCRIPTION']}</th><th>{$mod_strings['LBL_ML_ACTION']}</th></tr>\n"; foreach ($installeds as $installed) { $filename = from_html($installed->filename); $date_entered = $installed->date_entered; $type = $installed->type; $version = $installed->version; $upgrades_installed++; $link = ""; switch ($type) { case "theme": case "langpack": case "module": case "patch": $manifest_file = extractManifest($filename); require_once $manifest_file; $name = empty($manifest['name']) ? $filename : $manifest['name']; $description = empty($manifest['description']) ? $mod_strings['LBL_UW_NONE'] : $manifest['description']; if (($upgrades_installed == 0 || $uh->UninstallAvailable($installeds, $installed)) && is_file($filename) && !empty($manifest['is_uninstallable'])) { $link .= "<input type=submit name=\"btn_mode\" onclick=\"this.form.mode.value='Uninstall';this.form.submit();\" value=\"{$mod_strings['LBL_UW_UNINSTALL']}\" />"; $link .= "<input type=hidden name=\"install_file\" value=\"" . urlencode($filename) . "\" />"; $link .= "<input type=hidden name=\"mode\"/>"; } else { $link = $mod_strings['LBL_UW_NOT_AVAILABLE']; } break; default: break; } if ($view == 'default' && $type != 'patch') {