@@ -209,7 +211,7 @@ story->reviewers;?> - + '') + $users, $reviewers, 'class="form-control chosen" multiple')?> status == 'closed'):?> From 8a0be108e4e0cbe563fcd5058e86759852c637b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B9=BF=E6=98=8E?= Date: Wed, 11 Aug 2021 15:43:31 +0800 Subject: [PATCH 09/11] * Fix story track bug. --- module/story/model.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/story/model.php b/module/story/model.php index 82e733da6e..9e1f1593ec 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -4008,7 +4008,6 @@ class storyModel extends model { $stories = $this->getProductStories($productID, 0, 0, 'all', 'story', 'id_desc', true, $excludeStories); } - if($stories) $pager->recTotal += count($stories); } else { @@ -4043,6 +4042,7 @@ class storyModel extends model } $tracks['noRequirement'] = $stories; + $pager->recTotal += 1; } return $tracks; @@ -4153,6 +4153,7 @@ class storyModel extends model $data = new stdclass(); $data->AType = 'requirement'; $data->BType = 'story'; + $data->product = $story->product; $data->relation = 'subdivideinto'; $data->AID = $isStory ? $id : $storyID; $data->BID = $isStory ? $storyID : $id; @@ -4164,6 +4165,7 @@ class storyModel extends model $data->AType = 'story'; $data->BType = 'requirement'; $data->relation = 'subdividedfrom'; + $data->product = $story->product; $data->AID = $isStory ? $storyID : $id; $data->BID = $isStory ? $id : $storyID; $data->AVersion = $isStory ? $story->version : $requirement->version; From 2a05fe7e21fff69b58c34e82d9aca12c8a39a176 Mon Sep 17 00:00:00 2001 From: zenggang Date: Wed, 11 Aug 2021 16:45:52 +0800 Subject: [PATCH 10/11] * Adjust my api --- module/my/model.php | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/module/my/model.php b/module/my/model.php index 52124c0429..d31af7fb9a 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -124,6 +124,7 @@ class myModel extends model $info->todo->dynamic = new stdclass(); if(common::hasPriv('todo', 'view')) { + $this->app->loadClass('date'); $todos = $this->dao->select('*')->from(TABLE_TODO) ->where('assignedTo')->eq($this->app->user->account) ->andWhere('cycle')->eq(0) @@ -134,12 +135,6 @@ class myModel extends model ->fetchAll(); foreach($todos as $key => $todo) { - if($todo->status == 'done' and $todo->finishedBy == $this->app->user->account) - { - unset($todos[$key]); - continue; - } - $todo->begin = date::formatTime($todo->begin); $todo->end = date::formatTime($todo->end); } @@ -182,10 +177,9 @@ class myModel extends model ->orWhere('participant')->in($this->app->user->account) ->markRight(1) ->orderBy('id_desc') - ->limit(3) ->fetchAll(); - $info->meeting->total = (int) $this->dao->select('count(*) AS count')->from(TABLE_MEETING)->where('assignedTo')->eq($this->app->user->account)->andWhere('status')->ne('closed')->andWhere('deleted')->eq(0)->fetch('count'); - $info->meeting->dynamic = $meetings; + $info->meeting->total = count($meetings); + $info->meeting->dynamic = array_slice($meetings, 0, 3); } /* My issues. */ @@ -278,8 +272,8 @@ class myModel extends model } $info->dynamic = $actions; - /* User info. */ - $info->participateProjectCount = count($info->projects); + /* Some count. */ + $info->joinProjectCount = count($info->projects); $info->createdDocs = $this->dao->select('count(*) AS count')->from(TABLE_DOC)->where('addedBy')->eq($this->app->user->account)->andWhere('deleted')->eq('0')->fetch('count'); return $info; From 4acca21bde01e534509002e6dfb8d912d9ba3eb8 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Wed, 11 Aug 2021 16:54:46 +0800 Subject: [PATCH 11/11] * Finish task#41217. --- module/action/model.php | 2 +- module/common/lang/menu.php | 4 +- module/group/lang/resource.php | 4 ++ module/project/control.php | 60 ++++++++++++++++ module/project/js/team.js | 4 ++ module/project/lang/en.php | 33 +++++---- module/project/lang/zh-cn.php | 35 +++++----- module/project/lang/zh-tw.php | 35 +++++----- module/project/model.php | 19 ++++++ module/project/view/team.html.php | 110 ++++++++++++++++++++++++++++++ 10 files changed, 256 insertions(+), 50 deletions(-) create mode 100644 module/project/js/team.js create mode 100644 module/project/view/team.html.php diff --git a/module/action/model.php b/module/action/model.php index 0738ab9bbf..718d885972 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -1128,7 +1128,7 @@ class actionModel extends model elseif($action->objectType == 'team') { $action->objectLink = ''; - if($action->project) $action->objectLink = helper::createLink('project', 'manageMembers', 'projectID=' . $action->project); + if($action->project) $action->objectLink = helper::createLink('project', 'team', 'projectID=' . $action->project); if($action->execution) $action->objectLink = helper::createLink('execution', 'team', 'executionID=' . $action->execution); $action->objectLabel = zget($this->lang->action->objectTypes, $action->objectLabel); } diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 4cbb6a8d31..ce273b17eb 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -190,7 +190,7 @@ $lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|brow $lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); $lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); $lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); -$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist'); +$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -218,7 +218,7 @@ $lang->scrum->menu->qa['subMenu']->testreport = array('link' => "{$lang->testrep $lang->scrum->menu->settings['subMenu'] = new stdclass(); $lang->scrum->menu->settings['subMenu']->view = array('link' => "$lang->overview|project|view|project=%s", 'alias' => 'edit'); $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']->members = array('link' => "{$lang->team->common}|project|team|project=%s", 'alias' => 'managemembers,team'); $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|project=%s", 'subModule' => 'stakeholder'); $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv'); diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 9284d875fe..ebabdcb63d 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -237,6 +237,8 @@ if($config->systemMode == 'new') $lang->resource->project->export = 'export'; $lang->resource->project->createGuide = 'createGuide'; $lang->resource->project->updateOrder = 'updateOrder'; + $lang->resource->project->team = 'teamAction'; + $lang->resource->project->unlinkMember = 'unlinkMember'; $lang->project->methodOrder[0] = 'index'; $lang->project->methodOrder[5] = 'browse'; @@ -275,6 +277,8 @@ if($config->systemMode == 'new') $lang->project->methodOrder[170] = 'export'; $lang->project->methodOrder[175] = 'createGuide'; $lang->project->methodOrder[180] = 'updateOrder'; + $lang->project->methodOrder[185] = 'team'; + $lang->project->methodOrder[190] = 'unlinkMember'; $lang->resource->projectbuild = new stdclass(); $lang->resource->projectbuild->browse = 'browse'; diff --git a/module/project/control.php b/module/project/control.php index 9ba6add129..cd3776e994 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -1106,6 +1106,66 @@ class project extends control $this->display(); } + /** + * Browse team of a project. + * + * @param int $projectID + * @access public + * @return void + */ + public function team($projectID = 0) + { + $this->app->loadLang('execution'); + $this->project->setMenu($projectID); + + $project = $this->project->getById($projectID); + + $this->view->title = $project->name . $this->lang->colon . $this->lang->project->team; + $this->view->projectID = $projectID; + $this->view->teamMembers = $this->project->getTeamMembers($projectID); + $this->view->deptUsers = $this->loadModel('dept')->getDeptUserPairs($this->app->user->dept, 'useid'); + $this->view->canBeChanged = common::canModify('project', $project); + + $this->display(); + } + + /** + * Unlink a memeber. + * + * @param int $projectID + * @param int $userID + * @param string $confirm yes|no + * @access public + * @return void + */ + public function unlinkMember($projectID, $userID, $confirm = 'no') + { + if($confirm == 'no') die(js::confirm($this->lang->project->confirmUnlinkMember, $this->inlink('unlinkMember', "projectID=$projectID&userID=$userID&confirm=yes"))); + + $user = $this->loadModel('user')->getById($userID, 'id'); + $account = $user->account; + + $this->project->unlinkMember($projectID, $account); + if(!dao::isError()) $this->loadModel('action')->create('team', $projectID, 'managedTeam'); + + /* if ajax request, send result. */ + if($this->server->ajax) + { + if(dao::isError()) + { + $response['result'] = 'fail'; + $response['message'] = dao::getError(); + } + else + { + $response['result'] = 'success'; + $response['message'] = ''; + } + return $this->send($response); + } + die(js::locate($this->inlink('team', "projectID=$projectID"), 'parent')); + } + /** * Manage project members. * diff --git a/module/project/js/team.js b/module/project/js/team.js new file mode 100644 index 0000000000..d58ba42f6b --- /dev/null +++ b/module/project/js/team.js @@ -0,0 +1,4 @@ +function checkUserDept(userID) +{ + alert(noAccess); +} diff --git a/module/project/lang/en.php b/module/project/lang/en.php index d718e6964f..2ce52b6ef0 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -52,6 +52,7 @@ $lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s"; $lang->project->testreport = 'Test Report'; $lang->project->selectProgram = 'Program filtering'; $lang->project->teamMember = 'Team Member'; +$lang->project->unlinkMember = 'Remove Member'; /* Fields. */ $lang->project->common = 'Project'; @@ -77,6 +78,7 @@ $lang->project->closedDate = 'ClosedDate'; $lang->project->canceledBy = 'CanceledBy'; $lang->project->canceledDate = 'CanceledDate'; $lang->project->team = 'Team'; +$lang->project->teamAction = 'Team List'; $lang->project->order = 'Rank'; $lang->project->budget = 'Budget'; $lang->project->budgetUnit = 'Budget Unit'; @@ -231,18 +233,19 @@ $lang->project->programTitle['0'] = 'Hidden'; $lang->project->programTitle['base'] = 'Base-level project only'; $lang->project->programTitle['end'] = 'End-level project only'; -$lang->project->accessDenied = 'Access denied to this project'; -$lang->project->chooseProgramType = 'Select management type'; -$lang->project->scrumTitle = 'Agile Development Management'; -$lang->project->cannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.'; -$lang->project->hasChildren = 'This project has a child project, so it cannot be deleted.'; -$lang->project->confirmDelete = 'Do you want to delete this project?'; -$lang->project->cannotChangeToCat = "The project has contents, so you cannot it to a parent project."; -$lang->project->cannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark."; -$lang->project->parentBeginEnd = "The begin and end date of the parent project: %s ~ %s"; -$lang->project->parentBudget = "The budget of the parent project: "; -$lang->project->beginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project."; -$lang->project->endGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project."; -$lang->project->beginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the project set."; -$lang->project->endLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the project set."; -$lang->project->childLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->project->accessDenied = 'Access denied to this project'; +$lang->project->chooseProgramType = 'Select management type'; +$lang->project->scrumTitle = 'Agile Development Management'; +$lang->project->cannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.'; +$lang->project->hasChildren = 'This project has a child project, so it cannot be deleted.'; +$lang->project->confirmDelete = 'Do you want to delete this project?'; +$lang->project->cannotChangeToCat = "The project has contents, so you cannot it to a parent project."; +$lang->project->cannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark."; +$lang->project->parentBeginEnd = "The begin and end date of the parent project: %s ~ %s"; +$lang->project->parentBudget = "The budget of the parent project: "; +$lang->project->beginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project."; +$lang->project->endGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project."; +$lang->project->beginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the project set."; +$lang->project->endLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the project set."; +$lang->project->childLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index bdfac9cf45..676b5d8209 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -22,7 +22,7 @@ $lang->project->editGroup = '项目编辑分组'; $lang->project->copyGroup = '项目复制分组'; $lang->project->manageView = '项目维护视野'; $lang->project->managePriv = '项目维护权限'; -$lang->project->manageMembers = '项目团队'; +$lang->project->manageMembers = '团队管理'; $lang->project->export = '导出'; $lang->project->addProduct = '新建产品'; $lang->project->manageGroupMember = '维护分组用户'; @@ -52,6 +52,7 @@ $lang->project->unlinkedProducts = '未关联'; $lang->project->testreport = '测试报告'; $lang->project->selectProgram = '项目集筛选'; $lang->project->teamMember = '团队成员'; +$lang->project->unlinkMember = '移除成员'; /* Fields. */ $lang->project->common = '项目'; @@ -77,6 +78,7 @@ $lang->project->closedDate = '关闭日期'; $lang->project->canceledBy = '由谁取消'; $lang->project->canceledDate = '取消日期'; $lang->project->team = '团队'; +$lang->project->teamAction = '团队列表'; $lang->project->order = '排序'; $lang->project->budget = '预算'; $lang->project->budgetUnit = '预算单位'; @@ -231,18 +233,19 @@ $lang->project->programTitle['0'] = '不显示'; $lang->project->programTitle['base'] = '只显示一级项目集'; $lang->project->programTitle['end'] = '只显示最后一级项目集'; -$lang->project->accessDenied = '您无权访问该项目!'; -$lang->project->chooseProgramType = '选择项目管理方式'; -$lang->project->scrumTitle = '敏捷开发全流程项目管理'; -$lang->project->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。'; -$lang->project->hasChildren = '该项目有子项目存在,不能删除。'; -$lang->project->confirmDelete = "您确定删除项目[%s]吗?"; -$lang->project->cannotChangeToCat = "该项目已经有实际的内容,无法修改为父项目"; -$lang->project->cannotCancelCat = "该项目下已经有子项目,无法取消父项目标记"; -$lang->project->parentBeginEnd = "父项目起止时间:%s ~ %s"; -$lang->project->parentBudget = "父项目预算:"; -$lang->project->beginLetterParent = "父项目的开始日期:%s,开始日期不能小于父项目的开始日期"; -$lang->project->endGreaterParent = "父项目的完成日期:%s,完成日期不能大于父项目的完成日期"; -$lang->project->beginGreateChild = "项目集的最小开始日期:%s,项目的开始日期不能小于项目集的最小开始日期"; -$lang->project->endLetterChild = "项目集的最大完成日期:%s,项目的完成日期不能大于项目集的最大完成日期"; -$lang->project->childLongTime = "子项目中有长期项目,父项目也应该是长期项目"; +$lang->project->accessDenied = '您无权访问该项目!'; +$lang->project->chooseProgramType = '选择项目管理方式'; +$lang->project->scrumTitle = '敏捷开发全流程项目管理'; +$lang->project->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。'; +$lang->project->hasChildren = '该项目有子项目存在,不能删除。'; +$lang->project->confirmDelete = "您确定删除项目[%s]吗?"; +$lang->project->cannotChangeToCat = "该项目已经有实际的内容,无法修改为父项目"; +$lang->project->cannotCancelCat = "该项目下已经有子项目,无法取消父项目标记"; +$lang->project->parentBeginEnd = "父项目起止时间:%s ~ %s"; +$lang->project->parentBudget = "父项目预算:"; +$lang->project->beginLetterParent = "父项目的开始日期:%s,开始日期不能小于父项目的开始日期"; +$lang->project->endGreaterParent = "父项目的完成日期:%s,完成日期不能大于父项目的完成日期"; +$lang->project->beginGreateChild = "项目集的最小开始日期:%s,项目的开始日期不能小于项目集的最小开始日期"; +$lang->project->endLetterChild = "项目集的最大完成日期:%s,项目的完成日期不能大于项目集的最大完成日期"; +$lang->project->childLongTime = "子项目中有长期项目,父项目也应该是长期项目"; +$lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户吗?"; diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php index da9da51a0a..bbe8b095ba 100644 --- a/module/project/lang/zh-tw.php +++ b/module/project/lang/zh-tw.php @@ -22,7 +22,7 @@ $lang->project->editGroup = '項目編輯分組'; $lang->project->copyGroup = '項目複製分組'; $lang->project->manageView = '項目維護視野'; $lang->project->managePriv = '項目維護權限'; -$lang->project->manageMembers = '項目團隊'; +$lang->project->manageMembers = '團隊管理'; $lang->project->export = '導出'; $lang->project->addProduct = '新建產品'; $lang->project->manageGroupMember = '維護分組用戶'; @@ -52,6 +52,7 @@ $lang->project->unlinkedProducts = '未關聯'; $lang->project->testreport = '測試報告'; $lang->project->selectProgram = '項目集篩選'; $lang->project->teamMember = '團隊成員'; +$lang->project->unlinkMember = '移除成員'; /* Fields. */ $lang->project->common = '項目'; @@ -77,6 +78,7 @@ $lang->project->closedDate = '關閉日期'; $lang->project->canceledBy = '由誰取消'; $lang->project->canceledDate = '取消日期'; $lang->project->team = '團隊'; +$lang->project->teamAction = '團隊清單'; $lang->project->order = '排序'; $lang->project->budget = '預算'; $lang->project->budgetUnit = '預算單位'; @@ -231,18 +233,19 @@ $lang->project->programTitle['0'] = '不顯示'; $lang->project->programTitle['base'] = '只顯示一級項目集'; $lang->project->programTitle['end'] = '只顯示最後一級項目集'; -$lang->project->accessDenied = '您無權訪問該項目!'; -$lang->project->chooseProgramType = '選擇項目管理方式'; -$lang->project->scrumTitle = '敏捷開發全流程項目管理'; -$lang->project->cannotCreateChild = '該項目已經有實際的內容,無法直接添加子項目。您可以為當前項目創建一個父項目,然後在新的父項目下面添加子項目。'; -$lang->project->hasChildren = '該項目有子項目存在,不能刪除。'; -$lang->project->confirmDelete = "您確定刪除項目[%s]嗎?"; -$lang->project->cannotChangeToCat = "該項目已經有實際的內容,無法修改為父項目"; -$lang->project->cannotCancelCat = "該項目下已經有子項目,無法取消父項目標記"; -$lang->project->parentBeginEnd = "父項目起止時間:%s ~ %s"; -$lang->project->parentBudget = "父項目預算:"; -$lang->project->beginLetterParent = "父項目的開始日期:%s,開始日期不能小於父項目的開始日期"; -$lang->project->endGreaterParent = "父項目的完成日期:%s,完成日期不能大於父項目的完成日期"; -$lang->project->beginGreateChild = "項目集的最小開始日期:%s,項目的開始日期不能小於項目集的最小開始日期"; -$lang->project->endLetterChild = "項目集的最大完成日期:%s,項目的完成日期不能大於項目集的最大完成日期"; -$lang->project->childLongTime = "子項目中有長期項目,父項目也應該是長期項目"; +$lang->project->accessDenied = '您無權訪問該項目!'; +$lang->project->chooseProgramType = '選擇項目管理方式'; +$lang->project->scrumTitle = '敏捷開發全流程項目管理'; +$lang->project->cannotCreateChild = '該項目已經有實際的內容,無法直接添加子項目。您可以為當前項目創建一個父項目,然後在新的父項目下面添加子項目。'; +$lang->project->hasChildren = '該項目有子項目存在,不能刪除。'; +$lang->project->confirmDelete = "您確定刪除項目[%s]嗎?"; +$lang->project->cannotChangeToCat = "該項目已經有實際的內容,無法修改為父項目"; +$lang->project->cannotCancelCat = "該項目下已經有子項目,無法取消父項目標記"; +$lang->project->parentBeginEnd = "父項目起止時間:%s ~ %s"; +$lang->project->parentBudget = "父項目預算:"; +$lang->project->beginLetterParent = "父項目的開始日期:%s,開始日期不能小於父項目的開始日期"; +$lang->project->endGreaterParent = "父項目的完成日期:%s,完成日期不能大於父項目的完成日期"; +$lang->project->beginGreateChild = "項目集的最小開始日期:%s,項目的開始日期不能小於項目集的最小開始日期"; +$lang->project->endLetterChild = "項目集的最大完成日期:%s,項目的完成日期不能大於項目集的最大完成日期"; +$lang->project->childLongTime = "子項目中有長期項目,父項目也應該是長期項目"; +$lang->project->confirmUnlinkMember = "您確定從該項目中移除該用戶嗎?"; diff --git a/module/project/model.php b/module/project/model.php index 28ae202f57..5c5d22edc0 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1256,6 +1256,25 @@ class projectModel extends model } } + /** + * Unlink a member. + * + * @param int $projectID + * @param string $account + * @access public + * @return void + */ + public function unlinkMember($projectID, $account) + { + $this->dao->delete()->from(TABLE_TEAM)->where('root')->eq((int)$projectID)->andWhere('type')->eq('project')->andWhere('account')->eq($account)->exec(); + + $this->loadModel('user'); + $this->user->updateUserView($projectID, 'project', array($account)); + + $linkedProducts = $this->loadModel('product')->getProductPairsByProject($projectID); + if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', array($account)); + } + /** * Manage team members. * diff --git a/module/project/view/team.html.php b/module/project/view/team.html.php new file mode 100644 index 0000000000..71ddb64495 --- /dev/null +++ b/module/project/view/team.html.php @@ -0,0 +1,110 @@ + + +project->confirmUnlinkMember)?> +user->error->noAccess)?> + +
+ +
+

+ execution->noMembers;?> + user->admin) or empty($app->user->rights['rights']['my']['limited'])) && common::hasPriv('project', 'manageMembers')):?> + createLink('project', 'manageMembers', "projectID=$projectID"), " " . $lang->project->manageMembers, '', "class='btn btn-info'");?> + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
team->account;?>team->role;?>team->join;?>team->days;?>team->hours;?>team->totalHours;?>team->limited;?>actions;?>
+ userID]) ? $this->createLink('user', 'view', "userID={$member->userID}") : "javascript:checkUserDept();"; + echo html::a($link, $member->realname, '', 'data-app="system"'); + } + else + { + echo $member->realname; + } + $memberHours = $member->days * $member->hours; + $totalHours += $memberHours; + ?> + role;?>join;?>days . $lang->execution->day;?>hours . $lang->execution->workHour;?>execution->workHour;?>team->limitedList[$member->limited];?> + createLink('project', 'unlinkMember', "projectID=$projectID&userID=$member->userID&confirm=yes"); + echo html::a("javascript:ajaxDelete(\"$unlinkURL\", \"mainContent\", confirmUnlinkMember)", '', '', "class='btn' title='{$lang->project->unlinkMember}'"); + } + ?> +
+ + + +
+