Merge branch 'kanban' into 'sprint/177_tianshujie_46148'
# Conflicts: # module/kanban/control.php # module/kanban/model.php
This commit is contained in:
@@ -77,7 +77,7 @@ class design extends control
|
||||
|
||||
/* Print top and right actions. */
|
||||
$this->lang->TRActions = '<div class="btn-toolbar pull-right">';
|
||||
if($this->config->maxVersion)
|
||||
if($this->config->maxVersion and common::hasPriv('design', 'submit'))
|
||||
{
|
||||
$this->lang->TRActions .= '<div class="btn-group">';
|
||||
$this->lang->TRActions .= html::a($this->createLink('design', 'submit', "productID=$productID", '', true), "<i class='icon-plus'></i> {$this->lang->design->createReview}", '', "class='btn btn-secondary iframe'");
|
||||
|
||||
@@ -647,6 +647,11 @@ $lang->resource->kanban->editCard = 'editCard';
|
||||
$lang->resource->kanban->viewCard = 'viewCard';
|
||||
$lang->resource->kanban->sortCard = 'sortCard';
|
||||
$lang->resource->kanban->archiveCard = 'archiveCard';
|
||||
$lang->resource->kanban->assigntoCard = 'assigntoCard';
|
||||
$lang->resource->kanban->copyCard = 'copyCard';
|
||||
$lang->resource->kanban->deleteCard = 'deleteCard';
|
||||
$lang->resource->kanban->moveCard = 'moveCard';
|
||||
$lang->resource->kanban->setCardColor = 'setCardColor';
|
||||
$lang->resource->kanban->laneMove = 'laneMove';
|
||||
$lang->resource->kanban->cardsSort = 'cardsSort';
|
||||
|
||||
@@ -679,8 +684,13 @@ $lang->kanban->methodOrder[130] = 'editCard';
|
||||
$lang->kanban->methodOrder[135] = 'viewCard';
|
||||
$lang->kanban->methodOrder[140] = 'sortCard';
|
||||
$lang->kanban->methodOrder[145] = 'archivedCard';
|
||||
$lang->kanban->methodOrder[150] = 'laneMove';
|
||||
$lang->kanban->methodOrder[155] = 'cardsSort';
|
||||
$lang->kanban->methodOrder[150] = 'copyCard';
|
||||
$lang->kanban->methodOrder[155] = 'deleteCard';
|
||||
$lang->kanban->methodOrder[160] = 'assigntoCard';
|
||||
$lang->kanban->methodOrder[165] = 'moveCard';
|
||||
$lang->kanban->methodOrder[170] = 'setCardColor';
|
||||
$lang->kanban->methodOrder[175] = 'laneMove';
|
||||
$lang->kanban->methodOrder[180] = 'cardsSort';
|
||||
|
||||
/* Execution. */
|
||||
$lang->resource->execution = new stdclass();
|
||||
|
||||
@@ -16,8 +16,8 @@ $config->kanban->createspace = new stdclass();
|
||||
$config->kanban->editspace = new stdclass();
|
||||
$config->kanban->createregion = new stdclass();
|
||||
$config->kanban->createcard = new stdclass();
|
||||
|
||||
$config->kanban->editcard = new stdclass();
|
||||
$config->kanban->editregion = new stdclass();
|
||||
|
||||
$config->kanban->setwip->requiredFields = 'limit';
|
||||
$config->kanban->setlane->requiredFields = 'name,type';
|
||||
@@ -28,8 +28,8 @@ $config->kanban->createspace->requiredFields = 'name,owner';
|
||||
$config->kanban->editspace->requiredFields = 'name,owner';
|
||||
$config->kanban->createregion->requiredFields = 'name';
|
||||
$config->kanban->createcard->requiredFields = 'name';
|
||||
|
||||
$config->kanban->editcard->requiredFields = 'name';
|
||||
$config->kanban->editcard->requiredFields = 'name';
|
||||
$config->kanban->editregion->requiredFields = 'name';
|
||||
|
||||
$config->kanban->editor = new stdclass();
|
||||
$config->kanban->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
|
||||
@@ -319,6 +319,32 @@ class kanban extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
* Edit a region
|
||||
*
|
||||
* @param int $regionID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function editRegion($regionID = 0)
|
||||
{
|
||||
$this->loadModel('action');
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$changes = $this->kanban->updateRegion($regionID);
|
||||
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
$actionID = $this->action->create('kanbanregion', $regionID, 'edited');
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
|
||||
}
|
||||
|
||||
$this->view->region = $this->kanban->getRegionByID($regionID);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a region
|
||||
*
|
||||
@@ -362,7 +388,7 @@ class kanban extends control
|
||||
$this->view->lanes = $this->kanban->getLanePairsByRegion($regionID);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete a lane.
|
||||
*
|
||||
@@ -375,7 +401,7 @@ class kanban extends control
|
||||
{
|
||||
if($confirm == 'no')
|
||||
{
|
||||
die(js::confirm($this->lang->kanban->confirmDelete, $this->createLink('kanban', 'deleteLane', "laneID=$laneID&confirm=yes"), ''));
|
||||
die(js::confirm($this->lang->kanbanlane->confirmDelete, $this->createLink('kanban', 'deleteLane', "laneID=$laneID&confirm=yes"), ''));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -424,7 +450,7 @@ class kanban extends control
|
||||
{
|
||||
if($confirm == 'no')
|
||||
{
|
||||
die(js::confirm($this->lang->kanban->confirmDelete, $this->createLink('kanban', 'deleteColumn', "columnID=$columnID&confirm=yes"), ''));
|
||||
die(js::confirm($this->lang->kanbancolumn->confirmDelete, $this->createLink('kanban', 'deleteColumn', "columnID=$columnID&confirm=yes"), ''));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -526,7 +552,7 @@ class kanban extends control
|
||||
{
|
||||
if($confirm == 'no')
|
||||
{
|
||||
die(js::confirm($this->lang->kanban->confirmDelete, $this->createLink('kanban', 'deleteCard', "cardID=$cardID&confirm=yes")));
|
||||
die(js::confirm($this->lang->kanbancard->confirmDelete, $this->createLink('kanban', 'deleteCard', "cardID=$cardID&confirm=yes")));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -637,6 +663,7 @@ class kanban extends control
|
||||
}
|
||||
|
||||
$this->view->column = $column;
|
||||
$this->view->title = $column->name . $this->lang->colon . $this->lang->kanban->setColumn;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,6 @@ body {background-color: #fff}
|
||||
.region .kanban-item > .kanban-card > .info > .estimate{margin-left: 10px; color: #999}
|
||||
.region .kanban-item > .kanban-card > .info > .time {margin-left: 10px; font-size: 12px; background: rgb(242, 242, 242)}
|
||||
.region .kanban-item > .kanban-card > .info > .user {position: absolute; right: 0; top: 0}
|
||||
.region .kanban-item > .kanban-card > .actions {position: absolute; top: 0px; right: 4px; opacity: 0;}
|
||||
.region .kanban-item > .kanban-card > .actions > a {display: block; float: left; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 4px; opacity: .7;}
|
||||
.region .kanban-item > .kanban-card > .actions > a:hover {background-color: rgba(0,0,0,.075); opacity: 1;}
|
||||
.region .kanban-item:hover > .actions {opacity: 1;}
|
||||
@@ -76,15 +75,12 @@ body {background-color: #fff}
|
||||
.region .kanban-item.has-color .info > .label-pri {border-color: #FFFFFF;}
|
||||
.region .kanban-item .item-more {position: absolute; right: 6px; top: 0px;}
|
||||
|
||||
.kanban + .kanban {margin-top: 15px}
|
||||
.kanban-card {height: 60px !important}
|
||||
.kanban-card > .title {display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis}
|
||||
.kanban-card > .info {position: relative; margin-top: 5px}
|
||||
.kanban-card > .info > .info + .info {margin-left: 8px}
|
||||
.kanban-card > .info > .pri {min-width: 16px; line-height: 14px; height: 16px; padding: 0}
|
||||
.kanban-card > .info > .user {position: absolute; right: 0; top: 0}
|
||||
.kanban-card > .actions {position: absolute; top: 4px; right: 4px; opacity: 0;}
|
||||
.kanban-card:hover > .actions {opacity: 1;}
|
||||
.kanban-card > .actions {position: absolute; top: 4px; right: 4px; opacity: 0;}
|
||||
.kanban-card > .actions > a {display: block; float: left; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 4px; opacity: .7;}
|
||||
.kanban-card > .actions > a:hover {background-color: rgba(0,0,0,.075); opacity: 1;}
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ function renderKanbanItem(item, $item)
|
||||
|
||||
var $avatar = $(
|
||||
priv.canAssignCard ? '<a class="avatar avatar-sm avatar-user avatar-circle iframe"></a>'
|
||||
: '<div class="avatar avatar-sm avatar-user"></div>'
|
||||
: '<div class="avatar avatar-sm avatar-user avatar-circle"></div>'
|
||||
).attr('data-name', user.realname || user.account)
|
||||
.attr('data-id', user.id || user.account);
|
||||
if(user.avatar)
|
||||
|
||||
@@ -30,7 +30,9 @@ $lang->kanban->sortCard = 'Sort Card';
|
||||
$lang->kanban->copyCard = 'Copy Card';
|
||||
$lang->kanban->moveCard = 'Move Card';
|
||||
$lang->kanban->cardColor = 'Card Color';
|
||||
$lang->kanban->setCardColor = 'Set Card Color';
|
||||
$lang->kanban->deleteCard = 'Delete Card';
|
||||
$lang->kanban->assigntoCard = 'Assign';
|
||||
$lang->kanban->setting = 'Setting';
|
||||
$lang->kanban->splitColumn = 'Split Column';
|
||||
$lang->kanban->createColumnOnLeft = 'Create Column On Left';
|
||||
@@ -65,7 +67,7 @@ $lang->kanban->createColumnOnLeft = 'Create Column On Left';
|
||||
$lang->kanban->createColumnOnRight = 'Create Column On Right';
|
||||
|
||||
$lang->kanban->accessDenied = "You have no access to the kanban.";
|
||||
$lang->kanban->confirmDelete = 'Do you want to delelte this?';
|
||||
$lang->kanban->confirmDelete = 'Do you want to delete this?';
|
||||
|
||||
$lang->kanban->aclGroup['open'] = 'Open';
|
||||
$lang->kanban->aclGroup['private'] = 'Private';
|
||||
@@ -210,19 +212,23 @@ $lang->kanbancolumn->name = $lang->kanban->columnName;
|
||||
$lang->kanbancolumn->limit = $lang->kanban->WIPCount;
|
||||
$lang->kanbancolumn->color = 'Column Color';
|
||||
|
||||
$lang->kanbancolumn->confirmDelete = 'Are you sure to delete this column? After deleting the column, all cards in this column will also be deleted.';
|
||||
|
||||
$lang->kanbanlane = new stdclass();
|
||||
$lang->kanbanlane->name = $lang->kanban->laneName;
|
||||
$lang->kanbanlane->common = 'Lane';
|
||||
$lang->kanbanlane->default = 'Default Lane';
|
||||
$lang->kanbanlane->column = 'Lane Kanban Column';
|
||||
$lang->kanbanlane->otherlane = 'Select Existed Lane';
|
||||
$lang->kanbanlane->color = 'Lane Color';
|
||||
$lang->kanbanlane->name = $lang->kanban->laneName;
|
||||
$lang->kanbanlane->common = 'Lane';
|
||||
$lang->kanbanlane->default = 'Default Lane';
|
||||
$lang->kanbanlane->column = 'Lane Kanban Column';
|
||||
$lang->kanbanlane->otherlane = 'Select Existed Lane';
|
||||
$lang->kanbanlane->color = 'Lane Color';
|
||||
|
||||
$lang->kanbanlane->confirmDelete = 'Are you sure to delete this lane? After deleting the lane, all data (columns and cards) in the lane will also be deleted.';
|
||||
|
||||
$lang->kanbanlane->modeList['sameAsOther'] = 'Use the same Kanban column as other lanes';
|
||||
$lang->kanbanlane->modeList['independent'] = 'Independent Kanban column is adopted';
|
||||
|
||||
$lang->kanbanregion = new stdclass();
|
||||
$lang->kanbanregion->name = 'Kanban Region';
|
||||
$lang->kanbanregion->name = 'Region Name';
|
||||
$lang->kanbanregion->default = 'Default Region';
|
||||
$lang->kanbanregion->style = 'Region Style';
|
||||
|
||||
@@ -259,6 +265,8 @@ $lang->kanbancard->lblHour = 'h';
|
||||
$lang->kanbancard->noAssigned = 'No Assigned';
|
||||
$lang->kanbancard->deadlineAB = 'DL';
|
||||
|
||||
$lang->kanbancard->confirmDelete = 'Do you want 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->priList[1] = 1;
|
||||
$lang->kanbancard->priList[2] = 2;
|
||||
$lang->kanbancard->priList[3] = 3;
|
||||
|
||||
@@ -30,7 +30,9 @@ $lang->kanban->sortCard = '卡片排序';
|
||||
$lang->kanban->copyCard = '复制卡片';
|
||||
$lang->kanban->moveCard = '移动卡片';
|
||||
$lang->kanban->cardColor = '卡片颜色';
|
||||
$lang->kanban->setCardColor = '设置卡片颜色';
|
||||
$lang->kanban->deleteCard = '删除卡片';
|
||||
$lang->kanban->assigntoCard = '指派';
|
||||
$lang->kanban->setting = '设置';
|
||||
$lang->kanban->splitColumn = '新增子看板列';
|
||||
$lang->kanban->createColumnOnLeft = '左侧新增看板列';
|
||||
@@ -210,19 +212,23 @@ $lang->kanbancolumn->name = $lang->kanban->columnName;
|
||||
$lang->kanbancolumn->limit = $lang->kanban->WIPCount;
|
||||
$lang->kanbancolumn->color = '看板列颜色';
|
||||
|
||||
$lang->kanbancolumn->confirmDelete = '您确认删除该列吗?删除列后,该列中所有卡片也会被删除。';
|
||||
|
||||
$lang->kanbanlane = new stdclass();
|
||||
$lang->kanbanlane->name = $lang->kanban->laneName;
|
||||
$lang->kanbanlane->common = '泳道';
|
||||
$lang->kanbanlane->default = '默认泳道';
|
||||
$lang->kanbanlane->column = '泳道看板列';
|
||||
$lang->kanbanlane->otherlane = '选择共享看板列的泳道';
|
||||
$lang->kanbanlane->color = '泳道颜色';
|
||||
$lang->kanbanlane->name = $lang->kanban->laneName;
|
||||
$lang->kanbanlane->common = '泳道';
|
||||
$lang->kanbanlane->default = '默认泳道';
|
||||
$lang->kanbanlane->column = '泳道看板列';
|
||||
$lang->kanbanlane->otherlane = '选择共享看板列的泳道';
|
||||
$lang->kanbanlane->color = '泳道颜色';
|
||||
|
||||
$lang->kanbanlane->confirmDelete = '您确认删除该泳道吗?删除泳道后,该泳道中所有数据(列、卡片)也会被删除。';
|
||||
|
||||
$lang->kanbanlane->modeList['sameAsOther'] = '与其他泳道使用相同看板列';
|
||||
$lang->kanbanlane->modeList['independent'] = '采用独立的看板列';
|
||||
|
||||
$lang->kanbanregion = new stdclass();
|
||||
$lang->kanbanregion->name = '看板区域';
|
||||
$lang->kanbanregion->name = '区域名称';
|
||||
$lang->kanbanregion->default = '默认区域';
|
||||
$lang->kanbanregion->style = '区域样式';
|
||||
|
||||
@@ -259,6 +265,8 @@ $lang->kanbancard->lblHour = 'h';
|
||||
$lang->kanbancard->noAssigned = '未指派';
|
||||
$lang->kanbancard->deadlineAB = '截止';
|
||||
|
||||
$lang->kanbancard->confirmDelete = '您确认删除该卡片吗?删除卡片后,该卡片将从看板中删除,您只能通过系统回收站查看。';
|
||||
|
||||
$lang->kanbancard->priList[1] = 1;
|
||||
$lang->kanbancard->priList[2] = 2;
|
||||
$lang->kanbancard->priList[3] = 3;
|
||||
|
||||
@@ -1326,6 +1326,34 @@ class kanbanModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a region.
|
||||
*
|
||||
* @param int $regionID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function updateRegion($regionID)
|
||||
{
|
||||
$region = fixer::input('post')
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->setDefault('lastEditedDate', helper::now())
|
||||
->trim('name')
|
||||
->get();
|
||||
$oldRegion = $this->getRegionById($regionID);
|
||||
|
||||
$this->dao->update(TABLE_KANBANREGION)->data($region)
|
||||
->autoCheck()
|
||||
->batchcheck($this->config->kanban->editregion->requiredFields, 'notempty')
|
||||
->where('id')->eq($regionID)
|
||||
->exec();
|
||||
|
||||
if(dao::isError()) return;
|
||||
|
||||
$changes = common::createChanges($oldRegion, $region);
|
||||
return $changes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update kanban lane.
|
||||
*
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $kanban->id;?></span>
|
||||
<?php echo "<span title='$kanban->name'>" . $kanban->name . '</span>';?>
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $space->id;?></span>
|
||||
<?php echo "<span title='$space->name'>" . $space->name . '</span>';?>
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* The editregion file of task module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2021 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Mengyi Liu <liumengyi@easycorp.ltd>
|
||||
* @package kanban
|
||||
* @version $Id: editregion.html.php 935 2021-10-26 16:24:24Z liumengyi@easycorp.ltd $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<?php echo $lang->kanban->editRegion;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<table align='center' class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->kanbanregion->name;?></th>
|
||||
<td colspan='2'>
|
||||
<?php echo html::input('name', $region->name, "class='form-control'");?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='4' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
Reference in New Issue
Block a user