コード例 #1
0
 /**
  * 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');
     }
 }