diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 9a66f4c96d..e72e4e7126 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -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(); diff --git a/module/kanban/control.php b/module/kanban/control.php index daaa210ea3..1730ffa893 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -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. * diff --git a/module/kanban/js/setlaneheight.js b/module/kanban/js/setlaneheight.js new file mode 100644 index 0000000000..4f37eb4763 --- /dev/null +++ b/module/kanban/js/setlaneheight.js @@ -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); +}) diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 49ec25d957..c69c6516fc 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -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); + } + } + } }); diff --git a/module/kanban/lang/en.php b/module/kanban/lang/en.php index 7ba2b2d2c4..9075c9e2b8 100644 --- a/module/kanban/lang/en.php +++ b/module/kanban/lang/en.php @@ -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'; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index 62a58dec97..46e3890c0c 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -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 = '默认区域'; diff --git a/module/kanban/model.php b/module/kanban/model.php index 1303fba193..3ffe4c260d 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -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 .= "