* @package editor * @version $Id$ * @link http://www.zentao.net */ class editorModel extends model { /** * Get all modules * * @access public * @return string */ public function getModules() { $modules = glob($this->app->getModuleRoot() . '*'); $moduleList = "
"; foreach($modules as $module) { $module = basename($module); if($module == 'editor' or $module == 'help' or $module == 'setting') continue; $moduleName = !empty($this->lang->editor->modules[$module]) ? $this->lang->editor->modules[$module] : $module; $moduleList .= html::a(inlink('extend', "moduleDir=$module"), $moduleName, 'extendWin', "class='list-group-item'"); } $moduleList .= '
'; return $moduleList; } /** * Get module files, contain control's methods and model's method but except ext. * * @access public * @return array */ public function getModuleFiles($moduleName) { $allModules = array(); $modulePath = $this->app->getModulePath('', $moduleName); foreach($this->config->editor->sort as $name) { $moduleFullFile = $modulePath . $name; if($name == 'control.php' or $name == 'model.php') { $allModules[$modulePath][$moduleFullFile] = $this->analysis($moduleFullFile); } elseif(is_dir($moduleFullFile)) { $ext = ($name == 'js' or $name == 'css') ? $name : 'php'; foreach(glob($moduleFullFile . DS . "*.$ext") as $fileName) $allModules[$modulePath][$moduleFullFile][$fileName] = basename($fileName); } else { $allModules[$modulePath][$moduleFullFile] = $name; } } $allModules += $this->getExtensionFiles($moduleName); return $allModules; } /** * Get extension files. * * @param int $extPath * @access public * @return void */ public function getExtensionFiles($moduleName) { $extensionList = array(); foreach($this->config->editor->extSort as $ext) { $extModulePaths = $this->app->getModuleExtPath('', $moduleName, $ext); foreach($extModulePaths as $extensionFullDir) { if(!is_dir($extensionFullDir)) continue; if($ext == 'lang' or $ext == 'js' or $ext == 'css') { $extensionList[$extensionFullDir] = $this->getTwoGradeFiles($extensionFullDir); continue; } foreach(glob($extensionFullDir . '*') as $extensionFullFile) $extensionList[$extensionFullDir][$extensionFullFile] = basename($extensionFullFile); } } return $extensionList; } /** * if a directory has two grage, this method will get files * * @param string $extensionFullDir * @access public * @return string */ public function getTwoGradeFiles($extensionFullDir) { $fileList = array(); $langDirs = scandir($extensionFullDir); foreach($langDirs as $langDir) { if($langDir == '.' or $langDir == '..' or $langDir == '.svn') continue; $langFullDir = $extensionFullDir . DS . $langDir; $fileList[$langFullDir] = array(); if(is_dir($langFullDir)) { $langFiles = scandir($langFullDir); foreach($langFiles as $langFile) { if($langFile == '.' or $langFile == '..' or $langFile == '.svn') continue; $langFullFile = $langFullDir . DS . $langFile; $fileList[$langFullDir][$langFullFile] = $langFile; } } } return $fileList; } /** * Analysis methods of control and model. * * @param string $fileName * @access public * @return array */ public function analysis($fileName) { $classMethod = array(); $class = strstr($fileName, DS . 'module' . DS); if(empty($class)) { $class = strstr($fileName, DS . 'extension' . DS); $class = str_replace(DS . 'extension' . DS, '', $class); $class = ltrim(strstr($class, DS), DS); } else { $class = str_replace(DS . 'module' . DS, '', $class); } $class = dirname($class); if(strpos($fileName, 'model.php') !== false) $class .= 'Model'; if(!class_exists($class)) include $fileName; $reflection = new ReflectionClass($class); foreach($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { $methodName = $method->name; if($method->getFileName() != $fileName) continue; if($methodName == '__construct') continue; $classMethod[$fileName . DS . $methodName] = $methodName; } return $classMethod; } /** * Print tree from module files. * * @param int $files * @access public * @return void */ public function printTree($files, $isRoot = true) { if(empty($files) or !is_array($files)) return false; $tree = $isRoot ? "