track.html.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /**
  3. * The UI file of product module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author chen.tao <chentao@easycorp.ltd>
  8. * @package product
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. $viewByTypePairs = array();
  13. foreach($storyTypeList as $type => $typeName) $viewByTypePairs[$type] = sprintf($lang->story->viewByType, $typeName);
  14. $storyTypeLang = $storyTypeList[$storyType];
  15. $paramTemplate = "productID={$productID}&branch={$branch}&projectID={$projectID}&browseType=allstory&param=0&storyType=%s&orderBy=%s";
  16. if($app->rawModule == 'projectstory') $paramTemplate = "projectID={$projectID}&productID={$productID}&branch={$branch}&browseType=allstory&param=0&storyType=%s&orderBy=%s";
  17. $orderByItems = array();
  18. $orderByTitle = '';
  19. if($storyType != 'story') unset($lang->story->trackOrderByList['stage']);
  20. foreach($lang->story->trackOrderByList as $orderByType => $orderByName)
  21. {
  22. $item = array();
  23. $item['text'] = $orderByName;
  24. $item['selected'] = strpos($orderBy, $orderByType) === 0;
  25. $item['items'] = array();
  26. $item['items'][] = array('text' => $lang->story->trackSortList['asc'], 'selected' => $orderBy == "{$orderByType}_asc", 'url' => createLink($app->rawModule, 'track', sprintf($paramTemplate, $storyType, "{$orderByType}_asc") . (isset($pager) ? "&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}" : '')));
  27. $item['items'][] = array('text' => $lang->story->trackSortList['desc'], 'selected' => $orderBy == "{$orderByType}_desc", 'url' => createLink($app->rawModule, 'track', sprintf($paramTemplate, $storyType, "{$orderByType}_desc") . (isset($pager) ? "&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}" : '')));
  28. $orderByItems[] = $item;
  29. if($item['selected'])
  30. {
  31. $orderByTitle = $orderByName;
  32. if($orderBy == "{$orderByType}_asc") $orderByTitle .= $lang->story->trackSortList['asc'];
  33. if($orderBy == "{$orderByType}_desc") $orderByTitle .= $lang->story->trackSortList['desc'];
  34. }
  35. }
  36. $dropdownItems = array();
  37. foreach($viewByTypePairs as $type => $typeName) $dropdownItems[] = array('text' => $typeName, 'selected' => $storyType == $type, 'url' => createLink($app->rawModule, 'track', sprintf($paramTemplate, $type, ($type != 'story' && strpos($orderBy, 'stage') === 0) ? 'id_desc' : $orderBy)));
  38. featureBar
  39. (
  40. to::leading
  41. (
  42. ($app->rawModule == 'projectstory' && count($projectProducts) > 1) ? picker
  43. (
  44. setID('switchProduct'),
  45. set::name('switchProduct'),
  46. set::items(array(0 => $this->lang->product->all) + $projectProducts),
  47. set::value($productID),
  48. set::required(true),
  49. on::change('changeProduct'),
  50. set::width(145)
  51. ) : null,
  52. count($viewByTypePairs) > 1 ? dropdown(to('trigger', btn(setClass('switchBtn'), $viewByTypePairs[$storyType])), set::items($dropdownItems)) : null
  53. ),
  54. li(searchToggle(set::open($browseType == 'bysearch'), set::module($config->product->search['module']), set::text($lang->searchAB . $storyTypeLang)))
  55. );
  56. toolbar
  57. (
  58. formSettingBtn
  59. (
  60. set::customFields($customFields),
  61. set::noCancel(true),
  62. set::canGlobal(commonModel::hasPriv('datatable', 'setGlobal')),
  63. set::urlParams("module=product&section=trackFields&key={$storyType}"),
  64. set::submitCallback("loadCurrentPage"),
  65. set::restoreCallback("loadCurrentPage"),
  66. set::text($lang->settings)
  67. )
  68. );
  69. $privs['epic'] = commonModel::hasPriv('epic', 'view');
  70. $privs['requirement'] = commonModel::hasPriv('requirement', 'view');
  71. $privs['story'] = commonModel::hasPriv('story', 'view');
  72. $privs['project'] = commonModel::hasPriv('project', 'view');
  73. $privs['execution'] = commonModel::hasPriv('execution', 'task');
  74. $privs['task'] = commonModel::hasPriv('task', 'view');
  75. $privs['bug'] = commonModel::hasPriv('bug', 'view');
  76. $privs['case'] = commonModel::hasPriv('testcase', 'view');
  77. $privs['design'] = commonModel::hasPriv('design', 'view');
  78. $privs['commit'] = commonModel::hasPriv('repo', 'revision');
  79. $app->loadLang('epic');
  80. $app->loadLang('requirement');
  81. $app->loadLang('project');
  82. $app->loadLang('task');
  83. $app->loadLang('bug');
  84. $app->loadLang('testcase');
  85. jsVar('langStoryPriList', array('epic' => $lang->epic->priList, 'requirement' => $lang->requirement->priList, 'story' => $lang->story->priList));
  86. jsVar('langStoryStatusList', array('epic' => $lang->epic->statusList, 'requirement' => $lang->requirement->statusList, 'story' => $lang->story->statusList));
  87. jsVar('langStoryStageList', array('epic' => $lang->epic->stageList, 'requirement' => $lang->requirement->stageList, 'story' => $lang->story->stageList));
  88. jsVar('langProjectStatusList', $lang->project->statusList);
  89. jsVar('langTaskPriList', $lang->task->priList);
  90. jsVar('langTaskStatusList', $lang->task->statusList);
  91. jsVar('langChildren', $lang->task->childrenAB);
  92. jsVar('langParent', $lang->task->parentAB);
  93. jsVar('langBugPriList', $lang->bug->priList);
  94. jsVar('langBugSeverityList', $lang->bug->severityList);
  95. jsVar('langCasePriList', $lang->testcase->priList);
  96. jsVar('langCaseResultList', $lang->testcase->resultList);
  97. jsVar('langUnexecuted', $lang->testcase->unexecuted);
  98. jsVar('storyIdList', $storyIdList);
  99. jsVar('projectID', $projectID);
  100. jsVar('mergeCells', $mergeCells);
  101. jsVar('orderByItems', $orderByItems);
  102. jsVar('orderByTitle', $orderByTitle);
  103. jsVar('storyType', $storyType);
  104. jsVar('users', $users);
  105. jsVar('privs', $privs);
  106. jsVar('tasks', $tasks);
  107. empty($tracks) ? div(setClass('dtable-empty-tip bg-white shadow'), span(setClass('text-gray'), $lang->noData)) : div
  108. (
  109. set::id('track'),
  110. zui::kanbanList
  111. (
  112. set::key('kanban'),
  113. set('$replace', false),
  114. set::items(array(array(
  115. 'data' => $tracks,
  116. 'getLaneCol' => jsRaw('window.getLaneCol'),
  117. 'getCol' => jsRaw('window.getCol'),
  118. 'getItem' => jsRaw('window.getItem'),
  119. 'itemRender' => jsRaw('window.itemRender'),
  120. 'afterRender' => jsRaw('window.afterRender'),
  121. 'draggable' => false
  122. ))),
  123. set::height('calc(100vh - ' . (isset($pager) ? '130px' : '110px') . ')')
  124. ),
  125. isset($pager) ? pager(setClass('justify-end')) : null
  126. );