From efd978eb95b7b1c9bc7d3bcc0b869f66c152fceb Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Tue, 20 Oct 2020 17:27:04 +0800 Subject: [PATCH] * Adjustment Code. --- module/company/model.php | 3 +- module/dept/model.php | 2 +- module/group/model.php | 36 +++++++ module/personnel/config.php | 2 - module/personnel/control.php | 14 +-- module/personnel/lang/de.php | 36 ++++--- module/personnel/lang/en.php | 36 ++++--- module/personnel/lang/fr.php | 36 ++++--- module/personnel/lang/vi.php | 36 ++++--- module/personnel/lang/zh-cn.php | 7 -- module/personnel/lang/zh-tw.php | 8 +- module/personnel/model.php | 110 ++++++---------------- module/personnel/view/accessible.html.php | 9 +- module/personnel/view/putinto.html.php | 11 --- module/program/model.php | 2 +- module/programplan/model.php | 8 +- module/project/control.php | 3 +- module/project/model.php | 10 +- 18 files changed, 152 insertions(+), 217 deletions(-) diff --git a/module/company/model.php b/module/company/model.php index 30fa509e6b..5e6a8e0782 100644 --- a/module/company/model.php +++ b/module/company/model.php @@ -48,7 +48,7 @@ class companyModel extends model { return $this->dao->select('*')->from(TABLE_COMPANY)->orderBy('id')->limit(1)->fetch(); } - + /** * Get company info by id. * @@ -127,7 +127,6 @@ class companyModel extends model return $pairs; } - /** * Update a company. * diff --git a/module/dept/model.php b/module/dept/model.php index 4b92f4bc70..d2dd605295 100644 --- a/module/dept/model.php +++ b/module/dept/model.php @@ -34,7 +34,7 @@ class deptModel extends model */ public function getDeptPairs($deptID = 0) { - return $this->dao->select('id,name')->from(TABLE_DEPT)->fetchPairs('id', 'name'); + return $this->dao->select('id,name')->from(TABLE_DEPT)->fetchPairs(); } /** diff --git a/module/group/model.php b/module/group/model.php index f5d1792a00..77957ec4e1 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -204,6 +204,42 @@ class groupModel extends model ->fetchPairs(); } + /** + * Get the ID of the group that has access to the program. + * + * @access public + * @return array + */ + public function getAccessProgramGroup() + { + $accessibleGroup = $this->getList(); + $accessibleGroupID = array(0); + foreach($accessibleGroup as $group) + { + if($group->acl) $group->acl = json_decode($group->acl, true); + if(!isset($group->acl) || !is_array($group->acl)) $group->acl = array(); + + if(empty($group->acl)) + { + $accessibleGroupID[] = $group->id; + continue; + } + + if(!isset($group->acl['views']) || empty($group->acl['views'])) + { + $accessibleGroupID[] = $group->id; + continue; + } + + if(in_array('program', $group->acl['views'])) + { + $accessibleGroupID[] = $group->id; + continue; + } + } + return $accessibleGroupID; + } + /** * Delete a group. * diff --git a/module/personnel/config.php b/module/personnel/config.php index 88670b20a3..59ff6d566e 100644 --- a/module/personnel/config.php +++ b/module/personnel/config.php @@ -3,12 +3,10 @@ global $lang; $config->personnel->accessible = new stdClass(); $config->personnel->accessible->search['module'] = 'accessible'; $config->personnel->accessible->search['fields']['realname'] = $lang->personnel->realName; -$config->personnel->accessible->search['fields']['dept'] = $lang->personnel->department; $config->personnel->accessible->search['fields']['role'] = $lang->personnel->job; $config->personnel->accessible->search['fields']['account'] = $lang->personnel->userName; $config->personnel->accessible->search['fields']['gender'] = $lang->personnel->genders; -$config->personnel->accessible->search['params']['dept'] = array('operator' => '=', 'control' => 'select', 'values' => ''); $config->personnel->accessible->search['params']['realname'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->personnel->accessible->search['params']['account'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->personnel->accessible->search['params']['role'] = array('operator' => '=', 'control' => 'select', 'values' => ''); diff --git a/module/personnel/control.php b/module/personnel/control.php index 1977d4da88..5c38a1957b 100644 --- a/module/personnel/control.php +++ b/module/personnel/control.php @@ -18,14 +18,13 @@ class personnel extends control * @param int $deptID * @param string $browseType * @param int $param - * @param string $orderBy * @param int $recTotal * @param int $recPerPage * @param int $pageID * @access public * @return void */ - public function accessible($programID = 0, $deptID = 0, $browseType='browse', $param = 0, $orderBy = 't2.id_desc', $recTotal = 0, $recPerPage = 15, $pageID = 1) + public function accessible($programID = 0, $deptID = 0, $browseType='browse', $param = 0, $recTotal = 0, $recPerPage = 15, $pageID = 1) { $this->loadModel('program'); $this->app->loadLang('user'); @@ -40,14 +39,10 @@ class personnel extends control /* Build the search form. */ $queryID = $browseType == 'bysearch' ? (int)$param : 0; $actionURL = $this->createLink('personnel', 'accessible', "pargramID=$programID&deptID=$deptID&browseType=bysearch&quertID=myQueryID"); - $deptList = $this->loadModel('dept')->getDeptPairs($deptID); - $this->config->personnel->accessible->search['params']['dept']['values'] = $deptList; $this->config->personnel->accessible->search['params']['role']['values'] = $this->lang->user->roleList; $this->config->personnel->accessible->search['params']['gender']['values'] = $this->lang->user->genderList; $this->personnel->buildSearchForm($queryID, $actionURL); - $personnelList = $this->personnel->getAccessiblePersonnel($programID, $deptID, $browseType, $orderBy, $queryID, $pager); - $this->view->title = $this->lang->personnel->accessible; $this->view->position[] = $this->lang->personnel->accessible; @@ -58,12 +53,11 @@ class personnel extends control $this->view->pageID = $pageID; $this->view->pager = $pager; $this->view->param = $param; - $this->view->orderBy = $orderBy; $this->view->browseType = $browseType; - $this->view->personnelList = $personnelList; - $this->view->deptList = $deptList; + $this->view->personnelList = $this->personnel->getAccessiblePersonnel($programID, $deptID, $browseType, $queryID, $pager); + $this->view->deptList = $this->loadModel('dept')->getOptionMenu(); $this->view->dept = $this->dept->getByID($deptID); - $this->view->deptTree = $this->personnel->getTreeMenu($deptID = 0, array('personnelModel', 'createMemberLink'), $programID); + $this->view->deptTree = $this->dept->getTreeMenu($deptID = 0, array(new personnelModel, 'createMemberLink'), $programID); $this->display(); } diff --git a/module/personnel/lang/de.php b/module/personnel/lang/de.php index f3384c97e3..eb06941909 100644 --- a/module/personnel/lang/de.php +++ b/module/personnel/lang/de.php @@ -1,21 +1,17 @@ personnel->accessible = 'List of accessible'; -$lang->personnel->putInto = 'Input personnel list'; -$lang->personnel->department = 'Department'; -$lang->personnel->realName = 'Name'; -$lang->personnel->userName = 'Account'; -$lang->personnel->job = 'Job'; -$lang->personnel->genders = 'Gender'; -$lang->personnel->project = 'Project'; -$lang->personnel->sprint = 'Sprint/Stage'; -$lang->personnel->user = 'Name'; -$lang->personnel->role = 'Role'; -$lang->personnel->search = 'Search'; -$lang->personnel->program = 'Program'; -$lang->personnel->emptyTip = 'No data.'; - -$lang->personnel->inputLabel['all'] = 'All'; -$lang->personnel->inputLabel['noempty'] = 'No empty'; -$lang->personnel->inputLabel['parent'] = 'Direct project'; -$lang->personnel->inputLabel['scrum'] = 'Scrum project'; -$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; +$lang->personnel->common = 'Personnel'; +$lang->personnel->accessible = 'Acess List'; +$lang->personnel->putInto = 'Input Resource'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Position'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'User'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data'; +$lang->personnel->childrenStage = 'Child stage'; diff --git a/module/personnel/lang/en.php b/module/personnel/lang/en.php index f3384c97e3..eb06941909 100644 --- a/module/personnel/lang/en.php +++ b/module/personnel/lang/en.php @@ -1,21 +1,17 @@ personnel->accessible = 'List of accessible'; -$lang->personnel->putInto = 'Input personnel list'; -$lang->personnel->department = 'Department'; -$lang->personnel->realName = 'Name'; -$lang->personnel->userName = 'Account'; -$lang->personnel->job = 'Job'; -$lang->personnel->genders = 'Gender'; -$lang->personnel->project = 'Project'; -$lang->personnel->sprint = 'Sprint/Stage'; -$lang->personnel->user = 'Name'; -$lang->personnel->role = 'Role'; -$lang->personnel->search = 'Search'; -$lang->personnel->program = 'Program'; -$lang->personnel->emptyTip = 'No data.'; - -$lang->personnel->inputLabel['all'] = 'All'; -$lang->personnel->inputLabel['noempty'] = 'No empty'; -$lang->personnel->inputLabel['parent'] = 'Direct project'; -$lang->personnel->inputLabel['scrum'] = 'Scrum project'; -$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; +$lang->personnel->common = 'Personnel'; +$lang->personnel->accessible = 'Acess List'; +$lang->personnel->putInto = 'Input Resource'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Position'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'User'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data'; +$lang->personnel->childrenStage = 'Child stage'; diff --git a/module/personnel/lang/fr.php b/module/personnel/lang/fr.php index f3384c97e3..eb06941909 100644 --- a/module/personnel/lang/fr.php +++ b/module/personnel/lang/fr.php @@ -1,21 +1,17 @@ personnel->accessible = 'List of accessible'; -$lang->personnel->putInto = 'Input personnel list'; -$lang->personnel->department = 'Department'; -$lang->personnel->realName = 'Name'; -$lang->personnel->userName = 'Account'; -$lang->personnel->job = 'Job'; -$lang->personnel->genders = 'Gender'; -$lang->personnel->project = 'Project'; -$lang->personnel->sprint = 'Sprint/Stage'; -$lang->personnel->user = 'Name'; -$lang->personnel->role = 'Role'; -$lang->personnel->search = 'Search'; -$lang->personnel->program = 'Program'; -$lang->personnel->emptyTip = 'No data.'; - -$lang->personnel->inputLabel['all'] = 'All'; -$lang->personnel->inputLabel['noempty'] = 'No empty'; -$lang->personnel->inputLabel['parent'] = 'Direct project'; -$lang->personnel->inputLabel['scrum'] = 'Scrum project'; -$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; +$lang->personnel->common = 'Personnel'; +$lang->personnel->accessible = 'Acess List'; +$lang->personnel->putInto = 'Input Resource'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Position'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'User'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data'; +$lang->personnel->childrenStage = 'Child stage'; diff --git a/module/personnel/lang/vi.php b/module/personnel/lang/vi.php index f3384c97e3..eb06941909 100644 --- a/module/personnel/lang/vi.php +++ b/module/personnel/lang/vi.php @@ -1,21 +1,17 @@ personnel->accessible = 'List of accessible'; -$lang->personnel->putInto = 'Input personnel list'; -$lang->personnel->department = 'Department'; -$lang->personnel->realName = 'Name'; -$lang->personnel->userName = 'Account'; -$lang->personnel->job = 'Job'; -$lang->personnel->genders = 'Gender'; -$lang->personnel->project = 'Project'; -$lang->personnel->sprint = 'Sprint/Stage'; -$lang->personnel->user = 'Name'; -$lang->personnel->role = 'Role'; -$lang->personnel->search = 'Search'; -$lang->personnel->program = 'Program'; -$lang->personnel->emptyTip = 'No data.'; - -$lang->personnel->inputLabel['all'] = 'All'; -$lang->personnel->inputLabel['noempty'] = 'No empty'; -$lang->personnel->inputLabel['parent'] = 'Direct project'; -$lang->personnel->inputLabel['scrum'] = 'Scrum project'; -$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; +$lang->personnel->common = 'Personnel'; +$lang->personnel->accessible = 'Acess List'; +$lang->personnel->putInto = 'Input Resource'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Position'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'User'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data'; +$lang->personnel->childrenStage = 'Child stage'; diff --git a/module/personnel/lang/zh-cn.php b/module/personnel/lang/zh-cn.php index 951a99a9ee..93866e6fc1 100644 --- a/module/personnel/lang/zh-cn.php +++ b/module/personnel/lang/zh-cn.php @@ -15,10 +15,3 @@ $lang->personnel->search = '搜索'; $lang->personnel->program = '项目集'; $lang->personnel->emptyTip = '暂无'; $lang->personnel->childrenStage = '子阶段'; - -$lang->personnel->inputLabel['all'] = '全部'; -$lang->personnel->inputLabel['noempty'] = '非空项目'; -$lang->personnel->inputLabel['parent'] = '直属项目'; -$lang->personnel->inputLabel['scrum'] = 'Scrum项目'; -$lang->personnel->inputLabel['waterfall'] = '瀑布项目'; - diff --git a/module/personnel/lang/zh-tw.php b/module/personnel/lang/zh-tw.php index 0653ae87d7..102873c2d8 100644 --- a/module/personnel/lang/zh-tw.php +++ b/module/personnel/lang/zh-tw.php @@ -1,4 +1,5 @@ personnel->common = '人員'; $lang->personnel->accessible = '可訪問人員列表'; $lang->personnel->putInto = '投入人員列表'; $lang->personnel->department = '部門'; @@ -14,10 +15,3 @@ $lang->personnel->search = '搜索'; $lang->personnel->program = '項目集'; $lang->personnel->emptyTip = '暫無'; $lang->personnel->childrenStage = '子階段'; - -$lang->personnel->inputLabel['all'] = '全部'; -$lang->personnel->inputLabel['noempty'] = '非空項目'; -$lang->personnel->inputLabel['parent'] = '直屬項目'; -$lang->personnel->inputLabel['scrum'] = 'Scrum項目'; -$lang->personnel->inputLabel['waterfall'] = '瀑布項目'; - diff --git a/module/personnel/model.php b/module/personnel/model.php index 513ed82bc6..0c01580e21 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -23,7 +23,7 @@ class personnelModel extends model * @access public * @return array */ - public function getAccessiblePersonnel($programID = 0, $deptID = 0, $browseType = 'all', $orderBy = 't2.id_desc', $queryID = 0, $pager) + public function getAccessiblePersonnel($programID = 0, $deptID = 0, $browseType = 'all', $queryID = 0, $pager) { $accessibleQuery = ''; if($browseType == 'bysearch') @@ -38,14 +38,33 @@ class personnelModel extends model $accessibleQuery = $this->session->accessibleQuery; } - $personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1') - ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account') - ->where('t1.programs')->like(',%' . $programID . ',%') - ->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi() - ->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi() - ->orderBy($orderBy) - ->page($pager) - ->fetchAll(); + /* Determine who can be accessed based on access control. */ + $program = $this->loadModel('program')->getPGMByID($programID); + if($program->acl == 'private') + { + $personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account') + ->where("CONCAT(',', t1.programs, ',')")->like("%,$programID,%") + ->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi() + ->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi() + ->page($pager) + ->fetchAll(); + } + else + { + /* The program is public, and users are judged to be accessible by permission groups. */ + $accessibleGroupID = $this->loadModel('group')->getAccessProgramGroup(); + $personnelList = $this->dao->select('t1.account,t3.role,t3.dept,t3.realname,t3.gender,t3.id')->from(TABLE_USERGROUP)->alias('t1') + ->leftJoin(TABLE_GROUPPRIV)->alias('t2')->on('t1.group = t2.group') + ->leftJoin(TABLE_USER)->alias('t3')->on('t1.account = t3.account') + ->where('t1.group')->in($accessibleGroupID) + ->andWhere('t2.module')->eq('program') + ->andWhere('t2.method')->eq('PGMBrowse') + ->beginIF($deptID > 0)->andWhere('t3.dept')->eq($deptID)->fi() + ->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi() + ->page($pager) + ->fetchAll('account'); + } return $personnelList; } @@ -67,10 +86,6 @@ class personnelModel extends model $projects = $this->dao->select('id,model,type,parent,path,name')->from(TABLE_PROJECT) ->where('type')->eq('project') ->andWhere('path')->like("%,$programID,%") - ->beginIF($browseType == 'scrum')->andWhere('model')->eq('scrum')->fi() - ->beginIF($browseType == 'waterfall')->andWhere('model')->eq('waterfall')->fi() - ->beginIF($browseType == 'parent')->andWhere('parent')->eq($programID)->fi() - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() ->andWhere('deleted')->eq('0') ->orderBy($orderBy) ->fetchAll('id'); @@ -85,7 +100,7 @@ class personnelModel extends model $personnelList['objectRows'] = $sprintAndStage['objectRows']; /* Get the program name for each level. */ - $programNameList = $this->loadModel('program')->getPGMPairs(); + $programNameList = $this->dao->select('id, name')->from(TABLE_PROGRAM)->where('type')->eq('program')->andWhere('deleted')->eq(0)->fetchPairs(); foreach($personnelList['projects'] as $id => $project) { $path = explode(',', $project->path); @@ -113,11 +128,9 @@ class personnelModel extends model public function getSprintAndStage($projects) { /* Get all sprints and iterations under the project. */ - $userViewID = array_merge(array(0), explode(',', $this->app->user->view->stages), explode(',', $this->app->user->view->sprints)); $projectKeys = array_keys($projects); $projectObjet = $this->dao->select('id,project,model,type,parent,path,grade,name')->from(TABLE_PROJECT) ->where('project')->in($projectKeys) - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($userViewID)->fi() ->andWhere('deleted')->eq('0') ->orderBy('id_desc') ->fetchAll(); @@ -180,71 +193,6 @@ class personnelModel extends model return array('sprintAndStage' => $sprintAndStage, 'childrenStage' => $childrenStage, 'teams' => $teams, 'objectRows' => $objectRows); } - /** - * Get the treemenu of departments. - * - * @param int $deptID - * @param string $userFunc - * @param int $param - * @access public - * @return string - */ - public function getTreeMenu($deptID = 0, $userFunc, $param = 0) - { - $deptMenu = array(); - $stmt = $this->dbh->query($this->buildMenuQuery($deptID)); - while($dept = $stmt->fetch()) - { - $linkHtml = call_user_func($userFunc, $dept, $param); - - if(isset($deptMenu[$dept->id]) and !empty($deptMenu[$dept->id])) - { - if(!isset($deptMenu[$dept->parent])) $deptMenu[$dept->parent] = ''; - $deptMenu[$dept->parent] .= "