create.field.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. namespace zin;
  3. global $lang,$config;
  4. $fields = defineFieldList('task.create', 'task');
  5. /* Set module field. */
  6. $fields->field('module')
  7. ->checkbox(array('text' => $lang->task->allModule, 'name' => 'isShowAllModule', 'checked' => data('showAllModule')))
  8. ->control(array('control' => 'picker', 'required' => true))
  9. ->items(data('modulePairs'))
  10. ->value(data('task.module'));
  11. $fields->field('desc')
  12. ->width('full')
  13. ->control(array('control' => 'editor', 'templateType' => 'task'));
  14. $files = data('task.files') ? data('task.files') : array();
  15. $fields->field('files')->control('fileSelector', array('defaultFiles' => array_values($files)));
  16. $fields->field('fileList')->control('hidden')->value($files);
  17. /* Set foldable attribute. */
  18. $fields->field('module')->foldable();
  19. $fields->field('files')->foldable();
  20. $fields->field('mailto')->foldable();
  21. $fields->field('keywords')->foldable();
  22. /* Set assignedTo field. */
  23. $buildAssignedTo = function()
  24. {
  25. $assignedToListBox = null;
  26. if(!empty(data('task.team')))
  27. {
  28. $i = 1;
  29. foreach(data('task.team') as $member)
  30. {
  31. $users = data('users');
  32. $assignedToListBox .= "<div class='picker-multi-selection' data-index={$i}><span class='text'>{$users[$member->account]}</span><div class='picker-deselect-btn btn size-xs ghost'><span class='close'></span></div></div>";
  33. if($i < count(data('task.team')) && data('task.mode') == 'linear') $assignedToListBox .= '<i class="icon icon-arrow-right"></i>';
  34. $i ++;
  35. }
  36. }
  37. $hiddenTeamBtn = empty(data('task.team')) ? 'hidden' : '';
  38. return div
  39. (
  40. setClass('assignedToBox flex border rounded h-8'),
  41. taskAssignedTo
  42. (
  43. setClass($hiddenTeamBtn ? '' : 'hidden'),
  44. set::name('assignedTo'),
  45. set::value(data('task.assignedTo')),
  46. set::items(data('members')),
  47. data('manageLink') ? set::manageLink(data('manageLink')) : null
  48. ),
  49. btn
  50. (
  51. set
  52. (
  53. array
  54. (
  55. 'class' => "btn primary-pale add-team mr-3 $hiddenTeamBtn",
  56. 'data-toggle' => 'modal',
  57. 'url' => '#modalTeam',
  58. 'icon' => 'plus'
  59. )
  60. ),
  61. data('lang.task.addMember')
  62. ),
  63. div
  64. (
  65. setClass('assignedToList'),
  66. html($assignedToListBox)
  67. )
  68. );
  69. };
  70. if($config->vision != 'lite')
  71. {
  72. $fields->field('parent')
  73. ->label($lang->task->parent)
  74. ->control('picker')
  75. ->items(data('parents'));
  76. }
  77. $fields->field('assignedToBox')
  78. ->label($lang->task->assignedTo)
  79. ->required(strpos($config->task->create->requiredFields, 'assignedTo') !== false)
  80. ->checkbox(array('text' => $lang->task->multiple, 'name' => 'multiple', 'checked' => !empty(data('task.mode'))))
  81. ->control($buildAssignedTo);
  82. /* Set name field width. */
  83. $nameWidth = 'w-full';
  84. if(empty(data('features.story')) && data('execution.type') != 'kanban' && !empty(data('execution.multiple'))) $nameWidth .= ' full:w-full';
  85. if(data('execution.type') == 'kanban') $nameWidth .= ' lite:w-full';
  86. if(data('execution.lifetime') == 'ops') $nameWidth = ' w-1/2';
  87. $fields->field('name')->className($nameWidth);
  88. if(!empty(data('features.story')) && (data('execution.type') == 'kanban' || empty(data('execution.multiple'))))
  89. {
  90. $fields->field('module')->wrapBefore();
  91. }
  92. /* Set region and lane fieldList. */
  93. $fields->field('region')
  94. ->hidden(data('execution.type') != 'kanban')
  95. ->label(data('lang.kanbancard.region'))
  96. ->control('picker', array('required' => true))
  97. ->items(data('regionPairs') ? data('regionPairs') : array())
  98. ->value(data('regionID'));
  99. $fields->field('lane')
  100. ->hidden(data('execution.type') != 'kanban')
  101. ->label(data('lang.kanbancard.lane'))
  102. ->control('picker', array('required' => true))
  103. ->items(data('lanePairs') ? data('lanePairs') : array())
  104. ->value(data('laneID'));
  105. /* Set story field control. */
  106. $buildStoryBox = function()
  107. {
  108. if(!empty(data('execution.hasProduct')))
  109. {
  110. $executionID = data('execution.id');
  111. $storyEmptyPreTip = span
  112. (
  113. setClass('input-control-prefix opacity-100'),
  114. span(setClass('opacity-50'), data('lang.task.noticeLinkStory')),
  115. a
  116. (
  117. set::href(createLink('execution', 'linkStory', "executionID={$executionID}")),
  118. setClass('text-primary'),
  119. isInModal() ? setData('toggle', 'modal') : null,
  120. isInModal() ? setData('size', 'lg') : null,
  121. !isInModal() ? set('target', '_blank') : null,
  122. setData('app', data('app.tab')),
  123. data('lang.execution.linkStory')
  124. )
  125. );
  126. }
  127. else
  128. {
  129. $storyEmptyPreTip = span
  130. (
  131. setClass('input-control-prefix'),
  132. span(data('lang.task.noticeLinkStoryNoProduct'))
  133. );
  134. }
  135. return div
  136. (
  137. inputGroup
  138. (
  139. setClass('setStoryBox'),
  140. setClass(empty(data('stories')) ? 'hidden' : ''),
  141. picker
  142. (
  143. set::name('story'),
  144. set::value(data('task.story')),
  145. set::items(data('stories'))
  146. ),
  147. btn
  148. (
  149. setID('preview'),
  150. setClass('hidden'),
  151. setData('toggle', 'modal'),
  152. setData('url', '#'),
  153. setData('size', 'lg'),
  154. icon('eye text-gray')
  155. )
  156. ),
  157. inputGroup(setClass('empty-story-tip input-control has-prefix has-suffix'), setClass(empty(data('stories')) ? '' : 'hidden'), $storyEmptyPreTip, input
  158. (
  159. set::name(''),
  160. set('readonly'),
  161. set('onfocus', 'this.blur()')
  162. ))
  163. );
  164. };
  165. $fields->field('storyBox')
  166. ->required(strpos($config->task->create->requiredFields, 'story') !== false)
  167. ->label($lang->task->story)
  168. ->checkbox(array('text' => $lang->task->syncStory, 'name' => 'copyButton'))
  169. ->hidden(!data('features.story'))
  170. ->foldable()
  171. ->control($buildStoryBox);
  172. /* Remove story relate jump link. */
  173. if(!isAjaxRequest('modal'))
  174. {
  175. $fields->field('after')
  176. ->label($lang->task->afterSubmit)
  177. ->width('full')
  178. ->control(array('control' => 'radioList', 'inline' => true))
  179. ->value(data('task.id') ? 'continueAdding' : 'toTaskList')
  180. ->items(empty(data('features.story')) ? array('toTaskList' => $lang->task->afterChoices['toTaskList']) : $config->task->afterOptions);
  181. }
  182. if(!empty(data('features.story')) && empty(data('storyID'))) $fields->field('type')->checkbox(array('text' => $lang->task->selectTestStory, 'name' => 'selectTestStory', 'typeClass' => 'hidden checkbox'));
  183. /* Set hidden control. */
  184. $fields->field('storyEstimate')
  185. ->hidden()
  186. ->control('input');
  187. $fields->field('storyDesc')
  188. ->hidden()
  189. ->control('input');
  190. $fields->field('storyPri')
  191. ->hidden()
  192. ->control('input')
  193. ->value('0');
  194. $fields->field('taskName')
  195. ->hidden()
  196. ->control('input');
  197. $fields->field('taskEstimate')
  198. ->hidden()
  199. ->control('input');
  200. /* Set test story task control. */
  201. $buildTestStoryBox = function()
  202. {
  203. return div(setID('testStoryBox'));
  204. };
  205. $fields->field('testStoryBox')
  206. ->label($lang->task->selectTestStory)
  207. ->labelHint($lang->task->selectTestStoryTip)
  208. ->width('full')
  209. ->hidden()
  210. ->control($buildTestStoryBox);