create.html.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. /**
  3. * The UI file of story module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Wang Yidong <yidong@easycorp.ltd>
  8. * @package story
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. $forceReview = $this->story->checkForceReview();
  13. $params = $app->getParams();
  14. array_shift($params);
  15. jsVar('createParams', http_build_query($params));
  16. jsVar('storyType', $type);
  17. jsVar('feedbackSource', $config->story->feedbackSource);
  18. jsVar('branchCount', isset($fields['branches']['options']) ? count($fields['branches']['options']) : 0);
  19. formPanel
  20. (
  21. set::ajax(array('beforeSubmit' => jsRaw('clickSubmit'))),
  22. set::id('dataform'),
  23. to::heading(div
  24. (
  25. setClass('panel-title text-lg'),
  26. $lang->story->create,
  27. !$forceReview ? checkbox(set::id('needNotReview'), set::rootClass('text-base font-medium'), set::value(1), set::text($lang->story->needNotReview), set::checked($needReview), on::change('toggleReviewer(e.target)')) : null
  28. )),
  29. set::actions(array
  30. (
  31. array('text' => $lang->save, 'data-status' => 'active', 'class' => 'primary', 'btnType' => 'submit'),
  32. array('text' => $lang->story->saveDraft, 'data-status' => 'draft', 'class' => 'secondary', 'btnType' => 'submit'),
  33. array('text' => $lang->goback, 'data-back' => 'APP', 'class' => 'open-url')
  34. )),
  35. set::customFields(true),
  36. formHidden('product', $productID),
  37. formHidden('project', !empty($projectID) ? $projectID : 0),
  38. formRow
  39. (
  40. formGroup
  41. (
  42. set::width('1/2'),
  43. set::label($lang->story->module),
  44. set::required(strpos($config->story->create->requiredFields, 'module') !== false),
  45. modulePicker
  46. (
  47. set::required(true),
  48. set::manageLink($this->createLink('tree', 'browse', "rootID=$productID&view=story&currentModuleID=0&branch=$branch")),
  49. set::value($fields['modules']['default']),
  50. set::items($fields['modules']['options'])
  51. )
  52. )
  53. ),
  54. $type != 'story' ? formRow
  55. (
  56. formGroup
  57. (
  58. set::width('1/2'),
  59. set::label($lang->story->assignedTo),
  60. inputGroup
  61. (
  62. set::id('assignedToBox'),
  63. picker(setID('assignedTo'), set::name('assignedTo'), set::items($fields['assignedTo']['options']), set::value($fields['assignedTo']['default']))
  64. )
  65. ),
  66. formGroup
  67. (
  68. set::width('1/4'),
  69. set::label($lang->story->source),
  70. picker(setID('source'), set::name('source'), set::items($fields['source']['options']), set::value($fields['source']['default']))
  71. ),
  72. formGroup
  73. (
  74. set::width('1/4'),
  75. set::label($lang->story->sourceNote),
  76. input(set::name('sourceNote'), set::value($fields['sourceNote']['default']))
  77. )
  78. ) : null,
  79. formRow
  80. (
  81. set::id('reviewerBox'),
  82. set::hidden(!$forceReview),
  83. formGroup
  84. (
  85. set::width('1/2'),
  86. set::label($lang->story->reviewer),
  87. set::required(true),
  88. inputGroup
  89. (
  90. picker
  91. (
  92. setID('reviewer'),
  93. set::name('reviewer[]'),
  94. set::multiple(true),
  95. set::items($fields['reviewer']['options']),
  96. set::value($fields['reviewer']['default'])
  97. )
  98. ),
  99. formHidden('needNotReview', $forceReview ? 0 : 1)
  100. )
  101. ),
  102. $type == 'story' && !$this->config->URAndSR ? formRow
  103. (
  104. setClass(!empty($hiddenParent) ? 'hidden' : ''),
  105. formGroup
  106. (
  107. set::label($lang->story->parent),
  108. set::name('parent'),
  109. set::items($fields['parent']['options']),
  110. set::value($fields['parent']['default'])
  111. )
  112. ) : null,
  113. isset($executionType) && $executionType == 'kanban' ? formRow
  114. (
  115. formGroup
  116. (
  117. set::width('1/2'),
  118. setID($fields['region']['title']),
  119. set::label($fields['region']['title']),
  120. set::name('region'),
  121. set::items($fields['region']['options']),
  122. set::value($fields['region']['default']),
  123. set('data-on', 'change'),
  124. set('data-call', 'setLane')
  125. ),
  126. formGroup
  127. (
  128. set::width('1/2'),
  129. set::label($fields['lane']['title']),
  130. set::name('lane'),
  131. set::items($fields['lane']['options']),
  132. set::value($fields['lane']['default'])
  133. )
  134. ) : null,
  135. formRow
  136. (
  137. formGroup
  138. (
  139. set::width('3/4'),
  140. set::label($lang->story->title),
  141. set::required($fields['title']['required']),
  142. input(set::name('title'), set::value($fields['title']['default']))
  143. ),
  144. formGroup
  145. (
  146. setClass('no-background'),
  147. set::width('1/4'),
  148. inputGroup
  149. (
  150. $lang->story->pri,
  151. priPicker(set::name('pri'), set::items($fields['pri']['options']), set::value($fields['pri']['default'])),
  152. $lang->story->estimateAB,
  153. input(set::name('estimate'), set::placeholder($lang->story->hour), set::value($fields['estimate']['default']))
  154. )
  155. )
  156. ),
  157. formGroup
  158. (
  159. set::label($lang->story->spec),
  160. editor
  161. (
  162. set::name('spec'),
  163. set::placeholder($lang->story->specTemplate . "\n" . $lang->noticePasteImg),
  164. set::required($fields['spec']['required']),
  165. html($fields['spec']['default'])
  166. )
  167. ),
  168. formGroup
  169. (
  170. set::label($lang->story->legendAttach),
  171. fileSelector()
  172. ),
  173. formGroup
  174. (
  175. set::label($lang->story->mailto),
  176. picker
  177. (
  178. setID('mailto'),
  179. set::name('mailto[]'),
  180. set::items($fields['mailto']['options']),
  181. set::value($fields['mailto']['default']),
  182. set::multiple(true)
  183. )
  184. ),
  185. formGroup
  186. (
  187. set::label($lang->story->keywords),
  188. set::name('keywords'),
  189. set::control('input'),
  190. set::values($fields['keywords']['default'])
  191. ),
  192. formHidden('status', 'active'),
  193. formHidden('type', $type)
  194. );
  195. isset($fields['branches']) && $type == 'story' ? formRow
  196. (
  197. set::id('addBranchesBox'),
  198. setClass('hidden'),
  199. formGroup
  200. (
  201. set::width('1/4'),
  202. set::label(sprintf($lang->product->branch, $lang->product->branchName[$product->type])),
  203. inputGroup
  204. (
  205. set::id('branchBox'),
  206. div(setID('branches'), setClass('form-group-wrapper'))
  207. )
  208. ),
  209. formGroup
  210. (
  211. set::width('1/4'),
  212. set::label($lang->story->module),
  213. inputGroup
  214. (
  215. set::id('moduleIdBox'),
  216. div(setID('modules'), setClass('form-group-wrapper'))
  217. )
  218. ),
  219. formGroup
  220. (
  221. set::label($lang->story->plan),
  222. inputGroup
  223. (
  224. set::id('planIdBox'),
  225. div(setID('plans'), setClass('form-group-wrapper'))
  226. )
  227. ),
  228. formGroup
  229. (
  230. set::width('50px'),
  231. setClass('c-actions'),
  232. btn(setClass('btn-link addNewLine'), set::title(sprintf($lang->story->addBranch, $lang->product->branchName[$product->type])), icon('plus')),
  233. btn(setClass('btn-link removeNewLine'), set::title(sprintf($lang->story->deleteBranch, $lang->product->branchName[$product->type])), icon('trash'))
  234. )
  235. ) : null;
  236. render();