From c0f44f6465dd1356ba292ba6ce0561280e37b6f0 Mon Sep 17 00:00:00 2001
From: leiyong <1549684884@qq.com>
Date: Sun, 25 Oct 2020 17:30:41 +0800
Subject: [PATCH] * Adding a white list.
---
module/common/lang/de.php | 1 +
module/common/lang/en.php | 1 +
module/common/lang/fr.php | 1 +
module/common/lang/vi.php | 1 +
module/common/lang/zh-cn.php | 2 +
module/common/lang/zh-tw.php | 1 +
module/personnel/control.php | 91 +++++++++++++++++++++
module/personnel/js/addwhitelist.js | 38 +++++++++
module/personnel/lang/zh-cn.php | 4 +
module/personnel/model.php | 21 +++++
module/personnel/view/addwhitelist.html.php | 78 ++++++++++++++++++
module/personnel/view/whitelist.html.php | 75 +++++++++++++++++
module/product/control.php | 2 +
module/product/css/common.css | 1 -
module/product/js/common.js | 5 --
module/product/model.php | 12 +--
module/product/view/create.html.php | 11 +--
module/product/view/edit.html.php | 9 +-
module/program/control.php | 31 +++----
module/program/css/common.css | 1 -
module/program/js/common.js | 5 --
module/program/js/createstakeholder.js | 18 ++++
module/program/model.php | 53 ++++++++----
module/program/view/pgmbrowse.html.php | 5 +-
module/program/view/pgmcreate.html.php | 8 +-
module/program/view/pgmedit.html.php | 6 ++
module/program/view/prjcreate.html.php | 6 ++
module/program/view/prjedit.html.php | 8 +-
module/project/control.php | 2 +
module/project/model.php | 10 +--
module/project/view/create.html.php | 6 ++
module/project/view/edit.html.php | 7 +-
32 files changed, 452 insertions(+), 68 deletions(-)
create mode 100644 module/personnel/js/addwhitelist.js
create mode 100644 module/personnel/view/addwhitelist.html.php
create mode 100644 module/personnel/view/whitelist.html.php
diff --git a/module/common/lang/de.php b/module/common/lang/de.php
index e76f71bf63..35ae871e2c 100644
--- a/module/common/lang/de.php
+++ b/module/common/lang/de.php
@@ -61,6 +61,7 @@ $lang->noData = 'Kein Datensatz';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Kürzlich';
+$lang->whitelist = 'Weiße Liste';
$lang->actions = 'Aktionen';
$lang->restore = 'Wiederherstellen';
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 70d966dcb6..d86ecc9f4f 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -61,6 +61,7 @@ $lang->noData = 'No data.';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Recent';
+$lang->whitelist = 'Access whitelist';
$lang->actions = 'Action';
$lang->restore = 'Reset';
diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php
index abfc807b9d..61b22a73fe 100644
--- a/module/common/lang/fr.php
+++ b/module/common/lang/fr.php
@@ -61,6 +61,7 @@ $lang->noData = 'No data.';
$lang->fullscreen = 'Plein Ecran';
$lang->retrack = 'Réduire';
$lang->recent = 'Récent';
+$lang->whitelist = 'Liste blanche';
$lang->actions = 'Action';
$lang->restore = 'Réinitialiser';
diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php
index c744e0c59a..fa4ea38582 100644
--- a/module/common/lang/vi.php
+++ b/module/common/lang/vi.php
@@ -61,6 +61,7 @@ $lang->noData = 'Không có dữ liệu.';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Recente';
+$lang->whitelist = 'Lista bianca';
$lang->actions = 'Hành động';
$lang->restore = 'Thiết lập lại';
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 1b168a08c5..b70937f025 100755
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -61,6 +61,7 @@ $lang->noData = '暂无';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->recent = '近期';
+$lang->whitelist = '访问白名单';
$lang->actions = '操作';
$lang->restore = '恢复默认';
@@ -147,6 +148,7 @@ $lang->program->viewMenu->stakeholder = array('link' => "干系人|program|pgmst
$lang->personnel = new stdClass();
$lang->personnel->menu = new stdClass();
$lang->personnel->menu->accessible = array('link' => "可访问人员|personnel|accessible|program=%s");
+$lang->personnel->menu->whitelist = array('link' => "白名单|personnel|whitelist|program=%s");
$lang->personnel->menu->putinto = array('link' => "投入人员|personnel|putinto|program=%s");
/* Scrum menu. */
diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php
index 3586529798..52debdab99 100644
--- a/module/common/lang/zh-tw.php
+++ b/module/common/lang/zh-tw.php
@@ -61,6 +61,7 @@ $lang->noData = '暫無';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->recent = '近期';
+$lang->whitelist = '訪問白名單';
$lang->actions = '操作';
$lang->restore = '恢復預設';
diff --git a/module/personnel/control.php b/module/personnel/control.php
index 5c38a1957b..27e6a8a072 100644
--- a/module/personnel/control.php
+++ b/module/personnel/control.php
@@ -87,4 +87,95 @@ class personnel extends control
$this->display();
}
+
+ /**
+ * Get white list personnel.
+ *
+ * @param int $programID
+ * @param string $browsetype
+ * @param string $orderby
+ * @param int $recTotal
+ * @param int $recPerPage
+ * @param int $pageID
+ * @access public
+ * @return void
+ */
+ public function whitelist($programID = 0, $browseType = 'all', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
+ {
+ $this->loadModel('program');
+ $this->app->loadLang('user');
+ $this->lang->navGroup->program = 'program';
+ $this->lang->program->switcherMenu = $this->program->getPGMCommonAction() . $this->program->getPGMSwitcher($programID);
+ $this->program->setPGMViewMenu($programID);
+
+ $this->app->loadClass('pager', true);
+ $pager = pager::init($recTotal, $recPerPage, $pageID);
+
+ $whitelist = $this->personnel->getWhitelist($programID, $browseType, $orderBy, $pager);
+
+ $this->view->title = $this->lang->personnel->whitelist;
+ $this->view->position[] = $this->lang->personnel->whitelist;
+ $this->view->pager = $pager;
+ $this->view->programID = $programID;
+ $this->view->whitelist = $whitelist;
+
+ $this->display();
+ }
+
+ /**
+ * Adding users to the white list.
+ *
+ * @param int $objectID
+ * @param int $deptID
+ * @access public
+ * @return void
+ */
+ public function addWhitelist($objectID = 0, $deptID = 0)
+ {
+ $this->loadModel('program');
+ $this->app->loadLang('project');
+ $this->lang->navGroup->program = 'program';
+ $this->lang->program->switcherMenu = $this->program->getPGMCommonAction() . $this->program->getPGMSwitcher($objectID);
+ $this->program->setPGMViewMenu($objectID);
+
+ $this->view->title = $this->lang->personnel->addWhitelist;
+ $this->view->position[] = $this->lang->personnel->addWhitelist;
+
+ $this->view->objectID = $objectID;
+ $this->view->deptID = $deptID;
+ $this->view->whitelist = $this->personnel->getWhitelist($objectID);
+ $this->view->depts = $this->loadModel('dept')->getOptionMenu();
+ $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted');
+ $this->view->dept = $this->dept->getByID($deptID);
+
+ $this->display();
+ }
+
+ /*
+ * Removing users from the white list.
+ *
+ * @param int $id
+ * @param string $confirm
+ * @access public
+ * @return void
+ */
+ public function unlinkACL($id = 0, $confirm = 'no')
+ {
+ if($confirm == 'no')
+ {
+ die(js::confirm($this->lang->personnel->confirmDelete, inLink('unlinkUser',"id=$id&confirm=yes")));
+ }
+ else
+ {
+ $acl = $this->dao->select('*')->from(TABLE_ACL)->where('id')->eq($id)->fetch();
+
+ $objectTable = $acl->objectType == 'product' ? TABLE_PRODUCT : TABLE_PROJECT;
+ $whitelist = $this->dao->select('whitelist')->from($objectTable)->where('id')->eq($acl->objectID)->fetch('whitelist');
+ $newWhitelist = str_replace(',' . $acl->account, '', $whitelist);
+ $this->dao->update($objectTable)->set('whitelist')->eq($newWhitelist)->where('id')->eq($acl->objectID)->exec();
+
+ $this->dao->delete()->from(TABLE_ACL)->where('id')->eq($id)->exec();
+ die(js::reload('parent'));
+ }
+ }
}
diff --git a/module/personnel/js/addwhitelist.js b/module/personnel/js/addwhitelist.js
new file mode 100644
index 0000000000..be2f4f5f49
--- /dev/null
+++ b/module/personnel/js/addwhitelist.js
@@ -0,0 +1,38 @@
+/**
+ * Users by department.
+ *
+ * @param object obj
+ * @return void
+ */
+function setDeptUsers(dept)
+{
+ var deptID = $(dept).val();
+ var link = createLink('personnel', 'addWhitelist', 'objectID=' + objectID + '&deptID=' + deptID)
+ location.href = link;
+}
+
+/**
+ * Add an item.
+ *
+ * @param object obj
+ * @return void
+ */
+function addItem(obj)
+{
+ var dataID = $(obj).parent().parent().attr("data-id");
+ var item = $("#addItem").html();
+ index = Number(index) + 1;
+ $("#whitelist" + dataID).after("
" + item + "
");
+ $("#whitelist" + index).find("select").chosen();
+}
+
+/**
+ * Delete an item.
+ *
+ * @param object obj
+ * @return void
+ */
+function deleteItem(obj)
+{
+ $(obj).parent().parent().remove();
+}
diff --git a/module/personnel/lang/zh-cn.php b/module/personnel/lang/zh-cn.php
index 93866e6fc1..aecd46969e 100644
--- a/module/personnel/lang/zh-cn.php
+++ b/module/personnel/lang/zh-cn.php
@@ -15,3 +15,7 @@ $lang->personnel->search = '搜索';
$lang->personnel->program = '项目集';
$lang->personnel->emptyTip = '暂无';
$lang->personnel->childrenStage = '子阶段';
+
+$lang->personnel->whitelist = '白名单列表';
+$lang->personnel->addWhitelist = '添加白名单';
+$lang->personnel->confirmDelete = '确认将该用户移除白名单?';
diff --git a/module/personnel/model.php b/module/personnel/model.php
index 657a756b99..24fb0c537c 100644
--- a/module/personnel/model.php
+++ b/module/personnel/model.php
@@ -194,6 +194,27 @@ class personnelModel extends model
return array('sprintAndStage' => $sprintAndStage, 'childrenStage' => $childrenStage, 'teams' => $teams, 'objectRows' => $objectRows);
}
+ /**
+ * Access to program set input staff.
+ *
+ * @param int $objectID
+ * @param string $browseType
+ * @param string $orderBy
+ * @param object $pager
+ * @access public
+ * @return array
+ */
+ public function getWhitelist($objectID = 0, $browseType = 'all', $orderBy = 'id_desc', $pager = '')
+ {
+ return $this->dao->select('t1.id,t1.account,t2.realname,t2.role,t2.phone,t2.qq,t2.weixin,t2.email')->from(TABLE_ACL)->alias('t1')
+ ->leftjoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account')
+ ->where('t1.objectID')->eq($objectID)
+ ->andWhere('t1.type')->eq('whitelist')
+ ->orderBy($orderBy)
+ ->beginIF(!empty($pager))->page($pager)->fi()
+ ->fetchAll();
+ }
+
/**
* Create access links by department.
*
diff --git a/module/personnel/view/addwhitelist.html.php b/module/personnel/view/addwhitelist.html.php
new file mode 100644
index 0000000000..5d7b54e242
--- /dev/null
+++ b/module/personnel/view/addwhitelist.html.php
@@ -0,0 +1,78 @@
+
+ * @package personnel
+ * @version $Id
+ * @link http://www.zentao.net
+ */
+?>
+
+
+
+
+
+
+
diff --git a/module/personnel/view/whitelist.html.php b/module/personnel/view/whitelist.html.php
new file mode 100644
index 0000000000..361e3a45b8
--- /dev/null
+++ b/module/personnel/view/whitelist.html.php
@@ -0,0 +1,75 @@
+
+ * @package personnel
+ * @version $Id
+ * @link http://www.zentao.net
+ */
+?>
+
+
+
+ createLink('personnel', 'whitelist', "programID=$programID"), '' . $lang->personnel->whitelist . '', '', 'class="btn btn-link btn-active-text"');?>
+
+
+ " . $lang->personnel->addWhitelist, '', "class='btn btn-primary'");?>
+
+
+
+
diff --git a/module/product/control.php b/module/product/control.php
index 885178ef78..1d7db19c23 100644
--- a/module/product/control.php
+++ b/module/product/control.php
@@ -288,6 +288,7 @@ class product extends control
$this->view->poUsers = $poUsers;
$this->view->qdUsers = $qdUsers;
$this->view->rdUsers = $rdUsers;
+ $this->view->users = $this->user->getPairs('nodeleted|noclosed');
$this->view->programs = array('') + $this->loadModel('program')->getTopPGMPairs();
$this->view->lines = array('') + $this->loadModel('tree')->getLinePairs();
$this->view->rootID = $rootID;
@@ -356,6 +357,7 @@ class product extends control
$this->view->poUsers = $poUsers;
$this->view->qdUsers = $qdUsers;
$this->view->rdUsers = $rdUsers;
+ $this->view->users = $this->user->getPairs('nodeleted|noclosed');
$this->view->programs = array('') + $this->loadModel('program')->getTopPGMPairs();
$this->view->lines = array('') + $this->loadModel('tree')->getLinePairs();
diff --git a/module/product/css/common.css b/module/product/css/common.css
index 77dc41ccce..427e63627b 100644
--- a/module/product/css/common.css
+++ b/module/product/css/common.css
@@ -1,3 +1,2 @@
-#whitelistBox .checkbox-primary, #whitelistBox .radio-inline{margin-left: 10px; display: inline-block; padding-left: 0px; padding-right: 10px;}
.c-pri {overflow:hidden;}
#mainMenu .btn-toolbar .dropdown-menu li a.btn{text-align:left;}
diff --git a/module/product/js/common.js b/module/product/js/common.js
index 782d3a06cf..f00761711c 100644
--- a/module/product/js/common.js
+++ b/module/product/js/common.js
@@ -1,8 +1,3 @@
-function setWhite(acl)
-{
- acl == 'custom' ? $('#whitelistBox').removeClass('hidden') : $('#whitelistBox').addClass('hidden');
-}
-
$(document).ready(function()
{
if(window.noProject) $('#aclprivate').parents('.radio').remove();
diff --git a/module/product/model.php b/module/product/model.php
index 6730982efb..55f3702d59 100644
--- a/module/product/model.php
+++ b/module/product/model.php
@@ -148,7 +148,7 @@ class productModel extends model
if($currentProduct->type != 'normal')
{
$this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$currentProduct->type]);
- $this->lang->product->menu->branch = str_replace('@branch@', $this->lang->product->branchName[$currentProduct->type], $this->lang->product->menu->branch);
+ $this->lang->product->menu->branch = str_replace('@branch@', $this->lang->product->branchName[$currentProduct->type], $this->lang->product->branch);
$branches = $this->loadModel('branch')->getPairs($productID);
$branchName = isset($branches[$branch]) ? $branches[$branch] : $branches[0];
if(!$isMobile)
@@ -469,13 +469,12 @@ class productModel extends model
public function create()
{
$product = fixer::input('post')
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
->setDefault('status', 'normal')
->setDefault('createdBy', $this->app->user->account)
->setDefault('createdDate', helper::now())
->setDefault('createdVersion', $this->config->version)
- ->join('whitelist', ',')
->stripTags($this->config->product->editor->create['id'], $this->config->allowedTags)
+ ->join('whitelist', ',')
->remove('uid')
->get();
@@ -491,6 +490,9 @@ class productModel extends model
$this->file->updateObjectID($this->post->uid, $productID, 'product');
$this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($productID * 5)->where('id')->eq($productID)->exec();
+ $this->loadModel('program')->updateUserACL($this->post->whitelist, 'product', $productID);
+ if($product->acl != 'open') $this->loadModel('user')->updateUserView($productID, 'product');
+
/* Create doc lib. */
$this->app->loadLang('doc');
$lib = new stdclass();
@@ -500,7 +502,6 @@ class productModel extends model
$lib->main = '1';
$lib->acl = 'default';
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
- if($product->acl != 'open') $this->loadModel('user')->updateUserView($productID, 'product');
return $productID;
}
@@ -517,11 +518,11 @@ class productModel extends model
$productID = (int)$productID;
$oldProduct = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch();
$product = fixer::input('post')
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
->join('whitelist', ',')
->stripTags($this->config->product->editor->edit['id'], $this->config->allowedTags)
->remove('uid')
->get();
+
$product = $this->loadModel('file')->processImgURL($product, $this->config->product->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_PRODUCT)->data($product)->autoCheck()
->batchCheck($this->config->product->edit->requiredFields, 'notempty')
@@ -533,6 +534,7 @@ class productModel extends model
if(!dao::isError())
{
$this->file->updateObjectID($this->post->uid, $productID, 'product');
+ $this->loadModel('program')->updateUserACL($this->post->whitelist, 'product', $productID);
if($product->acl != 'open') $this->loadModel('user')->updateUserView($productID, 'product');
return common::createChanges($oldProduct, $product);
}
diff --git a/module/product/view/create.html.php b/module/product/view/create.html.php
index 33d936e785..841f691f3c 100644
--- a/module/product/view/create.html.php
+++ b/module/product/view/create.html.php
@@ -71,11 +71,12 @@
| product->acl;?> |
product->aclList, 'open', "onclick='setWhite(this.value);'", 'block'));?> |
-
-
- | product->whitelist;?> |
- |
-
+
+
+ | whitelist;?> |
+ |
+ |
+
|
diff --git a/module/product/view/edit.html.php b/module/product/view/edit.html.php
index e328e4b92e..4ad146bc52 100644
--- a/module/product/view/edit.html.php
+++ b/module/product/view/edit.html.php
@@ -66,10 +66,11 @@
| product->acl;?> |
product->aclList, $product->acl, "onclick='setWhite(this.value);'", 'block'));?> |
- acl != 'custom') echo "class='hidden'";?>>
- | product->whitelist;?> |
- whitelist);?> |
-
+
+ | whitelist;?> |
+ whitelist, 'class="form-control chosen" multiple');?> |
+ |
+
diff --git a/module/program/control.php b/module/program/control.php
index 907722fe1e..3f5d343d1f 100644
--- a/module/program/control.php
+++ b/module/program/control.php
@@ -64,7 +64,7 @@ class program extends control
$this->lang->navGroup->program = 'program';
$this->lang->program->switcherMenu = $this->program->getPGMCommonAction();
- if(common::hasPriv('program', 'pgmcreate')) $this->lang->pageActions = html::a($this->createLink('program', 'pgmcreate'), " " . $this->lang->program->PGMCreate, '', "class='btn btn-primary'");
+ if(common::hasPriv('program', 'pgmcreate')) $this->lang->pageActions = html::a($this->createLink('program', 'pgmcreate'), " " . $this->lang->program->PGMCreate, '', "class='btn btn-secondary'");
$this->app->session->set('programList', $this->app->getURI(true));
@@ -154,9 +154,9 @@ class program extends control
$this->view->title = $this->lang->program->PGMCreate;
$this->view->position[] = $this->lang->program->PGMCreate;
- $this->view->groups = $this->loadModel('group')->getPairs();
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst');
$this->view->poUsers = $this->user->getPairs('noclosed|nodeleted|pofirst');
+ $this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->parentProgram = $parentProgramID ? $this->dao->select('*')->from(TABLE_PROGRAM)->where('id')->eq($parentProgramID)->fetch() : '';
$this->view->parents = $this->program->getParentPairs();
@@ -199,6 +199,7 @@ class program extends control
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst', $program->PM);
$this->view->poUsers = $this->user->getPairs('noclosed|nodeleted|pofirst');
+ $this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->program = $program;
$this->view->parents = $parents;
$this->view->groups = $this->loadModel('group')->getPairs();
@@ -497,16 +498,16 @@ class program extends control
* @return void
*/
public function unlinkStakeholder($stakeholderID, $programID, $confirm = 'no')
- {
- if($confirm == 'no')
- {
- die(js::confirm($this->lang->program->confirmDelete, $this->inlink('unlinkStakeholder', "stakeholderID=$stakeholderID&programID=$programID&confirm=yes")));
- }
- else
- {
+ {
+ if($confirm == 'no')
+ {
+ die(js::confirm($this->lang->program->confirmDelete, $this->inlink('unlinkStakeholder', "stakeholderID=$stakeholderID&programID=$programID&confirm=yes")));
+ }
+ else
+ {
$account = $this->dao->select('user')->from(TABLE_STAKEHOLDER)->where('id')->eq($stakeholderID)->fetch('user');
- $this->dao->delete()->from(TABLE_STAKEHOLDER)->where('id')->eq($stakeholderID)->exec();
-
+ $this->dao->delete()->from(TABLE_STAKEHOLDER)->where('id')->eq($stakeholderID)->exec();
+
$this->loadModel('user')->updateUserView($programID, 'program', array($account));
/* Update children user view. */
@@ -518,9 +519,9 @@ class program extends control
if(!empty($childPRJList)) $this->user->updateUserView($childPRJList, 'project', array($account));
if(!empty($childProducts)) $this->user->updateUserView($childProducts, 'product', array($account));
- die(js::reload('parent'));
- }
- }
+ die(js::reload('parent'));
+ }
+ }
/**
* Export program.
@@ -801,6 +802,7 @@ class program extends control
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst');
+ $this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->programs = array('' => '') + $this->program->getPRJPairsByTemplate($model, $programID);
$this->view->programID = $programID;
$this->view->model = $model;
@@ -851,6 +853,7 @@ class program extends control
$this->view->position[] = $this->lang->program->PRJEdit;
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst', $project->PM);
+ $this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->project = $project;
$this->view->parents = $parents;
$this->view->groups = $this->loadModel('group')->getPairs();
diff --git a/module/program/css/common.css b/module/program/css/common.css
index 1e82eab804..e69de29bb2 100644
--- a/module/program/css/common.css
+++ b/module/program/css/common.css
@@ -1 +0,0 @@
-#whitelistBox .checkbox-inline, #whitelistBox .radio-inline { margin-left: 10px; display: inline-block; padding-left: 0px; padding-right: 10px; }
diff --git a/module/program/js/common.js b/module/program/js/common.js
index 0d6bc3c7da..dd40c69c0a 100644
--- a/module/program/js/common.js
+++ b/module/program/js/common.js
@@ -1,8 +1,3 @@
-function setWhite(acl)
-{
- acl == 'custom' ? $('#whitelistBox').removeClass('hidden') : $('#whitelistBox').addClass('hidden');
-}
-
function setProgramType(type)
{
$.cookie('programType', type, {expires:config.cookieLife, path:config.webRoot});
diff --git a/module/program/js/createstakeholder.js b/module/program/js/createstakeholder.js
index f182d40e58..309281d08d 100644
--- a/module/program/js/createstakeholder.js
+++ b/module/program/js/createstakeholder.js
@@ -1,3 +1,9 @@
+/**
+ * Users by department.
+ *
+ * @param object obj
+ * @return void
+ */
function setDeptUsers(obj)
{
dept = $(obj).val();//Get dept ID.
@@ -5,6 +11,12 @@ function setDeptUsers(obj)
location.href=link;
}
+/**
+ * Add an item.
+ *
+ * @param object obj
+ * @return void
+ */
function addItem(obj)
{
var item = $('#addItem').html();
@@ -13,6 +25,12 @@ function addItem(obj)
$accounts.chosen();
}
+/**
+ * Delete an item.
+ *
+ * @param object obj
+ * @return void
+ */
function deleteItem(obj)
{
$(obj).closest('tr').remove();
diff --git a/module/program/model.php b/module/program/model.php
index 891e8851d7..5682d9bc3a 100644
--- a/module/program/model.php
+++ b/module/program/model.php
@@ -239,17 +239,14 @@ class programModel extends model
{
$program = fixer::input('post')
->setDefault('status', 'wait')
- ->add('type', 'program')
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
->setDefault('openedBy', $this->app->user->account)
->setDefault('end', '')
->setDefault('parent', 0)
->setDefault('openedDate', helper::now())
- ->setDefault('team', substr($this->post->name, 0, 30))
+ ->add('type', 'program')
->join('whitelist', ',')
->cleanInt('budget')
->stripTags($this->config->program->editor->pgmcreate['id'], $this->config->allowedTags)
- ->remove('workDays, delta, branch, uid')
->get();
if($program->parent)
@@ -278,16 +275,15 @@ class programModel extends model
->check('code', 'unique', "deleted='0'")
->exec();
- /* Add the creater to the team. */
if(!dao::isError())
{
$programID = $this->dao->lastInsertId();
- $today = helper::today();
+ $this->dao->update(TABLE_PROGRAM)->set('`order`')->eq($programID * 5)->where('id')->eq($programID)->exec(); // Save order.
+
+ $this->updateUserACL($this->post->whitelist, 'program', $programID);
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');
-
$this->setTreePath($programID);
/* Add program admin.*/
@@ -333,8 +329,6 @@ class programModel extends model
->setDefault('end', '')
->setIF($this->post->begin == '0000-00-00', 'begin', '')
->setIF($this->post->end == '0000-00-00', 'end', '')
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
- ->setIF($this->post->acl == 'custom' and !isset($_POST['whitelist']), 'whitelist', '')
->join('whitelist', ',')
->stripTags($this->config->program->editor->pgmedit['id'], $this->config->allowedTags)
->remove('uid')
@@ -379,6 +373,7 @@ class programModel extends model
if(!dao::isError())
{
$this->file->updateObjectID($this->post->uid, $programID, 'project');
+ $this->updateUserACL($this->post->whitelist, 'program', $programID);
if($program->acl != 'open') $this->loadModel('user')->updateUserView($programID, 'program');
if($oldProgram->parent != $program->parent) $this->processNode($programID, $program->parent, $oldProgram->path, $oldProgram->grade);
@@ -1062,14 +1057,13 @@ class programModel extends model
{
$project = fixer::input('post')
->setDefault('status', 'wait')
- ->add('type', 'project')
->setIF($this->post->longTime == 1, 'end', '')
->setIF($this->post->longTime == 1, 'days', 0)
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
->setDefault('openedBy', $this->app->user->account)
->setDefault('end', '')
->setDefault('openedDate', helper::now())
->setDefault('team', substr($this->post->name, 0, 30))
+ ->add('type', 'project')
->join('whitelist', ',')
->cleanInt('budget')
->stripTags($this->config->program->editor->prjcreate['id'], $this->config->allowedTags)
@@ -1106,7 +1100,7 @@ class programModel extends model
if(!dao::isError())
{
$projectID = $this->dao->lastInsertId();
- $today = helper::today();
+ $this->updateUserACL($this->post->whitelist, 'project', $projectID);
if($project->acl != 'open') $this->loadModel('user')->updateUserView($projectID, 'project');
/* Save order. */
@@ -1162,8 +1156,6 @@ class programModel extends model
->remove('longTime')
->get();
- if(!isset($project->whitelist) or $project->acl != 'custom') $project->whitelist = '';
-
if($project->parent)
{
$parentProgram = $this->dao->select('*')->from(TABLE_PROGRAM)->where('id')->eq($project->parent)->fetch();
@@ -1199,6 +1191,7 @@ class programModel extends model
if(!dao::isError())
{
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
+ $this->updateUserACL($this->post->whitelist, 'project', $projectID);
if($project->acl != 'open') $this->loadModel('user')->updateUserView($projectID, 'project');
if($oldProject->parent != $project->parent) $this->processNode($projectID, $project->parent, $oldProject->path, $oldProject->grade);
@@ -1380,4 +1373,34 @@ class programModel extends model
}
}
}
+
+ /**
+ * Adding users to access control lists.
+ *
+ * @param array $users
+ * @param string $objectType program|project|product|sprint
+ * @param int $objectID
+ * @param string $type whitelist|blacklist
+ * @param string $source upgrade|add
+ * @param string $desc
+ * @access public
+ * @return void
+ */
+ public function updateUserACL($users = array(), $objectType = '', $objectID = 0, $type = 'whitelist', $source = 'add', $desc = '')
+ {
+ if(empty($users)) return false;
+ $this->dao->delete()->from(TABLE_ACL)->where('objectID')->eq($objectID)->exec();
+ foreach($users as $account)
+ {
+ if(empty($account)) continue;
+ $acl = new stdClass();
+ $acl->account = $account;
+ $acl->objectType = $objectType;
+ $acl->objectID = $objectID;
+ $acl->type = $type;
+ $acl->source = $source;
+ $acl->desc = $desc;
+ $this->dao->insert(TABLE_ACL)->data($acl)->autoCheck()->exec();
+ }
+ }
}
diff --git a/module/program/view/pgmbrowse.html.php b/module/program/view/pgmbrowse.html.php
index 6d7e3c3828..fcbddc1b37 100644
--- a/module/program/view/pgmbrowse.html.php
+++ b/module/program/view/pgmbrowse.html.php
@@ -34,7 +34,10 @@
- program->noPGM;?> " . $lang->program->PGMCreate, '', "class='btn btn-info'");?>
+
+ program->noPGM;?>
+ " . $lang->program->PGMCreate, '', "class='btn btn-info'");?>
+
diff --git a/module/program/view/pgmcreate.html.php b/module/program/view/pgmcreate.html.php
index d72c6cf5d1..b9c8f38d70 100644
--- a/module/program/view/pgmcreate.html.php
+++ b/module/program/view/pgmcreate.html.php
@@ -103,9 +103,11 @@
project->acl;?> |
program->PGMAclList, 'open', '', 'block'));?> |
|
-
- | project->whitelist;?> |
- |
+
+ | whitelist;?> |
+ |
+ |
+ |
|
diff --git a/module/program/view/pgmedit.html.php b/module/program/view/pgmedit.html.php
index 3c5ac7dc02..cf1d8a6442 100644
--- a/module/program/view/pgmedit.html.php
+++ b/module/program/view/pgmedit.html.php
@@ -73,6 +73,12 @@
| project->acl;?> |
acl, "onclick='setWhite(this.value);'", 'block'));?> |
+
+ | whitelist;?> |
+ whitelist, 'class="form-control chosen" multiple');?> |
+ |
+ |
+
|
diff --git a/module/program/view/prjcreate.html.php b/module/program/view/prjcreate.html.php
index 4d7dcfc9cb..5cc62a90ff 100644
--- a/module/program/view/prjcreate.html.php
+++ b/module/program/view/prjcreate.html.php
@@ -119,6 +119,12 @@
| project->acl;?> |
program->PRJAclList, $acl, '', 'block'));?> |
+
+ | whitelist;?> |
+ |
+ |
+ |
+
|
|
| project->acl;?> |
- acl, "onclick='setWhite(this.value);'", 'block'));?> |
+ acl, '', 'block'));?> |
+
+
+ | whitelist;?> |
+ whitelist, 'class="form-control chosen" multiple');?> |
+ |
+ |
|
diff --git a/module/project/control.php b/module/project/control.php
index b0eee75d1d..bf34c89f91 100644
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -1177,6 +1177,7 @@ class project extends control
$this->view->whitelist = $whitelist;
$this->view->copyProjectID = $copyProjectID;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products));
+ $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noclosed');
$this->display();
}
@@ -1286,6 +1287,7 @@ class project extends control
$this->view->pmUsers = $pmUsers;
$this->view->qdUsers = $qdUsers;
$this->view->rdUsers = $rdUsers;
+ $this->view->users = $this->user->getPairs('nodeleted|noclosed');
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = $allProducts;
$this->view->linkedProducts = $linkedProducts;
diff --git a/module/project/model.php b/module/project/model.php
index 6988566517..6d5e6376b0 100644
--- a/module/project/model.php
+++ b/module/project/model.php
@@ -320,9 +320,8 @@ class projectModel extends model
->setDefault('openedDate', helper::now())
->setDefault('openedVersion', $this->config->version)
->setDefault('team', substr($this->post->name,0, 30))
- ->add('type', $sprintType)
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
->join('whitelist', ',')
+ ->add('type', $sprintType)
->stripTags($this->config->project->editor->create['id'], $this->config->allowedTags)
->remove('products, workDays, delta, branch, uid, plans')
->get();
@@ -394,6 +393,7 @@ class projectModel extends model
$lib->acl = 'default';
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
+ $this->loadModel('program')->updateUserACL($this->post->whitelist, 'sprint', $projectID);
if($sprint->acl != 'open') $this->updateUserView($projectID);
if(!dao::isError()) $this->loadModel('score')->create('program', 'createguide', $projectID);
@@ -418,8 +418,6 @@ class projectModel extends model
$project = fixer::input('post')
->setIF($this->post->begin == '0000-00-00', 'begin', '')
->setIF($this->post->end == '0000-00-00', 'end', '')
- ->setIF($this->post->acl != 'custom', 'whitelist', '')
- ->setIF($this->post->acl == 'custom' and !isset($_POST['whitelist']), 'whitelist', '')
->setDefault('team', $this->post->name)
->join('whitelist', ',')
->stripTags($this->config->project->editor->edit['id'], $this->config->allowedTags)
@@ -460,6 +458,8 @@ class projectModel extends model
}
}
+ $this->loadModel('program')->updateUserACL($this->post->whitelist, 'sprint', $projectID);
+
/* Fix bug#3074, Update views for team members. */
if($project->acl != 'open') $this->updateUserView($projectID, 'sprint', $changedAccounts);
@@ -729,6 +729,7 @@ class projectModel extends model
/* Order by status's content whether or not done */
$projects = $this->dao->select('*, IF(INSTR(" done,closed", status) < 2, 0, 1) AS isDone')->from(TABLE_PROJECT)
->where('deleted')->eq(0)
+ ->andWhere('grade')->eq(1)
->beginIF($programID)->andWhere('project')->eq($programID)->fi()
->beginIF(strpos($mode, 'withdelete') === false)->andWhere('deleted')->eq(0)->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
@@ -2011,7 +2012,6 @@ class projectModel extends model
$changedAccounts = array_merge($changedAccounts, array_diff($oldAccounts, $accounts));
$changedAccounts = array_unique($changedAccounts);
-
if($projectType == 'project')
{
$childSprints = $this->dao->select('id')->from(TABLE_PROJECT)->where('project')->eq($project->id)->andWhere('type')->in('stage,sprint')->andWhere('deleted')->eq('0')->fetchPairs();
diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php
index 5b37dceafd..7fa068e9ed 100644
--- a/module/project/view/create.html.php
+++ b/module/project/view/create.html.php
@@ -149,6 +149,12 @@
| project->acl;?> |
project->aclList, $acl, '', 'block'));?> |
+
+ | whitelist;?> |
+ |
+ |
+ |
+
|
diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php
index 70dca9710f..adbbd66fc9 100644
--- a/module/project/view/edit.html.php
+++ b/module/project/view/edit.html.php
@@ -150,9 +150,10 @@
| project->acl;?> |
project->aclList, $project->acl, "onclick='setWhite(this.value);'", 'block'));?> |
- acl != 'custom') echo "class='hidden'";?>>
- | project->whitelist;?> |
- whitelist, '', '', 'inline');?> |
+
+ | whitelist;?> |
+ whitelist, 'class="form-control chosen" multiple');?> |
+ |
|