v1.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace zin;
  3. class affected extends wg
  4. {
  5. /**
  6. * Define widget properties.
  7. *
  8. * @var array
  9. * @access protected
  10. */
  11. protected static $defineProps = array(
  12. 'tasks?: array', // 影响的任务。
  13. 'executions?: array', // 影响的执行。
  14. 'teams?: array', // 影响的团队成员。
  15. 'bugs?: array', // 影响的bug。
  16. 'cases?: array', // 影响的用例。
  17. 'twins?: array', // 影响的孪生需求。
  18. 'stories?: array' // 影响的研发需求
  19. );
  20. protected function build()
  21. {
  22. global $lang, $config;
  23. list($tasks, $executions, $teams, $bugs, $cases, $twins, $stories) = $this->prop(array('tasks', 'executions', 'teams', 'bugs', 'cases', 'twins', 'stories'));
  24. $affectedProjects = array();
  25. $affectedTaskCount = 0;
  26. foreach($executions as $executionID => $execution)
  27. {
  28. $teamAccounts = '';
  29. if(isset($teams[$executionID]))
  30. {
  31. foreach($teams[$executionID] as $member) $teamAccounts .= zget(data('users'), $member->account) . ' ';
  32. }
  33. $executionTasks = array_values(zget($tasks, $executionID, array()));
  34. $affectedTaskCount += count($executionTasks);
  35. $affectedProjects[] = h6
  36. (
  37. $execution->name,
  38. $teamAccounts ? h::small(icon('group'), $teamAccounts) : null
  39. );
  40. $affectedProjects[] = empty($executionTasks) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : dtable
  41. (
  42. set::cols($config->story->affect->projects->fields),
  43. set::data($executionTasks)
  44. );
  45. }
  46. return formGroup
  47. (
  48. setClass('w-full'),
  49. set::label($lang->story->checkAffection),
  50. tabs
  51. (
  52. setClass('w-full'),
  53. tabPane
  54. (
  55. to::suffix(label($affectedTaskCount)),
  56. set::key('affectedProjects'),
  57. set::title($lang->story->affectedProjects),
  58. set::active(true),
  59. empty($affectedProjects) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : $affectedProjects
  60. ),
  61. tabPane
  62. (
  63. to::suffix(label(empty($stories) ? 0 : count($stories))),
  64. set::key('affectedStories'),
  65. set::title($lang->story->affectedStories),
  66. empty($stories) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : dtable
  67. (
  68. set::cols($config->story->affect->stories->fields),
  69. set::data(array_values($stories)),
  70. set::style(array('min-width' => '100%'))
  71. )
  72. ),
  73. tabPane
  74. (
  75. to::suffix(label(empty($bugs) ? 0 : count($bugs))),
  76. set::key('affectedBugs'),
  77. set::title($lang->story->affectedBugs),
  78. empty($bugs) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : dtable
  79. (
  80. set::cols($config->story->affect->bugs->fields),
  81. set::data(array_values($bugs)),
  82. set::style(array('min-width' => '100%'))
  83. )
  84. ),
  85. tabPane
  86. (
  87. to::suffix(label(empty($cases) ? 0 : count($cases))),
  88. set::key('affectedCases'),
  89. set::title($lang->story->affectedCases),
  90. empty($cases) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : dtable
  91. (
  92. set::cols($config->story->affect->cases->fields),
  93. set::data(array_values($cases)),
  94. set::style(array('min-width' => '100%'))
  95. )
  96. ),
  97. empty($twins) ? null : tabPane
  98. (
  99. to::suffix(label(count($twins))),
  100. set::key('affectedTwins'),
  101. set::title($lang->story->affectedTwins),
  102. empty($twins) ? div(setClass('dtable-empty-tip'), div(setClass('text-gray'), $lang->noData)) : dtable
  103. (
  104. set::cols($config->story->affect->twins->fields),
  105. set::data(array_values($twins)),
  106. set::style(array('min-width' => '100%'))
  107. )
  108. )
  109. )
  110. );
  111. }
  112. }