* Finish task #47358.

This commit is contained in:
tianshujie
2022-01-11 17:02:17 +08:00
parent 48e9171569
commit aca23db346
8 changed files with 178 additions and 7 deletions
+2
View File
@@ -674,6 +674,7 @@ $lang->resource->kanban->cardsSort = 'cardsSort';
$lang->resource->kanban->viewArchivedColumn = 'viewArchivedColumn';
$lang->resource->kanban->viewArchivedCard = 'viewArchivedCard';
$lang->resource->kanban->restoreCard = 'restoreCard';
$lang->resource->kanban->setLaneHeight = 'setLaneHeight';
$lang->kanban->methodOrder[5] = 'space';
$lang->kanban->methodOrder[10] = 'createSpace';
@@ -718,6 +719,7 @@ $lang->kanban->methodOrder[195] = 'viewArchivedColumn';
$lang->kanban->methodorder[200] = 'viewArchivedCard';
$lang->kanban->methodorder[205] = 'archiveColumn';
$lang->kanban->methodorder[210] = 'restoreCard';
$lang->kanban->methodorder[215] = 'setLaneHeight';
/* Execution. */
$lang->resource->execution = new stdclass();
+27
View File
@@ -457,6 +457,33 @@ class kanban extends control
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
}
/**
* Set lane height.
*
* @param int $kanbanID
* @param string $from kanban|execution
* @access public
* @return void
*/
public function setLaneHeight($kanbanID, $from = 'kanban')
{
if(!empty($_POST))
{
$this->kanban->setLaneHeight($kanbanID, $from);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
}
if($from == 'execution') $this->loadModel('execution');
$this->view->kanban = $this->$from->getByID($kanbanID);
$this->display();
}
/**
* Delete a lane.
*
+17
View File
@@ -0,0 +1,17 @@
/**
* Set card count.
*
* @param string $heightType
* @access public
* @return void
*/
function setCardCount(heightType)
{
heightType != 'custom' ? $('#cardBox').addClass('hidden') : $('#cardBox').removeClass('hidden');
}
$(function()
{
var heightType = $("[name='heightType']:checked").val();
setCardCount(heightType);
})
+16
View File
@@ -1012,4 +1012,20 @@ $(function()
if(sortType == 'lane') $cards.show();
}
});
if(Object.keys(regions).length == 1)
{
var regionID = Object.keys(regions)[0];
var region = regions[regionID].groups;
if(Object.keys(region).length == 1)
{
var group = region[0];
if(Object.keys(group.lanes).length == 1)
{
var windowHeight = $(window).height();
$('.region').css('height', windowHeight -132);
$('.kanban-lane').css('height', windowHeight - 222);
}
}
}
});
+11
View File
@@ -18,6 +18,8 @@ $lang->kanban->deleteRegion = 'Delete Region';
$lang->kanban->createLane = 'Create Lane';
$lang->kanban->editLane = 'Edit Lane';
$lang->kanban->sortLane = 'Sort Lane';
$lang->kanban->laneHeight = 'Lane Height';
$lang->kanban->setLaneHeight = 'Set Lane Height';
$lang->kanban->deleteLane = 'Delete Lane';
$lang->kanban->createColumn = 'Create Column';
$lang->kanban->editColumn = 'Edit Column';
@@ -73,12 +75,14 @@ $lang->kanban->closedBy = 'Closed By';
$lang->kanban->closedDate = 'Closed Date';
$lang->kanban->empty = 'No Kanban';
$lang->kanban->teamSumCount = '%s people in total';
$lang->kanban->cardCount = 'Card Count';
$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 delete this?';
$lang->kanban->cardCountTip = 'Please enter the number of cards';
$lang->kanban->aclGroup['open'] = 'Open';
$lang->kanban->aclGroup['private'] = 'Private';
@@ -250,6 +254,13 @@ $lang->kanbanlane->confirmDelete = 'Are you sure to delete this lane? After dele
$lang->kanbanlane->modeList['sameAsOther'] = 'Use the same Kanban column as other lanes';
$lang->kanbanlane->modeList['independent'] = 'Independent Kanban column is adopted';
$lang->kanbanlane->heightTypeList['auto'] = 'Adaptive (Adaptive according to the card height)';
$lang->kanbanlane->heightTypeList['custom'] = 'Custom (Customize lane height based on number of cards)';
$lang->kanbanlane->error = new stdclass();
$lang->kanbanlane->error->mustBeInt = 'The number of cards must be a positive integer greater than 2.';
$lang->kanbanregion = new stdclass();
$lang->kanbanregion->name = 'Region Name';
$lang->kanbanregion->default = 'Default Region';
+10
View File
@@ -18,6 +18,8 @@ $lang->kanban->deleteRegion = '删除区域';
$lang->kanban->createLane = '创建泳道';
$lang->kanban->editLane = '泳道设置';
$lang->kanban->sortLane = '泳道排序';
$lang->kanban->laneHeight = '泳道高度';
$lang->kanban->setLaneHeight = '设置泳道高度';
$lang->kanban->deleteLane = '删除泳道';
$lang->kanban->createColumn = '创建看板列';
$lang->kanban->editColumn = '编辑看板列';
@@ -73,12 +75,14 @@ $lang->kanban->closedBy = '由谁关闭';
$lang->kanban->closedDate = '关闭日期';
$lang->kanban->empty = '暂时没有看板';
$lang->kanban->teamSumCount = '共%s人';
$lang->kanban->cardCount = '卡片数量';
$lang->kanban->createColumnOnLeft = '在左侧添加看板列';
$lang->kanban->createColumnOnRight = '在右侧添加看板列';
$lang->kanban->accessDenied = '您无权访问该看板';
$lang->kanban->confirmDelete = '您确认删除吗?';
$lang->kanban->cardCountTip = '请输入卡片数量';
$lang->kanban->aclGroup['open'] = '公开';
$lang->kanban->aclGroup['private'] = '私有';
@@ -250,6 +254,12 @@ $lang->kanbanlane->confirmDelete = '您确认删除该泳道吗?删除泳道
$lang->kanbanlane->modeList['sameAsOther'] = '与其他泳道使用相同看板列';
$lang->kanbanlane->modeList['independent'] = '采用独立的看板列';
$lang->kanbanlane->heightTypeList['auto'] = '自适应(根据卡片高度自适应)';
$lang->kanbanlane->heightTypeList['custom'] = '自定义(根据卡片数量自定义泳道高度)';
$lang->kanbanlane->error = new stdclass();
$lang->kanbanlane->error->mustBeInt = '卡片数量必须是大于2的正整数。';
$lang->kanbanregion = new stdclass();
$lang->kanbanregion->name = '区域名称';
$lang->kanbanregion->default = '默认区域';
+57 -7
View File
@@ -2117,6 +2117,36 @@ class kanbanModel extends model
return dao::isError();
}
/**
* Set lane height.
*
* @param int $kanbanID
* @param string $from kanban|execution
* @access public
* @return bool
*/
public function setLaneHeight($kanbanID, $from = 'kanban')
{
$kanbanID = (int)$kanbanID;
$kanban = fixer::input('post')
->setIF($this->post->heightType == 'auto', 'displayCards', 0)
->get();
if($kanban->heightType == 'custom')
{
if(!preg_match("/^-?\d+$/", $kanban->displayCards) or $kanban->displayCards < 3)
{
dao::$errors['displayCards'] = $this->lang->kanbanlane->error->mustBeInt;
return false;
}
}
$table = $this->config->objectTables[$from];
$this->dao->update($table)->set('displayCards')->eq((int)$kanban->displayCards)->where('id')->eq($kanbanID)->exec();
if(dao::isError()) return false;
}
/**
* Set kanban headerActions.
*
@@ -2126,24 +2156,44 @@ class kanbanModel extends model
*/
public function setHeaderActions($kanban)
{
$actions = '';
$actions .= "<div class='btn-group'>";
$actions .= "<a href='javascript:fullScreen();' id='fullScreenBtn' class='btn btn-link'><i class='icon icon-fullscreen'></i> {$this->lang->kanban->fullScreen}</a>";
$printSettingBtn = (common::hasPriv('kanban', 'createRegion') or common::hasPriv('kanban', 'edit') or common::hasPriv('kanban', 'close') or common::hasPriv('kanban', 'delete'));
$actions = '';
$actions .= "<div class='btn-group'>";
$actions .= "<a href='javascript:fullScreen();' id='fullScreenBtn' class='btn btn-link'><i class='icon icon-fullscreen'></i> {$this->lang->kanban->fullScreen}</a>";
$printSetHeight = false;
if(common::hasPriv('kanban', 'setLaneHeight'))
{
$lanes = $this->dao->select('t2.id')->from(TABLE_KANBANREGION)->alias('t1')
->leftJoin(TABLE_KANBANLANE)->alias('t2')->on('t1.id=t2.region')
->where('t1.kanban')->eq($kanban->id)
->andWhere('t1.deleted')->eq(0)
->andWhere('t2.deleted')->eq(0)
->fetchPairs();
if(count($lanes) > 1) $printSetHeight = true;
}
$printSettingBtn = (common::hasPriv('kanban', 'createRegion') or $printSetHeight or common::hasPriv('kanban', 'edit') or common::hasPriv('kanban', 'close') or common::hasPriv('kanban', 'delete'));
if($printSettingBtn)
{
$actions .= "<a data-toggle='dropdown' class='btn btn-link dropdown-toggle setting' type='button'>" . '<i class="icon icon-cog-outline"></i> ' . $this->lang->kanban->setting . '</a>';
$actions .= "<ul id='kanbanActionMenu' class='dropdown-menu text-left'>";
if(common::hasPriv('kanban', 'createRegion')) $actions .= '<li>' . html::a(helper::createLink('kanban', 'createRegion', "kanbanID=$kanban->id", '', true), '<i class="icon icon-plus"></i>' . $this->lang->kanban->createRegion, '', "class='iframe btn btn-link'") . '</li>';
if($printSetHeight)
{
$width = $this->app->getClientLang() == 'en' ? '70%' : '60%';
$actions .= '<li>' . html::a(helper::createLink('kanban', 'setLaneHeight', "kanbanID=$kanban->id", '', true), '<i class="icon icon-size-height"></i>' . $this->lang->kanban->laneHeight, '', "class='iframe btn btn-link' data-width='$width'") . '</li>';
$kanbanActions = '';
$attr = $kanban->status == 'closed' ? "disabled='disabled'" : '';
}
$kanbanActions = '';
$attr = $kanban->status == 'closed' ? "disabled='disabled'" : '';
if(common::hasPriv('kanban', 'edit')) $kanbanActions .= '<li>' . html::a(helper::createLink('kanban', 'edit', "kanbanID=$kanban->id", '', true), '<i class="icon icon-edit"></i>' . $this->lang->kanban->edit, '', "class='iframe btn btn-link' data-width='75%'") . '</li>';
if(common::hasPriv('kanban', 'close')) $kanbanActions .= '<li>' . html::a(helper::createLink('kanban', 'close', "kanbanID=$kanban->id", '', true), '<i class="icon icon-off"></i>' . $this->lang->kanban->close, '', "class='iframe btn btn-link' $attr") . '</li>';
if(common::hasPriv('kanban', 'delete')) $kanbanActions .= '<li>' . html::a(helper::createLink('kanban', 'delete', "kanbanID=$kanban->id"), '<i class="icon icon-trash"></i>' . $this->lang->kanban->delete, 'hiddenwin', "class='btn btn-link'") . '</li>';
if($kanbanActions)
{
$actions .= common::hasPriv('kanban', 'createRegion') ? "<div class='divider'></div>" . $kanbanActions : $kanbanActions;
$actions .= ((common::hasPriv('kanban', 'createRegion') or $printSetHeight) and (common::hasPriv('kanban', 'edit') or common::hasPriv('kanban', 'close') or common::hasPriv('kanban', 'delete'))) ? "<div class='divider'></div>" . $kanbanActions : $kanbanActions;
}
$actions .= "</ul>";
}
+38
View File
@@ -0,0 +1,38 @@
<?php
/**
* The setlaneheight file of kanban module of ZenTaoPMS.
*
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package kanban
* @version $Id: setlaneheight.html.php 935 2022-01-11 10:49:24Z $
* @link https://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='mainContent' class='main-content'>
<div class='center-block'>
<div class='main-header'>
<h2><?php echo $lang->kanban->setLaneHeight;?></h2>
</div>
<form class='main-form form-ajax' method='post' enctype='multipart/form-data' id='dataform'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->kanban->laneHeight;?></th>
<td><?php echo nl2br(html::radio('heightType', $lang->kanbanlane->heightTypeList, 'custom', "onclick='setCardCount(this.value);'"));?></td>
</tr>
<tr class="hidden" id='cardBox'>
<th class='c-count'><?php echo $lang->kanban->cardCount;?></th>
<td><?php echo html::input('displayCards', '', "class='form-control' required placeholder='{$lang->kanban->cardCountTip}' autocomplete='off'");?></td>
</tr>
<tr>
<td colspan='2' class='text-center form-actions'>
<?php echo html::submitButton();?>
</td>
</tr>
</table>
</form>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>