activate.html.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. /**
  3. * The activate 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. /* ====== Preparing and processing page data ====== */
  12. jsVar('oldConsumed', $task->consumed);
  13. jsVar('currentUser', $app->user->account);
  14. jsVar('teamMemberError', $lang->task->error->teamMember);
  15. jsVar('teamLeftEmpty', $lang->task->error->teamLeftEmpty);
  16. jsVar('totalLeftError', sprintf($this->lang->task->error->leftEmptyAB, $this->lang->task->statusList[$task->status]));
  17. jsVar('estimateNotEmpty', sprintf($lang->task->error->notempty, $lang->task->estimate));
  18. jsVar('leftNotEmpty', sprintf($lang->task->error->notempty, $lang->task->left));
  19. jsVar('teamNotEmpty', sprintf($lang->error->notempty, $lang->task->assignedTo));
  20. jsVar('isMultiple', $isMultiple);
  21. jsVar('taskMode', $task->mode);
  22. $teamData = array();
  23. $teamUsers = array();
  24. if($isMultiple)
  25. {
  26. $index = 1;
  27. foreach($task->team as $member)
  28. {
  29. $member->id = $index;
  30. $member->team = $member->account;
  31. $member->teamSource = $member->account;
  32. $member->teamEstimate = $member->estimate;
  33. $member->teamConsumed = $member->consumed;
  34. $member->teamLeft = $member->left;
  35. $teamData[] = $member;
  36. $teamUsers[] = $member->account;
  37. $index ++;
  38. }
  39. $teamItems = array();
  40. foreach($teamMembers as $key => $value) $teamItems[] = array('text' => $value, 'value' => $key);
  41. jsVar('teamItems', $teamItems);
  42. }
  43. $memberItems = array();
  44. foreach($members as $key => $value) $memberItems[] = array('text' => $value, 'value' => $key);
  45. jsVar('memberItems', $memberItems);
  46. if(!empty($task->team))
  47. {
  48. foreach($task->team as $member)
  49. {
  50. $member->memberDisabled = false;
  51. if($member->status == 'done') $member->memberDisabled = true;
  52. $member->hourDisabled = $member->memberDisabled;
  53. if($task->mode == 'multi') $member->hourDisabled = false;
  54. }
  55. }
  56. /* zin: Set variables to define control for form. */
  57. modalHeader();
  58. $taskModeBox = '';
  59. if($isMultiple)
  60. {
  61. $taskModeBox = formGroup
  62. (
  63. set::width('1/4'),
  64. set::label($lang->task->mode),
  65. inputGroup
  66. (
  67. setClass('no-background'),
  68. zget($lang->task->modeList, $task->mode),
  69. input
  70. (
  71. setClass('hidden'),
  72. set::name('mode'),
  73. set::value($task->mode)
  74. )
  75. )
  76. );
  77. }
  78. $manageTeamBox = '';
  79. if($isMultiple)
  80. {
  81. $manageTeamBox = formGroup(
  82. set::width('1/10'),
  83. setClass('items-center'),
  84. checkbox
  85. (
  86. setID('multiple'),
  87. set::name('multiple'),
  88. set::text($lang->task->manageTeam),
  89. set::rootClass('ml-4'),
  90. on::click('manageTeam')
  91. )
  92. );
  93. }
  94. $leftBox = '';
  95. if($task->isParent == '0')
  96. {
  97. $leftBox = formGroup(
  98. set::width('1/2'),
  99. set::label($lang->task->left),
  100. set::name('left'),
  101. inputControl
  102. (
  103. to::suffix($lang->task->suffixHour),
  104. set::suffixWidth(20)
  105. )
  106. );
  107. }
  108. $modalTeamBtn = array();
  109. if($isMultiple)
  110. {
  111. $modalTeamBtn = btn(
  112. set::text($lang->task->team),
  113. setClass('team-group hidden'),
  114. set::url('#modalTeam'),
  115. setData(array('toggle' => 'modal'))
  116. );
  117. }
  118. /* ====== Define the page structure with zin widgets ====== */
  119. formPanel
  120. (
  121. set::ajax(array('beforeSubmit' => jsRaw("clickSubmit"))),
  122. $taskModeBox,
  123. formRow
  124. (
  125. formGroup
  126. (
  127. set::width('1/2'),
  128. set::label($lang->task->assignedTo),
  129. set::required($isMultiple || strpos(",{$this->config->task->activate->requiredFields},", ',assignedTo,')),
  130. inputGroup
  131. (
  132. picker
  133. (
  134. setID('assignedTo'),
  135. set::name('assignedTo'),
  136. set::items($isMultiple ? $teamMembers : $members),
  137. set::value($isMultiple ? '' : $task->finishedBy),
  138. set::required(strpos(",{$this->config->task->activate->requiredFields},", ',assignedTo,') !== false),
  139. on::change('setTeamUser')
  140. ),
  141. $modalTeamBtn
  142. )
  143. ),
  144. $manageTeamBox
  145. ),
  146. $leftBox,
  147. formGroup
  148. (
  149. set::label($lang->comment),
  150. set::control('editor'),
  151. set::name('comment'),
  152. set::rows('5')
  153. ),
  154. modalTrigger
  155. (
  156. modal
  157. (
  158. setID('modalTeam'),
  159. setData(array('backdrop' => false)),
  160. set::title($lang->task->team),
  161. formBatch
  162. (
  163. set::tagName('div'),
  164. setID('teamTable'),
  165. set::mode('add'),
  166. !empty($task->team) ? set::data(array_values($task->team)) : null,
  167. set::sortable(true),
  168. set::size('sm'),
  169. set::minRows(3),
  170. set::onRenderRow(jsRaw('renderRowData')),
  171. formBatchItem
  172. (
  173. set::name('id'),
  174. set::width('32px'),
  175. set::control('index')
  176. ),
  177. formBatchItem
  178. (
  179. set::name('team'),
  180. set::label($lang->task->teamMember),
  181. set::width('160px'),
  182. set::control('picker'),
  183. set::items($members)
  184. ),
  185. formBatchItem
  186. (
  187. set::name('estimateBox'),
  188. set::label($lang->task->estimateAB),
  189. set::width('135px'),
  190. set::control('inputGroup'),
  191. inputControl
  192. (
  193. input(set::name("teamEstimate")),
  194. to::suffix($lang->task->suffixHour),
  195. set::suffixWidth(20)
  196. )
  197. ),
  198. !empty($task->team) ? formBatchItem
  199. (
  200. set::name('consumedBox'),
  201. set::label($lang->task->consumedAB),
  202. set::width('135px'),
  203. set::control('inputGroup'),
  204. inputControl
  205. (
  206. input(set::name("teamConsumed")),
  207. to::suffix($lang->task->suffixHour),
  208. set::suffixWidth(20)
  209. )
  210. ) : null,
  211. !empty($task->team) ? formBatchItem
  212. (
  213. set::name('leftBox'),
  214. set::label($lang->task->left),
  215. set::width('135px'),
  216. set::control('inputGroup'),
  217. set::required(true),
  218. inputControl
  219. (
  220. input(set::name("teamLeft")),
  221. to::suffix($lang->task->suffixHour),
  222. set::suffixWidth(20)
  223. )
  224. ) : null,
  225. formBatchItem
  226. (
  227. set::name('teamSource'),
  228. set::control('input'),
  229. set::hidden(true)
  230. ),
  231. set::actions(array(array('text' => $lang->save, 'class' => 'primary team-saveBtn', 'id' => 'confirmButton')))
  232. )
  233. )
  234. )
  235. );
  236. hr();
  237. history();
  238. /* ====== Render page ====== */
  239. render();