* Finish task #47358.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
})
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
@@ -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>";
|
||||
}
|
||||
|
||||
@@ -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';?>
|
||||
Reference in New Issue
Block a user