From 7d7305bab8f45d660d3f4514765c29ed3c58e34a Mon Sep 17 00:00:00 2001
From: Yagami <976204163@qq.com>
Date: Thu, 15 Oct 2020 09:07:04 +0800
Subject: [PATCH] * Code for #8119.
---
module/product/lang/zh-cn.php | 4 +--
module/program/lang/zh-cn.php | 2 +-
module/program/model.php | 2 +-
module/user/model.php | 48 +++++++++++++++++++++++++++++++++--
4 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php
index f14db9d432..144b73f5d1 100644
--- a/module/product/lang/zh-cn.php
+++ b/module/product/lang/zh-cn.php
@@ -130,8 +130,8 @@ $lang->product->statusList[''] = '';
$lang->product->statusList['normal'] = '正常';
$lang->product->statusList['closed'] = '结束';
-$lang->product->aclList['open'] = "默认设置(有{$lang->productCommon}视图权限,即可访问)";
-$lang->product->aclList['private'] = "私有{$lang->productCommon}(只有{$lang->productCommon}相关负责人和{$lang->projectCommon}团队成员才能访问)";
+$lang->product->aclList['open'] = "公开(有{$lang->productCommon}视图权限,即可访问)";
+$lang->product->aclList['private'] = "私有({$lang->productCommon}相关负责人、所属项目集的干系人、相关联项目的团队成员和干系人可访问)";
$lang->product->aclList['custom'] = '自定义白名单(团队成员和白名单的成员可以访问)';
$lang->product->storySummary = "本页共 %s 个%s,预计 %s 个{$lang->hourCommon},用例覆盖率 %s。";
diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php
index b6a24c8387..a50ab852bf 100644
--- a/module/program/lang/zh-cn.php
+++ b/module/program/lang/zh-cn.php
@@ -183,7 +183,7 @@ $lang->program->PGMExport = '导出';
$lang->program->PGMManageGroupMember = '维护分组用户';
$lang->program->PGMStakeholder = '干系人列表';
$lang->program->createStakeholder = '添加干系人';
-$lang->program->importStakeholder = '从父项目导入';
+$lang->program->importStakeholder = '从父项目集导入';
/* Fields. */
$lang->program->PGMName = '项目集名称';
diff --git a/module/program/model.php b/module/program/model.php
index 8ba10d8c99..13208dadf3 100644
--- a/module/program/model.php
+++ b/module/program/model.php
@@ -283,7 +283,7 @@ class programModel extends model
{
$programID = $this->dao->lastInsertId();
$today = helper::today();
- //if($project->acl != 'open') $this->loadModel('user')->updateUserView($programID, 'program');
+ if($program->acl != 'open') $this->loadModel('user')->updateUserView($programID, 'program');
$this->dao->update(TABLE_PROGRAM)->set('`order`')->eq($programID * 5)->where('id')->eq($programID)->exec(); // Save order.
$this->file->updateObjectID($this->post->uid, $programID, 'project');
diff --git a/module/user/model.php b/module/user/model.php
index 661b9859ec..56b4943965 100644
--- a/module/user/model.php
+++ b/module/user/model.php
@@ -1533,7 +1533,7 @@ class userModel extends model
if(is_numeric($objectIdList)) $objectIdList = array($objectIdList);
if(!is_array($objectIdList)) return false;
- $allGroups = $this->dao->select('account,`group`')->from(TABLE_USERGROUP)->fetchAll();
+ $allGroups = $this->dao->select('account, `group`')->from(TABLE_USERGROUP)->fetchAll();
$managePrograms = $this->dao->select('account, PRJ')->from(TABLE_USERGROUP)->where('PRJ')->ne('')->fetchPairs();
$userGroups = array();
$groupUsers = array();
@@ -1590,7 +1590,6 @@ class userModel extends model
if(strpos(",{$userView->programs},", ",{$program},") === false) $userView->programs .= ",{$program}";
}
}
- $userObjects[$account]['programs'] = $userView->programs;
}
}
@@ -1678,6 +1677,26 @@ class userModel extends model
}
}
+ /* Get linked projects stakeholders.*/
+ $projectStakeholders = $this->dao->select('user')->from(TABLE_STAKEHOLDER)
+ ->where('objectType')->eq('project')
+ ->andWhere('objectID')->in($linkedProjects)
+ ->fetchPairs();
+
+ if(isset($projectStakeholders[$account])) return true;
+
+ /* Get linked program stakeholders.*/
+ if($product->program)
+ {
+ $program = $this->loadModel('program')->getPGMByID($product->program);
+ $programStakeholders = $this->dao->select('user')->from(TABLE_STAKEHOLDER)
+ ->where('objectType')->eq('program')
+ ->andWhere('objectID')->eq($program->id)
+ ->fetchPairs();
+
+ if(isset($programStakeholders[$account])) return true;
+ }
+
return false;
}
@@ -1717,6 +1736,31 @@ class userModel extends model
foreach($linkedProjects as $projectID) $users += zget($teams, $projectID, array());
}
+ /* Get linked projects stakeholders.*/
+ $projectStakeholders = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER)
+ ->where('objectType')->eq('project')
+ ->andWhere('objectID')->in($linkedProjects)
+ ->fetchPairs();
+ if(!empty($projectStakeholders))
+ {
+ foreach($projectStakeholders as $account) $users[$account] = $account;
+ }
+
+ /* Get linked program stakeholders.*/
+ if($product->program)
+ {
+ $program = $this->loadModel('program')->getPGMByID($product->program);
+ $programStakeholders = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER)
+ ->where('objectType')->eq('program')
+ ->andWhere('objectID')->eq($program->id)
+ ->fetchPairs();
+
+ if(!empty($programStakeholders))
+ {
+ foreach($programStakeholders as $account) $users[$account] = $account;
+ }
+ }
+
return $users;
}