diff --git a/module/mr/control.php b/module/mr/control.php index b282f1e097..24c7babb17 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -705,8 +705,10 @@ class mr extends control { $this->mr->link($MRID, $productID, 'bug'); - if(dao::isError()) return print(js::error(dao::getError())); - return print(js::locate(inlink('link', "MRID=$MRID&type=bug&orderBy=$orderBy"), 'parent')); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + $link = inlink('link', "MRID=$MRID&type=bug&orderBy=$orderBy"); + return $this->send(array('result' => 'success', 'callback' => "loadTable('$link', 'bugTable')", 'closeModal' => true)); } $this->loadModel('bug'); @@ -757,6 +759,10 @@ class mr extends control $allBugs = $this->bug->getActiveBugs($productID, 0, '0', array_keys($linkedBugs), $pager); } + list($order, $sort) = explode('_', $orderBy); + $sortCol = array_column($allBugs, $order); + array_multisort($sortCol, $sort == 'asc' ? SORT_ASC : SORT_DESC, $allBugs); + $this->view->modules = $modules; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->allBugs = $allBugs; @@ -790,8 +796,10 @@ class mr extends control { $this->mr->link($MRID, $productID, 'task'); - if(dao::isError()) return print(js::error(dao::getError())); - return print(js::locate(inlink('link', "MRID=$MRID&type=task&orderBy=$orderBy"), 'parent')); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + $link = inlink('link', "MRID=$MRID&type=task&orderBy=$orderBy"); + return $this->send(array('result' => 'success', 'callback' => "loadTable('$link', 'taskTable')", 'closeModal' => true)); } $this->loadModel('execution'); @@ -877,7 +885,7 @@ class mr extends control * @access public * @return mix */ - public function unlink($MRID, $productID, $type, $linkID, $confirm = 'no') + public function unlink($MRID, $productID, $type, $linkID) { $this->app->loadLang('productplan'); @@ -893,9 +901,10 @@ class mr extends control } else { + $link = inlink('link', "MRID=$MRID&type=$type"); $response['result'] = 'success'; $response['message'] = ''; - $response['load'] = true; + $response['load'] = $link; } return $this->send($response); } diff --git a/module/mr/js/link.ui.js b/module/mr/js/link.ui.js index 14d11310ca..4faf719539 100644 --- a/module/mr/js/link.ui.js +++ b/module/mr/js/link.ui.js @@ -2,3 +2,33 @@ $(function() { $('li.' + type + '>a').trigger('click'); }); + +window.createStorySortLink = function(col) +{ + var sort = col.name + '_asc'; + var currentOrderBy = 'id_asc'; + if(type == 'story') currentOrderBy = orderBy; + if(sort == currentOrderBy) sort = col.name + '_desc'; + + return sortLink.replace('{orderBy}', sort).replace('{type}', 'story'); +} + +window.createBugSortLink = function(col) +{ + var sort = col.name + '_asc'; + var currentOrderBy = 'id_asc'; + if(type == 'bug') currentOrderBy = orderBy; + if(sort == currentOrderBy) sort = col.name + '_desc'; + + return sortLink.replace('{orderBy}', sort).replace('{type}', 'bug'); +} + +window.createTaskSortLink = function(col) +{ + var sort = col.name + '_asc'; + var currentOrderBy = 'id_asc'; + if(type == 'task') currentOrderBy = orderBy; + if(sort == currentOrderBy) sort = col.name + '_desc'; + + return sortLink.replace('{orderBy}', sort).replace('{type}', 'task'); +} diff --git a/module/mr/ui/link.html.php b/module/mr/ui/link.html.php index 2b15224ec2..6eb9f48c20 100644 --- a/module/mr/ui/link.html.php +++ b/module/mr/ui/link.html.php @@ -11,6 +11,8 @@ declare(strict_types=1); namespace zin; jsVar('type', $type); +jsVar('orderBy', $orderBy); +jsVar('sortLink', createLink('mr', 'link', "MRID={$MR->id}&type={type}&orderBy={orderBy}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")); $actionMenu = array(); $actionMenu['title'] = $lang->actions; @@ -91,27 +93,27 @@ panel ( li ( - setClass('nav-item'), + setClass('nav-item' . ($type == 'view' ? ' active' : '')), a($lang->mr->view, set::href(inlink('view', "MRID={$MR->id}"))) ), li ( - setClass('nav-item'), + setClass('nav-item' . ($type == 'diff' ? ' active' : '')), a($lang->mr->viewDiff, set::href(inlink('diff', "MRID={$MR->id}"))) ), li ( - setClass('nav-item story'), + setClass('nav-item story' . ($type == 'story' ? ' active' : '')), a(icon($lang->icons['story']), $lang->productplan->linkedStories, set::href('#mr-story'), set('data-toggle', 'tab')) ), li ( - setClass('nav-item bug'), + setClass('nav-item bug' . ($type == 'bug' ? ' active' : '')), a(icon($lang->icons['bug']), $lang->productplan->linkedBugs, set::href('#mr-bug'), set('data-toggle', 'tab')) ), li ( - setClass('nav-item task'), + setClass('nav-item task' . ($type == 'task' ? ' active' : '')), a(icon('todo'), $lang->mr->linkedTasks, set::href('#mr-task'), set('data-toggle', 'tab')) ), ) @@ -126,7 +128,7 @@ panel ( setClass('mr-actions primary'), setData('linkType', 'bug'), - setData('size', '80%'), + setData('size', '1000px'), setData('toggle', 'modal'), set::url($this->createLink('mr', 'linkStory', "MRID={$MR->id}&productID={$product->id}{$param}&orderBy={$orderBy}")), set::icon('link'), @@ -135,8 +137,11 @@ panel dtable ( set::id('storyTable'), + set::userMap($users), set::cols($storyCols), set::data($stories), + set::sortLink(jsRaw('createStorySortLink')), + set::footPager(usePager(null, 'storyPager')), ), ), tabPane @@ -146,7 +151,7 @@ panel ( setClass('mr-actions primary'), setData('linkType', 'bug'), - setData('size', '80%'), + setData('size', '900px'), setData('toggle', 'modal'), set::url($this->createLink('mr', 'linkBug', "MRID={$MR->id}&productID={$product->id}{$param}&orderBy={$orderBy}")), set::icon('bug'), @@ -154,8 +159,12 @@ panel ), dtable ( + set::id('bugTable'), + set::userMap($users), set::cols($bugCols), set::data($bugs), + set::sortLink(jsRaw('createBugSortLink')), + set::footPager(usePager(null, 'bugPager')), ), ), tabPane @@ -165,16 +174,20 @@ panel ( setClass('mr-actions primary'), setData('linkType', 'task'), - setData('size', '80%'), + setData('size', '900px'), setData('toggle', 'modal'), - set::url($this->createLink('mr', 'linkTask', "MRID={$MR->id}&productID={$product->id}{$param}&orderBy={$orderBy}")), + set::url($this->createLink('mr', 'linkTask', "MRID={$MR->id}&productID={$product->id}{$param}&browseType=unclosed&orderBy={$orderBy}")), set::icon('todo'), $this->lang->mr->linkTask ), dtable ( + set::id('taskTable'), + set::userMap($users), set::cols($taskCols), set::data($tasks), + set::sortLink(jsRaw('createTaskSortLink')), + set::footPager(usePager(null, 'taskPager')), ), ), ),