diff --git a/db/update20.0.sql b/db/update20.0.sql index f65b35f90e..32e8cbc50b 100644 --- a/db/update20.0.sql +++ b/db/update20.0.sql @@ -1,7 +1,8 @@ ALTER TABLE `zt_project` DROP `isCat`, DROP `catID`, -ADD `model` char(30) NOT NULL AFTER `id`, +ADD `project` mediumint(8) NOT NULL DEFAULT 0 AFTER `id`; +ADD `model` char(30) NOT NULL AFTER `project`, CHANGE `type` `type` char(30) NOT NULL DEFAULT 'sprint' AFTER `model`, ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`, ADD `lifetime` char(30) NOT NULL AFTER `product`, diff --git a/module/common/lang/en.php b/module/common/lang/en.php index fde5f2430f..189deaf6af 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -170,19 +170,19 @@ $lang->productplan->menu = $lang->product->menu; /* System menu. */ $lang->system = new stdclass(); $lang->system->menu = new stdclass(); -$lang->system->menu->estimate = array('link' => 'Estimate|custom|estimate|'); -$lang->system->menu->stage = array('link' => 'Stage|stage|browse|', 'subModule' => 'stage'); -$lang->system->menu->subject = array('link' => 'Subject|subject|browse|'); -$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|'); -$lang->system->menu->custom = array('link' => 'Custom|custom|configurewaterfall|'); -$lang->system->dividerMenu = ',auditcl,subject,'; +$lang->system->menu->estimate = array('link' => 'Estimate|custom|estimate|'); +$lang->system->menu->stage = array('link' => 'Stage|stage|browse|', 'subModule' => 'stage'); +$lang->system->menu->subject = array('link' => 'Subject|subject|browse|'); +$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|'); +$lang->system->menu->custom = array('link' => 'Custom|custom|configurewaterfall|'); +$lang->system->dividerMenu = ',auditcl,subject,'; if(isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum') { $lang->system->menu = new stdclass(); - $lang->system->menu->subject = array('link' => 'Subject|subject|browse|'); - $lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|'); - $lang->system->menu->custom = array('link' => 'Custom|custom|configurescrum|'); + $lang->system->menu->subject = array('link' => 'Subject|subject|browse|'); + $lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|'); + $lang->system->menu->custom = array('link' => 'Custom|custom|configurescrum|'); $lang->mainNav->system = ' System|subject|browse|'; unset($lang->system->dividerMenu); diff --git a/module/personnel/control.php b/module/personnel/control.php index 217ac5006a..6b75be1b9d 100644 --- a/module/personnel/control.php +++ b/module/personnel/control.php @@ -84,6 +84,7 @@ class personnel extends control $this->program->setPGMViewMenu($programID); $inputPersonnel = $this->personnel->getInputPersonnel($programID, $browseType, $orderBy); +echo array_keys($inputPersonnel); $this->view->title = $this->lang->personnel->putInto; $this->view->position[] = $this->lang->personnel->putInto; diff --git a/module/personnel/lang/en.php b/module/personnel/lang/en.php new file mode 100644 index 0000000000..0dcbc7a704 --- /dev/null +++ b/module/personnel/lang/en.php @@ -0,0 +1,20 @@ +personnel->accessible = '可访问人员列表'; +$lang->personnel->putInto = '投入人员列表'; +$lang->personnel->department = '部门'; +$lang->personnel->realName = '真实姓名'; +$lang->personnel->userName = '用户名'; +$lang->personnel->job = '岗位'; +$lang->personnel->genders = '性别'; +$lang->personnel->project = '项目'; +$lang->personnel->sprint = '迭代/阶段'; +$lang->personnel->user = '用户'; +$lang->personnel->role = '角色'; +$lang->personnel->search = '搜索'; +$lang->personnel->program = '项目集'; +$lang->personnel->emptyTip = '暂无'; + +$lang->personnel->inputLabel['all'] = '全部'; +$lang->personnel->inputLabel['parent'] = '直属项目'; +$lang->personnel->inputLabel['exist'] = '非空项目'; + diff --git a/module/personnel/lang/zh-cn.php b/module/personnel/lang/zh-cn.php index 23614e6d52..0dcbc7a704 100644 --- a/module/personnel/lang/zh-cn.php +++ b/module/personnel/lang/zh-cn.php @@ -1,18 +1,18 @@ personnel->accessible = '可访问人员列表'; -$lang->personnel->putInto = '投入人员列表'; -$lang->personnel->department = '部门'; -$lang->personnel->realName = '真实姓名'; -$lang->personnel->userName = '用户名'; -$lang->personnel->job = '岗位'; -$lang->personnel->genders = '性别'; -$lang->personnel->project = '项目'; -$lang->personnel->sprint = '迭代/阶段'; -$lang->personnel->user = '用户'; -$lang->personnel->role = '角色'; -$lang->personnel->search = '搜索'; -$lang->personnel->program = '项目集'; -$lang->personnel->emptyTip = '暂无'; +$lang->personnel->accessible = '可访问人员列表'; +$lang->personnel->putInto = '投入人员列表'; +$lang->personnel->department = '部门'; +$lang->personnel->realName = '真实姓名'; +$lang->personnel->userName = '用户名'; +$lang->personnel->job = '岗位'; +$lang->personnel->genders = '性别'; +$lang->personnel->project = '项目'; +$lang->personnel->sprint = '迭代/阶段'; +$lang->personnel->user = '用户'; +$lang->personnel->role = '角色'; +$lang->personnel->search = '搜索'; +$lang->personnel->program = '项目集'; +$lang->personnel->emptyTip = '暂无'; $lang->personnel->inputLabel['all'] = '全部'; $lang->personnel->inputLabel['parent'] = '直属项目'; diff --git a/module/personnel/lang/zh-tw.php b/module/personnel/lang/zh-tw.php new file mode 100644 index 0000000000..0bbcf09d07 --- /dev/null +++ b/module/personnel/lang/zh-tw.php @@ -0,0 +1,20 @@ +personnel->accessible = '可訪問人員列表'; +$lang->personnel->putInto = '投入人員列表'; +$lang->personnel->department = '部門'; +$lang->personnel->realName = '真實姓名'; +$lang->personnel->userName = '用戶名'; +$lang->personnel->job = '崗位'; +$lang->personnel->genders = '性別'; +$lang->personnel->project = '項目'; +$lang->personnel->sprint = '迭代/階段'; +$lang->personnel->user = '用戶'; +$lang->personnel->role = '角色'; +$lang->personnel->search = '搜索'; +$lang->personnel->program = '項目集'; +$lang->personnel->emptyTip = '暫無'; + +$lang->personnel->inputLabel['all'] = '全部'; +$lang->personnel->inputLabel['parent'] = '直屬項目'; +$lang->personnel->inputLabel['exist'] = '非空項目'; + diff --git a/module/personnel/model.php b/module/personnel/model.php index b88c99c6ca..fb06de8f4a 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -49,6 +49,7 @@ class personnelModel extends model return $personnelList; } + /** * Access to program set input staff. * @@ -73,30 +74,13 @@ class personnelModel extends model $personnelList['projects'] = $projects; if(empty($projects)) return $personnelList; - /* Get the sprint or stage under the project. */ - $projectKeys = array_keys($projects); - $sprints = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) - ->where('type')->in('stage,sprint') - ->andWhere('parent')->in($projectKeys) - ->andWhere('deleted')->eq('0') - ->fetchGroup('parent', 'id'); - - /* Get team members for projects, stage, sprints. */ - $sprintKeys = array(0); - foreach($sprints as $sprint) - { - foreach($sprint as $id => $data) $sprintKeys[] = $id; - } - $teams = $this->dao->select('id,root,type,role,account')->from(TABLE_TEAM) - ->where('root')->in($sprintKeys) - ->andWhere('type')->in('project,stage,sprint') - ->fetchGroup('root', 'id'); - - $programNameList = $this->getProgramPairs(); - $personnelList['sprints'] = $sprints; - $personnelList['teams'] = $teams; + $teams = $this->getTeams($projects); + $personnelList['stages'] = $teams['stages']; + $personnelList['sprints'] = $teams['sprints']; + $personnelList['teams'] = $teams['teams']; /* Get the program name for each level. */ + $programNameList = $this->getProgramPairs(); foreach($personnelList['projects'] as $id => $project) { $path = explode(',', $project->path); @@ -114,6 +98,65 @@ class personnelModel extends model return $personnelList; } + /** + * Get team members for projects, stage, sprints. + * + * @param string $projects + * @access public + * @return object + */ + public function getTeams($projects) + { + $sprintParent = array(); + $stageParent = array(); + foreach($projects as $project) + { + $project->model == 'scrum' ? $sprintParent[] = $project->id : $stageParent[] = $project->id; + } + + $sprints = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) + ->where('type')->eq('sprint') + ->andWhere('parent')->in($sprintParent) + ->andWhere('deleted')->eq('0') + ->fetchGroup('parent', 'id'); + + $stages = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) + ->where('type')->eq('stage') + ->andWhere('parent')->in($stageParent) + ->andWhere('deleted')->eq('0') + ->fetchGroup('parent', 'id'); + + $rootIDList = array(); + foreach($stages as $stage) + { + foreach($stage as $stageFields) + { + $stageFields->children = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) + ->where('type')->eq('stage') + ->andWhere('grade')->eq('2') + ->andWhere('path')->like(",$stageFields->id,%") + ->andWhere('deleted')->eq('0') + ->fetchAll('id'); + $childrenIDList = array_keys($stageFields->children); + $rootIDList = array_merge($childrenIDList, $rootIDList); + $rootIDList[] = $stageFields->id; + } + } + + foreach($sprints as $sprint) + { + foreach($sprint as $id => $data) $rootIDList[] = $id; + } + + $teams = $this->dao->select('t1.id,t1.root,t1.type,t1.role,t1.account,t2.realname')->from(TABLE_TEAM)->alias('t1') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.root=t2.id') + ->where('t1.root')->in($rootIDList) + ->andWhere('t1.type')->in('stage,sprint') + ->fetchGroup('root', 'id'); + + return array('sprints' => $sprints, 'stages' => $stages, 'teams' => $teams); + } + /** * Get all program set names. * diff --git a/module/personnel/view/putinto.html.php b/module/personnel/view/putinto.html.php index 110c71cf12..8a6efd2d97 100644 --- a/module/personnel/view/putinto.html.php +++ b/module/personnel/view/putinto.html.php @@ -1,6 +1,6 @@