diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index a15b4e169d..238ea04225 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -210,7 +210,7 @@ $lang->scrum->menu->settings['subMenu']->view = array('link' => "$lang->o $lang->scrum->menu->settings['subMenu']->products = array('link' => "{$lang->product->common}|project|manageProducts|project=%s", 'alias' => 'manageproducts'); $lang->scrum->menu->settings['subMenu']->members = array('link' => "{$lang->team->common}|project|manageMembers|project=%s", 'alias' => 'managemembers'); $lang->scrum->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); -$lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|", 'subModule' => 'stakeholder'); +$lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|project=%s", 'subModule' => 'stakeholder'); $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv'); /* Waterfall menu. */ diff --git a/module/execution/model.php b/module/execution/model.php index d099581799..c0a086a0ae 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -561,7 +561,7 @@ class executionModel extends model foreach($executions as $executionID => $execution) { $oldExecution = $oldExecutions[$executionID]; - $team = $this->getTeamMemberPairs($executionID); + $team = $this->getTeamMemberPairs($executionID); $this->dao->update(TABLE_EXECUTION)->data($execution) ->autoCheck($skipFields = 'begin,end') diff --git a/module/program/model.php b/module/program/model.php index 56ca1751f8..b5430776f2 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -834,6 +834,43 @@ class programModel extends model return $budgetUnitList; } + /** + * Get program team member pairs. + * + * @param int $programID + * @access public + * @return array + */ + public function getTeamMemberPairs($programID = 0) + { + $projectList = $this->loadModel('project')->getPairsByProgram($programID); + if(!$projectList) return array('' => ''); + + $users = $this->dao->select("t2.id, t2.account, t2.realname")->from(TABLE_TEAM)->alias('t1') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') + ->where('t1.root')->in(array_keys($projectList)) + ->andWhere('t1.type')->eq('project') + ->andWhere('t2.deleted')->eq(0) + ->fetchAll('account'); + if(!$users) return array('' => ''); + + foreach($users as $account => $user) + { + $firstLetter = ucfirst(substr($user->account, 0, 1)) . ':'; + if(!empty($this->config->isINT)) $firstLetter = ''; + $users[$account] = $firstLetter . ($user->realname ? $user->realname : $user->account); + } + + return array('' => '') + $users; + } + + /* + * Set program menu. + * + * @param int $programID + * @access public + * @return void + */ public function setMenu($programID) { $this->lang->switcherMenu = $this->getSwitcher($programID); diff --git a/module/project/model.php b/module/project/model.php index 073d95b376..b38ff253fe 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -395,33 +395,40 @@ class projectModel extends model } /** - * Get project team member pairs. + * Get team members in pair. * - * @param int $programID + * @param int $projectID + * @param string $params + * @param string $usersToAppended * @access public * @return array */ - public function getTeamMemberPairs($programID = 0) + public function getTeamMemberPairs($projectID, $params = '', $usersToAppended = '') { - $projectList = $this->getPairsByProgram($programID); - if(!$projectList) return array('' => ''); + if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembersPairs(); + $this->app->loadConfig('user'); - $users = $this->dao->select("t2.id, t2.account, t2.realname")->from(TABLE_TEAM)->alias('t1') - ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') - ->where('t1.root')->in(array_keys($projectList)) - ->andWhere('t1.type')->eq('project') - ->andWhere('t2.deleted')->eq(0) - ->fetchAll('account'); - if(!$users) return array('' => ''); + $keyField = strpos($params, 'useid') !== false ? 'id' : 'account'; + $users = $this->dao->select("t2.id, t2.account, t2.realname")->from(TABLE_TEAM)->alias('t1') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') + ->where('t1.root')->eq((int)$projectID) + ->andWhere('t1.type')->eq('project') + ->beginIF($params == 'nodeleted' or empty($this->config->user->showDeleted)) + ->andWhere('t2.deleted')->eq(0) + ->fi() + ->fetchAll($keyField); - foreach($users as $account => $user) - { - $firstLetter = ucfirst(substr($user->account, 0, 1)) . ':'; - if(!empty($this->config->isINT)) $firstLetter = ''; - $users[$account] = $firstLetter . ($user->realname ? $user->realname : $user->account); - } + if($usersToAppended) $users += $this->dao->select("id, account, realname")->from(TABLE_USER)->where('account')->in($usersToAppended)->fetchAll($keyField); - return array('' => '') + $users; + if(!$users) return array('' => ''); + + foreach($users as $account => $user) + { + $firstLetter = ucfirst(substr($user->account, 0, 1)) . ':'; + if(!empty($this->config->isINT)) $firstLetter = ''; + $users[$account] = $firstLetter . ($user->realname ? $user->realname : $user->account); + } + return array('' => '') + $users; } /** diff --git a/module/stakeholder/control.php b/module/stakeholder/control.php index 644dcb7a01..884652a37a 100644 --- a/module/stakeholder/control.php +++ b/module/stakeholder/control.php @@ -4,20 +4,23 @@ class stakeholder extends control /** * Stakeholder list. * + * @param int $projectID * @param string $browseType - * @param string orderBy - * @param int recTotal - * @param int recPerPage - * @param int pageID + * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ - public function browse($browseType = 'all', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function browse($projectID, $browseType = 'all', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->app->loadClass('pager', true); $pager = pager::init($recTotal, $recPerPage, $pageID); - $stakeholders = $this->stakeholder->getStakeholders($browseType, $orderBy, $pager); + $this->loadModel('project')->setMenu($projectID); + + $stakeholders = $this->stakeholder->getStakeholders($projectID, $browseType, $orderBy, $pager); $this->view->title = $this->lang->stakeholder->browse; $this->view->position[] = $this->lang->stakeholder->browse; @@ -26,6 +29,7 @@ class stakeholder extends control $this->view->recTotal = $recTotal; $this->view->recPerPage = $recPerPage; $this->view->pageID = $pageID; + $this->view->projectID = $projectID; $this->view->orderBy = $orderBy; $this->view->browseType = $browseType; $this->view->stakeholders = $stakeholders; @@ -36,15 +40,15 @@ class stakeholder extends control /** * Create a stakeholder. * - * @param int programID + * @param int projectID * @access public * @return void */ - public function create($programID = 0) + public function create($projectID = 0) { if($_POST) { - $stakeholderID = $this->stakeholder->create($programID); + $stakeholderID = $this->stakeholder->create($projectID); $response['result'] = 'success'; $response['message'] = $this->lang->saveSuccess; @@ -65,20 +69,22 @@ class stakeholder extends control $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate)); } - if($programID) + if($this->app->openApp == 'program') { - $this->loadModel('program')->setMenu($programID); - $this->view->members = $this->loadModel('project')->getTeamMemberPairs($programID); + $this->loadModel('program')->setMenu($projectID); + $this->view->members = $this->loadModel('program')->getTeamMemberPairs($projectID); } else { - $this->view->members = $this->loadModel('execution')->getTeamMemberPairs($this->session->project); + $this->loadModel('project')->setMenu($projectID); + $this->view->members = $this->loadModel('project')->getTeamMemberPairs($projectID); } $this->view->title = $this->lang->stakeholder->create; $this->view->position[] = $this->lang->stakeholder->create; $this->view->companys = $this->loadModel('company')->getOutsideCompanies(); - $this->view->programID = $programID; + $this->view->programID = $this->app->openApp == 'program' ? $projectID : 0; + $this->view->projectID = $this->app->openApp == 'project' ? $projectID : 0; $this->display(); } @@ -86,15 +92,27 @@ class stakeholder extends control /** * Batch create stakeholders. * + * @param int $projectID + * @param string $dept + * @param string $dept * @access public * @return void */ - public function batchCreate($dept = '', $parentID = 0) + public function batchCreate($projectID, $dept = '', $parentID = 0) { if($_POST) { $this->stakeholder->batchCreate(); - die(js::locate($this->createLink('stakeholder', 'browse'), 'parent')); + die(js::locate($this->createLink('stakeholder', 'browse', "projectID=$projectID"), 'parent')); + } + + if($this->app->openApp == 'program') + { + $this->loadModel('program')->setMenu($projectID); + } + else + { + $this->loadModel('project')->setMenu($projectID); } $this->loadModel('user'); @@ -109,9 +127,9 @@ class stakeholder extends control $this->view->users = $this->user->getPairs('all|nodeleted|noclosed'); $this->view->deptUsers = $deptUsers; $this->view->dept = $dept; - $this->view->projectID = $this->session->project; + $this->view->projectID = $projectID; $this->view->depts = array('' => '') + $this->dept->getOptionMenu(); - $this->view->stakeholders = $this->stakeholder->getStakeholders('all', 'id_desc'); + $this->view->stakeholders = $this->stakeholder->getStakeholders($projectID, 'all', 'id_desc'); $this->view->parentStakeholders = $this->loadModel('program')->getStakeholders($parentID, 't1.id_desc'); $this->display(); @@ -170,12 +188,20 @@ class stakeholder extends control * * @param string $user * @param int $programID + * @param int $projectID * @access public * @return void */ - public function ajaxGetMembers($user = '', $programID = 0) + public function ajaxGetMembers($user = '', $programID = 0, $projectID = 0) { - $members = $programID == 0 ? $this->loadModel('execution')->getTeamMemberPairs($this->session->project) : $this->loadModel('project')->getTeamMemberPairs($programID); + if($programID) + { + $members = $this->loadModel('program')->getTeamMemberPairs($programID); + } + else + { + $members = $this->loadModel('project')->getTeamMemberPairs($projectID); + } die(html::select('user', $members, $user, "class='form-control chosen'")); } @@ -184,13 +210,22 @@ class stakeholder extends control * * @param string $user * @param int $programID + * @param int $projectID * @access public * @return void */ - public function ajaxGetCompanyUser($user = '', $programID = 0) + public function ajaxGetCompanyUser($user = '', $programID = 0, $projectID = 0) { - $members = $programID == 0 ? $this->loadModel('execution')->getTeamMemberPairs($this->session->project) : $this->loadModel('project')->getTeamMemberPairs($programID); - $users = $this->loadModel('user')->getPairs('noclosed'); + if($programID) + { + $members = $this->loadModel('program')->getTeamMemberPairs($programID); + } + else + { + $members = $this->loadModel('project')->getTeamMemberPairs($projectID); + } + + $users = $this->loadModel('user')->getPairs('noclosed'); $companyUsers = array('' => '') + array_diff($users, $members); die(html::select('user', $companyUsers, $user, "class='form-control chosen'")); diff --git a/module/stakeholder/js/batchcreate.js b/module/stakeholder/js/batchcreate.js index d7df1e69c9..b9909d6656 100644 --- a/module/stakeholder/js/batchcreate.js +++ b/module/stakeholder/js/batchcreate.js @@ -1,7 +1,7 @@ function setDeptUsers(obj) { dept = $(obj).val();//Get dept ID. - link = createLink('stakeholder', 'batchCreate', 'dept=' + dept); + link = createLink('stakeholder', 'batchCreate', 'projectID=' + projectID + '&dept=' + dept); location.href=link; } diff --git a/module/stakeholder/js/create.js b/module/stakeholder/js/create.js index 0ff75739c9..d99a081f7e 100644 --- a/module/stakeholder/js/create.js +++ b/module/stakeholder/js/create.js @@ -6,7 +6,7 @@ $(function() { $('.user-info').addClass('hidden'); $('#user').closest('tr').find('.input-group-addon').addClass('hidden'); - var link = createLink('stakeholder', 'ajaxGetMembers', 'user=&programID=' + programID); + var link = createLink('stakeholder', 'ajaxGetMembers', 'user=&program=' + programID + '&projectID=' + projectID); $.post(link, function(data) { $('#user').replaceWith(data); @@ -19,7 +19,7 @@ $(function() { $('.user-info').addClass('hidden'); $('#user').closest('tr').find('.input-group-addon').addClass('hidden'); - var link = createLink('stakeholder', 'ajaxGetCompanyUser', 'user=&programID=' + programID); + var link = createLink('stakeholder', 'ajaxGetCompanyUser', 'user=&programID=' + programID + '&projectID=' + projectID); $.post(link, function(data) { $('#user').replaceWith(data); diff --git a/module/stakeholder/model.php b/module/stakeholder/model.php index c561ecf6fc..42574f7b40 100644 --- a/module/stakeholder/model.php +++ b/module/stakeholder/model.php @@ -193,20 +193,21 @@ class stakeholderModel extends model /** * Get stakeholder list. * + * @param int $projectID * @param string $browseType * @param string $orderBy * @param object $pager * @access public * @return array */ - public function getStakeholders($browseType = 'all', $orderBy = 'id_desc', $pager = null) + public function getStakeholders($projectID, $browseType = 'all', $orderBy = 'id_desc', $pager = null) { $stakeholders = $this->dao->select('t1.*, t2.phone, t2.realname as name, t2.email, t2.qq, t2.weixin, t2.nature, t2.analysis, t2.strategy, t3.name as companyName, t4.model as projectModel')->from(TABLE_STAKEHOLDER)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.user=t2.account') ->leftJoin(TABLE_COMPANY)->alias('t3')->on('t2.company=t3.id') ->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.objectID=t4.id') ->where('t1.deleted')->eq('0') - ->andWhere('t1.objectID')->eq($this->session->project) + ->andWhere('t1.objectID')->eq($projectID) ->beginIF($browseType == 'inside')->andWhere('t1.type')->eq('inside')->fi() ->beginIF($browseType == 'outside')->andWhere('t1.type')->eq('outside')->fi() ->beginIF($browseType == 'key')->andWhere('t1.key')->ne('0')->fi() @@ -220,13 +221,14 @@ class stakeholderModel extends model /** * Get stakeholder pairs. * + * @param int $projectID * @param string $browseType * @param string $orderBy * @param object $pager * @access public * @return array */ - public function getStakeHolderPairs() + public function getStakeHolderPairs($projectID) { $stakeholders = $this->dao->select('id, user')->from(TABLE_STAKEHOLDER) ->where('deleted')->eq('0') diff --git a/module/stakeholder/view/browse.html.php b/module/stakeholder/view/browse.html.php index 33f1c2ffc4..ac52ee9263 100644 --- a/module/stakeholder/view/browse.html.php +++ b/module/stakeholder/view/browse.html.php @@ -17,8 +17,8 @@ createLink('stakeholder', 'browse', 'browseType=all'), '' . $lang->stakeholder->browse . '', '', 'class="btn btn-link btn-active-text"');?>