public static function getInstallableModulesFromPackages() { global $optionalModuleStrings; require_once 'vtlib/Vtiger/Package.php'; require_once 'vtlib/Vtiger/Module.php'; require_once 'vtlib/Vtiger/Version.php'; $packageDir = cbPackageDirectory . 'optional/'; $handle = opendir($packageDir); $optionalModules = array(); while (false !== ($file = readdir($handle))) { $packageNameParts = explode(".", $file); if ($packageNameParts[count($packageNameParts) - 1] != 'zip') { continue; } array_pop($packageNameParts); $packageName = implode("", $packageNameParts); if (!empty($packageName)) { $packagepath = "{$packageDir}/{$file}"; $package = new Vtiger_Package(); $moduleName = $package->getModuleNameFromZip($packagepath); $desc = $package->getShortDescriptionFromZip($packagepath); if ($package->isModuleBundle()) { $bundleOptionalModule = array(); $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(); $subModule->getModuleNameFromZip($packagepath); $bundleOptionalModule = self::getOptionalModuleDetails($subModule, $bundleOptionalModule); } $moduleDetails = array(); $moduleDetails['description'] = empty($desc) ? $optionalModuleStrings[$moduleName . '_description'] : $desc; $moduleDetails['selected'] = true; $moduleDetails['enabled'] = true; $migrationAction = 'install'; if (isset($bundleOptionalModule['update']) && count($bundleOptionalModule['update']) > 0) { $moduleDetails['enabled'] = false; $migrationAction = 'update'; } $optionalModules[$migrationAction]['module'][$moduleName] = $moduleDetails; } else { if ($package->isLanguageType()) { $package = new Vtiger_Language(); $package->getModuleNameFromZip($packagepath); } $optionalModules = self::getOptionalModuleDetails($package, $optionalModules); } } } if (is_array($optionalModules['install']['language']) && is_array($optionalModules['install']['module'])) { $optionalModules['install'] = array_merge($optionalModules['install']['module'], $optionalModules['install']['language']); } elseif (is_array($optionalModules['install']['language']) && !is_array($optionalModules['install']['module'])) { $optionalModules['install'] = $optionalModules['install']['language']; } else { $optionalModules['install'] = $optionalModules['install']['module']; } if (isset($optionalModules['update']['language']) or isset($optionalModules['update']['module'])) { if (is_array($optionalModules['update']['language']) && is_array($optionalModules['update']['module'])) { $optionalModules['update'] = array_merge($optionalModules['update']['module'], $optionalModules['update']['language']); } elseif (is_array($optionalModules['update']['language']) && !is_array($optionalModules['update']['module'])) { $optionalModules['update'] = $optionalModules['update']['language']; } else { $optionalModules['update'] = $optionalModules['update']['module']; } } return $optionalModules; }