task.html.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /**
  3. * The task view file of my 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 Yuting Wang <wangyuting@easycorp.ltd>
  7. * @package my
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. include 'header.html.php';
  12. jsVar('todayLabel', $lang->today);
  13. jsVar('yesterdayLabel', $lang->yesterday);
  14. jsVar('childrenAB', $lang->task->childrenAB);
  15. jsVar('parentAB', $lang->task->parentAB);
  16. jsVar('multipleAB', $lang->task->multipleAB);
  17. jsVar('delayWarning', $lang->task->delayWarning);
  18. featureBar
  19. (
  20. set::current($type),
  21. set::linkParams("mode={$mode}&type={key}&param=&orderBy={$orderBy}"),
  22. li(searchToggle(set::module($this->app->rawMethod . 'Task'), set::open($type == 'bySearch')))
  23. );
  24. $viewType = $this->cookie->taskViewType ? $this->cookie->taskViewType : 'tree';
  25. toolbar
  26. (
  27. item(set(array
  28. (
  29. 'type' => 'btnGroup',
  30. 'items' => array(array
  31. (
  32. 'icon' => 'list',
  33. 'class' => 'btn-icon switchButton' . ($viewType == 'tiled' ? ' text-primary' : ''),
  34. 'data-type' => 'tiled',
  35. 'hint' => $lang->task->viewTypeList['tiled']
  36. ), array
  37. (
  38. 'icon' => 'treeview',
  39. 'class' => 'switchButton btn-icon' . ($viewType == 'tree' ? ' text-primary' : ''),
  40. 'data-type' => 'tree',
  41. 'hint' => $lang->task->viewTypeList['tree']
  42. ))
  43. )))
  44. );
  45. if($viewType == 'tiled')
  46. {
  47. $config->my->task->dtable->fieldList['name']['nestedToggle'] = false;
  48. $tasks = $this->task->mergeChildIntoParent($tasks);
  49. }
  50. $canBatchEdit = common::hasPriv('task', 'batchEdit');
  51. $canBatchClose = common::hasPriv('task', 'batchClose') && $type != 'closedBy';
  52. $footToolbar = array('items' => array
  53. (
  54. $canBatchEdit ? array('text' => $lang->edit, 'className' => 'batch-btn', 'data-url' => helper::createLink('task', 'batchEdit', "executionID=0&from={$app->rawMethod}")) : array(),
  55. $canBatchClose ? array('text' => $lang->close, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('task', 'batchClose')) : array()
  56. ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary'));
  57. if($type == 'assignedTo') unset($config->my->task->dtable->fieldList['assignedTo']);
  58. if($type == 'openedBy') unset($config->my->task->dtable->fieldList['openedBy']);
  59. if($type == 'finishedBy') unset($config->my->task->dtable->fieldList['finishedBy']);
  60. $tasks = initTableData($tasks, $config->my->task->dtable->fieldList, $this->task);
  61. $cols = array_values($config->my->task->dtable->fieldList);
  62. $lang->task->statusList['changed'] = $lang->task->storyChange;
  63. foreach($tasks as $task)
  64. {
  65. if(!isset($task->rawStatus)) $task->rawStatus = $task->status;
  66. $task->status = $this->processStatus('task', $task);
  67. if($app->rawMethod == 'contribute') $task = $this->task->processConfirmStoryChange($task);
  68. }
  69. $data = array_values($tasks);
  70. if($config->edition == 'ipd')
  71. {
  72. static $canStartExecution = '';
  73. static $executionID = '';
  74. foreach($data as $task)
  75. {
  76. if(empty($canStartExecution) || $executionID != $task->execution)
  77. {
  78. $executionID = $task->execution;
  79. $canStartExecution = $this->execution->checkStageStatus($executionID, 'start');
  80. }
  81. if(!empty($canStartExecution['disabled']))
  82. {
  83. foreach($task->actions as $key => $action)
  84. {
  85. if(in_array($action['name'], array('start', 'finish', 'record')))
  86. {
  87. $tip = $action['name'] == 'record' ? 'recordWorkhourTip' : $action['name'] . 'Tip';
  88. $task->actions[$key]['disabled'] = true;
  89. $task->actions[$key]['hint'] = $lang->task->disabledTip->$tip;
  90. }
  91. }
  92. }
  93. $task->estimate = helper::formatHours($task->estimate);
  94. $task->consumed = helper::formatHours($task->consumed);
  95. $task->left = helper::formatHours($task->left);
  96. }
  97. }
  98. dtable
  99. (
  100. set::cols($cols),
  101. set::data($data),
  102. set::userMap($users),
  103. set::fixedLeftWidth('44%'),
  104. set::noNestedCheck(true),
  105. set::onRenderCell(jsRaw('window.renderCell')),
  106. set::checkable(true),
  107. set::defaultSummary(array('html' => $summary)),
  108. set::checkedSummary($lang->execution->checkedSummary),
  109. set::checkInfo(jsRaw('function(checkedIDList){return window.setStatistics(this, checkedIDList);}')),
  110. set::canRowCheckable(jsRaw('function(rowID){return this.getRowInfo(rowID).data.canBeChanged;}')),
  111. set::orderBy($orderBy),
  112. set::sortLink(createLink('my', $app->rawMethod, "mode={$mode}&type={$type}&param={$param}&orderBy={name}_{sortType}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")),
  113. set::footToolbar($footToolbar),
  114. set::footPager(usePager()),
  115. set::emptyTip($lang->task->noTask)
  116. );
  117. render();