batchcreate.html.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. /**
  3. * The batchCreate view file of task 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 Shujie Tian<tianshujie@easycorp.ltd>
  7. * @package task
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. include($this->app->getModuleRoot() . 'ai/ui/inputinject.html.php');
  12. /* ====== Preparing and processing page data ====== */
  13. jsVar('edition', $config->edition);
  14. jsVar('parentID', (int)$parent);
  15. jsVar('executionID', $execution->id);
  16. jsVar('storyTasks', $storyTasks);
  17. jsVar('parentEstStarted', isset($parentTask) ? $parentTask->estStarted : '');
  18. jsVar('parentDeadline', isset($parentTask) ? $parentTask->deadline : '');
  19. jsVar('ignoreLang', $lang->project->ignore);
  20. jsVar('overParentEstStartedLang', isset($parentTask) ? sprintf($lang->task->overParentEsStarted, $parentTask->estStarted) : '');
  21. jsVar('overParentDeadlineLang', isset($parentTask) ? sprintf($lang->task->overParentDeadline, $parentTask->deadline) : '');
  22. jsVar('taskHasConsumed', $taskConsumed > 0);
  23. jsVar('langAddChildTask', $lang->task->addChildTask);
  24. jsVar('taskDateLimit', $project->taskDateLimit);
  25. /* zin: Set variables to define picker options for form. */
  26. $storyItem = '';
  27. $previewItem = '';
  28. $copyStoryItem = '';
  29. $storyEstimateItem = '';
  30. $storyDescItem = '';
  31. $storyPriItem = '';
  32. if(!$hideStory)
  33. {
  34. $storyItem = formBatchItem(
  35. set::name('story'),
  36. set::label($lang->task->story),
  37. set::control('picker'),
  38. set::items($stories),
  39. set::value($storyID),
  40. set::width('240px'),
  41. set::ditto(true)
  42. );
  43. $previewItem = formBatchItem(
  44. set::name('preview'),
  45. set::label(''),
  46. set('labelClass', 'hidden'),
  47. set::width('40px'),
  48. set::control('hidden'),
  49. btn
  50. (
  51. set(
  52. array
  53. (
  54. 'type' => 'btn',
  55. 'icon' => 'eye',
  56. 'class' => 'ghost',
  57. 'hint' => $lang->preview,
  58. 'data-url' => empty($storyID) ? '#' : createLink('story', 'view', "storyID={$storyID}"),
  59. 'data-toggle' => 'modal',
  60. 'data-size' => 'lg',
  61. 'disabled' => empty($storyID)
  62. )
  63. )
  64. )
  65. );
  66. $copyStoryItem = formBatchItem(
  67. set::name('copyStory'),
  68. set::label(''),
  69. set('labelClass', 'hidden'),
  70. set::width('40px'),
  71. set::control('hidden'),
  72. btn
  73. (
  74. set(
  75. array
  76. (
  77. 'type' => 'btn',
  78. 'icon' => 'arrow-right',
  79. 'class' => 'ghost',
  80. 'hint' => $lang->task->copyStoryTitle
  81. )
  82. )
  83. )
  84. );
  85. $storyEstimateItem = formBatchItem(
  86. set::hidden(true),
  87. set::name('storyEstimate'),
  88. set::label(''),
  89. set('labelClass', 'hidden'),
  90. set::value(isset($story->estimate) ? $story->estimate : ''),
  91. set::control('hidden')
  92. );
  93. $storyDescItem = formBatchItem(
  94. set::hidden(true),
  95. set::name('storyDesc'),
  96. set::label(''),
  97. set('labelClass', 'hidden'),
  98. set::value(isset($story->desc) ? $story->desc : ''),
  99. set::control('hidden')
  100. );
  101. $storyPriItem = formBatchItem(
  102. set::hidden(true),
  103. set::name('storyPri'),
  104. set::label(''),
  105. set('labelClass', 'hidden'),
  106. set::value(isset($story->pri) ? $story->pri : '3'),
  107. set::control('hidden')
  108. );
  109. }
  110. /* Field of region and lane. */
  111. $regionItem = '';
  112. $laneItem = '';
  113. if($execution->type == 'kanban')
  114. {
  115. $regionItem = formBatchItem(
  116. set::name('region'),
  117. set::label($lang->kanbancard->region),
  118. set::control('picker'),
  119. set::value($regionID),
  120. set::items($regionPairs),
  121. set::width('160px'),
  122. set::ditto(true),
  123. set::required(true),
  124. set::hidden($config->vision == 'lite')
  125. );
  126. $laneItem = formBatchItem(
  127. set::name('lane'),
  128. set::label($lang->kanbancard->lane),
  129. set::control('picker'),
  130. set::value($laneID),
  131. set::items($lanePairs),
  132. set::width('160px'),
  133. set::ditto(true),
  134. set::required(true),
  135. set::hidden($config->vision == 'lite')
  136. );
  137. }
  138. $batchFormOptions = array();
  139. $batchFormOptions['fixedActions'] = true; // 滚动时固定操作列。
  140. $batchFormOptions['actions'] = array(array('type' => 'addSibling', 'icon' => 'icon-plus', 'text' => $lang->task->addSibling), array('type' => 'addSub', 'icon' => 'icon-split', 'text' => $lang->task->addSub), 'delete');
  141. $batchFormOptions['onClickAction'] = jsRaw('window.handleClickBatchFormAction'); // 定义操作列按钮点击事件处理函数。
  142. $batchFormOptions['onRenderRow'] = jsRaw('window.handleRenderRow'); // 定义行渲染事件处理函数。
  143. if($config->vision == 'lite') unset($batchFormOptions['fixedActions'], $batchFormOptions['actions'], $batchFormOptions['onClickAction']);
  144. /* ====== Define the page structure with zin widgets ====== */
  145. formBatchPanel
  146. (
  147. set::id('taskBatchCreateForm'),
  148. set::title($lang->task->batchCreate),
  149. set::pasteField('name'),
  150. set::customFields(array('list' => $customFields, 'show' => explode(',', $showFields), 'key' => 'batchCreateFields')),
  151. set::headingActionsClass('flex-auto row-reverse justify-between w-11/12'),
  152. set::batchFormOptions($batchFormOptions),
  153. to::headingActions
  154. (
  155. checkbox
  156. (
  157. setID('zeroTaskStory'),
  158. set::text($lang->story->zeroTask),
  159. set::rootClass('items-center'),
  160. on::change('toggleZeroTaskStory')
  161. )
  162. ),
  163. formBatchItem
  164. (
  165. set::name('module'),
  166. set::label($lang->task->module),
  167. set::control('picker'),
  168. set::value($moduleID),
  169. set::items($modules),
  170. set::width('200px'),
  171. set::ditto(true)
  172. ),
  173. $storyItem,
  174. $previewItem,
  175. $copyStoryItem,
  176. $storyEstimateItem,
  177. $storyDescItem,
  178. $storyPriItem,
  179. formBatchItem
  180. (
  181. set::name('name'),
  182. set::control('colorInput'),
  183. set::label($lang->task->name),
  184. set::width('240px')
  185. ),
  186. formBatchItem
  187. (
  188. set::name('isParent'),
  189. set::control('hidden'),
  190. set::value('0')
  191. ),
  192. $regionItem,
  193. $laneItem,
  194. formBatchItem
  195. (
  196. set::name('type'),
  197. set::label($lang->task->type),
  198. set::control('picker'),
  199. set::items($lang->task->typeList),
  200. set::value('devel'),
  201. set::width('160px'),
  202. set::ditto(true)
  203. ),
  204. formBatchItem
  205. (
  206. set::name('assignedTo'),
  207. set::label($lang->task->assignedTo),
  208. set::control(array('control' => 'taskAssignedTo', 'manageLink' => ($manageLink ? $manageLink : ''))),
  209. set::items($members),
  210. set::width('128px'),
  211. set::ditto(true)
  212. ),
  213. formBatchItem
  214. (
  215. set::name('pri'),
  216. set::label($lang->task->pri),
  217. set::control(array('control' => 'priPicker', 'required' => true)),
  218. set::value(3),
  219. set::ditto(true),
  220. set::items($lang->task->priList),
  221. set::width('110px')
  222. ),
  223. formBatchItem
  224. (
  225. set::name('estimate'),
  226. set::label($lang->task->estimateAB),
  227. set::width('110px'),
  228. set::ditto(true),
  229. set::control
  230. (
  231. array(
  232. 'type' => 'inputControl',
  233. 'suffix' => $lang->task->suffixHour,
  234. 'suffixWidth' => 20
  235. )
  236. )
  237. ),
  238. formBatchItem
  239. (
  240. set::name('estStarted'),
  241. set::label($lang->task->estStarted),
  242. set::control('date'),
  243. set::width('128px'),
  244. set::ditto(true)
  245. ),
  246. formBatchItem
  247. (
  248. set::name('deadline'),
  249. set::label($lang->task->deadline),
  250. set::control('date'),
  251. set::width('128px'),
  252. set::ditto(true)
  253. ),
  254. formBatchItem
  255. (
  256. set::name('desc'),
  257. set::label($lang->task->desc),
  258. set::control('textarea'),
  259. set::width('240px')
  260. ),
  261. on::change('[data-name="module"]', 'setStories'),
  262. on::change('input[name^=story]', 'setStoryRelated'),
  263. on::click('[data-name=story] [data-type=ditto]', 'setStoryRelated'),
  264. on::click('[data-name="copyStory"]', 'copyStoryTitle'),
  265. on::change('[data-name="region"]', 'loadLanes'),
  266. on::change('[data-name="estStarted"], [data-name="deadline"]', 'checkBatchEstStartedAndDeadline')
  267. );
  268. /* ====== Render page ====== */
  269. render();