diff --git a/module/kanban/control.php b/module/kanban/control.php index d95c6c8722..0f3568239a 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -23,18 +23,17 @@ class kanban extends control */ public function space($browseType = 'my', $recTotal = 0, $recPerPage = 15, $pageID = 1) { - $spaces = $this->kanban->getSpaces($browseType); /* Load pager. */ $this->app->loadClass('pager', $static = true); - $recTotal = count($spaces); - $pager = new pager($recTotal, $recPerPage, $pageID); - $spaces = array_chunk($spaces, $pager->recPerPage); + $pager = new pager($recTotal, $recPerPage, $pageID); - $this->view->title = $this->lang->kanbanspace->common; - $this->view->spaces = empty($spaces) ? $spaces : $spaces[$pageID - 1]; - $this->view->browseType = $browseType; - $this->view->pager = $pager; + $this->view->title = $this->lang->kanbanspace->common; + $this->view->spaces = $this->kanban->getSpaces($browseType, $pager); + $this->view->browseType = $browseType; + $this->view->pager = $pager; + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->usersAvatar = $this->user->getAvatarPairs(); $this->display(); } diff --git a/module/kanban/css/space.css b/module/kanban/css/space.css index be6d44e1d8..031cfe3d8c 100644 --- a/module/kanban/css/space.css +++ b/module/kanban/css/space.css @@ -1,5 +1,29 @@ #spaces {margin: 0 0; margin-bottom: 15px;} #spaces .spaceTitle {margin-bottom: 15px;} +#spaces .spaceTitle > div {display: inline-block;} #spaces .spaceActions {margin-top: 10px;} #spaces .spaceActions > a{margin-left: 10px;} -.table-footer .pager>li.disabled>a.pager-item {bottom: -3px;} +.space .menu {margin-left: 5px; margin-right:5px;} +.space .table-empty-tip {padding: 40px 10px;} + +.kanbans > .col {width: 25% !important;} +@media screen and (max-width: 1500px) {.kanbans > .col {width: 25%;}} +.kanbans .panel {margin: 0 0; border: 1px solid #DCDCDC; border-radius: 4px; box-shadow: none; cursor: pointer; height: 190px; margin-bottom: 5px;} +.kanbans .panel:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);} +.kanbans .panel-heading {padding: 12px 24px 10px 16px;} +.kanbans .kanban-name {overflow: hidden; white-space:nowrap} +.kanbans .panel .label-closed {background: #AAA !important; color: #FFF; margin-top:-6px;} +.kanbans .panel-body {padding: 0 16px 16px;} +.kanbans .kanban-desc {color: #838a9d; word-break:break-all;} +.kanbans .kanban-footer {position: absolute; bottom: 10px; right: 10px; left: 15px;} +.kanbans .kanban-members {float: left; height: 24px; line-height: 24px;} +.kanbans .kanban-members > a {display: inline-block; height: 24px;} +.kanbans .kanban-members > a + a {margin-left: -5px;} +.kanbans .kanban-members > a > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 1px;} +.kanbans .kanban-members > span {display: inline-block; color: transparent; width: 2px; height: 2px; background-color: #8990a2; position: relative; border-radius: 50%; top: 3px; margin: 0 3px;} +.kanbans .kanban-members > span:before, +.kanbans .kanban-members > span:after {content: ''; display: block; position: absolute; width: 2px; height: 2px; background-color: #8990a2; top: 0; border-radius: 50%} +.kanbans .kanban-members > span:before {left: -4px;} +.kanbans .kanban-members > span:after {right: -4px;} +.kanbans .kanban-members-total {display: inline-block; margin-left: 6px; position: relative; top: 3px} +.kanbans .kanbanAcl {position: absolute; right: 0px; bottom: 2px; color: #838a9d;} diff --git a/module/kanban/js/space.js b/module/kanban/js/space.js new file mode 100644 index 0000000000..288ff2be70 --- /dev/null +++ b/module/kanban/js/space.js @@ -0,0 +1,9 @@ +/* Make cards clickable */ +var $spaces = $('.kanbans'); +$spaces.on('click', '.panel', function(e) +{ + if(!$(e.target).closest('.panel-actions').length) + { + window.location.href = $(this).data('url'); + } +}); diff --git a/module/kanban/lang/en.php b/module/kanban/lang/en.php index 2270b778f2..ff06fa8d0a 100644 --- a/module/kanban/lang/en.php +++ b/module/kanban/lang/en.php @@ -28,12 +28,16 @@ $lang->kanban->sortCard = 'Sort Card'; $lang->kanban->setting = 'Setting'; /* Fields. */ -$lang->kanban->space = 'Space'; -$lang->kanban->name = 'Name'; -$lang->kanban->owner = 'Owner'; -$lang->kanban->team = 'Team'; -$lang->kanban->desc = 'Description'; -$lang->kanban->acl = 'ACL'; +$lang->kanban->space = 'Space'; +$lang->kanban->name = 'Name'; +$lang->kanban->owner = 'Owner'; +$lang->kanban->team = 'Team'; +$lang->kanban->desc = 'Description'; +$lang->kanban->acl = 'ACL'; +$lang->kanban->closed = 'Closed'; + +$lang->kanban->empty = 'No Kanban'; +$lang->kanban->teamSumCount = '%s people in total'; $lang->kanban->aclList['open'] = 'Open (Accessible with space view permissions)'; $lang->kanban->aclList['private'] = 'Private (For the kanban team, whitelist members and space owner only)'; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index 2b8419823b..0bc5389c84 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -28,16 +28,23 @@ $lang->kanban->sortCard = '卡片排序'; $lang->kanban->setting = '设置'; /* Fields. */ -$lang->kanban->space = '所属空间'; -$lang->kanban->name = '看板名称'; -$lang->kanban->owner = '负责人'; -$lang->kanban->team = '团队'; -$lang->kanban->desc = '空间描述'; -$lang->kanban->acl = '访问控制'; +$lang->kanban->space = '所属空间'; +$lang->kanban->name = '看板名称'; +$lang->kanban->owner = '负责人'; +$lang->kanban->team = '团队'; +$lang->kanban->desc = '看板描述'; +$lang->kanban->acl = '访问控制'; +$lang->kanban->closed = '已关闭'; + +$lang->kanban->empty = '暂时没有看板'; +$lang->kanban->teamSumCount = '共%s人'; $lang->kanban->aclList['open'] = '继承空间访问权限(能访问当前空间,即可访问)'; $lang->kanban->aclList['private'] = '私有(看板团队成员、白名单、空间负责人可访问)'; +$lang->kanban->aclGroup['open'] = '公开'; +$lang->kanban->aclGroup['private'] = '私有'; + $lang->kanban->type = array(); $lang->kanban->type['all'] = "综合看板"; $lang->kanban->type['story'] = "{$lang->SRCommon}看板"; diff --git a/module/kanban/model.php b/module/kanban/model.php index 8fcac94cde..13d05f31cc 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -531,22 +531,31 @@ class kanbanModel extends model * Get spaces. * * @param string $browseType all|my|other|closed + * @param object $pager * @access public * @return array */ - public function getSpaces($browseType) + public function getSpaces($browseType, $pager) { $account = $this->app->user->account; $spaceIdList = $this->getCanViewObjects('kanbanspace'); - - return $this->dao->select('*')->from(TABLE_KANBANSPACE) + $spaces = $this->dao->select('*')->from(TABLE_KANBANSPACE) ->where('deleted')->eq(0) ->beginIF($browseType == 'my')->andWhere('owner')->eq($account)->fi() ->beginIF($browseType == 'other')->andWhere('owner')->ne($account)->fi() ->beginIF($browseType == 'closed')->andWhere('status')->eq('closed')->fi() ->beginIF(!$this->app->user->admin)->andWhere('id')->in($spaceIdList)->fi() ->orderBy('id_desc') + ->page($pager) ->fetchAll('id'); + + $kanbanGroup = $this->getGroupBySpaces(array_keys($spaces)); + foreach($spaces as $spaceID => $space) + { + if(isset($kanbanGroup[$spaceID])) $space->kanbans = $kanbanGroup[$spaceID]; + } + + return $spaces; } /** @@ -1337,6 +1346,21 @@ class kanbanModel extends model return $this->dao->findById($spaceID)->from(TABLE_KANBANSPACE)->fetch(); } + /** + * Get kanban group by space id list. + * + * @param int $spaceIdList + * @access public + * @return array + */ + public function getGroupBySpaces($spaceIdList) + { + return $this->dao->select('*')->from(TABLE_KANBAN) + ->where('deleted')->eq(0) + ->andWhere('space')->in($spaceIdList) + ->fetchGroup('space', 'id'); + } + /** * Get column by id. * diff --git a/module/kanban/view/space.html.php b/module/kanban/view/space.html.php index 0aafd1f269..9165f4c6ef 100644 --- a/module/kanban/view/space.html.php +++ b/module/kanban/view/space.html.php @@ -34,24 +34,97 @@
kanban->empty;?>
+