treetask.html.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. /**
  3. * The treetask view file of execution module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Yanyi Cao <caoyanyi@easycorp.ltd>
  7. * @package execution
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. div
  12. (
  13. setClass('section-list', 'canvas', 'pt-4', 'pb-6', 'px-4', 'mb-4'),
  14. div
  15. (
  16. setClass('flex items-center flex-nowrap mb-4'),
  17. label
  18. (
  19. setClass('flex-none rounded-full gray-outline'),
  20. $task->id
  21. ),
  22. $task->isParent ? label
  23. (
  24. setClass('flex-none rounded-full dark-outline ml-2'),
  25. $this->lang->task->parentAB
  26. ) : null,
  27. $task->parent > 0 && !$task->isParent ? label
  28. (
  29. setClass('flex-none rounded-full dark-outline ml-2'),
  30. $this->lang->task->childrenAB
  31. ) : null,
  32. !empty($task->mode) ? label
  33. (
  34. setClass('flex-none rounded-full dark-outline ml-2'),
  35. $this->lang->task->multipleAB
  36. ) : null,
  37. span
  38. (
  39. setClass('text-lg font-bold mx-2 clip'),
  40. (isset($task->parentName) ? $task->parentName . '/' : '') . $task->name
  41. ),
  42. label
  43. (
  44. setClass('flex-none rounded-full task-status status-' . $task->status),
  45. $this->processStatus('task', $task)
  46. )
  47. ),
  48. div
  49. (
  50. setClass('flex items-center flex-wrap mb-4'),
  51. div
  52. (
  53. setClass('w-1/3'),
  54. $lang->task->estimate,
  55. span
  56. (
  57. setClass('ml-2 font-bold'),
  58. helper::formatHours($task->estimate) . ' ' . $lang->execution->workHourUnit
  59. )
  60. ),
  61. div
  62. (
  63. setClass('w-1/3'),
  64. $lang->task->consumedAB,
  65. span
  66. (
  67. setClass('ml-2 font-bold'),
  68. helper::formatHours($task->consumed) . ' ' . $lang->execution->workHourUnit
  69. )
  70. ),
  71. div
  72. (
  73. setClass('w-1/3'),
  74. $lang->task->leftAB,
  75. span
  76. (
  77. setClass('ml-2 font-bold'),
  78. helper::formatHours($task->left) . ' ' . $lang->execution->workHourUnit
  79. )
  80. ),
  81. div
  82. (
  83. setClass('w-full mt-4'),
  84. $lang->task->type,
  85. span
  86. (
  87. setClass('ml-2 font-bold'),
  88. $lang->task->typeList[$task->type]
  89. )
  90. ),
  91. helper::isZeroDate($task->deadline) ? null : div
  92. (
  93. setClass('w-full mt-4'),
  94. $lang->task->deadline,
  95. span
  96. (
  97. setClass('ml-2 font-bold'),
  98. $task->deadline
  99. ),
  100. isset($task->delay) ? label
  101. (
  102. setClass('flex-none rounded-full danger-pale ml-2'),
  103. html(sprintf($lang->task->delayWarning, $task->delay))
  104. ) : null
  105. )
  106. ),
  107. btngroup
  108. (
  109. setID('actionButtons'),
  110. setClass('mb-4'),
  111. ($task->status == 'wait' && hasPriv('task', 'finish')) && common::hasDBPriv($task, 'task', 'finish')? btn
  112. (
  113. setClass('text-primary'),
  114. set::icon('checked'),
  115. set::hint($lang->task->finish),
  116. set::url(createLink('task', 'finish', array('taskID' => $task->id))),
  117. set::disabled(!$this->task->isClickable($task, 'finish')),
  118. set('data-toggle', 'modal')
  119. ) : null,
  120. ($task->status == 'wait' && hasPriv('task', 'start')) && common::hasDBPriv($task, 'task', 'start') ? btn
  121. (
  122. setClass('text-primary'),
  123. set::icon('play'),
  124. set::hint($lang->task->start),
  125. set::url(createLink('task', 'start', array('taskID' => $task->id))),
  126. set::disabled(!$this->task->isClickable($task, 'start')),
  127. set('data-toggle', 'modal')
  128. ) : null,
  129. ($task->status == 'pause' && hasPriv('task', 'restart')) && common::hasDBPriv($task, 'task', 'restart') ? btn
  130. (
  131. setClass('text-primary'),
  132. set::icon('restart'),
  133. set::hint($lang->task->restart),
  134. set::url(createLink('task', 'restart', array('taskID' => $task->id))),
  135. set::disabled(!$this->task->isClickable($task, 'restart')),
  136. set('data-toggle', 'modal')
  137. ) : null,
  138. (($task->status == 'done' || $task->status == 'cancel' || $task->status == 'closed') && hasPriv('task', 'close')) && common::hasDBPriv($task, 'task', 'close') ? btn
  139. (
  140. setClass('text-primary'),
  141. set::icon('off'),
  142. set::hint($lang->task->close),
  143. set::url(createLink('task', 'close', array('taskID' => $task->id))),
  144. set::disabled(!$this->task->isClickable($task, 'close')),
  145. set('data-toggle', 'modal')
  146. ) : null,
  147. ($task->status == 'doing' && hasPriv('task', 'finish')) && common::hasDBPriv($task, 'task', 'finish') ? btn
  148. (
  149. setClass('text-primary'),
  150. set::icon('checked'),
  151. set::hint($lang->task->finish),
  152. set::url(createLink('task', 'finish', array('taskID' => $task->id))),
  153. set::disabled(!$this->task->isClickable($task, 'finish')),
  154. set('data-toggle', 'modal')
  155. ) : null,
  156. hasPriv('task', 'recordWorkhour') && common::hasDBPriv($task, 'task', 'recordWorkhour') ? btn
  157. (
  158. setClass('text-primary'),
  159. set::icon('time'),
  160. set::hint($lang->task->recordWorkhour),
  161. set::url(createLink('task', 'recordWorkhour', array('taskID' => $task->id))),
  162. set::disabled(!$this->task->isClickable($task, 'recordWorkhour')),
  163. set('data-toggle', 'modal')
  164. ) : null,
  165. hasPriv('task', 'edit') && common::hasDBPriv($task, 'task', 'edit') ? btn
  166. (
  167. setClass('text-primary'),
  168. set::icon('edit'),
  169. set::hint($lang->task->edit),
  170. set::url(createLink('task', 'edit', array('taskID' => $task->id))),
  171. set::disabled(!$this->task->isClickable($task, 'edit')),
  172. set('data-app', $app->tab)
  173. ) : null,
  174. ((empty($task->team) || empty($task->children)) && hasPriv('task', 'batchCreate') && $config->vision != 'lite' && common::hasDBPriv($task, 'task', 'batchCreate')) ? btn
  175. (
  176. setClass('text-primary'),
  177. set::icon('split'),
  178. set::hint($lang->task->batchCreate),
  179. set::url(createLink('task', 'batchCreate', "execution={$task->execution}&storyID={$task->story}&moduleID={$task->module}&askID={$task->id}&ifame=0")),
  180. set::disabled(!$this->task->isClickable($task, 'batchCreate')),
  181. set('data-app', $app->tab)
  182. ) : null
  183. ),
  184. section
  185. (
  186. set::title($lang->task->legendDesc),
  187. set::content(empty($task->desc) ? $lang->noData : $task->desc),
  188. set::useHtml(true)
  189. )
  190. );
  191. history
  192. (
  193. set::objectType('task'),
  194. set::objectID($task->id),
  195. set::commentBtn(true),
  196. set::commentUrl(createLink('action', 'comment', array('objectType' => 'task', 'objectID' => $task->id)))
  197. );