/** * Upload layout files * * @param string $layoutName * @param array $layoutConfig * @param string $tmpDirName * @param string $host * @param array $formData * string login required * string password required * array layout required * @param boolean $checkInstallConfig * @throws Layout\Exception\LayoutException * return void */ protected function uploadLayoutFiles($layoutName, array $layoutConfig, $tmpDirName, $host, array $formData, $checkInstallConfig = true) { $updated = false; // get the layout's path $layoutPath = !empty($layoutConfig['layout_path']) ? $tmpDirName . '/' . $layoutConfig['layout_path'] : null; // check the layout existing if ($layoutPath && (!file_exists($layoutPath) || !is_dir($layoutPath))) { throw new LayoutException('Cannot define the layout\'s path into the config file'); } $globalLayoutPath = basename(APPLICATION_PUBLIC) . '/' . ApplicationService::getLayoutPath(false) . '/' . $layoutName; $localLayoutPath = dirname(APPLICATION_PUBLIC) . '/' . $globalLayoutPath; // check the layout install config if ($checkInstallConfig) { if (!file_exists($layoutPath . '/' . $this->layoutInstallConfig)) { throw new LayoutException('Layout not found'); } if (file_exists($localLayoutPath)) { throw new LayoutException('Layout already uploaded'); } } $ftp = new ApplicationFtpUtility($host, $formData['login'], $formData['password']); if ($layoutPath) { // upload the layout via FTP $ftp->createDirectory($globalLayoutPath, true); $ftp->copyDirectory($layoutPath, $globalLayoutPath); $updated = true; } // check modules templates if (!empty($layoutConfig['module_path']) && is_array($layoutConfig['module_path'])) { $globalModulePath = ApplicationService::getModulePath(false); $localModulePath = APPLICATION_ROOT . '/' . $globalModulePath; // upload modules templates foreach ($layoutConfig['module_path'] as $moduleName => $template) { // skip non existing modules if (!file_exists($localModulePath . '/' . $moduleName)) { continue; } $templateDir = $tmpDirName . '/' . $template; // check the template existing if (!file_exists($templateDir) || !is_dir($templateDir)) { throw new LayoutException('Cannot define the template\'s path into the config file'); } $moduleTemplateDir = $globalModulePath . '/' . $moduleName . '/' . ApplicationService::getModuleViewDir() . '/' . $layoutName; $ftp->createDirectory($moduleTemplateDir, true); $ftp->copyDirectory($templateDir, $moduleTemplateDir); $updated = true; } } if (!$updated) { throw new LayoutException('Nothing to update the layout'); } }