v1.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace zin;
  3. require_once dirname(__DIR__) . DS . 'datalist' . DS . 'v1.php';
  4. class taskBasicInfo extends wg
  5. {
  6. /**
  7. * @var mixed[]
  8. */
  9. protected static $defineProps = array
  10. (
  11. 'task' => '?object', // 当前任务。
  12. 'product' => '?object', // 当前产品。
  13. 'execution' => '?object', // 当前执行。
  14. 'fromBug' => '?object', // 当前来源 BUG。
  15. 'users' => '?array', // 用户信息。
  16. 'users' => '?array', // 用户列表。
  17. 'statusText' => '?string', // 状态信息。
  18. 'modulePath' => '?string' // 模块路径。
  19. );
  20. /**
  21. * @param null|bool|object $product
  22. * @param object $task
  23. */
  24. protected function getModuleItems($task, $product)
  25. {
  26. global $app;
  27. $isInModal = isInModal();
  28. $canViewTasks = !$isInModal && common::hasPriv('execution', 'task');
  29. $modulePath = $this->prop('modulePath', data('modulePath'));
  30. $items = array();
  31. $appendApp = $app->tab == 'execution' ? '' : "#app={$app->tab}";
  32. if($modulePath)
  33. {
  34. if($product)
  35. {
  36. $item = array('text' => $product->name);
  37. if($canViewTasks) $item['url'] = createLink('execution', 'task', "executionID=$task->execution&browseType=byProduct&param=$product->id") . $appendApp;
  38. $items[] = $item;
  39. }
  40. foreach($modulePath as $key => $module)
  41. {
  42. $item = array('text' => $module->name);
  43. if($canViewTasks) $item['url'] = createLink('execution', 'task', "executionID=$task->execution&browseType=byModule&param=$module->id") . $appendApp;
  44. $items[] = $item;
  45. }
  46. }
  47. if(!$items) $items = array('/');
  48. return $items;
  49. }
  50. protected function getItems()
  51. {
  52. global $lang, $config, $app;
  53. $task = $this->prop('task', data('task'));
  54. if(!$task) return array();
  55. $product = $this->prop('product', data('product'));
  56. $execution = $this->prop('execution', data('execution'));
  57. $users = $this->prop('users', data('users'));
  58. $fromBug = $this->prop('fromBug', data('fromBug'));
  59. $statusText = $this->prop('statusText', $task->status);
  60. $items = array();
  61. if($execution->multiple)
  62. {
  63. $items[$lang->task->execution] = array('control' => 'text', 'text' => $execution->name, 'title' => $execution->name);
  64. if(!isInModal())
  65. {
  66. $items[$lang->task->execution]['control'] = 'link';
  67. $items[$lang->task->execution]['url'] = createLink('execution', 'view', "executionID=$execution->id");
  68. }
  69. }
  70. $items[$lang->task->module] = array
  71. (
  72. 'control' => 'breadcrumb',
  73. 'items' => $this->getModuleItems($task, $product)
  74. );
  75. if($config->edition == 'max' && $execution->type == 'stage')
  76. {
  77. $items[$lang->task->design] = array('control' => 'text', 'text' => $task->designName, 'title' => $task->designName, 'control' => 'link', 'url' => createLink('design', 'view', "designID=$task->design") . ($app->tab == 'execution' ? '' : "#app={$app->tab}"));
  78. }
  79. if($config->vision != 'lite')
  80. {
  81. $items[$lang->task->fromBug] = array
  82. (
  83. 'control' => 'entityTitle',
  84. 'object' => $fromBug,
  85. 'type' => 'bug',
  86. 'url' => true,
  87. 'inline' => true,
  88. 'linkProps' => array('data-toggle' => 'modal', 'data-size' => 'lg')
  89. );
  90. }
  91. if(!empty($task->team) || zget($task, 'mode') === 'multi')
  92. {
  93. $items[$lang->task->assignedTo] = $lang->task->team;
  94. }
  95. else
  96. {
  97. $items[$lang->task->assignedTo] = zget($users, $task->assignedTo, '');
  98. }
  99. $items[$lang->task->type] = zget($lang->task->typeList, $task->type, $task->type);
  100. $items[$lang->task->status] = array
  101. (
  102. 'control' => 'status',
  103. 'class' => 'task-status',
  104. 'status' => $task->status,
  105. 'text' => $statusText
  106. );
  107. $items[$lang->task->progress] = "$task->progress %";
  108. $items[$lang->task->pri] = array
  109. (
  110. 'control' => 'pri',
  111. 'pri' => $task->pri,
  112. 'text' => $lang->task->priList
  113. );
  114. $items[$lang->task->keywords] = $task->keywords;
  115. $items[$lang->story->mailto] = joinMailtoList($task->mailto, $users);
  116. return $items;
  117. }
  118. protected function build()
  119. {
  120. return new datalist
  121. (
  122. set::className('task-basic-info'),
  123. set::items($this->getItems())
  124. );
  125. }
  126. }