From f89fde1a7eb19192b993c81caed6901a36890eef Mon Sep 17 00:00:00 2001
From: leiyong <1549684884@qq.com>
Date: Wed, 21 Oct 2020 15:35:38 +0800
Subject: [PATCH] * Adjustment Code.
---
module/personnel/model.php | 22 ++++++-------
module/programplan/control.php | 46 +++++++++++++--------------
module/programplan/model.php | 57 +++++++++++++++-------------------
module/project/model.php | 40 ++++++++++++++++--------
4 files changed, 85 insertions(+), 80 deletions(-)
diff --git a/module/personnel/model.php b/module/personnel/model.php
index 34246275c4..657a756b99 100644
--- a/module/personnel/model.php
+++ b/module/personnel/model.php
@@ -40,17 +40,7 @@ class personnelModel extends model
/* 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
+ if($program->acl == 'open')
{
/* The program is public, and users are judged to be accessible by permission groups. */
$accessibleGroupID = $this->loadModel('group')->getAccessProgramGroup();
@@ -65,6 +55,16 @@ class personnelModel extends model
->page($pager)
->fetchAll('account');
}
+ else
+ {
+ $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();
+ }
return $personnelList;
}
diff --git a/module/programplan/control.php b/module/programplan/control.php
index da9161db3e..ad2436c88a 100644
--- a/module/programplan/control.php
+++ b/module/programplan/control.php
@@ -28,66 +28,64 @@ class programplan extends control
/**
* Common action.
*
- * @param int $programID
- * @param int $productID
- * @param string $extra
+ * @param int $projectID
+ * @param int $productID
+ * @param string $extra
* @access public
* @return void
*/
- public function commonAction($programID, $productID = 0, $extra = '')
+ public function commonAction($projectID, $productID = 0, $extra = '')
{
- $products = $this->loadModel('product')->getPairs('', $programID);
+ $products = $this->loadModel('product')->getProductsByProject('', $projectID);
$productID = $this->product->saveState($productID, $products);
- $this->product->setMenu($products, $productID, 0, 0, '', $extra);
$this->productID = $productID;
- $this->programplan->setMenu($programID, $productID);
+ $this->product->setMenu($products, $productID, 0, 0, '', $extra);
+ $this->programplan->setMenu($projectID, $productID);
}
/**
- * Browse programplans.
+ * Browse program plans.
*
- * @param int $programID
- * @param int $productID
- * @param string $type
- * @param string $orderBy
- * @param int $baselineID
+ * @param int $projectID
+ * @param int $productID
+ * @param string $type
+ * @param string $orderBy
+ * @param int $baselineID
* @access public
* @return void
*/
- public function browse($programID = 0, $productID = 0, $type = 'gantt', $orderBy = 'id_asc', $baselineID = 0)
+ public function browse($projectID = 0, $productID = 0, $type = 'gantt', $orderBy = 'id_asc', $baselineID = 0)
{
$this->app->loadLang('stage');
- $this->commonAction($programID, $productID, $type);
+ $this->commonAction($projectID, $productID, $type);
$this->session->set('programPlanList', $this->app->getURI(true));
- if(common::hasPriv('programplan', 'create')) $this->lang->TRActions = html::a($this->createLink('programplan', 'create', "programID=$programID"), " " . $this->lang->programplan->create, '', "class='btn btn-primary'");
+ if(common::hasPriv('programplan', 'create')) $this->lang->TRActions = html::a($this->createLink('programplan', 'create', "projectID=$projectID"), " " . $this->lang->programplan->create, '', "class='btn btn-primary'");
- $selectCustom = 0;
- $dateDetails = 1;
+ $selectCustom = 0; // Display date and task settings.
+ $dateDetails = 1; // Gantt chart detail date display.
if($type == 'gantt')
{
$owner = $this->app->user->account;
$module = 'programplan';
$section = 'browse';
$object = 'stageCustom';
- $setting = $this->loadModel('setting');
- $selectCustom = $setting->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
-
+ $selectCustom = $this->loadModel('setting')->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
if(strpos($selectCustom, 'date') !== false) $dateDetails = 0;
- $plans = $this->programplan->getDataForGantt($programID, $this->productID, $baselineID);
+ $plans = $this->programplan->getDataForGantt($projectID, $this->productID, $baselineID);
}
if($type == 'lists')
{
$sort = $this->loadModel('common')->appendOrder($orderBy);
$this->loadModel('datatable');
- $plans = $this->programplan->getPlans($programID, $this->productID, $sort);
+ $plans = $this->programplan->getPlans($projectID, $this->productID, $sort);
}
$this->view->title = $this->lang->programplan->browse;
$this->view->position[] = $this->lang->programplan->browse;
- $this->view->programID = $programID;
+ $this->view->programID = $projectID;
$this->view->productID = $this->productID;
$this->view->type = $type;
$this->view->plans = $plans;
diff --git a/module/programplan/model.php b/module/programplan/model.php
index 23c31a36b2..b72a5b00fd 100644
--- a/module/programplan/model.php
+++ b/module/programplan/model.php
@@ -16,12 +16,12 @@ class programplanModel extends model
/**
* Set menu.
*
- * @param int $programID
- * @param int $productID
+ * @param int $projectID
+ * @param int $productID
* @access public
* @return bool
*/
- public function setMenu($programID, $productID)
+ public function setMenu($projectID, $productID)
{
return true;
}
@@ -49,30 +49,28 @@ class programplanModel extends model
*/
public function getProjectsByProduct($productID)
{
- $projects = $this->dao->select('project')->from(TABLE_PROJECTPRODUCT)->where('product')->eq($productID)->fetchPairs();
-
- return $projects;
+ return $this->dao->select('project')->from(TABLE_PROJECTPRODUCT)->where('product')->eq($productID)->fetchPairs();
}
/**
* Get plans list.
*
- * @param int $programID
- * @param int $productID
- * @param int $planID
- * @param string $browseType
- * @param string $orderBy
+ * @param int $projectID
+ * @param int $productID
+ * @param int $planID
+ * @param string $browseType
+ * @param string $orderBy
* @access public
* @return array
*/
- public function getList($programID = 0, $productID = 0, $planID = 0, $browseType = 'all', $orderBy = 'id_asc')
+ public function getStage($projectID = 0, $productID = 0, $planID = 0, $browseType = 'all', $orderBy = 'id_asc')
{
$projects = $this->getProjectsByProduct($productID);
$plans = $this->dao->select('*')->from(TABLE_PROJECT)
->where('type')->eq('stage')
- ->beginIF($browseType == 'all')->andWhere('project')->eq($programID)->fi()
- ->beginIF($browseType == 'parent')->andWhere('parent')->eq($programID)->fi()
+ ->beginIF($browseType == 'all')->andWhere('project')->eq($projectID)->fi()
+ ->beginIF($browseType == 'parent')->andWhere('parent')->eq($projectID)->fi()
->beginIF($browseType == 'children')->andWhere('parent')->eq($planID)->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
->beginIF($productID)->andWhere('id')->in($projects)->fi()
@@ -139,7 +137,7 @@ class programplanModel extends model
*/
public function getPlans($programID = 0, $productID = 0, $orderBy = 'id_asc')
{
- $plans = $this->getList($programID, $productID, 0, 'all', $orderBy);
+ $plans = $this->getStage($programID, $productID, 0, 'all', $orderBy);
$parents = array();
$children = array();
@@ -182,19 +180,19 @@ class programplanModel extends model
/**
* Get gantt data.
*
- * @param int $programID
- * @param int $productID
- * @param int $baselineID
- * @param string $selectCustom
- * @param bool $returnJson
+ * @param int $projectID
+ * @param int $productID
+ * @param int $baselineID
+ * @param string $selectCustom
+ * @param bool $returnJson
* @access public
* @return string
*/
- public function getDataForGantt($programID, $productID, $baselineID = 0, $selectCustom = '', $returnJson = true)
+ public function getDataForGantt($projectID, $productID, $baselineID = 0, $selectCustom = '', $returnJson = true)
{
$this->loadModel('stage');
- $plans = $this->getList($programID, $productID, 0, 'all');
+ $plans = $this->getStage($projectID, $productID, 0, 'all');
if($baselineID)
{
$baseline = $this->loadModel('cm')->getByID($baselineID);
@@ -251,9 +249,8 @@ class programplanModel extends model
$module = 'programplan';
$section = 'browse';
$object = 'stageCustom';
- $setting = $this->loadModel('setting');
- if(empty($selectCustom)) $selectCustom = $setting->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
+ if(empty($selectCustom)) $selectCustom = $this->loadModel('setting')->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
$tasks = array();
if(strpos($selectCustom, 'task') !== false)
@@ -333,7 +330,7 @@ class programplanModel extends model
*/
public function getTotalPercent($plan)
{
- $plans = $this->getList($plan->project, $plan->product, $plan->parent, 'parent');
+ $plans = $this->getStage($plan->project, $plan->product, $plan->parent, 'parent');
$totalPercent = 0;
foreach($plans as $id => $stage)
@@ -354,11 +351,7 @@ class programplanModel extends model
*/
public function processPlans($plans)
{
- foreach($plans as $planID => $plan)
- {
- $plans[$planID] = $this->processPlan($plan);
- }
-
+ foreach($plans as $planID => $plan) $plans[$planID] = $this->processPlan($plan);
return $plans;
}
@@ -392,8 +385,8 @@ class programplanModel extends model
}
}
- $plan->begin = $plan->begin == '0000-00-00' ? '' : $plan->begin;
- $plan->end = $plan->end == '0000-00-00' ? '' : $plan->end;
+ $plan->begin = $plan->begin == '0000-00-00' ? '' : $plan->begin;
+ $plan->end = $plan->end == '0000-00-00' ? '' : $plan->end;
$plan->realBegan = $plan->realBegan == '0000-00-00' ? '' : $plan->realBegan;
$plan->realEnd = $plan->realEnd == '0000-00-00' ? '' : $plan->realEnd;
diff --git a/module/project/model.php b/module/project/model.php
index e85e9d27a7..0e1eb1ad77 100644
--- a/module/project/model.php
+++ b/module/project/model.php
@@ -362,7 +362,7 @@ class projectModel extends model
$member->root = $projectID;
$member->join = $today;
$member->days = $sprint->days;
- $member->type = 'project';
+ $member->type = $sprintType;
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
if($member->account == $this->app->user->account) $creatorExists = true;
}
@@ -377,10 +377,12 @@ class projectModel extends model
$member->account = $this->app->user->account;
$member->role = $this->lang->user->roleList[$this->app->user->role];
$member->join = $today;
- $member->type = 'project';
+ $member->type = $sprintType;
$member->days = $sprint->days;
$member->hours = $this->config->project->defaultWorkhours;
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
+
+ $this->addProjectMembers($this->session->PRJ, array($member));
}
/* Create doc lib. */
@@ -1985,7 +1987,7 @@ class projectModel extends model
}
/* Add iteration or phase team members to the project team. */
- if($projectType == 'stage' || $projectType == 'sprint') $this->addProjectMembers($project->parent, $projectMember);
+ if($projectType == 'stage' || $projectType == 'sprint') $this->addProjectMembers($project->project, $projectMember);
/* Only changed account update userview. */
$oldAccounts = array_keys($oldJoin);
@@ -2007,18 +2009,18 @@ class projectModel extends model
* @access public
* @return void
*/
- public function addProjectMembers($projectID, $members = array())
+ public function addProjectMembers($projectID = 0, $members = array())
{
$project = $this->getByID($projectID);
$projectType = $project->type;
- $oldJoin = $this->dao->select('`account`, `join`')->from(TABLE_TEAM)->where('root')->eq((int)$projectID)->andWhere('type')->eq($projectType)->fetchPairs();
+ $oldJoin = $this->dao->select('`account`, `join`')->from(TABLE_TEAM)->where('root')->eq($projectID)->andWhere('type')->eq($projectType)->fetchPairs();
$accounts = array();
foreach($members as $account => $member)
{
- if(isset($oldJoin[$account])) continue;
+ if(isset($oldJoin[$member->account])) continue;
- $accounts[] = $account;
+ $accounts[] = $member->account;
$member->root = $projectID;
$member->type = $projectType;
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
@@ -2039,18 +2041,30 @@ class projectModel extends model
/**
* Unlink a member.
*
- * @param int $projectID
+ * @param int $sprintID
* @param string $account
* @access public
* @return void
*/
- public function unlinkMember($projectID, $account)
+ public function unlinkMember($sprintID, $account)
{
- $project = $this->getByID($projectID);
- $this->dao->delete()->from(TABLE_TEAM)->where('root')->eq((int)$projectID)->andWhere('type')->eq($project->type)->andWhere('account')->eq($account)->exec();
+ $sprint = $this->getByID($sprintID);
+ $this->dao->delete()->from(TABLE_TEAM)->where('root')->eq((int)$sprintID)->andWhere('type')->eq($sprint->type)->andWhere('account')->eq($account)->exec();
- $this->loadModel('user')->updateUserView($projectID, $project->type, array($account));
- $products = $this->getProducts($projectID, false);
+ /* Remove team members from the sprint or stage, and determine whether to remove team members from the project. */
+ if($sprint->type == 'sprint' || $sprint->type == 'stage')
+ {
+ $teamMember = $this->dao->select('t1.id, t2.account')->from(TABLE_PROJECT)->alias('t1')
+ ->leftJoin(TABLE_TEAM)->alias('t2')->on('t1.id = t2.root')
+ ->where('t1.project')->eq($sprint->project)
+ ->andWhere('t1.type')->eq($sprint->type)
+ ->andWhere('t2.account')->eq($account)
+ ->fetch();
+ if(empty($teamMember)) $this->dao->delete()->from(TABLE_TEAM)->where('root')->eq($sprint->project)->andWhere('type')->eq('project')->andWhere('account')->eq($account)->exec();
+ }
+
+ $this->loadModel('user')->updateUserView($sprintID, $sprint->type, array($account));
+ $products = $this->getProducts($sprintID, false);
if($products) $this->user->updateUserView(array_keys($products), 'product', array($account));
}