/** * Update Module from zip file * @param Vtiger_Module Instance of the module to update * @param String Zip file name * @param Boolean True for overwriting existing module */ function update($moduleInstance, $zipfile, $overwrite = true) { $module = $this->getModuleNameFromZip($zipfile); if ($module != null) { // If data is not yet available if (empty($this->_modulexml)) { $this->__parseManifestFile($unzip); } $buildModuleArray = array(); $installSequenceArray = array(); $moduleBundle = (bool) $this->_modulexml->modulebundle; if ($moduleBundle == true) { $moduleList = (array) $this->_modulexml->modulelist; foreach ($moduleList as $moduleInfos) { foreach ($moduleInfos as $moduleInfo) { $moduleInfo = (array) $moduleInfo; $buildModuleArray[] = $moduleInfo; $installSequenceArray[] = $moduleInfo['install_sequence']; } } sort($installSequenceArray); $unzip = new Vtiger_Unzip($zipfile); $unzip->unzipAllEx($this->getTemporaryFilePath()); foreach ($installSequenceArray as $sequence) { foreach ($buildModuleArray as $moduleInfo) { if ($moduleInfo['install_sequence'] == $sequence) { $moduleInstance = Vtiger_Module::getInstance($moduleInfo['name']); $this->update($moduleInstance, $this->getTemporaryFilePath($moduleInfo['filepath']), $overwrite); } } } } else { if (!$moduleInstance || $moduleInstance->name != $module) { self::log('Module name mismatch!'); return false; } $module = $this->initUpdate($moduleInstance, $zipfile, $overwrite); // Call module update function $this->update_Module($moduleInstance); } } }
/** * Initialize Update * @access private */ function initUpdate($moduleInstance, $zipfile, $overwrite) { $module = $this->getModuleNameFromZip($zipfile); if (!$moduleInstance || $moduleInstance->name != $module) { self::log('Module name mismatch!'); return false; } if ($module != null) { $unzip = new Vtiger_Unzip($zipfile, $overwrite); // Unzip selectively $unzip->unzipAllEx(".", array('include' => array('templates', "modules/{$module}")), array('templates' => "Smarty/templates/modules/{$module}"), array('cron' => "cron/modules/{$module}")); // If data is not yet available if (empty($this->_modulexml)) { $this->__parseManifestFile($unzip); } if ($unzip) { $unzip->close(); } } return $module; }
/** * Import Module from zip file * @param String Zip file name * @param Boolean True for overwriting existing module * * @todo overwrite feature is not functionally currently. */ function import($zipfile, $overwrite = false) { $module = $this->getModuleNameFromZip($zipfile); if ($module != null) { // If data is not yet available if (empty($this->_modulexml)) { $this->__parseManifestFile($unzip); } $buildModuleArray = array(); $installSequenceArray = array(); $moduleBundle = (bool) $this->_modulexml->modulebundle; if ($moduleBundle == true) { $moduleList = (array) $this->_modulexml->modulelist; foreach ($moduleList as $moduleInfos) { foreach ($moduleInfos as $moduleInfo) { $moduleInfo = (array) $moduleInfo; $buildModuleArray[] = $moduleInfo; $installSequenceArray[] = $moduleInfo['install_sequence']; } } sort($installSequenceArray); $unzip = new Vtiger_Unzip($zipfile); $unzip->unzipAllEx($this->getTemporaryFilePath()); foreach ($installSequenceArray as $sequence) { foreach ($buildModuleArray as $moduleInfo) { if ($moduleInfo['install_sequence'] == $sequence) { $this->import($this->getTemporaryFilePath($moduleInfo['filepath']), $overwrite); } } } } else { $module = $this->initImport($zipfile, $overwrite); // Call module import function $this->import_Module(); } } }
/** * Unzip all zip files and delete unzipped archives. */ private function unzipLoadedFiles() { $files = $this->getFiles(self::UPLOAD_DIR, "*.zip"); foreach ($files as $file) { $unzip = new Vtiger_Unzip(self::UPLOAD_DIR . $file); if (!$unzip) { unlink(self::UPLOAD_DIR . $file); continue; } $unzip->unzipAllEx(self::UPLOAD_DIR); $unzip->close(); unlink(self::UPLOAD_DIR . $file); } }
public static function installSelectedOptionalModules($selected_modules, $source_directory = '', $destination_directory = '') { require_once 'vtlib/Vtiger/Package.php'; require_once 'vtlib/Vtiger/Module.php'; require_once 'include/utils/utils.php'; $selected_modules = explode(":", $selected_modules); $languagePacks = array(); if ($handle = opendir('packages/vtiger/optional')) { while (false !== ($file = readdir($handle))) { $filename_arr = explode(".", $file); if ($filename_arr[count($filename_arr) - 1] != 'zip') { continue; } $packagename = $filename_arr[0]; $packagepath = "packages/vtiger/optional/{$file}"; $package = new Vtiger_Package(); $module = $package->getModuleNameFromZip($packagepath); if (!empty($packagename) && in_array($module, $selected_modules)) { if ($package->isLanguageType($packagepath)) { $languagePacks[$module] = $packagepath; continue; } if ($module != null) { if ($package->isModuleBundle()) { $unzip = new Vtiger_Unzip($packagepath); $unzip->unzipAllEx($package->getTemporaryFilePath()); $moduleInfoList = $package->getAvailableModuleInfoFromModuleBundle(); foreach ($moduleInfoList as $moduleInfo) { $moduleInfo = (array) $moduleInfo; $packagepath = $package->getTemporaryFilePath($moduleInfo['filepath']); $subModule = new Vtiger_Package(); $subModuleName = $subModule->getModuleNameFromZip($packagepath); $moduleInstance = Vtiger_Module::getInstance($subModuleName); if ($moduleInstance) { updateVtlibModule($subModuleName, $packagepath); } else { installVtlibModule($subModuleName, $packagepath); } } } else { $moduleInstance = Vtiger_Module::getInstance($module); if ($moduleInstance) { updateVtlibModule($module, $packagepath); } else { installVtlibModule($module, $packagepath); } } } } } closedir($handle); } foreach ($languagePacks as $module => $packagepath) { installVtlibModule($module, $packagepath); continue; } }
/** * Initialize Import * @access private */ function initImport($zipfile, $overwrite) { $module = $this->getModuleNameFromZip($zipfile); if ($module != null) { $unzip = new Vtiger_Unzip($zipfile, $overwrite); // Unzip selectively $unzip->unzipAllEx(".", array('include' => array('templates', "modules/{$module}", 'cron')), array('templates' => "Smarty/templates/modules/{$module}", 'cron' => "cron/modules/{$module}")); // If data is not yet available if (empty($this->_modulexml)) { $this->__parseManifestFile($unzip); } if ($unzip) { $unzip->close(); } } return $module; }