v1.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace zin;
  3. require_once dirname(__DIR__) . DS . 'relatedlist' . DS . 'v1.php';
  4. class bugRelatedList extends relatedList
  5. {
  6. /**
  7. * @var mixed[]
  8. */
  9. protected static $defineProps = array
  10. (
  11. 'bug' => '?object', // 当前Bug。
  12. );
  13. protected function created()
  14. {
  15. $data = $this->prop('data');
  16. if($data) return;
  17. $bug = $this->prop('bug');
  18. if(!$bug) $bug = data('bug');
  19. if(!$bug) return;
  20. global $lang, $config;
  21. $canViewCase = common::hasPriv('testcase', 'view');
  22. $canViewStory = common::hasPriv('story', 'view');
  23. $canViewTask = common::hasPriv('task', 'view');
  24. $canViewMR = common::hasPriv('mr', 'view');
  25. $linkedCommits = $this->prop('linkedCommits', data('linkCommits'));
  26. $data = array();
  27. /* Related bugs. */
  28. if($config->edition == 'open')
  29. {
  30. $relatedBugList = isset($bug->relatedBugTitles) ? $bug->relatedBugTitles :array();
  31. $relatedBugItems = array();
  32. foreach($relatedBugList as $relatedBugID => $relatedBugTitle)
  33. {
  34. $relatedBugItem = new stdclass();
  35. $relatedBugItem->id = $relatedBugID;
  36. $relatedBugItem->title = $relatedBugTitle;
  37. $relatedBugItems[] = $relatedBugItem;
  38. }
  39. $data['relatedBug'] = array
  40. (
  41. 'title' => $lang->bug->relatedBug,
  42. 'items' => $relatedBugItems,
  43. 'url' => createLink('bug', 'view', 'bugID={id}'),
  44. 'data-toggle' => 'modal',
  45. 'data-size' => 'lg'
  46. );
  47. }
  48. /* To cases. */
  49. $toCaseList = isset($bug->toCases) ? $bug->toCases :array();
  50. $toCaseItems = array();
  51. foreach($toCaseList as $caseID => $caseTitle)
  52. {
  53. $toCaseItem = new stdclass();
  54. $toCaseItem->id = $caseID;
  55. $toCaseItem->title = $caseTitle;
  56. $toCaseItems[] = $toCaseItem;
  57. }
  58. $data['toCase'] = array
  59. (
  60. 'title' => $lang->bug->toCase,
  61. 'items' => $toCaseItems,
  62. 'url' => $canViewCase ? createLink('testcase', 'view', 'caseID={id}') : false,
  63. 'props' => $canViewCase ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array()
  64. );
  65. /* To stories. */
  66. $toStoryItems = array();
  67. if($bug->toStory)
  68. {
  69. $toStoryItem = new stdclass();
  70. $toStoryItem->id = $bug->toStory;
  71. $toStoryItem->title = $bug->toStoryTitle;
  72. $toStoryItems[] = $toStoryItem;
  73. }
  74. $data['toStory'] = array
  75. (
  76. 'title' => $lang->bug->toStory,
  77. 'items' => $toStoryItems,
  78. 'url' => $canViewStory ? createLink('story', 'view', 'story={id}') : false,
  79. 'props' => $canViewStory ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array()
  80. );
  81. /* To tasks. */
  82. $toTaskItems = array();
  83. if($bug->toTask)
  84. {
  85. $toTaskItem = new stdclass();
  86. $toTaskItem->id = $bug->toTask;
  87. $toTaskItem->title = $bug->toTaskTitle;
  88. $toTaskItems[] = $toTaskItem;
  89. }
  90. $data['toTask'] = array
  91. (
  92. 'title' => $lang->bug->toTask,
  93. 'items' => $toTaskItems,
  94. 'url' => $canViewTask ? createLink('task', 'view', 'task={id}') : false,
  95. 'props' => $canViewTask ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array()
  96. );
  97. /* Linked MR. */
  98. $linkMRList = isset($bug->linkMRTitles) ? $bug->linkMRTitles :array();
  99. $linkedPRs = $this->prop('linkedPRs', data('linkedPRs'));
  100. if(helper::hasFeature('devops'))
  101. {
  102. $data['mr'] = array
  103. (
  104. 'title' => $lang->bug->linkMR,
  105. 'items' => $linkMRList,
  106. 'url' => $canViewMR ? createLink('mr', 'view', 'MRID={id}') : false,
  107. 'props' => array('data-app' => 'devops'),
  108. 'onRender' => function($item, $mr) use($lang)
  109. {
  110. $item['titleClass'] = 'w-0 flex-1';
  111. $statusClass = $mr->status;
  112. if($mr->status == 'opened') $statusClass = 'draft';
  113. if($mr->status == 'merged') $statusClass = 'done';
  114. $item['content'] = array('html' => "<span class='status-{$statusClass}'>" . zget($lang->mr->statusList, $mr->status) . '</span>');
  115. return $item;
  116. }
  117. );
  118. if($linkedPRs)
  119. {
  120. $data['pr'] = array
  121. (
  122. 'title' => $lang->bug->linkPR,
  123. 'items' => $linkedPRs,
  124. 'url' => hasPriv('pullreq', 'view') ? createLink('pullreq', 'view', 'MRID={id}') : false,
  125. 'props' => array('data-app' => 'devops'),
  126. 'onRender' => function($item, $mr) use($lang)
  127. {
  128. $item['titleClass'] = 'w-0 flex-1';
  129. $statusClass = $mr->status;
  130. if($mr->status == 'opened') $statusClass = 'draft';
  131. if($mr->status == 'merged') $statusClass = 'done';
  132. $item['content'] = array('html' => "<span class='status-{$statusClass}'>" . zget($lang->mr->statusList, $mr->status) . '</span>');
  133. return $item;
  134. }
  135. );
  136. }
  137. $data['linkCommit'] = array
  138. (
  139. 'title' => $lang->bug->linkCommit,
  140. 'items' => $linkedCommits,
  141. 'url' => false,
  142. 'onRender' => function($item, $commit)
  143. {
  144. $item['text'] = $commit->comment;
  145. if(hasPriv('repo', 'revision'))
  146. {
  147. $item['url'] = createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}");
  148. $item['data-app'] = 'devops';
  149. }
  150. return $item;
  151. }
  152. );
  153. }
  154. $this->setProp('data', $data);
  155. }
  156. }