* @package editor * @version $Id$ * @link http://www.zentao.net */ class editorModel extends model { /** * Get module files, contain control's methods and model's method but except ext. * * @param string $moduleName * @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(!file_exists($moduleFullFile)) continue; 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 string $moduleName * @access public * @return array */ public function getExtensionFiles($moduleName) { $extensionList = array(); foreach($this->config->editor->extSort as $ext) { $extModulePaths = $this->app->getModuleExtPath('', $moduleName, $ext); foreach($extModulePaths as $extType => $extensionFullDir) { if(empty($extensionFullDir) or !is_dir($extensionFullDir)) continue; if($extType == 'common') $extType = $this->config->edition; if($ext == 'lang' or $ext == 'js' or $ext == 'css') { $extensionList[$extType][$extensionFullDir] = $this->getTwoGradeFiles($extensionFullDir); } else { foreach(glob($extensionFullDir . '*') as $extensionFullFile) { if($ext == 'model' and is_dir($extensionFullFile)) { $extModelDir = $extensionFullFile; foreach(glob($extModelDir . '/*') as $extModelFile) { $fileName = basename($extModelFile); if($fileName == 'index.html') continue; $extensionList[$extType][$extensionFullDir][$extensionFullFile][$extModelFile] = $fileName; } } else { $fileName = basename($extensionFullFile); if($fileName == 'index.html') continue; $extensionList[$extType][$extensionFullDir][$extensionFullFile] = $fileName; } } } } } 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' or $langDir == 'index.html') continue; $langFullDir = $extensionFullDir . $langDir; $fileList[$langFullDir] = array(); if(is_dir($langFullDir)) { $langFiles = scandir($langFullDir); foreach($langFiles as $langFile) { if($langFile == '.' or $langFile == '..' or $langFile == '.svn' or $langFile == 'index.html') 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 = $this->getClassNameByPath($fileName); 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 array $files * @param bool $isRoot * @access public * @return string */ public function printTree($files, $isRoot = true) { if(empty($files) or !is_array($files)) return false; $tree = $isRoot ? "