From ecc9e22867017c82defb3ab793da55d0d4d6a209 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Mon, 24 Jan 2022 16:54:30 +0800 Subject: [PATCH] * Finish task 18883,add project team. --- db/update16.2.sql | 4 +- module/project/control.php | 1 + module/project/model.php | 87 +++++++++++++++++++++++++---- module/project/view/create.html.php | 6 ++ module/project/view/edit.html.php | 6 ++ 5 files changed, 92 insertions(+), 12 deletions(-) diff --git a/db/update16.2.sql b/db/update16.2.sql index b83636466a..e2adba4501 100644 --- a/db/update16.2.sql +++ b/db/update16.2.sql @@ -1,5 +1,5 @@ ALTER TABLE `zt_kanbanspace` ADD `type` varchar(50) NOT NULL AFTER `name`; -UPDATE `zt_kanbanspace` SET `type` = 'cooperation', `whitelist` = ''; +UPDATE `zt_kanbanspace` SET `type` = 'cooperation', `whitelist` = '' WHERE `type` = 'cooperation'; ALTER TABLE `zt_kanban` ADD `object` varchar(255) NOT NULL AFTER `displayCards`; ALTER TABLE `zt_kanban` ADD `performable` enum ('0', '1') NOT NULL DEFAULT '0' AFTER `archived`; @@ -9,4 +9,4 @@ ALTER TABLE `zt_kanbancard` ADD `fromID` mediumint(8) unsigned NOT NULL AFTER `g ALTER TABLE `zt_kanbancard` ADD `fromType` varchar(30) NOT NULL AFTER `fromID`; ALTER TABLE `zt_job` ADD `sonarqubeServer` mediumint(8) unsigned NOT NULL AFTER `triggerType`; -ALTER TABLE `zt_job` ADD `projectKey` varchar(255) NOT NULL AFTER `sonarqubeServer`; \ No newline at end of file +ALTER TABLE `zt_job` ADD `projectKey` varchar(255) NOT NULL AFTER `sonarqubeServer`; diff --git a/module/project/control.php b/module/project/control.php index 509f6881fd..1986643fb0 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -629,6 +629,7 @@ class project extends control $this->view->budgetUnitList = $this->project->getBudgetUnitList(); $this->view->model = $project->model; $this->view->disableModel = (isset($canChangeModel) and $canChangeModel == true) ? '' : 'disabled'; + $this->view->teamMembers = $this->user->getTeamMemberPairs($projectID, 'project'); $this->display(); } diff --git a/module/project/model.php b/module/project/model.php index d00b124781..d9b017ca13 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -771,7 +771,7 @@ class projectModel extends model ->add('type', 'project') ->join('whitelist', ',') ->stripTags($this->config->project->editor->create['id'], $this->config->allowedTags) - ->remove('products,branch,plans,delta,newProduct,productName,future,contactListMenu') + ->remove('products,branch,plans,delta,newProduct,productName,future,contactListMenu,teamMembers') ->get(); $linkedProductsCount = 0; @@ -859,14 +859,47 @@ class projectModel extends model /* Add the creator to team. */ $this->app->loadLang('user'); - $member = new stdclass(); - $member->root = $projectID; - $member->account = $this->app->user->account; - $member->role = zget($this->lang->user->roleList, $this->app->user->role, ''); - $member->join = helper::today(); - $member->type = 'project'; - $member->hours = $this->config->execution->defaultWorkhours; - $this->dao->insert(TABLE_TEAM)->data($member)->exec(); + + /* Set team of project. */ + $creatorExists = false; + $teamMembers = array(); + + $members = isset($_POST['teamMembers']) ? $_POST['teamMembers'] : array(); + array_push($members, $project->PM); + $members = array_unique($members); + + $roles = $this->loadModel('user')->getUserRoles(array_values($members)); + foreach($members as $account) + { + if(empty($account)) continue; + + $member = new stdClass(); + $member->root = $projectID; + $member->type = 'project'; + $member->account = $account; + $member->role = zget($roles, $account, ''); + $member->join = helper::now(); + $member->days = zget($project, 'days', 0); + $member->hours = $this->config->execution->defaultWorkhours; + $this->dao->insert(TABLE_TEAM)->data($member)->exec(); + if($member->account == $this->app->user->account) $creatorExists = true; + $teamMembers[$account] = $member; + } + + if(!$creatorExists) + { + $member = new stdClass(); + $member->root = $projectID; + $member->type = 'project'; + $member->account = $this->app->user->account; + $member->role = zget($this->lang->user->roleList, $this->app->user->role, ''); + $member->join = helper::now(); + $member->days = zget($project, 'days', 0); + $member->hours = $this->config->execution->defaultWorkhours; + $this->dao->insert(TABLE_TEAM)->data($member)->exec(); + $teamMembers[$member->account] = $member; + } + if($this->config->systemMode == 'new') $this->loadModel('execution')->addProjectMembers($projectID, $teamMembers); $whitelist = explode(',', $project->whitelist); $this->loadModel('personnel')->updateWhitelist($whitelist, 'project', $projectID); @@ -999,7 +1032,7 @@ class projectModel extends model ->setIF($this->post->budget != 0, 'budget', round($this->post->budget, 2)) ->join('whitelist', ',') ->stripTags($this->config->project->editor->edit['id'], $this->config->allowedTags) - ->remove('products,branch,plans,delta,future,contactListMenu') + ->remove('products,branch,plans,delta,future,contactListMenu,teamMembers') ->get(); if($project->parent) @@ -1060,6 +1093,40 @@ class projectModel extends model ->where('id')->eq($projectID) ->exec(); + /* Get team and language item. */ + $this->loadModel('user'); + $team = $this->user->getTeamMemberPairs($projectID, 'project'); + $members = isset($_POST['teamMembers']) ? $_POST['teamMembers'] : array(); + array_push($members, $project->PM); + $members = array_unique($members); + $roles = $this->user->getUserRoles(array_values($members)); + + $teamMembers = array(); + foreach($members as $account) + { + if(empty($account) or isset($team[$account])) continue; + + $member = new stdclass(); + $member->root = (int)$projectID; + $member->account = $account; + $member->join = helper::today(); + $member->role = zget($roles, $account, ''); + $member->days = zget($project, 'days', 0); + $member->type = 'project'; + $member->hours = $this->config->execution->defaultWorkhours; + $this->dao->replace(TABLE_TEAM)->data($member)->exec(); + + $teamMembers[$account] = $member; + } + $this->dao->delete()->from(TABLE_TEAM) + ->where('root')->eq((int)$projectID) + ->andWhere('type')->eq('project') + ->andWhere('account')->in(array_keys($team)) + ->andWhere('account')->notin(array_values($members)) + ->andWhere('account')->ne($oldProject->openedBy) + ->exec(); + if(!empty($projectID) and !empty($teamMembers)) $this->loadModel('execution')->addProjectMembers($projectID, $teamMembers); + if(!dao::isError()) { $this->updateProductProgram($oldProject->parent, $project->parent, $_POST['products']); diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index fa116889ba..931c116e69 100644 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -146,6 +146,12 @@ + + + execution->team;?> + + + project->desc;?> diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 2909dd3673..5827c14d6f 100644 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -165,6 +165,12 @@ + model == 'kanban'):?> + + execution->team;?> + + + project->desc;?>