diff --git a/module/program/control.php b/module/program/control.php index decbb0d603..8d1324b6e9 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -175,11 +175,14 @@ class program extends control $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $url)); } + $parents = $this->program->getParentPairs(); + unset($parents[$programID]); + $this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst', $program->PM); $this->view->title = $this->lang->program->edit; $this->view->position[] = $this->lang->program->edit; $this->view->program = $program; - $this->view->parents = $this->program->getParentPairs(); + $this->view->parents = $parents; $this->view->groups = $this->loadModel('group')->getPairs(); $this->display(); } diff --git a/module/program/model.php b/module/program/model.php index 82f796acd6..0542042367 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -490,23 +490,40 @@ class programModel extends model */ public function getParentPairs() { - $stmt = $this->dao->select('id,name,parent,path,grade')->from(TABLE_PROJECT)->where('isCat')->eq(1)->andWhere('deleted')->eq(0)->orderBy('grade, `order`')->query(); + $modules = $this->dao->select('id,name,parent,path,grade')->from(TABLE_PROJECT)->where('isCat')->eq(1)->andWhere('deleted')->eq(0)->orderBy('grade desc, `order`')->fetchAll('id'); - $pairs = array(); - $pairs[0] = '/'; - while($program = $stmt->fetch()) + $treeMenu = array(); + foreach($modules as $module) { - if($program->grade == 1) + $moduleName = '/'; + $parentModules = explode(',', $module->path); + foreach($parentModules as $parentModuleID) { - $pairs[$program->id] = '/' . $program->name; - continue; + if(empty($parentModuleID)) continue; + if(empty($modules[$parentModuleID])) continue; + $moduleName .= $modules[$parentModuleID]->name . '/'; } + $moduleName = str_replace('|', '¦', rtrim($moduleName, '/')); + $moduleName .= "|$module->id\n"; - $programName = '/' . $program->name; - $pairs[$program->id] = isset($pairs[$program->parent]) ? $pairs[$program->parent] . $programName : $programName; + if(!isset($treeMenu[$module->parent])) $treeMenu[$module->parent] = ''; + $treeMenu[$module->parent] .= $moduleName; + + if(isset($treeMenu[$module->id]) and !empty($treeMenu[$module->id])) $treeMenu[$module->parent] .= $treeMenu[$module->id]; } - return $pairs; + ksort($treeMenu); + $topMenu = array_shift($treeMenu); + $topMenu = explode("\n", trim($topMenu)); + $lastMenu[] = '/'; + foreach($topMenu as $menu) + { + if(strpos($menu, '|') === false) continue; + list($label, $moduleID) = explode('|', $menu); + $lastMenu[$moduleID] = str_replace('¦', '|', $label); + } + + return $lastMenu; } /** @@ -533,7 +550,7 @@ class programModel extends model foreach($childNodes as $childNode) { $path = substr($childNode->path, strpos($childNode->path, ",{$programID},")); - $grade = $oldGrade - $childNode->grade + 1; + $grade = $childNode->grade - $oldGrade + 1; if($parent) { $path = rtrim($parent->path, ',') . $path;