* Code for task #7235.
This commit is contained in:
@@ -4,6 +4,7 @@ ADD `category` char(30) NOT NULL AFTER `template`,
|
||||
ADD `program` mediumint(8) NOT NULL DEFAULT '0' AFTER `category`,
|
||||
ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `program`,
|
||||
ADD `budgetUnit` char(30) NOT NULL DEFAULT 'yuan' AFTER `budget`,
|
||||
ADD `privway` char(30) NOT NULL AFTER `parent`,
|
||||
ADD `realStarted` date NOT NULL AFTER `end`,
|
||||
ADD `realFinished` date NOT NULL AFTER `realStarted`;
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ class group extends control
|
||||
$this->group->updateView($groupID);
|
||||
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
|
||||
}
|
||||
|
||||
$group = $this->group->getById($groupID);
|
||||
@@ -142,6 +142,7 @@ class group extends control
|
||||
$this->view->position[] = $this->lang->group->manageView;
|
||||
|
||||
$this->view->group = $group;
|
||||
$this->view->programs = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('program')->eq(0)->andWhere('template')->ne('')->orderBy('order_desc')->fetchPairs('id', 'name');
|
||||
$this->view->products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name');
|
||||
$this->view->projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name');
|
||||
|
||||
|
||||
@@ -27,10 +27,12 @@ $lang->group->successSaved = 'Saved.';
|
||||
$lang->group->errorNotSaved = 'Failed. Please select actions and groups.';
|
||||
$lang->group->program = 'Manage Programs';
|
||||
$lang->group->viewList = 'Access Sight';
|
||||
$lang->group->programList = 'Access Program';
|
||||
$lang->group->productList = 'Access Product';
|
||||
$lang->group->projectList = 'Access Project';
|
||||
$lang->group->dynamic = 'Access Dynamics';
|
||||
$lang->group->noticeVisit = 'Blank means no access limit.';
|
||||
$lang->group->noneProgram = "No Program";
|
||||
$lang->group->noneProduct = "No {$lang->productCommon}";
|
||||
$lang->group->noneProject = "No {$lang->projectCommon}";
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ $lang->moduleOrder[0] = 'index';
|
||||
$lang->moduleOrder[5] = 'my';
|
||||
$lang->moduleOrder[10] = 'todo';
|
||||
|
||||
$lang->moduleOrder[11] = 'program';
|
||||
$lang->moduleOrder[15] = 'product';
|
||||
$lang->moduleOrder[20] = 'story';
|
||||
$lang->moduleOrder[25] = 'productplan';
|
||||
@@ -139,6 +140,37 @@ $lang->todo->methodOrder[65] = 'activate';
|
||||
$lang->todo->methodOrder[70] = 'close';
|
||||
$lang->todo->methodOrder[75] = 'batchClose';
|
||||
|
||||
/* Program. */
|
||||
$lang->resource->program = new stdclass();
|
||||
$lang->resource->program->index = 'index';
|
||||
$lang->resource->program->transfer = 'transfer';
|
||||
//$lang->resource->program->createGuide = 'createGuide';
|
||||
$lang->resource->program->setPlanduration = 'setPlanduration';
|
||||
$lang->resource->program->manageMembers = 'manageMembers';
|
||||
$lang->resource->program->export = 'export';
|
||||
$lang->resource->program->create = 'create';
|
||||
$lang->resource->program->edit = 'edit';
|
||||
$lang->resource->program->start = 'start';
|
||||
$lang->resource->program->finish = 'finish';
|
||||
$lang->resource->program->delete = 'delete';
|
||||
$lang->resource->program->suspend = 'suspend';
|
||||
$lang->resource->program->activate = 'activate';
|
||||
$lang->resource->program->close = 'close';
|
||||
|
||||
$lang->program->methodOrder[5] = 'index';
|
||||
$lang->program->methodOrder[10] = 'transfer';
|
||||
$lang->program->methodOrder[15] = 'setPlanduration';
|
||||
$lang->program->methodOrder[20] = 'manageMembers';
|
||||
$lang->program->methodOrder[25] = 'export';
|
||||
$lang->program->methodOrder[30] = 'create';
|
||||
$lang->program->methodOrder[35] = 'edit';
|
||||
$lang->program->methodOrder[40] = 'start';
|
||||
$lang->program->methodOrder[45] = 'finish';
|
||||
$lang->program->methodOrder[50] = 'delete';
|
||||
$lang->program->methodOrder[55] = 'suspend';
|
||||
$lang->program->methodOrder[60] = 'activate';
|
||||
$lang->program->methodOrder[65] = 'close';
|
||||
|
||||
/* Product. */
|
||||
$lang->resource->product = new stdclass();
|
||||
$lang->resource->product->index = 'index';
|
||||
|
||||
@@ -27,10 +27,12 @@ $lang->group->successSaved = '成功保存';
|
||||
$lang->group->errorNotSaved = '没有保存,请确认选择了权限数据。';
|
||||
$lang->group->program = '可管理项目';
|
||||
$lang->group->viewList = '可访问视图';
|
||||
$lang->group->programList = '可访问项目';
|
||||
$lang->group->productList = '可访问' . $lang->productCommon;
|
||||
$lang->group->projectList = '可访问' . $lang->projectCommon;
|
||||
$lang->group->dynamic = '可查看动态';
|
||||
$lang->group->noticeVisit = '空代表没有访问限制';
|
||||
$lang->group->noneProgram = "暂时没有项目";
|
||||
$lang->group->noneProduct = "暂时没有{$lang->productCommon}";
|
||||
$lang->group->noneProject = "暂时没有{$lang->projectCommon}";
|
||||
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
<td title='<?php echo $group->desc?>'><?php echo $group->desc;?></td>
|
||||
<td title='<?php echo $users;?>'><?php echo $users;?></td>
|
||||
<td class='c-actions'>
|
||||
<?php if($group->role != 'prgadmin'):?>
|
||||
<?php if($group->role != 'pgmadmin'):?>
|
||||
<?php $lang->group->managepriv = $lang->group->managePrivByGroup;?>
|
||||
<?php common::printIcon('group', 'manageView', "groupID=$group->id", $group, 'list', 'eye');?>
|
||||
<?php common::printIcon('group', 'manageView', "groupID=$group->id", $group, 'list', 'eye', '', 'iframe', true);?>
|
||||
<?php common::printIcon('group', 'managepriv', "type=byGroup¶m=$group->id", $group, 'list', 'lock');?>
|
||||
<?php $lang->group->managemember = $lang->group->manageMember;?>
|
||||
<?php common::printIcon('group', 'managemember', "groupID=$group->id", $group, 'list', 'persons', '', 'iframe', 'yes', "data-width='90%'");?>
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<?php echo html::select("program[$account][]", $programs, $program, "class='form-control chosen' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
<td class='pv-10px'>
|
||||
<td class='w-100px'>
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="manageViewForm" method="post" target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<!--tr>
|
||||
<th class='text-bottom thWidth'><?php echo $lang->group->viewList;?></th>
|
||||
<td class='text-bottom'>
|
||||
<?php foreach($lang->menu as $menuKey => $menu):?>
|
||||
@@ -46,21 +46,21 @@
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='productBox' style='display:none'>
|
||||
<th class='text-right'><?php echo $lang->group->productList?></th>
|
||||
</tr-->
|
||||
<tr id='productBox'>
|
||||
<th class='text-right'><?php echo $lang->group->programList?></th>
|
||||
<td>
|
||||
<?php if($products):?>
|
||||
<?php if($programs):?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("actions[products][]", $products, isset($group->acl['products']) ? join(',', $group->acl['products']) : '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select("actions[programs][]", $programs, isset($group->acl['programs']) ? join(',', $group->acl['programs']) : '', "class='form-control chosen' multiple")?>
|
||||
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php echo $lang->group->noneProduct;?>
|
||||
<?php echo $lang->group->noneProgram;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='projectBox' style='display:none'>
|
||||
<!--tr id='projectBox' style='display:none'>
|
||||
<th class='text-right'><?php echo $lang->group->projectList?></th>
|
||||
<td>
|
||||
<?php if($products):?>
|
||||
@@ -123,7 +123,7 @@
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tr-->
|
||||
<tr>
|
||||
<td colspan='2' class='form-actions text-center'>
|
||||
<?php echo html::submitButton();?>
|
||||
|
||||
@@ -53,14 +53,14 @@
|
||||
<?php $active = empty($menu) ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a(inlink('managePriv', sprintf($params, '')), "<span class='text'>{$lang->group->all}</span>", '', "class='btn btn-link $active'")?>
|
||||
|
||||
<?php foreach($lang->menu as $module => $title):?>
|
||||
<?php if(!is_string($title)) continue;?>
|
||||
<?php $active = $menu == $module ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a(inlink('managePriv', sprintf($params, $module)), "<span class='text'>" . substr($title, 0, strpos($title, '|')) . '</span>', '', "class='btn btn-link $active'")?>
|
||||
<?php endforeach;?>
|
||||
<?php //foreach($lang->menu as $module => $title):?>
|
||||
<?php //if(!is_string($title)) continue;?>
|
||||
<?php //$active = $menu == $module ? 'btn-active-text' : '';?>
|
||||
<?php //echo html::a(inlink('managePriv', sprintf($params, $module)), "<span class='text'>" . substr($title, 0, strpos($title, '|')) . '</span>', '', "class='btn btn-link $active'")?>
|
||||
<?php //endforeach;?>
|
||||
|
||||
<?php $active = $menu == 'other' ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a(inlink('managePriv', sprintf($params, 'other')), "<span class='text'>{$lang->group->other}</span>", '', "class='btn btn-link $active'");?>
|
||||
<?php //$active = $menu == 'other' ? 'btn-active-text' : '';?>
|
||||
<?php //echo html::a(inlink('managePriv', sprintf($params, 'other')), "<span class='text'>{$lang->group->other}</span>", '', "class='btn btn-link $active'");?>
|
||||
|
||||
<div class='input-control space w-150px'>
|
||||
<?php echo html::select('version', $this->lang->group->versions, $version, "onchange=showPriv(this.value) class='form-control chosen'");?>
|
||||
|
||||
@@ -13,6 +13,5 @@ $config->program->list = new stdclass();
|
||||
$config->program->list->exportFields = 'id,name,code,type,category,status,begin,end,budget,PM,end,desc';
|
||||
|
||||
$config->program->priv = new stdclass();
|
||||
$config->program->priv->scrum = array('product', 'story', 'productplan', 'release', 'project', 'task', 'build', 'qa', 'bug', 'testcase', 'testsuite', 'testreport', 'caselib', 'doc', 'report', 'repo', 'svn', 'git', 'search', 'tree', 'file', 'jenkins', 'job', 'ci', 'branch');
|
||||
$config->program->priv->scrum = array('program', 'product', 'story', 'productplan', 'release', 'project', 'task', 'build', 'qa', 'bug', 'testcase', 'testsuite', 'testreport', 'caselib', 'doc', 'report', 'repo', 'svn', 'git', 'search', 'tree', 'file', 'jenkins', 'job', 'ci', 'branch');
|
||||
$config->program->priv->cmmi = $config->program->priv->scrum + array('workestimation', 'durationestimation', 'budget', 'programplan', 'review', 'reviewissue', 'weekly', 'milestone', 'design', 'issue', 'risk', 'auditplan', 'nc', 'cm', 'pssp');
|
||||
//$config->program->commonMethod = array('index', 'my', 'todo', 'company', 'dept', 'group', 'user', 'admin', 'extension', 'custom', 'action', 'mail', 'api', 'misc', 'backup', 'cron', 'dev', 'message', 'webhook');
|
||||
|
||||
@@ -104,6 +104,7 @@ class program extends control
|
||||
$team = '';
|
||||
$whitelist = '';
|
||||
$acl = 'open';
|
||||
$privway = 'extend';
|
||||
if($copyProgramID)
|
||||
{
|
||||
$copyProgram = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($copyProgramID)->fetch();
|
||||
@@ -111,6 +112,7 @@ class program extends control
|
||||
$code = $copyProgram->code;
|
||||
$team = $copyProgram->team;
|
||||
$acl = $copyProgram->acl;
|
||||
$privway = $copyProgram->privway;
|
||||
$whitelist = $copyProgram->whitelist;
|
||||
}
|
||||
|
||||
@@ -124,6 +126,7 @@ class program extends control
|
||||
$this->view->code = $code;
|
||||
$this->view->team = $team;
|
||||
$this->view->acl = $acl;
|
||||
$this->view->privway = $privway;
|
||||
$this->view->whitelist = $whitelist;
|
||||
$this->view->copyProgramID = $copyProgramID;
|
||||
$this->display();
|
||||
|
||||
@@ -39,6 +39,7 @@ $lang->program->manageMembers = '维护团队';
|
||||
$lang->program->transfer = '进入项目';
|
||||
$lang->program->setPlanduration = '设置工期';
|
||||
$lang->program->export = '导出';
|
||||
$lang->program->privway = '权限控制';
|
||||
|
||||
$lang->program->manageGroupMember = '维护分组用户';
|
||||
$lang->program->durationEstimation = '工作量估算';
|
||||
@@ -64,6 +65,9 @@ $lang->program->aclList['open'] = "默认设置(有项目视图权限,即
|
||||
$lang->program->aclList['private'] = "私有项目(只有项目团队成员才能访问)";
|
||||
$lang->program->aclList['custom'] = "自定义白名单(团队成员和白名单的成员可以访问)";
|
||||
|
||||
$lang->program->privwayList['extend'] = '继承(取项目权限与组织权限的并集)';
|
||||
$lang->program->privwayList['reset'] = '重新定义(只取项目权限)';
|
||||
|
||||
$lang->program->chooseProgramType = '选择项目管理方式';
|
||||
$lang->program->nextStep = '下一步';
|
||||
$lang->program->hoursUnit = '%s工时';
|
||||
|
||||
@@ -113,6 +113,10 @@
|
||||
<?php echo html::textarea('desc', '', "rows='6' class='form-control kindeditor' hidefocus='true'");?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->program->privway;?></th>
|
||||
<td colspan='3'><?php echo html::radio('privway', $lang->program->privwayList, $privway, '', 'block');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->acl;?></th>
|
||||
<td colspan='3'><?php echo nl2br(html::radio('acl', $lang->program->aclList, $acl, "onclick='setWhite(this.value);'", 'block'));?></td>
|
||||
|
||||
Reference in New Issue
Block a user