v1.php 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace zin;
  3. require_once dirname(__DIR__) . DS . 'relatedlist' . DS . 'v1.php';
  4. class taskMiscInfo extends relatedList
  5. {
  6. /**
  7. * @var mixed[]
  8. */
  9. protected static $defineProps = array
  10. (
  11. 'task' => '?object', // 当前任务。
  12. 'linkMRTitles' => '?array', // 当前任务关联的提交。
  13. 'linkCommits' => '?array' // 当前任务关联的提交。
  14. );
  15. protected function created()
  16. {
  17. global $lang;
  18. $task = $this->prop('task', data('task'));
  19. if(!$task) return array();
  20. /* Linked MR. */
  21. if(helper::hasFeature('devops'))
  22. {
  23. $canViewMR = common::hasPriv('mr', 'view');
  24. $linkMRList = $this->prop('linkMRTitles', data('linkMRTitles'));
  25. $linkedPRs = $this->prop('linkedPRs', data('linkedPRs'));
  26. $data['mr'] = array
  27. (
  28. 'title' => $lang->task->linkMR,
  29. 'items' => $linkMRList,
  30. 'url' => $canViewMR ? createLink('mr', 'view', 'MRID={id}') : false,
  31. 'props' => array('data-app' => 'devops'),
  32. 'onRender' => function($item, $mr) use($lang)
  33. {
  34. $item['titleClass'] = 'w-0 flex-1';
  35. $statusClass = $mr->status;
  36. if($mr->status == 'opened') $statusClass = 'draft';
  37. if($mr->status == 'merged') $statusClass = 'done';
  38. $item['content'] = array('html' => "<span class='status-{$statusClass}'>" . zget($lang->mr->statusList, $mr->status) . '</span>');
  39. return $item;
  40. }
  41. );
  42. if($linkedPRs)
  43. {
  44. $data['pr'] = array
  45. (
  46. 'title' => $lang->task->linkPR,
  47. 'items' => $linkedPRs,
  48. 'url' => hasPriv('pullreq', 'view') ? createLink('pullreq', 'view', 'MRID={id}') : false,
  49. 'props' => array('data-app' => 'devops'),
  50. 'onRender' => function($item, $mr) use($lang)
  51. {
  52. $item['titleClass'] = 'w-0 flex-1';
  53. $statusClass = $mr->status;
  54. if($mr->status == 'opened') $statusClass = 'draft';
  55. if($mr->status == 'merged') $statusClass = 'done';
  56. $item['content'] = array('html' => "<span class='status-{$statusClass}'>" . zget($lang->mr->statusList, $mr->status) . '</span>');
  57. return $item;
  58. }
  59. );
  60. }
  61. $linkedCommits = $this->prop('linkCommits', data('linkCommits'));
  62. $data['linkCommit'] = array
  63. (
  64. 'title' => $lang->task->linkCommit,
  65. 'items' => $linkedCommits,
  66. 'onRender' => function($item, $commit)
  67. {
  68. $item['text'] = isset($commit->comment) ? $commit->comment : '';
  69. if(hasPriv('repo', 'revision'))
  70. {
  71. $item['url'] = createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}");
  72. $item['data-app'] = 'devops';
  73. }
  74. return $item;
  75. }
  76. );
  77. }
  78. $linkedBugs = $this->prop('linkedBugs', data('linkedBugs'));
  79. $data['bug'] = array
  80. (
  81. 'title' => $lang->bug->relatedBug,
  82. 'items' => $linkedBugs,
  83. 'url' => hasPriv('bug', 'view') ? createLink('bug', 'view', 'bugID={id}') : false
  84. );
  85. $this->setProp('data', $data);
  86. }
  87. }