* @package editor * @version $Id$ * @link http://www.zentao.net */ class editorModel extends model { private $pathFix = DIRECTORY_SEPARATOR; /** * Get all modules * * @access public * @return string */ public function getModules() { $modules = glob($this->app->getModuleRoot() . '*'); $moduleList = ''; return $moduleList; } /** * Get module files, contain control's methods and model's method but except ext. * * @access public * @return array */ public function getModuleFiles($moduleDir) { $moduleRoot = $this->app->getModuleRoot(); $moduleFullDir = $moduleRoot . $moduleDir; $moduleFiles = scandir($moduleFullDir); foreach($moduleFiles as $moduleFile) { if($moduleFile == '.' or $moduleFile == '..' or $moduleFile == '.svn') continue; $moduleFullFile = $moduleFullDir . $this->pathFix . $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)) { $ext = ($moduleFile == 'js' or $moduleFile == 'css') ? $moduleFile : 'php'; foreach(glob($moduleFullFile . $this->pathFix . "*.$ext") as $fileName) $allModules[$moduleFullDir][$moduleFullFile][$fileName] = basename($fileName); } else { $allModules[$moduleFullDir][$moduleFullFile] = $moduleFile; } } $allModules = $this->sortModule($moduleFullDir, $allModules); 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 . $this->pathFix . $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') { $extensionList[$extensionFullDir] = $this->getTwoGradeFiles($extensionFullDir); continue; } $extensionFiles = scandir($extensionFullDir); foreach($extensionFiles as $extensionFile) { if($extensionFile == '.' or $extensionFile == '..' or $extensionFile == '.svn') continue; $extensionFullFile = $extensionFullDir . $this->pathFix . $extensionFile; $extensionList[$extensionFullDir][$extensionFullFile] = $extensionFile; } } } $extensionList = $this->sortModule($extPath, $extensionList, true); return $extensionList; } /** * Sort module * * @param string $filePath * @param string $moduleFiles * @param bool $isExtension * @access public * @return array */ public function sortModule($filePath, $moduleFiles, $isExtension = false) { $sort = $isExtension ? 'extSort' : 'sort'; $sortModules = array(); if(!$isExtension) $moduleFiles = $moduleFiles[$filePath]; foreach($this->config->editor->$sort as $sort) { $sortKey = empty($sort) ? $filePath : $filePath . $this->pathFix . $sort; if(array_key_exists($sortKey, $moduleFiles)) $sortModules[$sortKey] = $moduleFiles[$sortKey]; } return $sortModules; } /** * 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 . $this->pathFix . $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 . $this->pathFix . $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, $this->pathFix . 'module' . $this->pathFix); $class = substr($class, 0, strpos($class, $this->pathFix, 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; if($methodName == '__construct') continue; $classMethod[$fileName . $this->pathFix . $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 ? "