create.field.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. namespace zin;
  3. global $lang, $config;
  4. $uid = uniqid();
  5. $fields = defineFieldList('story.create');
  6. $createFields = data('fields');
  7. $type = data('type');
  8. $gradeRule = data('gradeRule');
  9. $isSR = $type == 'story';
  10. $isBranchUR = isset($createFields['branch']) && $type != 'story';
  11. $isKanban = data('executionType') == 'kanban';
  12. $fields->field('product')
  13. ->hidden(data('product.shadow'))
  14. ->required()
  15. ->control('inputGroup')
  16. ->items(false)
  17. ->itemBegin('product')->control('picker')->items($createFields['product']['options'])->value($createFields['product']['default'])->required(true)->itemEnd()
  18. ->item($isBranchUR ? field('branch')->control('picker')->boxClass('flex-none')->width('100px')->name('branch')->items($createFields['branch']['options'])->value($createFields['branch']['default']) : null);
  19. $fields->field('module')
  20. ->wrapAfter(true)
  21. ->required($createFields['module']['required'])
  22. ->control(array('control' => 'modulePicker', 'required' => true, 'manageLink' => createLink('tree', 'browse', 'rootID=' . data('productID') . '&view=story&currentModuleID=0&branch=' . data('branch'))))
  23. ->items($createFields['module']['options'])
  24. ->value($createFields['module']['default']);
  25. if(isset($createFields['branch']) && $type == 'story') $fields->remove('module');
  26. $fields->field('twinsStory')
  27. ->width('full')
  28. ->hidden(!isset($createFields['branch']) || $type != 'story')
  29. ->control(array
  30. (
  31. 'type' => 'twinsstory',
  32. 'productType' => data('product.type'),
  33. 'branchItems' => $createFields['branch']['options'] ?? array(),
  34. 'defaultBranch' => $createFields['branch']['default'] ?? 0,
  35. 'moduleItems' => $createFields['module']['options'],
  36. 'defaultModule' => $createFields['module']['default'],
  37. 'planItems' => isset($createFields['plan']['options']) ? $createFields['plan']['options'] : array(),
  38. 'defaultPlan' => isset($createFields['plan']['default']) ? $createFields['plan']['default'] : 0,
  39. ));
  40. $fields->field('parent')
  41. ->id('parentBox')
  42. ->items($createFields['parent']['options'])
  43. ->value($createFields['parent']['default']);
  44. $fields->field('grade')
  45. ->disabled($gradeRule == 'stepwise')
  46. ->required()
  47. ->items($createFields['grade']['options'])
  48. ->value($createFields['grade']['default']);
  49. $fields->field('reviewer')
  50. ->hidden(!data('forceReview') && !empty(data('needNotReview')))
  51. ->width('full')
  52. ->required()
  53. ->control('inputGroup')
  54. ->id('reviewerBox')
  55. ->items(false)
  56. ->itemBegin('reviewer[]')->control('picker')->id('reviewer')->items($createFields['reviewer']['options'])->value($createFields['reviewer']['default'])->multiple()->itemEnd();
  57. $fields->field('needNotReview')->control('hidden')->value(data('forceReview') ? 0 : 1);
  58. $fields->field('assignedTo')
  59. ->required($createFields['assignedTo']['required'])
  60. ->id('assignedToBox')
  61. ->items($createFields['assignedTo']['options']);
  62. $fields->field('category')
  63. ->required($createFields['category']['required'])
  64. ->items($lang->{$type}->categoryList)
  65. ->value($createFields['category']['default']);
  66. if($isKanban)
  67. {
  68. $fields->field('region')
  69. ->wrapBefore(true)
  70. ->label($createFields['region']['title'])
  71. ->items($createFields['region']['options'])
  72. ->value($createFields['region']['default']);
  73. $fields->field('lane')
  74. ->required($createFields['lane']['required'])
  75. ->label($createFields['lane']['title'])
  76. ->items($createFields['lane']['options'])
  77. ->value($createFields['lane']['default']);
  78. }
  79. $fields->field('title')
  80. ->wrapBefore(true)
  81. ->control('colorInput')
  82. ->required($createFields['title']['required'])
  83. ->value($createFields['title']['default']);
  84. $fields->field('pri')
  85. ->width('1/4')
  86. ->required($createFields['pri']['required'])
  87. ->control('priPicker')
  88. ->items($lang->{$type}->priList)
  89. ->value($createFields['pri']['default']);
  90. $fields->field('estimate')
  91. ->width('1/4')
  92. ->required($createFields['estimate']['required'])
  93. ->label($lang->story->estimateAB . $lang->story->estimateUnit)
  94. ->value($createFields['estimate']['default']);
  95. $fields->field('spec')
  96. ->width('full')
  97. ->required($createFields['spec']['required'])
  98. ->control(array('control' => 'editor', 'templateType' => 'story', 'uid' => $uid))
  99. ->placeholder($lang->story->specTemplate . "\n" . $lang->noticePasteImg)
  100. ->value($createFields['spec']['default']);
  101. $fields->field('verify')
  102. ->width('full')
  103. ->required($createFields['verify']['required'])
  104. ->control(array('control' => 'editor', 'uid' => $uid))
  105. ->value($createFields['verify']['default']);
  106. $files = data('story.files') ? data('story.files') : array();
  107. $fields->field('files')->width('full')->control('fileSelector', array('defaultFiles' => array_values($files)));
  108. $fields->field('fileList')->control('hidden')->value($files);
  109. if(!(isset($createFields['branch']) && $type == 'story') && isset($createFields['plan']))
  110. {
  111. $fields->field('plan')
  112. ->foldable()
  113. ->required($createFields['plan']['required'])
  114. ->control('inputGroup')
  115. ->items(false)
  116. ->itemBegin('plan')->control('picker')->id('planIdBox')->items($createFields['plan']['options'])->value($createFields['plan']['default'])->multiple($type != 'story')->itemEnd()
  117. ->item(empty($createFields['plan']['options']) && hasPriv('productplan', 'create') ? field()->control('btn')->icon('plus')->url(createLink('productplan', 'create', 'productID=' . data('productID') . '&branch=' . data('branch')))->set(array('data-toggle' => 'modal', 'data-size' => 'lg'))->set('title', $lang->productplan->create) : null)
  118. ->item(empty($createFields['plan']['options']) ? field()->control(array('control' => 'btn', 'data-on' => 'click', 'data-call' => 'loadProductPlans', 'data-params' => data('productID')))->icon('refresh')->id("loadProductPlans")->set('title', $lang->refresh) : null);
  119. }
  120. $fields->field('source')
  121. ->foldable()
  122. ->width('1/4')
  123. ->required($createFields['source']['required'])
  124. ->items($lang->{$type}->sourceList)
  125. ->value($createFields['source']['default']);
  126. $fields->field('sourceNote')
  127. ->foldable()
  128. ->width('1/4')
  129. ->value($createFields['sourceNote']['default']);
  130. $fields->field('feedbackBy')
  131. ->foldable()
  132. ->className('feedbackBox')
  133. ->className(!in_array($createFields['source']['default'], $config->story->feedbackSource) ? 'hidden' : '')
  134. ->id('feedbackBy')
  135. ->value($createFields['feedbackBy']['default']);
  136. $fields->field('notifyEmail')
  137. ->foldable()
  138. ->className('feedbackBox')
  139. ->className(!in_array($createFields['source']['default'], $config->story->feedbackSource) ? 'hidden' : '')
  140. ->id('notifyEmail')
  141. ->value($createFields['notifyEmail']['default']);
  142. $fields->field('mailto')
  143. ->foldable()
  144. ->control('mailto');
  145. $fields->field('keywords')->foldable()->required($createFields['keywords']['required']);
  146. $fields->field('type')->control('hidden')->value($type);
  147. $fields->field('status')->control('hidden')->value('active');