public static function getLayoutFile($name) { $basePath = 'layouts' . '/' . vglobal('defaultLayout') . '/'; $filePath = Vtiger_Loader::resolveNameToPath('~' . $basePath . $name); if (is_file($filePath)) { return $basePath . $name; } $basePath = 'layouts' . '/' . Vtiger_Viewer::getDefaultLayoutName() . '/'; return $basePath . $name; }
/** * Getting template name * @return string templateName */ public function getTemplateName($view, $moduleName) { $tpl = $view . $this->name . '.tpl'; $filename = 'layouts' . DIRECTORY_SEPARATOR . Yeti_Layout::getActiveLayout() . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'inventoryfields' . DIRECTORY_SEPARATOR . $tpl; if (is_file($filename)) { return $tpl; } $filename = 'layouts' . DIRECTORY_SEPARATOR . Yeti_Layout::getActiveLayout() . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'Vtiger' . DIRECTORY_SEPARATOR . 'inventoryfields' . DIRECTORY_SEPARATOR . $tpl; if (is_file($filename)) { return $tpl; } $filename = 'layouts' . DIRECTORY_SEPARATOR . Vtiger_Viewer::getDefaultLayoutName() . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'inventoryfields' . DIRECTORY_SEPARATOR . $tpl; if (is_file($filename)) { return $tpl; } $filename = 'layouts' . DIRECTORY_SEPARATOR . Vtiger_Viewer::getDefaultLayoutName() . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'Vtiger' . DIRECTORY_SEPARATOR . 'inventoryfields' . DIRECTORY_SEPARATOR . $tpl; if (is_file($filename)) { return $tpl; } return $view . 'Base' . '.tpl'; }
/** * 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(".", ['include' => ['templates', "modules/{$module}", 'cron', 'languages', 'layouts', 'settings/actions', 'settings/views', 'settings/models', 'settings/templates', 'settings/connectors', 'settings/libraries']], ['templates' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/{$module}", 'cron' => "cron/modules/{$module}", 'settings/actions' => "modules/Settings/{$module}/actions", 'settings/views' => "modules/Settings/{$module}/views", 'settings/models' => "modules/Settings/{$module}/models", 'settings/connectors' => "modules/Settings/{$module}/connectors", 'settings/libraries' => "modules/Settings/{$module}/libraries", 'settings/templates' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/Settings/{$module}", 'images' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/skins/images/{$module}", 'settings' => 'modules/Settings', 'layouts' => 'layouts']); // If data is not yet available if (empty($this->_modulexml)) { $this->__parseManifestFile($unzip); } if ($unzip) { $unzip->close(); } } return $module; }
/** * Function returns the css files * @param <Array> $cssFileNames * @param <String> $fileExtension * @return <Array of Vtiger_CssScript_Model> * * First check if $cssFileName exists * if not, check under layout folder $cssFileName eg:layouts/basic/$cssFileName */ function checkAndConvertCssStyles($cssFileNames, $fileExtension = 'css') { $cssStyleInstances = []; foreach ($cssFileNames as $cssFileName) { $cssScriptModel = new Vtiger_CssScript_Model(); if (strpos($cssFileName, 'http://') === 0 || strpos($cssFileName, 'https://') === 0) { $cssStyleInstances[] = $cssScriptModel->set('href', $cssFileName); continue; } $completeFilePath = Vtiger_Loader::resolveNameToPath($cssFileName, $fileExtension); if (file_exists($completeFilePath)) { if (strpos($cssFileName, '~') === 0) { $filePath = ltrim(ltrim($cssFileName, '~'), '/'); } else { $filePath = str_replace('.', '/', $cssFileName) . '.' . $fileExtension; } $minFilePath = str_replace('.css', '.min.css', $filePath); if (Vtiger_Functions::getMinimizationOptions($fileExtension) && is_file(Vtiger_Loader::resolveNameToPath('~' . $minFilePath, $fileExtension))) { $filePath = $minFilePath; } $cssStyleInstances[$cssFileName] = $cssScriptModel->set('href', $filePath); continue; } else { $preLayoutPath = ''; if (strpos($cssFileName, '~') === 0) { $cssFile = ltrim(ltrim($cssFileName, '~'), '/'); $preLayoutPath = '~'; } else { $cssFile = $cssFileName; } // Checking if file exists in selected layout $layoutPath = 'layouts' . '/' . Yeti_Layout::getActiveLayout(); $fallBackFilePath = Vtiger_Loader::resolveNameToPath($preLayoutPath . $layoutPath . '/' . $cssFile, $fileExtension); if (is_file($fallBackFilePath)) { if (empty($preLayoutPath)) { $filePath = str_replace('.', '/', $cssFile) . '.css'; } $minFilePath = str_replace('.css', '.min.css', $filePath); if (Vtiger_Functions::getMinimizationOptions($fileExtension) && is_file(Vtiger_Loader::resolveNameToPath('~' . $layoutPath . '/' . $minFilePath, $fileExtension))) { $filePath = $minFilePath; } $cssStyleInstances[$cssFileName] = $cssScriptModel->set('href', $layoutPath . '/' . $filePath); continue; } // Checking if file exists in default layout $layoutPath = 'layouts' . '/' . Vtiger_Viewer::getDefaultLayoutName(); $fallBackFilePath = Vtiger_Loader::resolveNameToPath($preLayoutPath . $layoutPath . '/' . $cssFile, $fileExtension); if (is_file($fallBackFilePath)) { if (empty($preLayoutPath)) { $filePath = str_replace('.', '/', $cssFile) . '.css'; } $minFilePath = str_replace('.css', '.min.css', $filePath); if (Vtiger_Functions::getMinimizationOptions($fileExtension) && is_file(Vtiger_Loader::resolveNameToPath('~' . $layoutPath . '/' . $minFilePath, $fileExtension))) { $filePath = $minFilePath; } $cssStyleInstances[$cssFileName] = $cssScriptModel->set('href', $layoutPath . '/' . $filePath); continue; } } } return $cssStyleInstances; }
/** * Initialize Import * @access private */ function initImport($zipfile, $overwrite = true) { $module = $this->getModuleNameFromZip($zipfile); if ($module != null) { $unzip = new Vtiger_Unzip($zipfile, $overwrite); // Unzip selectively $unzip->unzipAllEx(".", ['include' => array('templates', "modules/{$module}", 'cron', 'languages', 'settings/actions', 'settings/views', 'settings/models', 'settings/templates', 'settings/connectors', 'settings/libraries', "{$module}.png", 'updates', 'layouts')], ['templates' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/{$module}", 'cron' => "cron/modules/{$module}", 'settings/actions' => "modules/Settings/{$module}/actions", 'settings/views' => "modules/Settings/{$module}/views", 'settings/models' => "modules/Settings/{$module}/models", 'settings/connectors' => "modules/Settings/{$module}/connectors", 'settings/libraries' => "modules/Settings/{$module}/libraries", 'settings/templates' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/Settings/{$module}", 'images' => "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/skins/images/{$module}", 'settings' => "modules/Settings", 'updates' => "cache/updates", 'layouts' => 'layouts']); if ($unzip->checkFileExistsInRootFolder("{$module}.png")) { $unzip->unzip("{$module}.png", "layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/skins/images/{$module}.png"); } if ($unzip) { $unzip->close(); } } return $module; }
/** * Export Module as a zip file. * @param Vtiger_Module Instance of module * @param Path Output directory path * @param String Zipfilename to use * @param Boolean True for sending the output as download */ function export($moduleInstance, $todir = '', $zipfilename = '', $directDownload = false) { $module = $moduleInstance->name; $this->__initExport($module, $moduleInstance); // Call module export function $this->export_Module($moduleInstance); $this->__finishExport(); // Export as Zip // if($zipfilename == '') $zipfilename = "$module-" . date('YmdHis') . ".zip"; $zipfilename = $moduleInstance->name . "_" . date('Y-m-d-Hi') . "_" . $moduleInstance->version . ".zip"; $zipfilename = "{$this->_export_tmpdir}/{$zipfilename}"; $zip = new Vtiger_Zip($zipfilename); // Add manifest file $zip->addFile($this->__getManifestFilePath(), "manifest.xml"); // Copy module directory $zip->copyDirectoryFromDisk("modules/{$module}"); // Copy Settings/module directory if (is_dir("modules/Settings/{$module}")) { $zip->copyDirectoryFromDisk("modules/Settings/{$module}", 'settings/'); } // Copy cron files of the module (if any) if (is_dir("cron/modules/{$module}")) { $zip->copyDirectoryFromDisk("cron/modules/{$module}", "cron"); } //Copy module templates files if (is_dir('layouts/' . Vtiger_Viewer::getDefaultLayoutName() . '/modules/' . $module)) { $zip->copyDirectoryFromDisk('layouts/' . Vtiger_Viewer::getDefaultLayoutName() . '/modules/' . $module, 'templates'); } //Copy Settings module templates files, if any if (is_dir("layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/Settings/{$module}")) { $zip->copyDirectoryFromDisk("layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/modules/Settings/{$module}", "settings/templates"); } //Support to multiple layouts of module $layoutDirectories = glob('layouts' . '/*', GLOB_ONLYDIR); foreach ($layoutDirectories as $key => $layoutName) { $moduleLayout = $layoutName . "/modules/{$module}"; if (is_dir($moduleLayout)) { $zip->copyDirectoryFromDisk($moduleLayout, $moduleLayout); } $settingsLayout = $layoutName . "/modules/Settings/{$module}"; if (is_dir($settingsLayout)) { $zip->copyDirectoryFromDisk($settingsLayout, $settingsLayout); } } //Copy language files $this->__copyLanguageFiles($zip, $module); //Copy image file if (file_exists("layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/skins/images/{$module}.png")) { $zip->copyFileFromDisk("layouts/" . Vtiger_Viewer::getDefaultLayoutName() . "/skins/images", "", "{$module}.png"); } $zip->save(); if ($todir) { copy($zipfilename, $todir); } if ($directDownload) { $zip->forceDownload($zipfilename); unlink($zipfilename); } $this->__cleanupExport(); }