function performInstall($file, $silent = true)
 {
     global $sugar_config;
     global $mod_strings;
     global $current_language;
     $base_upgrade_dir = sugar_cached("/upgrades");
     $base_tmp_upgrade_dir = "{$base_upgrade_dir}/temp";
     if (!file_exists($base_tmp_upgrade_dir)) {
         mkdir_recursive($base_tmp_upgrade_dir, true);
     }
     $GLOBALS['log']->debug("INSTALLING: " . $file);
     $mi = new ModuleInstaller();
     $mi->silent = $silent;
     $mod_strings = return_module_language($current_language, "Administration");
     $GLOBALS['log']->debug("ABOUT TO INSTALL: " . $file);
     if (preg_match("#.*\\.zip\$#", $file)) {
         $GLOBALS['log']->debug("1: " . $file);
         // handle manifest.php
         $target_manifest = remove_file_extension($file) . '-manifest.php';
         include $target_manifest;
         $GLOBALS['log']->debug("2: " . $file);
         $unzip_dir = mk_temp_dir($base_tmp_upgrade_dir);
         unzip($file, $unzip_dir);
         $GLOBALS['log']->debug("3: " . $unzip_dir);
         $id_name = $installdefs['id'];
         $version = $manifest['version'];
         $uh = new UpgradeHistory();
         $previous_install = array();
         if (!empty($id_name) & !empty($version)) {
             $previous_install = $uh->determineIfUpgrade($id_name, $version);
         }
         $previous_version = empty($previous_install['version']) ? '' : $previous_install['version'];
         $previous_id = empty($previous_install['id']) ? '' : $previous_install['id'];
         if (!empty($previous_version)) {
             $mi->install($unzip_dir, true, $previous_version);
         } else {
             $mi->install($unzip_dir);
         }
         $GLOBALS['log']->debug("INSTALLED: " . $file);
         $new_upgrade = new UpgradeHistory();
         $new_upgrade->filename = $file;
         $new_upgrade->md5sum = md5_file($file);
         $new_upgrade->type = $manifest['type'];
         $new_upgrade->version = $manifest['version'];
         $new_upgrade->status = "installed";
         //$new_upgrade->author        = $manifest['author'];
         $new_upgrade->name = $manifest['name'];
         $new_upgrade->description = $manifest['description'];
         $new_upgrade->id_name = $id_name;
         $serial_manifest = array();
         $serial_manifest['manifest'] = isset($manifest) ? $manifest : '';
         $serial_manifest['installdefs'] = isset($installdefs) ? $installdefs : '';
         $serial_manifest['upgrade_manifest'] = isset($upgrade_manifest) ? $upgrade_manifest : '';
         $new_upgrade->manifest = base64_encode(serialize($serial_manifest));
         //$new_upgrade->unique_key    = (isset($manifest['unique_key'])) ? $manifest['unique_key'] : '';
         $new_upgrade->save();
         //unlink($file);
     }
     //fi
 }
         die($mod_strings['ERR_UW_NO_LANGPACK'] . $install_file);
     }
     $hidden_fields .= "<input type=hidden name=\"new_lang_name\" value=\"{$new_lang_name}\"/>";
     $new_lang_desc = UpgradeWizardCommon::getLanguagePackName("{$unzip_dir}/{$zip_from_dir}/include/language/{$new_lang_name}.lang.php");
     if ($new_lang_desc == "") {
         die($mod_strings['ERR_UW_NO_LANG_DESC_1'] . "include/language/{$new_lang_name}.lang.php" . $mod_strings['ERR_UW_NO_LANG_DESC_2'] . "{$install_file}.");
     }
     $hidden_fields .= "<input type=hidden name=\"new_lang_desc\" value=\"{$new_lang_desc}\"/>";
     if (!is_writable("config.php")) {
         die($mod_strings['ERR_UW_CONFIG']);
     }
     break;
 case "module":
     $previous_install = array();
     if (!empty($id_name) & !empty($version)) {
         $previous_install = $uh->determineIfUpgrade($id_name, $version);
     }
     $previous_version = empty($previous_install['version']) ? '' : $previous_install['version'];
     $previous_id = empty($previous_install['id']) ? '' : $previous_install['id'];
     $show_files = false;
     //rrs pull out unique_key
     $hidden_fields .= "<input type=hidden name=\"author\" value=\"{$author}\"/>";
     $hidden_fields .= "<input type=hidden name=\"name\" value=\"{$name}\"/>";
     $hidden_fields .= "<input type=hidden name=\"description\" value=\"{$description}\"/>";
     $hidden_fields .= "<input type=hidden name=\"is_uninstallable\" value=\"{$is_uninstallable}\"/>";
     $hidden_fields .= "<input type=hidden name=\"id_name\" value=\"{$id_name}\"/>";
     $hidden_fields .= "<input type=hidden name=\"previous_version\" value=\"{$previous_version}\"/>";
     $hidden_fields .= "<input type=hidden name=\"previous_id\" value=\"{$previous_id}\"/>";
     break;
 default:
     die($mod_strings['ERR_UW_WRONG_TYPE'] . $install_type);