/** * Get related projects * @param Designer_Project $project * @param array & $list - result */ protected function getRelatedProjects($project, &$list) { $projectConfig = $project->getConfig(); if (isset($projectConfig['files']) && !empty($projectConfig['files'])) { foreach ($projectConfig['files'] as $file) { if (File::getExt($file) === '.js' || File::getExt($file) === '.css') { continue; } $projectFile = $this->_config->get('configs') . $file; $subProject = Designer_Factory::loadProject($this->_config, $projectFile); $list[] = array('project' => $subProject, 'file' => $file); $this->getRelatedProjects($subProject, $list); } } }
/** * Gel list of JS files to include * (load and render designer project) * @param string $cacheKey * @param Designer_Project $project * @param boolean $selfInclude * @param array $replace * @return array */ public static function getProjectIncludes($cacheKey, Designer_Project $project, $selfInclude = true, $replace = array()) { $applicationConfig = Registry::get('main', 'config'); $designerConfig = Config::factory(Config::File_Array, $applicationConfig->get('configs') . 'designer.php'); $projectConfig = $project->getConfig(); $includes = array(); // include langs if (isset($projectConfig['langs']) && !empty($projectConfig['langs'])) { $language = Lang::getDefaultDictionary(); $lansPath = $designerConfig->get('langs_path'); $langsUrl = $designerConfig->get('langs_url'); foreach ($projectConfig['langs'] as $k => $file) { $file = $language . '/' . $file . '.js'; if (file_exists($lansPath . $file)) { $includes[] = $langsUrl . $file . '?' . filemtime($lansPath . $file); } } } if (isset($projectConfig['files']) && !empty($projectConfig['files'])) { foreach ($projectConfig['files'] as $file) { $ext = File::getExt($file); if ($ext === '.js' || $ext === '.css') { $includes[] = $designerConfig->get('js_url') . $file; } else { $projectFile = $designerConfig->get('configs') . $file; $subProject = Designer_Factory::loadProject($designerConfig, $projectFile); $projectKey = self::getProjectCacheKey($projectFile); $files = self::getProjectIncludes($projectKey, $subProject, true, $replace); unset($subProject); if (!empty($files)) { $includes = array_merge($includes, $files); } } } } Ext_Code::setRunNamespace($projectConfig['runnamespace']); Ext_Code::setNamespace($projectConfig['namespace']); if ($selfInclude) { $layoutCacheFile = Utils::createCachePath($applicationConfig->get('jsCacheSysPath'), $cacheKey . '.js'); /** * @todo remove slow operation */ if (!file_exists($layoutCacheFile)) { file_put_contents($layoutCacheFile, Code_Js_Minify::minify($project->getCode($replace))); } $includes[] = str_replace('./', '/', $layoutCacheFile); } /* * Project actions */ $actionFile = $project->getActionsFile(); /** * @todo slow operation */ $mTime = 0; if (file_exists('.' . $actionFile)) { $mTime = filemtime('.' . $actionFile); } $includes[] = $actionFile . '?' . $mTime; return $includes; }