* @package tree * @version $Id$ * @link http://www.zentao.net */ ?> dao->findById((int)$moduleID)->from(TABLE_MODULE)->fetch(); } /** * Build the sql query. * * @param int $rootID * @param string $type * @param int $startModule * @access public * @return void */ public function buildMenuQuery($rootID, $type, $startModule) { /* Set the start module. */ $startModulePath = ''; if($startModule > 0) { $startModule = $this->getById($startModule); if($startModule) $startModulePath = $startModule->path . '%'; } return $this->dao->select('*')->from(TABLE_MODULE) ->where('root')->eq((int)$rootID) ->andWhere('type')->eq($type) ->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi() ->orderBy('grade desc, `order`') ->get(); } /** * Create an option menu in html. * * @param int $rootID * @param string $type * @param int $startModule * @access public * @return string */ public function getOptionMenu($rootID, $type = 'story', $startModule = 0) { $treeMenu = array(); $stmt = $this->dbh->query($this->buildMenuQuery($rootID, $type, $startModule)); $modules = array(); while($module = $stmt->fetch()) $modules[$module->id] = $module; foreach($modules as $module) { $parentModules = explode(',', $module->path); $moduleName = '/'; foreach($parentModules as $parentModuleID) { if(empty($parentModuleID)) continue; $moduleName .= $modules[$parentModuleID]->name . '/'; } $moduleName = rtrim($moduleName, '/'); $moduleName .= "|$module->id\n"; if(isset($treeMenu[$module->id]) and !empty($treeMenu[$module->id])) { if(isset($treeMenu[$module->parent])) { $treeMenu[$module->parent] .= $moduleName; } else { $treeMenu[$module->parent] = $moduleName;; } $treeMenu[$module->parent] .= $treeMenu[$module->id]; } else { if(isset($treeMenu[$module->parent]) and !empty($treeMenu[$module->parent])) { $treeMenu[$module->parent] .= $moduleName; } else { $treeMenu[$module->parent] = $moduleName; } } } $topMenu = @array_pop($treeMenu); $topMenu = explode("\n", trim($topMenu)); $lastMenu[] = '/'; foreach($topMenu as $menu) { if(!strpos($menu, '|')) continue; list($label, $moduleID) = explode('|', $menu); $lastMenu[$moduleID] = $label; } return $lastMenu; } /** * Get the tree menu in html. * * @param int $rootID * @param string $type * @param int $startModule * @param string $userFunc the function used to create link * @param string $extra extra params * @access public * @return string */ public function getTreeMenu($rootID, $type = 'root', $startModule = 0, $userFunc, $extra = '') { $treeMenu = array(); $stmt = $this->dbh->query($this->buildMenuQuery($rootID, $type, $startModule)); while($module = $stmt->fetch()) { $linkHtml = call_user_func($userFunc, $module, $extra); if(isset($treeMenu[$module->id]) and !empty($treeMenu[$module->id])) { if(!isset($treeMenu[$module->parent])) $treeMenu[$module->parent] = ''; $treeMenu[$module->parent] .= "
  • $linkHtml"; $treeMenu[$module->parent] .= "\n"; } else { if(isset($treeMenu[$module->parent]) and !empty($treeMenu[$module->parent])) { $treeMenu[$module->parent] .= "
  • $linkHtml\n"; } else { $treeMenu[$module->parent] = "
  • $linkHtml\n"; } } $treeMenu[$module->parent] .= "
  • \n"; } $lastMenu = "\n"; return $lastMenu; } /** * Get the tree menu of product document library. * * @access public * @return string */ public function getProductDocTreeMenu() { $menu = "