Merge branch 'master' into 'sprint/32_zhouxin_fixbugs'
# Conflicts: # module/project/config.php
This commit is contained in:
@@ -125,14 +125,19 @@ $config->project->datatable->fieldList['actions']['width'] = '180';
|
||||
$config->project->datatable->fieldList['actions']['required'] = 'yes';
|
||||
$config->project->datatable->fieldList['actions']['pri'] = '1';
|
||||
|
||||
$config->project->removePriv['project'] = array('index', 'browse', 'kanban', 'create', 'batchEdit', 'qa', 'updateOrder', 'createGuide', 'programTitle');
|
||||
$config->project->removePriv['bug'] = array('batchChangePlan');
|
||||
$config->project->removePriv['doc'] = array('catalog', 'index');
|
||||
$config->project->removePriv['auditplan'] = array('delete');
|
||||
|
||||
$config->project->checkList = new stdclass();
|
||||
$config->project->checkList->scrum = array('bug', 'execution', 'build', 'doc', 'release', 'testtask', 'case');
|
||||
$config->project->checkList->waterfall = array('execution', 'design', 'doc', 'bug', 'case', 'build', 'release', 'testtask');
|
||||
$config->project->maxCheckList = new stdclass();
|
||||
$config->project->maxCheckList->scrum = array('bug', 'execution', 'build', 'doc', 'release', 'testtask', 'case', 'issue', 'risk');
|
||||
$config->project->maxCheckList->waterfall = array('execution', 'design', 'doc', 'bug', 'case', 'build', 'release', 'testtask', 'review', 'build', 'researchplan', 'issue', 'risk', 'opportunity', 'auditplan', 'gapanalysis', 'meeting');
|
||||
|
||||
$config->project->removePriv['project'] = array('index', 'browse', 'kanban', 'create', 'batchEdit', 'qa', 'updateOrder', 'createGuide', 'programTitle', 'export');
|
||||
$config->project->removePriv['bug'] = array('browse', 'batchChangePlan', 'batchCreate', 'batchEdit', 'batchConfirm', 'batchResolve', 'batchClose', 'batchActivate', 'report', 'batchChangeModule', 'batchChangeBranch');
|
||||
$config->project->removePriv['testcase'] = array('browse', 'batchChangeModule', 'batchChangeBranch');
|
||||
$config->project->removePriv['testtask'] = array('browse', 'view', 'start', 'activate', 'block', 'close');
|
||||
$config->project->removePriv['doc'] = array('catalog', 'index');
|
||||
$config->project->removePriv['repo'] = array('edit', 'delete', 'maintain', 'setRules');
|
||||
$config->project->removePriv['testreport'] = array('browse');
|
||||
$config->project->removePriv['auditplan'] = array('delete');
|
||||
if(!isset($config->maxVersion)) $config->project->removePriv['stakeholder'] = array('issue', 'viewIssue', 'userIssue');
|
||||
@@ -808,7 +808,7 @@ class project extends control
|
||||
|
||||
/* Append id for secend sort. */
|
||||
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
|
||||
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
||||
$sort = common::appendOrder($orderBy);
|
||||
|
||||
/* Set the pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
@@ -925,7 +925,7 @@ class project extends control
|
||||
/* Load pager and get bugs, user. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
||||
$sort = common::appendOrder($orderBy);
|
||||
$bugs = $this->bug->getProjectBugs($projectID, $productID, $build, $type, $param, $sort, '', $pager);
|
||||
$users = $this->user->getPairs('noletter');
|
||||
|
||||
@@ -1321,6 +1321,7 @@ class project extends control
|
||||
$users = $this->user->getPairs('noclosed|nodeleted|devfirst|nofeedback');
|
||||
$roles = $this->user->getUserRoles(array_keys($users));
|
||||
$deptUsers = $dept === '' ? array() : $this->dept->getDeptUserPairs($dept);
|
||||
$userInfos = $this->user->getUserDisplayInfos(array_keys($users), $dept);
|
||||
|
||||
$currentMembers = $this->project->getTeamMembers($projectID);
|
||||
$members2Import = $this->project->getMembers2Import($copyProjectID, array_keys($currentMembers));
|
||||
@@ -1331,6 +1332,7 @@ class project extends control
|
||||
$this->view->project = $project;
|
||||
$this->view->users = $users;
|
||||
$this->view->deptUsers = $deptUsers;
|
||||
$this->view->userInfos = $userInfos;
|
||||
$this->view->roles = $roles;
|
||||
$this->view->dept = $dept;
|
||||
$this->view->depts = array('' => '') + $this->dept->getOptionMenu();
|
||||
|
||||
@@ -36,7 +36,7 @@ function saveMembers()
|
||||
$('#submit').removeClass('hidden');
|
||||
if(result) $('#removeExecution').val('yes');
|
||||
$('#submit').click();
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,9 +50,7 @@ function saveMembers()
|
||||
*/
|
||||
function setRole(account, roleID)
|
||||
{
|
||||
role = roles[account]; // get role according the account.
|
||||
roleOBJ = $(document.getElementById('roles[' + roleID + ']')); // get role object.
|
||||
roleOBJ.val(role) // set the role.
|
||||
$('#roles\\[' + roleID + '\\]').val(roles[account]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,11 +63,11 @@ function setRole(account, roleID)
|
||||
function addItem(obj)
|
||||
{
|
||||
var item = $('#addItem').html().replace(/%i%/g, i);
|
||||
$(obj).closest('tr').after('<tr class="addedItem">' + item + '</tr>');
|
||||
var accounts = $(obj).closest('tr').next('tr').find('select:first');
|
||||
accounts.trigger('liszt:updated');
|
||||
accounts.chosen();
|
||||
i ++;
|
||||
var $tr = $('<tr class="addedItem">' + item + '</tr>').insertAfter($(obj).closest('tr'));
|
||||
$tr.find('select:first')
|
||||
.trigger('liszt:updated')
|
||||
.picker({type: 'user'});
|
||||
i++;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -772,7 +772,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')
|
||||
->remove('products,branch,plans,delta,newProduct,productName,future,contactListMenu')
|
||||
->get();
|
||||
|
||||
$linkedProductsCount = 0;
|
||||
@@ -874,9 +874,24 @@ class projectModel extends model
|
||||
|
||||
/* Create doc lib. */
|
||||
$this->app->loadLang('doc');
|
||||
$authorizedUsers = array();
|
||||
|
||||
$authorizedUsers = $project->whitelist . ',' . $project->PM . ',' . $project->openedBy . ',';
|
||||
$authorizedUsers = array_unique(explode(',', trim($authorizedUsers, ',')));
|
||||
if($project->parent and $project->acl == 'program')
|
||||
{
|
||||
$stakeHolders = $this->loadModel('stakeholder')->getStakeHolderPairs($project->parent);
|
||||
foreach($stakeHolders as $stakeHolder) $authorizedUsers[$stakeHolder] = $stakeHolder;
|
||||
|
||||
foreach(explode(',', $project->whitelist) as $white)
|
||||
{
|
||||
if(empty($white)) continue;
|
||||
$authorizedUsers[$white] = $white;
|
||||
}
|
||||
|
||||
$authorizedUsers[$project->PM] = $project->PM;
|
||||
$authorizedUsers[$project->openedBy] = $project->openedBy;
|
||||
$authorizedUsers[$program->PM] = $program->PM;
|
||||
$authorizedUsers[$program->openedBy] = $program->openedBy;
|
||||
}
|
||||
|
||||
$lib = new stdclass();
|
||||
$lib->project = $projectID;
|
||||
@@ -884,7 +899,7 @@ class projectModel extends model
|
||||
$lib->type = 'project';
|
||||
$lib->main = '1';
|
||||
$lib->acl = $project->acl != 'program' ? $project->acl : 'custom';
|
||||
if($project->acl == 'private') $lib->users = ',' . implode(',', $authorizedUsers) . ',';
|
||||
$lib->users = ',' . implode(',', array_filter($authorizedUsers)) . ',';
|
||||
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
|
||||
|
||||
$this->updateProducts($projectID);
|
||||
@@ -985,7 +1000,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')
|
||||
->remove('products,branch,plans,delta,future,contactListMenu')
|
||||
->get();
|
||||
|
||||
if($project->parent)
|
||||
@@ -2079,8 +2094,8 @@ class projectModel extends model
|
||||
$this->lang->switcherMenu = $this->getSwitcher($objectID, $this->app->rawModule, $this->app->rawMethod);
|
||||
|
||||
/* Reset project priv. */
|
||||
$moduleName = $this->app->getModuleName();
|
||||
$methodName = $this->app->getMethodName();
|
||||
$moduleName = $this->app->rawModule;
|
||||
$methodName = $this->app->rawMethod;
|
||||
|
||||
$this->loadModel('common')->resetProjectPriv($objectID);
|
||||
if(!$this->common->isOpenMethod($moduleName, $methodName) and !commonModel::hasPriv($moduleName, $methodName)) $this->common->deny($moduleName, $methodName, false);
|
||||
|
||||
@@ -159,9 +159,12 @@
|
||||
</tr>
|
||||
<tr class="hidden" id="whitelistBox">
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td><?php echo html::select('whitelist[]', $users, '', 'class="form-control chosen" multiple');?></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td colspan='2'>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('whitelist[]', $users, '', 'class="form-control chosen" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName='whitelist'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->auth;?></th>
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
<script>
|
||||
$('.createButton').on('click', function()
|
||||
{
|
||||
$('#guideDialog').modal('hide');
|
||||
window.location.reload();
|
||||
$.closeModal();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -176,9 +176,12 @@
|
||||
</tr>
|
||||
<tr class="<?php if($project->acl == 'open') echo 'hidden';?>" id="whitelistBox">
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td><?php echo html::select('whitelist[]', $users, $project->whitelist, 'class="form-control chosen" multiple');?></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('whitelist[]', $users, $project->whitelist, 'class="form-control chosen" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName='whitelist'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->auth;?></th>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<?php js::set('projectID', $project->id);?>
|
||||
<?php js::set('roles', $roles);?>
|
||||
<?php js::set('deptID', $dept);?>
|
||||
<?php js::set('pickerUsers', $userInfos);?>
|
||||
<?php js::set('copyProjectID', $copyProjectID);?>
|
||||
<?php js::set('oldAccountList', array_keys($currentMembers));?>
|
||||
<?php js::set('unlinkExecutionMembers', $lang->project->unlinkExecutionMembers);?>
|
||||
@@ -75,7 +76,7 @@
|
||||
<?php foreach($members2Import as $member2Import):?>
|
||||
<?php if(!isset($users[$member2Import->account])) continue;?>
|
||||
<tr class='addedItem'>
|
||||
<td><?php echo html::select("accounts[$i]", $users, $member2Import->account, "class='form-control chosen' onchange='setRole(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("accounts[$i]", $users, $member2Import->account, "class='form-control user-picker' onchange='setRole(this.value, $i)'");?></td>
|
||||
<td><?php echo html::input("roles[$i]", $member2Import->role, "class='form-control'");?></td>
|
||||
<td><?php echo html::input("days[$i]", $project->days, "class='form-control'");?></td>
|
||||
<td><?php echo html::input("hours[$i]", $member2Import->hours, "class='form-control'");?></td>
|
||||
@@ -91,7 +92,7 @@
|
||||
|
||||
<?php for($j = 0; $j < 5; $j ++):?>
|
||||
<tr class='addedItem'>
|
||||
<td><?php echo html::select("accounts[$i]", $users, '', "class='form-control chosen' onchange='setRole(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("accounts[$i]", $users, '', "class='form-control user-picker' onchange='setRole(this.value, $i)'");?></td>
|
||||
<td><?php echo html::input("roles[$i]", '', "class='form-control'");?></td>
|
||||
<td><?php echo html::input("days[$i]", $project->days, "class='form-control'");?></td>
|
||||
<td><?php echo html::input("hours[$i]", $config->execution->defaultWorkhours, "class='form-control'");?></td>
|
||||
|
||||
Reference in New Issue
Block a user