Merge branch 'master' into 'sprint/179_sunhao/kanban_ui'

# Conflicts:
#   module/kanban/js/view.js
This commit is contained in:
孙广明
2021-12-23 06:54:14 +00:00
34 changed files with 263 additions and 139 deletions
+27 -12
View File
@@ -405,22 +405,37 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
$lang->action->dynamicAction->kanban['create'] = 'Create Kanban';
$lang->action->dynamicAction->kanban['edited'] = 'Kanban Settings';
$lang->action->dynamicAction->kanban['created'] = 'Create Kanban';
$lang->action->dynamicAction->kanban['edited'] = 'Kanban Settings';
$lang->action->dynamicAction->kanban['closed'] = 'Close Kanban';
$lang->action->dynamicAction->kanban['deleted'] = 'Delete Kanban';
$lang->action->dynamicAction->kanbanspace['create'] = 'Create Space';
$lang->action->dynamicAction->kanbanspace['edited'] = 'Space Settings';
$lang->action->dynamicAction->kanbanspace['closed'] = 'Close Kanban';
$lang->action->dynamicAction->kanbanspace['created'] = 'Create Space';
$lang->action->dynamicAction->kanbanspace['edited'] = 'Space Settings';
$lang->action->dynamicAction->kanbanspace['closed'] = 'Close Space';
$lang->action->dynamicAction->kanbanspace['deleted'] = 'Deleted Space';
$lang->action->dynamicAction->kanbancolumn['create'] = 'Create Column';
$lang->action->dynamicAction->kanbancolumn['edited'] = 'Column Settings';
$lang->action->dynamicAction->kanbanregion['created'] = 'Create Region';
$lang->action->dynamicAction->kanbanregion['edited'] = 'Edit Region';
$lang->action->dynamicAction->kanbanregion['deleted'] = 'Delete Region';
$lang->action->dynamicAction->kanbanlane['created'] = 'Create Swimlane';
$lang->action->dynamicAction->kanbanlane['edited'] = 'Swimlane Settings';
$lang->action->dynamicAction->kanbanlane['moved'] = 'Move Swimlane';
$lang->action->dynamicAction->kanbancolumn['created'] = 'Create Column';
$lang->action->dynamicAction->kanbancolumn['edited'] = 'Column Settings';
$lang->action->dynamicAction->kanbancolumn['archived'] = 'Archive Column';
$lang->action->dynamicAction->kanbancolumn['restore'] = 'Restore Column';
$lang->action->dynamicAction->kanbancolumn['deleted'] = 'Delete Column';
$lang->action->dynamicAction->kanbancard['create'] = 'Create Card';
$lang->action->dynamicAction->kanbancard['edited'] = 'Edit card';
$lang->action->dynamicAction->kanbanlane['created'] = 'Create Lane';
$lang->action->dynamicAction->kanbanlane['edited'] = 'Lane Settings';
$lang->action->dynamicAction->kanbanlane['moved'] = 'Move Lane';
$lang->action->dynamicAction->kanbanlane['deleted'] = 'Delete Lane';
$lang->action->dynamicAction->kanbancard['created'] = 'Create Card';
$lang->action->dynamicAction->kanbancard['edited'] = 'Edit Card';
$lang->action->dynamicAction->kanbancard['commented'] = 'Comment Card';
$lang->action->dynamicAction->kanbancard['archived'] = 'Archive Card';
$lang->action->dynamicAction->kanbancard['restore'] = 'Restore Card';
$lang->action->dynamicAction->kanbancard['deleted'] = 'Delete Card';
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
+27 -12
View File
@@ -405,22 +405,37 @@ $lang->action->dynamicAction->execution['undeleted'] = '还原' . $lang->executi
$lang->action->dynamicAction->execution['hidden'] = '隐藏' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = '导入任务';
$lang->action->dynamicAction->kanban['create'] = '创建看板';
$lang->action->dynamicAction->kanban['edited'] = '设置看板';
$lang->action->dynamicAction->kanban['created'] = '创建看板';
$lang->action->dynamicAction->kanban['edited'] = '设置看板';
$lang->action->dynamicAction->kanban['closed'] = '关闭看板';
$lang->action->dynamicAction->kanban['deleted'] = '删除看板';
$lang->action->dynamicAction->kanbanspace['create'] = '创建看板空间';
$lang->action->dynamicAction->kanbanspace['edited'] = '设置看板空间';
$lang->action->dynamicAction->kanbanspace['closed'] = '关闭看板空间';
$lang->action->dynamicAction->kanbanspace['created'] = '创建看板空间';
$lang->action->dynamicAction->kanbanspace['edited'] = '设置看板空间';
$lang->action->dynamicAction->kanbanspace['closed'] = '关闭看板空间';
$lang->action->dynamicAction->kanbanspace['deleted'] = '删除看板空间';
$lang->action->dynamicAction->kanbancolumn['create'] = '创建看板列';
$lang->action->dynamicAction->kanbancolumn['edited'] = '设置看板列';
$lang->action->dynamicAction->kanbanregion['created'] = '创建看板区域';
$lang->action->dynamicAction->kanbanregion['edited'] = '编辑看板区域';
$lang->action->dynamicAction->kanbanregion['deleted'] = '删除看板区域';
$lang->action->dynamicAction->kanbanlane['created'] = '创建泳道';
$lang->action->dynamicAction->kanbanlane['edited'] = '设置泳道';
$lang->action->dynamicAction->kanbanlane['moved'] = '移动泳道';
$lang->action->dynamicAction->kanbancolumn['created'] = '创建看板列';
$lang->action->dynamicAction->kanbancolumn['edited'] = '设置看板列';
$lang->action->dynamicAction->kanbancolumn['archived'] = '归档看板列';
$lang->action->dynamicAction->kanbancolumn['restore'] = '还原看板列';
$lang->action->dynamicAction->kanbancolumn['deleted'] = '删除看板列';
$lang->action->dynamicAction->kanbancard['create'] = '创建看板卡片';
$lang->action->dynamicAction->kanbancard['edited'] = '编辑看板卡片';
$lang->action->dynamicAction->kanbanlane['created'] = '创建泳道';
$lang->action->dynamicAction->kanbanlane['edited'] = '设置泳道';
$lang->action->dynamicAction->kanbanlane['moved'] = '移动泳道';
$lang->action->dynamicAction->kanbanlane['deleted'] = '删除泳道';
$lang->action->dynamicAction->kanbancard['created'] = '创建看板卡片';
$lang->action->dynamicAction->kanbancard['edited'] = '编辑看板卡片';
$lang->action->dynamicAction->kanbancard['commented'] = '备注看板卡片';
$lang->action->dynamicAction->kanbancard['archived'] = '归档看板卡片';
$lang->action->dynamicAction->kanbancard['restore'] = '还原看板卡片';
$lang->action->dynamicAction->kanbancard['deleted'] = '删除看板卡片';
$lang->action->dynamicAction->team['managedTeam'] = '维护团队';
+1 -1
View File
@@ -73,7 +73,7 @@
}
elseif($action->objectType == 'kanbancard')
{
echo html::a($this->createLink('kanban', 'viewCard', "id=$action->objectID", '', true), $action->objectName, '', "title={$action->objectName} class='iframe'");
echo html::a($this->createLink('kanban', 'viewCard', "id=$action->objectID", '', true), $action->objectName, '', "title={$action->objectName} class='iframe' data-width=80%");
}
else
{
+2 -2
View File
@@ -11,7 +11,7 @@
.main-col .doc-title {display: flex; font-size: 16px; margin-bottom: 15px;}
.main-col .doc-title .title {margin: 0; line-height: 30px; font-size: 25px;}
.main-col .doc-title .http-method {line-height: 27px; height: 27px; font-size: 13px; margin-right: 10px; padding: 0 10px;}
.main-col .doc-title .path { line-height: 30px; font-size: 20px; margin-right: 15px;width:60%;word-wrap: break-word; }
.main-col .doc-title .path {line-height: 30px; font-size: 20px; margin-right: 15px; word-wrap: break-word;}
.main-col .doc-title .info {flex: 1 1 0;}
.main-col .doc-title .version a {font-size: 13px; color: #8c8c8c;}
.main-col .doc-title .version .dropdown-menu a:hover {color: #ffffff;}
@@ -107,7 +107,7 @@
padding-right: 10px;
}
.detail .list-group-item {list-style: none; font-size: 14px; margin-bottom: 10px; line-height: 30px}
.detail .list-group-item span {line-height: 30px; width: 50px;}
.detail .list-group-item span {line-height: 30px; width: 65px;}
.detail .list-group-item .label+.label {margin-left: -4px;}
.detail .list-group-item .label {border-radius: 0;}
-1
View File
@@ -81,7 +81,6 @@
<div class="heading <?php echo $api->method;?>">
<a href="<?php echo helper::createLink('api', 'index', "libID={$api->lib}&moduleID=0&apiID={$api->id}&version=0&release=$release");?>">
<span class="label label-primary"><?php echo $api->method;?></span>
<span class="label label-warning" style="width: 60px"><?php echo apiModel::getApiStatusText($api->status);?></span>
<span class="path"><?php echo $api->path;?></span>
<span class="desc"><?php echo $api->title;?></span>
</a>
+14
View File
@@ -325,4 +325,18 @@ class branch extends control
return $this->send(array('message' => $this->lang->saveSuccess, 'result' => 'success'));
}
/**
* AJAX: Get target branches for merge branch.
*
* @param int $productID
* @param string $mergedBranches
* @access public
* @return string
*/
public function ajaxGetTargetBranches($productID, $mergedBranches = '')
{
$branchPairs = $this->branch->getPairs($productID, 'active', 0, $mergedBranches);
return print(html::select('targetBranch', $branchPairs, '', "class='form-control chosen'"));
}
}
+1
View File
@@ -9,3 +9,4 @@ td.flex .label-primary {min-width: 40px;}
td.flex .setDefault {min-width: 120px;}
#mergeBranch .form-actions {padding-top: 20px;}
.modal-body {padding-top: 0;}
+72 -20
View File
@@ -65,8 +65,8 @@ $(function()
{
$('#targetBranch').attr('disabled', true).trigger('chosen:updated');
var newBranchName = '<tr><th>' + branchLang.name + "</th><td class='required'><input type='text' name='name' id='name' class='form-control' /></td></tr>";
var newBranchDesc = '<tr><th>' + branchLang.desc + "</th><td><input type='text' name='desc' id='desc' class='form-control' /></td></tr>";
var newBranchName = '<tr><th>' + branchLang.name + "</th><td class='required' colspan='7'><input type='text' name='name' id='name' class='form-control' /></td></tr>";
var newBranchDesc = '<tr><th>' + branchLang.desc + "</th><td colspan='7'><input type='text' name='desc' id='desc' class='form-control' /></td></tr>";
$(this).closest('tr').after(newBranchName + newBranchDesc);
}
else
@@ -78,35 +78,87 @@ $(function()
}
});
$('#saveButton').on('click', function()
$("#merge").click(function()
{
var mergedBranchIDList = [];
var mergedBranchName = '';
$("input:checkbox[name^='branchIDList']:checked").each(function()
{
mergedBranchIDList.push($(this).val());
mergedBranchName += ',' + $(this).closest('tr').find('.branchName').attr('title');
});
mergedBranchName = mergedBranchName.substr(1);
mergedBranchIDList = mergedBranchIDList.join(',');
$.get(createLink('branch', 'ajaxGetTargetBranches', "productID=" + productID + "&mergedBranches=" + mergedBranchIDList), function(data)
{
$('#targetBranch').replaceWith(data);
$('#targetBranch_chosen').remove();
$('#targetBranch').chosen();
if($('#createBranch').prop('checked')) $('#targetBranch').attr('disabled', true).trigger('chosen:updated')
})
})
$('#saveButton').on('click', function()
{
var mergedBranchIDList = [];
var mergedBranchName = '';
var targetBranchName = $('#targetBranch_chosen').find('span').text();
$("input:checkbox[name^='branchIDList']:checked").each(function()
{
mergedBranchIDList.push($(this).val());
mergedBranchName += ',' + $(this).closest('tr').find('.branchName').attr('title');
});
mergedBranchName = mergedBranchName.substr(1);
targetBranchName = $('#createBranch').prop('checked') ? $('#name').val() : targetBranchName;
var confirmMergeMessage = branchLang.confirmMerge.replace(/(.*)mergedBranch(.*)targetBranch(.*)/, "$1" + mergedBranchName + "$2" + targetBranchName + "$3");
var isChecked = $('#createBranch').attr('checked') ? 1 : 0;
var postData = {'name' : $('#name').val(), 'desc' : $('#desc').val(), 'createBranch' : isChecked, 'mergedBranchIDList' : mergedBranchIDList, 'targetBranch' : $('#targetBranch').val()};
$.ajax(
if(isChecked && $('#name').val() == '')
{
url: createLink('branch', 'mergeBranch', 'productID=' + productID),
dataType: 'json',
method: 'post',
data: postData,
success: function(data)
alert(branchLang.nameNotEmpty);
return false;
}
var branchNames = Object.values(branchPairs);
if(isChecked && branchNames.includes($('#name').val()) !== -1)
{
alert(branchLang.existName);
return false;
}
if(confirm(confirmMergeMessage))
{
var postData = {'name' : $('#name').val(), 'desc' : $('#desc').val(), 'createBranch' : isChecked, 'mergedBranchIDList' : mergedBranchIDList, 'targetBranch' : $('#targetBranch').val()};
$.ajax(
{
if(data.result == 'fail')
url: createLink('branch', 'mergeBranch', 'productID=' + productID),
dataType: 'json',
method: 'post',
data: postData,
success: function(data)
{
alert(data.message.name)
return false;
if(data.result == 'fail')
{
alert(data.message.name)
return false;
}
else
{
$('#mergeBranch').modal('hide');
window.location.reload();
}
}
else
{
$('#mergeBranch').modal('hide');
window.location.reload();
}
}
})
})
}
else
{
window.location.reload();
}
});
})
+5 -3
View File
@@ -22,7 +22,7 @@ $lang->branch->batchEdit = 'Batch Edit';
$lang->branch->defaultBranch = 'Default Branch';
$lang->branch->setDefault = 'Set Default';
$lang->branch->setDefaultAction = 'Set Default';
$lang->branch->mergeTo = 'Merge branch to';
$lang->branch->mergeTo = 'Merge to';
$lang->branch->mergeBranch = 'Merge branch';
$lang->branch->mergeBranchAction = 'Merge branch';
@@ -45,8 +45,10 @@ $lang->branch->nameNotEmpty = 'Name must not be empty!';
$lang->branch->confirmClose = 'Do you want to close this @branch@?';
$lang->branch->confirmActivate = 'Do you want to activate this @branch@?';
$lang->branch->existName = '@branch@ name already exists.';
$lang->branch->mergeTips = '(Trunk does not support being merged. After the branch is merged, the corresponding releases, plans, modules, requirements, bugs, and cases under the branch will be merged into the new branch)';
$lang->branch->targetBranchTips = 'Note: You can merge it into an existing branch, merge it into the trunk, or create a new branch.';
$lang->branch->mergedMain = 'Trunk does not support being merged.';
$lang->branch->mergeTips = 'After the branch is merged, the corresponding releases, plans, modules, requirements, bugs, and cases under the branch will be merged into the new branch';
$lang->branch->targetBranchTips = 'You can merge it into an existing branch, merge it into the trunk, or create a new branch.';
$lang->branch->confirmMerge = 'The data of "mergedBranch" will be merged into "targetBranch", please confirm whether you want to perform the branch merge operation, the data will not be restored after the merge!';
$lang->branch->noData = 'No branches.';
$lang->branch->mainBranch = 'The default main %s of the product.';
+4 -2
View File
@@ -45,8 +45,10 @@ $lang->branch->nameNotEmpty = '名称不能为空!';
$lang->branch->confirmClose = '是否关闭该@branch@?';
$lang->branch->confirmActivate = '是否激活该@branch@?';
$lang->branch->existName = '@branch@名称已存在';
$lang->branch->mergeTips = '(主干不支持被合并,合并@branch@后,会将@branch@下面对应的发布、计划、模块、需求、Bug、用例都合并到新的@branch@下)';
$lang->branch->targetBranchTips = '注:您可以将其合并到已有的一个@branch@,也可以合并到主干,也可以新创建一个@branch@。';
$lang->branch->mergedMain = '主干不支持被合并。';
$lang->branch->mergeTips = '合并@branch@后,会将@branch@下面对应的发布、计划、模块、需求、Bug、用例都合并到新的@branch@下';
$lang->branch->targetBranchTips = '您可以将其合并到已有的一个@branch@,也可以合并到主干,也可以新创建一个@branch@。';
$lang->branch->confirmMerge = '"mergedBranch"的数据将被合并到"targetBranch",请确认是否要执行分支合并操作,合并后数据将不可再恢复!';
$lang->branch->noData = '暂时没有分支。';
$lang->branch->mainBranch = '产品默认主干%s。';
+6 -5
View File
@@ -96,10 +96,11 @@ class branchModel extends model
* @param int $productID
* @param string $params
* @param int $executionID
* @param string $mergedBranches
* @access public
* @return array
*/
public function getPairs($productID, $params = '', $executionID = 0)
public function getPairs($productID, $params = '', $executionID = 0, $mergedBranches = '')
{
$executionBranches = array();
if($executionID)
@@ -116,6 +117,7 @@ class branchModel extends model
->beginIF($productID)->andWhere('product')->eq($productID)->fi()
->beginIF($productID and $executionID)->andWhere('id')->in(array_keys($executionBranches))->fi()
->beginIF(strpos($params, 'active') !== false)->andWhere('status')->eq('active')->fi()
->beginIF(!empty($mergedBranches))->andWhere('id')->notIN($mergedBranches)->fi()
->orderBy('`order`')
->fetchPairs('id', 'name');
foreach($branches as $branchID => $branchName) $branches[$branchID] = htmlspecialchars_decode($branchName);
@@ -598,10 +600,10 @@ class branchModel extends model
/**
* Merge multiple branches into one branch.
*
* @param int $productID
* @param string $mergedBranches
* @param int $productID
* @param string $mergedBranches
* @access public
* @return int
* @return int|bool
*/
public function mergeBranch($productID, $mergedBranches)
{
@@ -609,7 +611,6 @@ class branchModel extends model
/* Get the target branch. */
$targetBranch = $data->createBranch ? $this->create($productID, true) : $data->targetBranch;
if(!$targetBranch and $targetBranch != BRANCH_MAIN) return false;
if($data->createBranch) $this->loadModel('action')->create('branch', $targetBranch, 'Opened');
/* Branch. */
+15 -11
View File
@@ -15,6 +15,7 @@
<?php js::set('orderBy', $orderBy)?>
<?php js::set('branchLang', $lang->branch);?>
<?php js::set('productID', $productID);?>
<?php js::set('branchPairs', $branchPairs);?>
<?php $canCreate = common::hasPriv('branch', 'create');?>
<?php $canOrder = common::hasPriv('branch', 'sort');?>
<?php $canBatchEdit = common::hasPriv('branch', 'batchEdit');?>
@@ -78,7 +79,7 @@
<?php echo $isMain ? '' : '<i class="icon icon-move"></i>';?>
</td>
<?php endif;?>
<td class='c-name flex' title='<?php echo $branch->name;?>'>
<td class='c-name flex branchName' title='<?php echo $branch->name;?>'>
<span class="text-ellipsis"><?php echo $branch->name;?>&nbsp;</span>
<?php
if($branch->default)
@@ -126,7 +127,7 @@
<?php
$batchEditLink = $this->createLink('branch', 'batchEdit', "productID=$productID");
echo html::submitButton($lang->edit, "data-form-action='$batchEditLink'", 'btn');
if($browseType != 'closed') echo html::a('#mergeBranch', $lang->branch->merge, '', "data-toggle='modal' class='btn'");
if(($browseType != 'closed' and common::hasPriv('branch', 'mergeBranch'))) echo html::a('#mergeBranch', $lang->branch->merge, '', "data-toggle='modal' class='btn' id='merge'");
?>
</div>
<?php endif;?>
@@ -143,14 +144,22 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icon icon-close"></i></button>
<span class="modal-title"><?php echo $lang->branch->mergeBranch;?></span>
<small> <?php echo $lang->branch->mergeTips;?></small>
</div>
<div class="modal-body">
<form method='post' enctype='multipart/form-data' class="form-ajax">
<table class='table table-form'>
<tr>
<th class='thWidth'><?php echo $lang->branch->mergeTo;?></th>
<td>
<td colspan="8">
<div class="alert alert-info no-margin">
<p><?php echo $lang->branch->mergedMain;?></p>
<p><?php echo $lang->branch->mergeTips;?></p>
<p><?php echo $lang->branch->targetBranchTips;?></p>
</div>
</td>
</tr>
<tr>
<th><?php echo $lang->branch->mergeTo;?></th>
<td colspan="7">
<div class="input-group">
<?php echo html::select('targetBranch', $branchPairs, '', "class='form-control chosen'");?>
<span class='input-group-addon'>
@@ -158,15 +167,10 @@
</span>
</div>
</td>
<td></td>
</tr>
<tr>
<td colspan="3"><span><?php echo $lang->branch->targetBranchTips;?></span></td>
</tr>
<tr>
<td colspan='3' class='text-center form-actions'>
<td colspan='8' class='text-center form-actions'>
<?php echo html::commonButton($lang->save, "id='saveButton'", 'btn btn-primary btn-wide');?>
<?php echo html::linkButton($lang->goback, $this->createLink('branch', 'manage', "productID=$productID"), 'self', '', 'btn btn-wide');?>
</td>
</tr>
</table>
+1 -1
View File
@@ -235,7 +235,7 @@ class buildModel extends model
$releases = $this->dao->select('build, name')->from(TABLE_RELEASE)
->where('build')->in(array_keys($builds))
->andWhere('product')->in($products)
->beginIF($branch !== 'all')->andWhere('branch')->in("$branch")->fi()
->beginIF($branch !== 'all')->andWhere('branch')->in("0,$branch")->fi()
->andWhere('deleted')->eq(0)
->fetchPairs();
foreach($releases as $buildID => $releaseName)
+1 -7
View File
@@ -454,13 +454,7 @@ if(!window.kanbanDropRules)
story:
{
backlog: ['ready'],
ready: ['backlog', 'doing'],
'doing': ['developed'],
'developed': ['doing', 'testing'],
'testing': ['tested'],
'tested': ['verified'],
'verified': ['released'],
'released': false,
ready: ['backlog'],
},
bug:
{
+2 -2
View File
@@ -76,7 +76,7 @@
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th><?php common::printOrderLink('name', $orderBy, $vars, (($from == 'execution') and ($config->systemMode == 'new')) ? $lang->execution->execName : $lang->execution->name);?></th>
<?php if($config->systemMode == 'new'):?>
<?php if($config->systemMode == 'new' and $this->app->tab == 'execution'):?>
<th class='c-begin'><?php common::printOrderLink('projectName', $orderBy, $vars, $lang->execution->project);?></th></th>
<?php endif;?>
<th class='c-pm'><?php common::printOrderLink('PM', $orderBy, $vars, $lang->execution->owner);?></th>
@@ -129,7 +129,7 @@
<a class="plan-toggle" data-id="<?php echo $execution->id;?>"><i class="icon icon-angle-double-right"></i></a>
<?php endif;?>
</td>
<?php if($config->systemMode == 'new'):?>
<?php if($config->systemMode == 'new' and $this->app->tab == 'execution'):?>
<td class='c-begin' title='<?php echo $execution->projectName;?>'>
<span class="status-execution status-<?php echo $execution->projectName?>"><?php echo $execution->projectName;?></span>
</td>
+2 -2
View File
@@ -289,7 +289,7 @@ body {margin-bottom: 25px;}
}
}?>
<?php else:?>
<?php foreach($customFields as $field) $this->task->printCell($field, $task, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table');?>
<?php foreach($customFields as $field) $this->task->printCell($field, $task, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', false, $showBranch);?>
<?php endif;?>
</tr>
<?php if(!empty($task->children)):?>
@@ -306,7 +306,7 @@ body {margin-bottom: 25px;}
$this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true);
}?>
<?php else:?>
<?php foreach($customFields as $field) $this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true);?>
<?php foreach($customFields as $field) $this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true, $showBranch);?>
<?php endif;?>
</tr>
<?php $i ++;?>
+2
View File
@@ -663,6 +663,7 @@ $lang->resource->kanban->laneMove = 'laneMove';
$lang->resource->kanban->cardsSort = 'cardsSort';
$lang->resource->kanban->viewArchivedColumn = 'viewArchivedColumn';
$lang->resource->kanban->viewArchivedCard = 'viewArchivedCard';
$lang->resource->kanban->restoreCard = 'restoreCard';
$lang->kanban->methodOrder[5] = 'space';
$lang->kanban->methodOrder[10] = 'createSpace';
@@ -706,6 +707,7 @@ $lang->kanban->methodorder[190] = 'cardsSort';
$lang->kanban->methodOrder[195] = 'viewArchivedColumn';
$lang->kanban->methodorder[200] = 'viewArchivedCard';
$lang->kanban->methodorder[205] = 'archiveColumn';
$lang->kanban->methodorder[210] = 'restoreCard';
/* Execution. */
$lang->resource->execution = new stdclass();
+1 -1
View File
@@ -101,4 +101,4 @@ $config->kanban->taskColumnStatusList['closed'] = 'closed';
$config->kanban->laneColorList = array('#7ec5ff', '#333', '#2b529c', '#e48600', '#d2323d', '#229f24', '#777', '#d2691e', '#008b8b', '#2e8b57', '#4169e1', '#4b0082', '#fa8072', '#ba55d3', '#6b8e23');
$config->kanban->columnColorList = array('#333', '#2b519c', '#e48610', '#d2313d', '#2a9f23', '#777', '#d2691e', '#2e8b8b', '#2f8b58', '#4168e0', '#4b0082', '#f58072', '#ba55d3', '#6a8e22');
$config->kanban->cardColorList = array('#fff', '#d2323d', '#f7b501', '#278427');
$config->kanban->cardColorList = array('#fff', '#b10b0b', '#cfa227', '#2a5f29');
+8 -5
View File
@@ -797,7 +797,7 @@ class kanban extends control
{
$card = $this->kanban->getCardByID($cardID);
$column = $this->dao->select('*')->from(TABLE_KANBANCOLUMN)->where('id')->eq($card->column)->fetch();
if($column->archived) die(js::alert(sprintf($this->lang->kanbancard->confirmRestoreTip, $column->name)));
if($column->archived or $column->deleted) die(js::alert(sprintf($this->lang->kanbancard->confirmRestoreTip, $column->name)));
die(js::confirm(sprintf($this->lang->kanbancard->confirmRestore, $column->name), $this->createLink('kanban', 'restoreCard', "cardID=$cardID&confirm=yes"), ''));
}
@@ -1069,15 +1069,18 @@ class kanban extends control
public function ajaxGetKanbanMenu($kanbanID, $moduleName, $methodName)
{
$kanbanIdList = $this->kanban->getCanViewObjects();
$spacePairs = $this->kanban->getSpacePairs('all');
$this->view->kanbanList = $this->dao->select('*')->from(TABLE_KANBAN)
->where('deleted')->eq('0')
->andWhere('id')->in($kanbanIdList)
->andWhere('space')->in(array_keys($spacePairs))
->fetchGroup('space');
$this->view->kanbanID = $kanbanID;
$this->view->spaceList = $this->kanban->getSpacePairs('all');
$this->view->module = $moduleName;
$this->view->method = $methodName;
$this->view->kanbanID = $kanbanID;
$this->view->spaceList = $spacePairs;
$this->view->module = $moduleName;
$this->view->method = $methodName;
$this->display();
}
}
+2 -2
View File
@@ -1,2 +1,2 @@
#nameBox .required:after {right: 130px; z-index: 2;}
#nameBox .br-0 {height: 32px;}
.pri-selector .br-0 {padding-bottom: 5px;}
.required:after {left: 215px; z-index: 2;}
+3 -3
View File
@@ -43,7 +43,7 @@
.region .kanban-lane {position: relative; border-bottom: none!important; min-height: 200px !important}
.region .kanban-lane > .kanban-lane-name > .text {margin: auto 0; max-height: 100px;}
.region .kanban-lane > .kanban-lane-name > .text {margin: auto 0; max-height: 150px; overflow: hidden; text-overflow: ellipsis}
.region .kanban-lane > .kanban-lane-name > .actions {position: absolute; top: 0; left: 0; right: 0; opacity: 0;}
.region .kanban-lane > .kanban-lane-name > .actions > a {display: block; width: 20px; height: 20px; line-height: 20px; text-align: center; opacity: .7; color: #fff;}
.region .kanban-lane > .kanban-lane-name > .actions > a:hover {background-color: rgba(0,0,0,.2); opacity: 1;}
@@ -60,8 +60,8 @@
.region .kanban-item > .kanban-card > .title:hover {color: #2272eb}
.region .kanban-item > .kanban-card > .info {margin-top: 5px; position: relative;}
.region .kanban-item > .kanban-card > .info > .pri {height: 14px; border-width: 1px; font-size: 12px; line-height: 12px; min-width: 14px; padding: 0 1px;}
.region .kanban-item > .kanban-card > .info > .estimate{margin-left: 10px; color: #999; background-color: rgb(255, 255, 255); padding: 3px 0px}
.region .kanban-item > .kanban-card > .info > .time {margin-left: 10px; font-size: 12px; background: rgb(242, 242, 242)}
.region .kanban-item > .kanban-card > .info > .estimate{margin-left: 4px; color: #999; background-color: rgb(255, 255, 255); padding: 3px 0px}
.region .kanban-item > .kanban-card > .info > .time {margin-left: 4px; font-size: 12px; background: rgb(242, 242, 242)}
.region .kanban-item > .kanban-card > .info > .user {position: absolute; right: 0; top: -2px}
.region .kanban-item > .kanban-card > .info > .user > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 0px; margin-left: 2px}
.region .kanban-item > .kanban-card > .info > .user > span {display: inline-block; color: transparent; width: 2px; height: 2px; background-color: #8990a2; position: sticky; border-radius: 50%; top: 3px; margin: 0 7px;}
+6 -6
View File
@@ -213,7 +213,7 @@ function renderUsersAvatar(users, itemID, size)
if(users.length == 0 || (users.length == 1 && users[0] == ''))
{
return $('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + noAssigned + '" style="background: #ccc" href="' + link + '"><i class="icon icon-person"></i></a>');
return $('<div class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + noAssigned + '" style="background: #ccc"><i class="icon icon-person"></i></div>');
}
var assignees = [];
@@ -309,15 +309,15 @@ function renderKanbanItem(item, $item)
var needRemind = (begin.toLocaleDateString() == today.toLocaleDateString() || end.toLocaleDateString() == today.toLocaleDateString());
if(item.end == '0000-00-00' && item.begin != '0000-00-00')
{
$time.text($.zui.formatDate(begin, 'MM-dd') + ' ' + kanbancardLang.beginAB).attr('title', $.zui.formatDate(begin, 'yyyy-MM-dd') + ' ' +kanbancardLang.beginAB).show();
$time.text($.zui.formatDate(begin, 'MM/dd') + ' ' + kanbancardLang.beginAB).attr('title', $.zui.formatDate(begin, 'yyyy/MM/dd') + ' ' +kanbancardLang.beginAB).show();
}
else if(item.begin == '0000-00-00' && item.end != '0000-00-00')
{
$time.text($.zui.formatDate(end, 'MM-dd') + ' ' + kanbancardLang.deadlineAB).attr('title', $.zui.formatDate(end, 'yyyy-MM-dd') + ' ' + kanbancardLang.deadlineAB).show();
$time.text($.zui.formatDate(end, 'MM/dd') + ' ' + kanbancardLang.deadlineAB).attr('title', $.zui.formatDate(end, 'yyyy/MM/dd') + ' ' + kanbancardLang.deadlineAB).show();
}
else if(item.begin != '0000-00-00' && item.end != '0000-00-00')
{
$time.text($.zui.formatDate(begin, 'MM-dd') + ' ' + kanbancardLang.to + ' ' + $.zui.formatDate(end, 'MM-dd')).attr('title', $.zui.formatDate(begin, 'yyyy-MM-dd') + ' ' + kanbancardLang.to + ' ' + $.zui.formatDate(end, 'yyyy-MM-dd')).show();
$time.text($.zui.formatDate(begin, 'MM/dd') + ' ' + kanbancardLang.to + ' ' + $.zui.formatDate(end, 'MM/dd')).attr('title', $.zui.formatDate(begin, 'yyyy/MM/dd') + kanbancardLang.to + $.zui.formatDate(end, 'yyyy/MM/dd')).show();
}
if(!$item.hasClass('has-color') && needRemind) $time.css('background-color', 'rgba(210, 50, 61, 0.3)');
@@ -484,7 +484,7 @@ function openAddTaskForm($element)
*/
function resetLaneHeight()
{
var maxHeight = '360px';
var maxHeight = '500px';
if(laneCount < 2)
{
var windowHeight = $(window).height();
@@ -697,8 +697,8 @@ function createCardMenu(options)
}
for(let i = moveColumns.length-1 ; i >= 0 ; i -- )
{
if(moveColumns[i].id == card.column || $.inArray(moveColumns[i].id, parentColumns) >= 0) continue;
if(moveColumns[i].parent > 0) parentColumns.push(moveColumns[i].parent);
if(moveColumns[i].id == card.column || $.inArray(moveColumns[i].id, parentColumns) >= 0) continue;
moveCardItems.push({label: moveColumns[i].name, onClick: function(){moveCard(card.id, moveColumns[i].id, card.lane, card.kanban, card.region);}});
}
moveCardItems = moveCardItems.reverse();
+7 -5
View File
@@ -50,6 +50,7 @@ $lang->kanban->viewArchivedColumn = 'View archived column';
$lang->kanban->archivedColumn = 'Archived Column';
$lang->kanban->archivedCard = 'Archived Card';
$lang->kanban->restoreColumn = 'Restore Column';
$lang->kanban->restoreCard = 'Restore Card';
$lang->kanban->restore = 'Restore';
$lang->kanban->child = 'Child';
@@ -285,12 +286,13 @@ $lang->kanbancard->lblHour = 'h';
$lang->kanbancard->noAssigned = 'No Assigned';
$lang->kanbancard->deadlineAB = 'DL';
$lang->kanbancard->beginAB = 'Begin';
$lang->kanbancard->to = 'to';
$lang->kanbancard->to = '~';
$lang->kanbancard->archived = 'Archived';
$lang->kanbancard->confirmArchive = 'Are you sure to archive this card? After archiving the card, it will be hidden from the column and you can view it in the Region - Archived.';
$lang->kanbancard->confirmDelete = 'Are you sure to delete this card? After deleting the card, it will be deleted from the Kanban. You can only view it in the system recycle bin.';
$lang->kanbancard->confirmRestore = 'Are you sure you want to restore this card? After the card is restored, the card will be restored to the "%s" Kanban column.';
$lang->kanbancard->confirmRestoreTip = "The card's column has been archived, please restore '%s' column first.";
$lang->kanbancard->confirmRestoreTip = "The card's column has been archived or deleted, please restore '%s' column first.";
$lang->kanbancard->priList[1] = 1;
$lang->kanbancard->priList[2] = 2;
@@ -298,9 +300,9 @@ $lang->kanbancard->priList[3] = 3;
$lang->kanbancard->priList[4] = 4;
$lang->kanbancard->colorList['#fff'] = 'Default';
$lang->kanbancard->colorList['#d2323d'] = 'Blocking';
$lang->kanbancard->colorList['#f7b501'] = 'Warning';
$lang->kanbancard->colorList['#278427'] = 'Urgent';
$lang->kanbancard->colorList['#b10b0b'] = 'Blocking';
$lang->kanbancard->colorList['#cfa227'] = 'Warning';
$lang->kanbancard->colorList['#2a5f29'] = 'Urgent';
$lang->kanbancard->error = new stdClass();
$lang->kanbancard->error->recordMinus = 'Estimate cannot be negative!';
+9 -7
View File
@@ -6,11 +6,11 @@ $lang->kanban->editSpace = '设置空间';
$lang->kanban->closeSpace = '关闭空间';
$lang->kanban->deleteSpace = '删除空间';
$lang->kanban->sortSpace = '空间排序';
$lang->kanban->edit = '编辑看板';
$lang->kanban->edit = '看板设置';
$lang->kanban->view = '查看看板';
$lang->kanban->close = '关闭看板';
$lang->kanban->delete = '删除看板';
$lang->kanban->createRegion = '创建区域';
$lang->kanban->createRegion = '新增区域';
$lang->kanban->editRegion = '编辑区域';
$lang->kanban->sortRegion = '区域排序';
$lang->kanban->sortGroup = '泳道组排序';
@@ -50,6 +50,7 @@ $lang->kanban->viewArchivedColumn = '查看已归档列';
$lang->kanban->archivedColumn = '已归档的看板列';
$lang->kanban->archivedCard = '已归档的卡片';
$lang->kanban->restoreColumn = '还原看板列';
$lang->kanban->restoreCard = '还原卡片';
$lang->kanban->restore = '还原';
$lang->kanban->child = '子';
@@ -285,12 +286,13 @@ $lang->kanbancard->lblHour = 'h';
$lang->kanbancard->noAssigned = '未指派';
$lang->kanbancard->deadlineAB = '截止';
$lang->kanbancard->beginAB = '开始';
$lang->kanbancard->to = '至';
$lang->kanbancard->to = '~';
$lang->kanbancard->archived = '已归档';
$lang->kanbancard->confirmArchive = '您确认归档该卡片吗?归档卡片后,该卡片将从列中隐藏,您可以在区域-已归档中查看。';
$lang->kanbancard->confirmDelete = '您确认删除该卡片吗?删除卡片后,该卡片将从看板中删除,您只能通过系统回收站查看。';
$lang->kanbancard->confirmRestore = '您确定要还原该卡片吗?还原卡片后,该卡片将还原到“%s”看板列中。';
$lang->kanbancard->confirmRestoreTip = '该卡片所属的看板列已被归档,请先还原“%s”看板列。';
$lang->kanbancard->confirmRestoreTip = '该卡片所属的看板列已被归档或删除,请先还原“%s”看板列。';
$lang->kanbancard->priList[1] = 1;
$lang->kanbancard->priList[2] = 2;
@@ -298,9 +300,9 @@ $lang->kanbancard->priList[3] = 3;
$lang->kanbancard->priList[4] = 4;
$lang->kanbancard->colorList['#fff'] = '默认';
$lang->kanbancard->colorList['#d2323d'] = '阻塞';
$lang->kanbancard->colorList['#f7b501'] = '警告';
$lang->kanbancard->colorList['#278427'] = '加急';
$lang->kanbancard->colorList['#b10b0b'] = '阻塞';
$lang->kanbancard->colorList['#cfa227'] = '警告';
$lang->kanbancard->colorList['#2a5f29'] = '加急';
$lang->kanbancard->error = new stdClass();
$lang->kanbancard->error->recordMinus = '预计不能为负数!';
+14 -16
View File
@@ -594,7 +594,7 @@ class kanbanModel extends model
->orderBy('order')
->fetchGroup('group');
$actions = array('createColumn', 'editColumn', 'splitColumn', 'setWIP', 'archiveColumn', 'restoreColumn', 'deleteColumn', 'createCard', 'splitColumn');
$actions = array('createColumn', 'editColumn', 'setWIP', 'archiveColumn', 'restoreColumn', 'deleteColumn', 'createCard', 'splitColumn');
/* Group by parent. */
$parentColumnGroup = array();
@@ -609,7 +609,7 @@ class kanbanModel extends model
if($this->isClickable($column, $action)) $column->actions[] = $action;
}
if($column->parent and $column->parent != -1) continue;
if($column->parent > 0) continue;
$parentColumnGroup[$group][] = $column;
}
@@ -2136,7 +2136,6 @@ class kanbanModel extends model
$column = $this->dao->select('t1.*, t2.type as laneType')->from(TABLE_KANBANCOLUMN)->alias('t1')
->leftjoin(TABLE_KANBANLANE)->alias('t2')->on('t1.lane=t2.id')
->where('t1.id')->eq($columnID)
->andWhere('t1.deleted')->eq(0)
->fetch();
if($column->parent > 0) $column->parentName = $this->dao->findById($column->parent)->from(TABLE_KANBANCOLUMN)->fetch('name');
@@ -2164,7 +2163,7 @@ class kanbanModel extends model
/**
* Get columns by object id.
*
* @param string $objectType
* @param string $objectType parent|region|group
* @param int $objectID
* @param string $archived
* @param string $deleted
@@ -2259,14 +2258,14 @@ class kanbanModel extends model
/**
* Get cards by object id.
*
* @param string $objectType
* @param string $objectType kanban|region|group|lane|column
* @param int $objectID
* @param string $archived
* @param string $deleted
* @access public
* @return array
*/
public function getCardsByObject($objectType = '', $objectID = 0, $archived = 0, $deleted = 0)
public function getCardsByObject($objectType = '', $objectID = 0, $archived = 0, $deleted = '0')
{
return $this->dao->select('*')->from(TABLE_KANBANCARD)
->where(true)
@@ -2380,46 +2379,45 @@ class kanbanModel extends model
->beginIF($action == 'sortlane')->andWhere('`group`')->eq($object->group)->fi()
->fetch('count');
return $count > 1;
case 'createColumn' :
case 'copyColumn' :
case 'splitcolumn' :
if($object->parent) return false; // The current column is a child column.
$count = $this->dao->select('COUNT(id) AS count')->from(TABLE_KANBANCOLUMN)
->where('parent')->eq($object->id)
->andWhere('deleted')->eq('0')
//->andWhere('archived')->eq('0')
->andWhere('archived')->eq('0')
->fetch('count');
return $count == 0; // The column has child columns.
case 'restoreColumn' :
if($object->parent)
case 'restorecolumn' :
if($object->parent > 0)
{
$parent = $this->getColumnByID($object->parent);
if($parent->deleted == '1' || $parent->archived == '1') return false;
}
return $object->archived == '1';
case 'archivecolumn' :
//if($object->archived != '0') return false; // The column has been archived.
if($object->archived != '0') return false; // The column has been archived.
case 'deletecolumn' :
if($object->deleted != '0') return false;
if($object->parent)
if($object->parent > 0)
{
$childrenCount = $this->dao->select('COUNT(id) AS count')->from(TABLE_KANBANCOLUMN)
->where('parent')->eq($object->parent)
->andWhere('deleted')->eq('0')
//->andWhere('archived')->eq('0')
->andWhere('archived')->eq('0')
->fetch('count');
return $childrenCount > 2;
}
$count = $this->dao->select('COUNT(id) AS count')->from(TABLE_KANBANCOLUMN)
->where('region')->eq($object->region)
->andWhere('parent')->eq(0)
->andWhere('parent')->in('0,-1')
->andWhere('`group`')->eq($object->group)
->andWhere('deleted')->eq('0')
//->andWhere('archived')->eq('0')
->andWhere('archived')->eq('0')
->fetch('count');
return $count > 1;
@@ -93,7 +93,7 @@ foreach($kanbanList as $spaceID => $spaceKanbans)
}
elseif($kanban->status == 'closed')
{
$closedKanbansHtml .= '<li>' . html::a(sprintf($link, $kanban->id), $kanbanName, '', "class='$selected kanbanName' title='$kanbanName' data-key='" . zget($kanbansPinYin, $kanban->name, '') . "'") . '</li>';
$closedKanbansHtml .= '<li>' . html::a(sprintf($link, $kanban->id), $kanbanName, '', "class='$selected kanbanName' title='{$kanban->name}' data-key='" . zget($kanbansPinYin, $kanban->name, '') . "'") . '</li>';
if($selected == 'selected') $tabActive = 'closed';
}
-1
View File
@@ -50,7 +50,6 @@
</tr>
<tr>
<td colspan='2' class='form-actions text-center'>
<?php echo html::hidden('color', '#333');?>
<?php echo html::hidden('group', $column->group);?>
<?php echo html::hidden('parent', $column->parent > 0 ? $column->parent : 0);?>
<?php echo html::submitButton();?>
+2 -2
View File
@@ -89,7 +89,7 @@
if(common::hasPriv('kanban','delete'))
{
echo '<li>';
common::printLink('kanban', 'delete', "kanbanID={$kanban->id}", '<i class="icon icon-trash"></i> ' . $lang->kanban->delete, '', "class='iframe' data-width='75%'", '', true);
common::printLink('kanban', 'delete', "kanbanID={$kanban->id}", '<i class="icon icon-trash"></i> ' . $lang->kanban->delete, 'hiddenwin', '', '', true);
echo '</li>';
}
?>
@@ -141,7 +141,7 @@
<div class='kanbanAcl'>
<?php $icon = $kanban->acl == 'open' ? 'unlock' : 'lock';?>
<i class="<?php echo 'icon-' . $icon;?>"></i>
<?php echo zget($lang->kanban->aclGroup, $kanban->acl, '');?>
<?php echo zget($lang->kanban->aclGroup, $kanban->acl == 'open' ? 'open' : 'private', '');?>
</div>
</div>
</div>
+2 -2
View File
@@ -51,7 +51,7 @@ $canCreateLane = commonModel::hasPriv('kanban', 'createLane');
<span class="strong"><?php echo $region->name;?></span>
<label class="label label-region"><?php echo $this->lang->kanbanlane->common . ' ' . $region->laneCount;?></label>
<span><i class="icon icon-chevron-double-up" data-id="<?php echo $region->id;?>"></i></span>
<span>
<span class='regionActions'>
<?php if($canEditRegion || $canCreateLane || $canDeleteRegion):?>
<button class="btn btn-link action" type="button" data-toggle="dropdown"><i class="icon icon-ellipsis-v"></i></button>
<ul class="dropdown-menu pull-right">
@@ -61,7 +61,7 @@ $canCreateLane = commonModel::hasPriv('kanban', 'createLane');
</ul>
<?php endif;?>
</span>
<span>
<span class='regionActions'>
<?php $canViewArchivedCard = commonModel::hasPriv('kanban', 'viewArchivedCard');?>
<?php $canViewArchivedColumn = commonModel::hasPriv('kanban', 'viewArchivedColumn');?>
<?php if(($canViewArchivedCard or $canViewArchivedColumn) and $kanban->archived):?>
+17 -1
View File
@@ -23,10 +23,20 @@
#archivedCards .card-actions {position: relative; padding: 15px 10px; padding-top: 0px;}
#archivedCards .card-actions > .btn {display: block;}
#archivedCards .card-actions > .btn + .btn {margin-top: 10px;}
#archivedCards .info > .time {background-color: rgba(0, 0, 0, 0.15);}
#archivedCards .info > .users > span:before {left: -4px;}
#archivedCards .info > .users > span:after {right: -4px;}
#archivedCards .info > .users .avatar {display: inline-block; position: relative; border-radius: 50%; top: -5px; margin: 5px; right: -7px; margin-left: -4px;}
#archivedCards .cardName {word-wrap: break-word;}
#archivedCards .card-item .red {background-color: #b10b0b;}
#archivedCards .card-item .yellow {background-color: #cfa227;}
#archivedCards .card-item .green {background-color: #2a5f29;}
#archivedCards .card-item .has-color .cardName,
#archivedCards .card-item .has-color .actions .icon-more-v,
#archivedCards .card-item .has-color .info > .label-pri,
#archivedCards .card-item .has-color .info > .estimate,
#archivedCards .card-item .has-color .info > .label-light {color: #FFFFFF;}
#archivedCards .card-item .has-color .info > .label-pri {border-color: #FFFFFF;}
</style>
<div class='panel'>
<div class='panel-heading text-center'>
@@ -37,7 +47,13 @@
<?php foreach($cards as $card):?>
<div class='card-item' data-card='<?php echo $card->id;?>'>
<div class='col-xs-10'>
<div class="kanban-item" data-id="<?php echo $card->id;?>">
<?php
$color = '';
if($card->color == '#b10b0b') $color = 'has-color red';
if($card->color == '#cfa227') $color = 'has-color yellow';
if($card->color == '#2a5f29') $color = 'has-color green';
?>
<div class="kanban-item <?php echo $color;?>" data-id="<?php echo $card->id;?>">
<?php echo html::a($this->createLink('kanban', 'viewCard', "cardID=$card->id", '', true), $card->name, '', "class='cardName iframe' data-toggle='modal' data-width='80%' title='$card->name'");?>
<div class="info">
<span class="pri label-pri label-pri-<?php echo $card->pri;?>"><?php echo $card->pri;?></span>
+6 -3
View File
@@ -36,10 +36,13 @@
<div class="btn-toolbar">
<?php if(!$card->deleted):?>
<?php
common::printLink('kanban', 'assigntoCard', "cardID=$card->id", "<i class='icon icon-hand-right'></i><span class='text'>{$lang->kanbancard->assign}</span>", '', "class='btn btn-link iframe' title='{$lang->kanbancard->assign}'", true, true);
common::printLink('kanban', 'archiveCard', "cardID=$card->id", "<i class='icon icon-ban-circle'></i><span class='text'>{$lang->kanbancard->archive}</span>", 'hiddenwin', "class='btn btn-link' title='{$lang->kanbancard->archive}'", true, true);
//common::printLink('kanban', 'assigntoCard', "cardID=$card->id", "<i class='icon icon-hand-right'></i><span class='text'>{$lang->kanbancard->assign}</span>", '', "class='btn btn-link iframe' title='{$lang->kanbancard->assign}'", true, true);
if(!$card->archived)
{
common::printLink('kanban', 'archiveCard', "cardID=$card->id", "<i class='icon icon-ban-circle'></i><span class='text'>{$lang->kanbancard->archive}</span>", 'hiddenwin', "class='btn btn-link' title='{$lang->kanbancard->archive}'", true, true);
echo "<div class='divider'></div>";
echo "<div class='divider'></div>";
}
common::printLink('kanban', 'editCard', "cardID=$card->id", '<i class="icon icon-edit"></i>', '', "class='btn btn-link iframe' data-width='80%' title='{$lang->kanbancard->edit}'", true, true);
common::printLink('kanban', 'copyCard', "cardID=$card->id", '<i class="icon icon-copy"></i>', '', "class='btn btn-link iframe' title='{$lang->kanbancard->copy}'", true, true);
+1 -1
View File
@@ -254,7 +254,7 @@ class product extends control
}
/* Process the sql, get the conditon partion, save it to session. */
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', $browseType != 'bysearch' && $this->app->rawModule != 'projectstory');
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', ($browseType != 'bysearch' and $browseType != 'reviewbyme' and $this->app->rawModule != 'projectstory'));
if(!empty($stories)) $stories = $this->story->mergeReviewer($stories);
+1 -1
View File
@@ -115,7 +115,7 @@
?>
</td>
<?php if($this->session->currentProductType != 'normal'):?>
<td class='c-branch' title='<?php echo $branches[$plan->branch];?>'><?php if($plan->parent != '-1') echo $branchOption[$plan->branch];?></td>
<td class='c-branch' title='<?php echo $branchOption[$plan->branch];?>'><?php if($plan->parent != '-1') echo $branchOption[$plan->branch];?></td>
<?php endif;?>
<td><?php echo $plan->begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?></td>
<td><?php echo $plan->end == '2030-01-01' ? $lang->productplan->future : $plan->end;?></td>
+1 -1
View File
@@ -489,7 +489,7 @@ class story extends control
}
$this->view->titles = $titles;
}
$plans = $this->loadModel('productplan')->getPairsForStory($productID, $branch === 'all' or !in_array($branch, array_keys($branches)) ? 0 : $branch, 'skipParent|unexpired');
$plans = $this->loadModel('productplan')->getPairsForStory($productID, ($branch === 'all' or !in_array($branch, array_keys($branches))) ? 0 : $branch, 'skipParent|unexpired');
$plans['ditto'] = $this->lang->story->ditto;
$priList = (array)$this->lang->story->priList;