* @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 $moduleRoot * @access public * @return array */ public function getModuleFiles() { $moduleRoot = $this->app->getModuleRoot(); $allModules = array(); $moduleDirs = scandir($moduleRoot); foreach($moduleDirs as $moduleDir) { if($moduleDir == '.' or $moduleDir == '..' or $moduleDir == '.svn') continue; $moduleFullDir = $moduleRoot . $moduleDir; $moduleFiles = scandir($moduleFullDir); foreach($moduleFiles as $moduleFile) { if($moduleFile == '.' or $moduleFile == '..' or $moduleFile == '.svn') continue; $moduleFullFile = $moduleFullDir . '/' . $moduleFile; if($moduleFile == 'control.php' or $moduleFile == 'model.php') { $allModules[$moduleFullDir][$moduleFullFile] = $this->analysis($moduleFullFile); } elseif($moduleFile == 'ext') { $allModules[$moduleFullDir][$moduleFullFile] = $this->getExtensionFiles($moduleFullFile); } elseif(is_dir($moduleFullFile)) { foreach(glob($moduleFullFile . '/' . '*.php') as $fileName) $allModules[$moduleFullDir][$moduleFullFile][$fileName] = basename($fileName); } else { $allModules[$moduleFullDir][$moduleFullFile] = $moduleFile; } } } return $allModules; } /** * Get extension files. * * @param int $extPath * @access public * @return void */ public function getExtensionFiles($extPath) { $extensionList = array(); $extensionDirs = scandir($extPath); foreach($extensionDirs as $extensionDir) { if($extensionDir == '.' or $extensionDir == '..' or $extensionDir == '.svn') continue; $extensionFullDir = $extPath . '/' . $extensionDir; if(is_dir($extensionFullDir)) { $extensionList[$extensionFullDir] = array(); /* extend of lang is more a grade of directroy. */ if($extensionDir == 'lang' or $extensionDir == 'js' or $extensionDir == 'css') { $langDirs = scandir($extensionFullDir); foreach($langDirs as $langDir) { if($langDir == '.' or $langDir == '..' or $langDir == '.svn') continue; $langFullDir = $extensionFullDir . '/' . $langDir; $extensionList[$extensionFullDir][$langFullDir] = array(); if(is_dir($langFullDir)) { $langFiles = scandir($langFullDir); foreach($langFiles as $langFile) { if($langFile == '.' or $langFile == '..' or $langFile == '.svn') continue; $langFullFile = $langFullDir . '/' . $langFile; $extensionList[$extensionFullDir][$langFullDir][$langFullFile] = $langFile; } } } continue; } $extensionFiles = scandir($extensionFullDir); foreach($extensionFiles as $extensionFile) { if($extensionFile == '.' or $extensionFile == '..' or $extensionFile == '.svn') continue; $extensionFullFile = $extensionFullDir . '/' . $extensionFile; $extensionList[$extensionFullDir][$extensionFullFile] = $extensionFile; } } } return $extensionList; } /** * Analysis methods of control and model. * * @param string $fileName * @access public * @return array */ public function analysis($fileName) { $classMethod = array(); $class = strstr($fileName, '/module/'); $class = substr($class, 0, strpos($class, '/', 9)); $class = basename($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; $classMethod[$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 ? "