diff --git a/module/repo/config/dtable.php b/module/repo/config/dtable.php index 93fbfded09..c864f3256a 100644 --- a/module/repo/config/dtable.php +++ b/module/repo/config/dtable.php @@ -199,3 +199,39 @@ $config->repo->storyDtable->fieldList['pri']['sortType'] = true; $config->repo->storyDtable->fieldList['plan']['name'] = 'planTitle'; $config->repo->storyDtable->fieldList['plan']['width'] = 'auto'; $config->repo->storyDtable->fieldList['assignedTo']['type'] = 'user'; + +$app->loadLang('bug'); +$app->loadModuleConfig('bug'); + +$config->repo->bugDtable = new stdclass(); +$config->repo->bugDtable->fieldList = array(); +$config->repo->bugDtable->fieldList['id']['name'] = 'id'; +$config->repo->bugDtable->fieldList['id']['title'] = $lang->idAB; +$config->repo->bugDtable->fieldList['id']['type'] = 'id'; +$config->repo->bugDtable->fieldList['id']['checkbox'] = true; + +$config->repo->bugDtable->fieldList['pri'] = $config->bug->dtable->fieldList['pri']; +$config->repo->bugDtable->fieldList['title'] = $config->bug->dtable->fieldList['title']; +$config->repo->bugDtable->fieldList['openedBy'] = $config->bug->dtable->fieldList['openedBy']; +$config->repo->bugDtable->fieldList['assignedTo'] = $config->bug->dtable->fieldList['assignedTo']; +$config->repo->bugDtable->fieldList['status'] = $config->bug->dtable->fieldList['status']; + +$config->repo->bugDtable->fieldList['pri']['fixed'] = 'left'; + +$app->loadLang('task'); +$app->loadModuleConfig('task'); + +$config->repo->taskDtable = new stdclass(); +$config->repo->taskDtable->fieldList = array(); +$config->repo->taskDtable->fieldList['id']['name'] = 'id'; +$config->repo->taskDtable->fieldList['id']['title'] = $lang->idAB; +$config->repo->taskDtable->fieldList['id']['type'] = 'id'; +$config->repo->taskDtable->fieldList['id']['checkbox'] = true; + +$config->repo->taskDtable->fieldList['pri'] = $config->task->dtable->fieldList['pri']; +$config->repo->taskDtable->fieldList['name'] = $config->task->dtable->fieldList['name']; +$config->repo->taskDtable->fieldList['finishedBy'] = $config->task->dtable->fieldList['finishedBy']; +$config->repo->taskDtable->fieldList['assignedTo'] = $config->task->dtable->fieldList['assignedTo']; +$config->repo->taskDtable->fieldList['status'] = $config->task->dtable->fieldList['status']; + +$config->repo->taskDtable->fieldList['pri']['fixed'] = 'left'; diff --git a/module/repo/control.php b/module/repo/control.php index 8ffcf1c2e9..f39bca5bba 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -1145,8 +1145,9 @@ class repo extends control { $this->repo->link($repoID, $revision, 'bug'); - if(dao::isError()) return print(js::error(dao::getError())); - return print(js::closeModal('parent', '', "parent.parent[parent.parent.length - 2].getRelation('$revision')")); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + return $this->send(array('result' => 'success', 'callback' => "$('.tab-content .active iframe')[0].contentWindow.getRelation('$revision')", 'closeModal' => true)); } $this->loadModel('bug'); @@ -1196,6 +1197,8 @@ class repo extends control $allBugs = $this->bug->getActiveBugs($product->id, 0, '0', array_keys($linkedBugs), $pager); } + foreach($allBugs as $bug) $bug->statusText = $this->processStatus('bug', $bug); + $this->view->modules = $modules; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->allBugs = $allBugs; @@ -1229,8 +1232,9 @@ class repo extends control { $this->repo->link($repoID, $revision, 'task'); - if(dao::isError()) return print(js::error(dao::getError())); - return print(js::closeModal('parent', '', "parent.parent[parent.parent.length - 2].getRelation('$revision')")); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + return $this->send(array('result' => 'success', 'callback' => "$('.tab-content .active iframe')[0].contentWindow.getRelation('$revision')", 'closeModal' => true)); } $this->loadModel('execution'); diff --git a/module/repo/js/linkbug.ui.js b/module/repo/js/linkbug.ui.js new file mode 100644 index 0000000000..475ab59c8f --- /dev/null +++ b/module/repo/js/linkbug.ui.js @@ -0,0 +1,23 @@ +window.createSortLink = function(col) +{ + var sort = col.name + '_asc'; + if(sort == orderBy) sort = col.name + '_desc'; + + return sortLink.replace('{orderBy}', sort); +} + +$(document).off('click','.dtable-footer .batch-btn').on('click', '.dtable-footer .batch-btn', function(e) +{ + const dtable = zui.DTable.query(e.target); + const checkedList = dtable.$.getChecks(); + if(!checkedList.length) return; + + const tabType = $(this).data('type'); + const postData = []; + postData[`${tabType}[]`] = checkedList; + + $.ajaxSubmit({ + url: $(this).data('url'), + data: postData + }); +}); \ No newline at end of file diff --git a/module/repo/js/linktask.ui.js b/module/repo/js/linktask.ui.js new file mode 100644 index 0000000000..475ab59c8f --- /dev/null +++ b/module/repo/js/linktask.ui.js @@ -0,0 +1,23 @@ +window.createSortLink = function(col) +{ + var sort = col.name + '_asc'; + if(sort == orderBy) sort = col.name + '_desc'; + + return sortLink.replace('{orderBy}', sort); +} + +$(document).off('click','.dtable-footer .batch-btn').on('click', '.dtable-footer .batch-btn', function(e) +{ + const dtable = zui.DTable.query(e.target); + const checkedList = dtable.$.getChecks(); + if(!checkedList.length) return; + + const tabType = $(this).data('type'); + const postData = []; + postData[`${tabType}[]`] = checkedList; + + $.ajaxSubmit({ + url: $(this).data('url'), + data: postData + }); +}); \ No newline at end of file diff --git a/module/repo/ui/diffeditor.html.php b/module/repo/ui/diffeditor.html.php index c889ad5568..0561f1065a 100644 --- a/module/repo/ui/diffeditor.html.php +++ b/module/repo/ui/diffeditor.html.php @@ -91,4 +91,4 @@ sidebar ) ); -a(set::class('iframe'), setData('size', '80%'), setData('toggle', 'modal'), set::id('linkObject')); +a(set::class('iframe'), setData('size', '1000px'), setData('toggle', 'modal'), set::id('linkObject')); diff --git a/module/repo/ui/linkbug.html.php b/module/repo/ui/linkbug.html.php new file mode 100644 index 0000000000..b301df2ff0 --- /dev/null +++ b/module/repo/ui/linkbug.html.php @@ -0,0 +1,55 @@ + + * @package testreport + * @link https://www.zentao.net + */ +namespace zin; + +jsVar('orderBy', $orderBy); +jsVar('sortLink', createLink('repo', 'linkBug', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy={orderBy}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")); + +detailHeader +( + to::prefix(''), + to::title + ( + $lang->productplan->linkBug, + ) +); + +$footToolbar = array('items' => array +( + array('text' => $lang->productplan->linkBug, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('repo', 'linkBug', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy=$orderBy")) +), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'bugs')); + +div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('bug'))); + +div +( + set('class', 'repo-linkstory-title'), + icon('unlink'), + span + ( + set('class', 'font-semibold ml-2'), + $lang->productplan->unlinkedBugs . "({$pager->recTotal})" + ) +); +$allBugs = initTableData($allBugs, $config->repo->bugDtable->fieldList); +$data = array_values($allBugs); +dtable +( + set::userMap($users), + set::data($data), + set::cols($config->repo->bugDtable->fieldList), + set::checkable(true), + set::footToolbar($footToolbar), + set::sortLink(jsRaw('createSortLink')), + set::footPager(usePager()), +); + +render(); diff --git a/module/repo/ui/linktask.html.php b/module/repo/ui/linktask.html.php new file mode 100644 index 0000000000..779fb93175 --- /dev/null +++ b/module/repo/ui/linktask.html.php @@ -0,0 +1,55 @@ + + * @package testreport + * @link https://www.zentao.net + */ +namespace zin; + +jsVar('orderBy', $orderBy); +jsVar('sortLink', createLink('repo', 'linkTask', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy={orderBy}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")); + +detailHeader +( + to::prefix(''), + to::title + ( + $lang->repo->linkTask, + ) +); + +$footToolbar = array('items' => array +( + array('text' => $lang->repo->linkTask, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('repo', 'linkTask', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy=$orderBy")) +), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'tasks')); + +div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('task'))); + +div +( + set('class', 'repo-linkstory-title'), + icon('unlink'), + span + ( + set('class', 'font-semibold ml-2'), + $lang->repo->unlinkedTasks . "({$pager->recTotal})" + ) +); +$allTasks = initTableData($allTasks, $config->repo->taskDtable->fieldList); +$data = array_values($allTasks); +dtable +( + set::userMap($users), + set::data($data), + set::cols($config->repo->taskDtable->fieldList), + set::checkable(true), + set::footToolbar($footToolbar), + set::sortLink(jsRaw('createSortLink')), + set::footPager(usePager()), +); + +render(); diff --git a/module/repo/ui/monaco.html.php b/module/repo/ui/monaco.html.php index 734b0dd9ef..2fb1683c19 100644 --- a/module/repo/ui/monaco.html.php +++ b/module/repo/ui/monaco.html.php @@ -98,4 +98,4 @@ sidebar ) ); -a(set::class('iframe'), setData('size', '80%'), setData('toggle', 'modal'), set::id('linkObject')); +a(set::class('iframe'), setData('size', '1000px'), setData('toggle', 'modal'), set::id('linkObject'));