m.edit.html.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. <?php
  2. /**
  3. * The task edit mobile view file of task module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2016 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Fei Chen <chenfei@cnezsoft.com>
  8. * @package task
  9. * @version $Id
  10. * @link http://www.ranzhico.com
  11. */
  12. ?>
  13. <div class='heading divider'>
  14. <div class='title'><i class='icon-pencil muted'></i> <strong><?php echo $lang->task->edit;?></strong></div>
  15. <nav class='nav'>
  16. <a data-dismiss='display'><i class='icon icon-remove muted'></i></a>
  17. </nav>
  18. </div>
  19. <form class='content box ajaxform' data-form-refresh='#page' method='post' id='editTaskForm' action='<?php echo $this->createLink('task', 'edit', "taskID={$task->id}");?>' enctype='multipart/form-data'>
  20. <div class='row'>
  21. <div class='cell-9'>
  22. <div class='control'>
  23. <label for='name'><?php echo $lang->task->name;?></label>
  24. <?php echo html::input('name', $task->name, "class='input' placeholder='{$lang->required}'");?>
  25. </div>
  26. </div>
  27. <div class='cell-3'>
  28. <div class='control'>
  29. <label for='primary'><?php echo $lang->task->pri;?></label>
  30. <div class='select'><?php echo html::select('pri', $lang->task->priList, $task->pri);?></div>
  31. </div>
  32. </div>
  33. </div>
  34. <div class='control'>
  35. <label for='execution'><?php echo $lang->task->execution;?></label>
  36. <div class='select'><?php echo html::select('execution', $executions, $task->execution);?></div>
  37. </div>
  38. <div class="control">
  39. <label for='module'><?php echo $lang->task->module;?></label>
  40. <div class='select'><?php echo html::select('module', $modules, $task->module, "onchange='setStories(this.value,$execution->id)'");?></div>
  41. </div>
  42. <?php if($config->global->flow != 'onlyTask'):?>
  43. <div class='control'>
  44. <label for='story'><?php echo $lang->task->story;?></label>
  45. <div class='select'><?php echo html::select('story', $stories, $task->story, 'onchange=setStoryModule()');?></div>
  46. </div>
  47. <?php endif;?>
  48. <?php if($task->parent >= 0 and empty($task->team)):?>
  49. <div class='control'>
  50. <label for='story'><?php echo $lang->task->parent;?></label>
  51. <div class='select'><?php echo html::select('parent', $tasks, $task->parent);?></div>
  52. </div>
  53. <?php endif;?>
  54. <div class='control'>
  55. <div class="checkbox pull-right">
  56. <input type='checkBox' name='multiple' id='multiple' value='1' <?php echo empty($task->team) ? '' : 'checked';?> />
  57. <label for="multiple" class="text-link"><?php echo $lang->task->multipleAB;?></label>
  58. </div>
  59. <label for='assignedTo'><?php echo $lang->task->assignedTo;?></label>
  60. <div class='select'><?php echo html::select('assignedTo', $members, $task->assignedTo);?></div>
  61. </div>
  62. <div id='taskTeam' class='hidden has-padding gray'>
  63. <div class='control small muted'><label><?php echo $lang->task->team;?></label></div>
  64. <?php $memberKey = 1;?>
  65. <?php if(!empty($task->team)):?>
  66. <?php foreach($task->team as $member):?>
  67. <div class='row flex-nowrap'>
  68. <div class='cell'>
  69. <div class='control'>
  70. <div class='select'>
  71. <?php echo html::select("team[$memberKey]", $members, $member->account);?>
  72. </div>
  73. </div>
  74. </div>
  75. <div class='cell-2'>
  76. <div class='control'>
  77. <?php echo html::input("teamEstimate[$memberKey]", (float)$member->estimate, "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->estimate}'") ?>
  78. </div>
  79. </div>
  80. <div class='cell-2'>
  81. <div class='control'>
  82. <?php echo html::input("teamConsumed[$memberKey]", (float)$member->consumed, "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->consumed}'") ?>
  83. </div>
  84. </div>
  85. <div class='cell-2'>
  86. <div class='control'>
  87. <?php echo html::input("teamLeft[$memberKey]", (float)$member->left, "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->left}'") ?>
  88. </div>
  89. </div>
  90. <div class='cell flex-none'>
  91. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  92. </div>
  93. </div>
  94. <?php $memberKey ++;?>
  95. <?php endforeach;?>
  96. <?php endif;?>
  97. <div class='row flex-nowrap'>
  98. <div class='cell'>
  99. <div class='control'>
  100. <div class='select'>
  101. <?php echo html::select("team[$memberKey]", $members);?>
  102. </div>
  103. </div>
  104. </div>
  105. <div class='cell-2'>
  106. <div class='control'>
  107. <?php echo html::input("teamEstimate[$memberKey]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->estimateAB}'") ?>
  108. </div>
  109. </div>
  110. <div class='cell-2'>
  111. <div class='control'>
  112. <?php echo html::input("teamConsumed[$memberKey]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->consumed}'") ?>
  113. </div>
  114. </div>
  115. <div class='cell-2'>
  116. <div class='control'>
  117. <?php echo html::input("teamLeft[$memberKey]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->left}'") ?>
  118. </div>
  119. </div>
  120. <div class='cell flex-none'>
  121. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  122. </div>
  123. </div>
  124. <a class="btn text-primary btn-add-member"><i class="icon-plus"></i></a>
  125. </div>
  126. <div class='control'>
  127. <label for='mailto[]'><?php echo $lang->task->mailto;?></label>
  128. <div class='select multiple'><?php echo html::select('mailto[]', $users, $task->mailto, 'multiple');?></div>
  129. </div>
  130. </div>
  131. <div class='control'>
  132. <label for='status'><?php echo $lang->task->status;?></label>
  133. <div class='select'><?php echo html::select('status', $lang->task->statusList, $task->status);?></div>
  134. </div>
  135. <div class='row'>
  136. <div class='cell-4'>
  137. <div class='control'>
  138. <label for='estimate'><?php echo $lang->task->estimate;?></label>
  139. <?php echo html::input('estimate', $task->estimate, "class='input'");?>
  140. </div>
  141. </div>
  142. <div class='cell-4'>
  143. <div class='control'>
  144. <label for='consumed'><?php echo $lang->task->consumed;?></label>
  145. <?php echo $task->consumed;?>
  146. </div>
  147. </div>
  148. <div class='cell-4'>
  149. <div class='control'>
  150. <label for='left'><?php echo $lang->task->left;?></label>
  151. <?php echo html::input('left', $task->left, "class='input'");?>
  152. </div>
  153. </div>
  154. </div>
  155. <div class='control'>
  156. <label for='desc'><?php echo $lang->task->desc;?></label>
  157. <?php echo html::textarea('desc', $task->desc, "rews='5' class='textarea'");?>
  158. </div>
  159. <div class='row'>
  160. <div class='cell-6'>
  161. <div class='control'>
  162. <label for='estStarted'><?php echo $lang->task->estStarted;?></label>
  163. <input type='date' class='input' id='estStarted' value='<?php echo $task->estStarted;?>' name='estStarted'>
  164. </div>
  165. </div>
  166. <div class='cell-6'>
  167. <div class='control'>
  168. <label for='realStarted'><?php echo $lang->task->realStarted;?></label>
  169. <input type='date' class='input' id='realStarted' value='<?php echo $task->realStarted;?>' name='realStarted'>
  170. </div>
  171. </div>
  172. </div>
  173. <div class='control'>
  174. <label for='deadline'><?php echo $lang->task->deadline;?></label>
  175. <input type='date' class='input' id='deadline' value='<?php echo $task->deadline;?>' name='deadline'>
  176. </div>
  177. <div class='space'></div>
  178. <div class='heading gray'>
  179. <div class='title text-important'><?php echo $lang->task->legendLife;?></div>
  180. </div>
  181. <div class='row'>
  182. <div class='cell-6'>
  183. <div class='control'>
  184. <label for='openedBy'><?php echo $lang->task->openedBy;?></label>
  185. <?php echo $users[$task->openedBy];?>
  186. </div>
  187. </div>
  188. <div class='cell-6'>
  189. <div class='control'>
  190. <label for='openedDate'><?php echo $lang->task->openedDate;?></label>
  191. <?php echo $task->openedDate;?>
  192. </div>
  193. </div>
  194. </div>
  195. <div class='row'>
  196. <div class='cell-6'>
  197. <div class='control'>
  198. <label for='finishedBy'><?php echo $lang->task->finishedBy;?></label>
  199. <div class='select'><?php echo html::select('finishedBy', $users, $task->finishedBy);?></div>
  200. </div>
  201. </div>
  202. <div class='cell-6'>
  203. <div class='control'>
  204. <label for='finishedDate'><?php echo $lang->task->finishedDate;?></label>
  205. <?php echo html::input('finishedDate', $task->finishedDate, "class='input'");?>
  206. </div>
  207. </div>
  208. </div>
  209. <div class='row'>
  210. <div class='cell-6'>
  211. <div class='control'>
  212. <label for='canceledBy'><?php echo $lang->task->canceledBy;?></label>
  213. <div class='select'><?php echo html::select('canceledBy', $users, $task->canceledBy);?></div>
  214. </div>
  215. </div>
  216. <div class='cell-6'>
  217. <div class='control'>
  218. <label for='canceledDate'><?php echo $lang->task->canceledDate;?></label>
  219. <?php echo html::input('canceledDate', $task->canceledDate, "class='input'");?>
  220. </div>
  221. </div>
  222. </div>
  223. <div class='row'>
  224. <div class='cell-6'>
  225. <div class='control'>
  226. <label for='closedBy'><?php echo $lang->task->closedBy;?></label>
  227. <div class='select'><?php echo html::select('closedBy', $users, $task->closedBy);?></div>
  228. </div>
  229. </div>
  230. <div class='cell-6'>
  231. <div class='control'>
  232. <label for='closedDate'><?php echo $lang->task->closedDate;?></label>
  233. <?php echo html::input('closedDate', $task->closedDate, "class='input'");?>
  234. </div>
  235. </div>
  236. </div>
  237. <div class='control'>
  238. <label for='closedReason'><?php echo $lang->task->closedReason;?></label>
  239. <div class='select'><?php echo html::select('closedReason', $lang->task->reasonList, $task->closedReason);?>
  240. </div>
  241. <div class='control'>
  242. <label for='remark'><?php echo $lang->comment;?></label>
  243. <?php echo html::textarea('comment', '', "rews='5' class='textarea'");?>
  244. </div>
  245. <div class='control'>
  246. <?php echo $this->fetch('file', 'buildForm', 'fileCount=1');?>
  247. </div>
  248. <?php echo html::hidden('lastEditedDate', $task->lastEditedDate);?>
  249. <?php echo html::hidden('consumed', $task->consumed);?>
  250. </form>
  251. <div class='footer has-padding'>
  252. <button type='submit' id='submitButton' class='btn primary'><?php echo $lang->save ?></button>
  253. </div>
  254. <div class='template'>
  255. <div class='row flex-nowrap'>
  256. <div class='cell'>
  257. <div class='control'>
  258. <div class='select'>
  259. <?php echo html::select("team[key]", $members);?>
  260. </div>
  261. </div>
  262. </div>
  263. <div class='cell-2'>
  264. <div class='control'>
  265. <?php echo html::input("teamEstimate[key]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->estimateAB}'") ?>
  266. </div>
  267. </div>
  268. <div class='cell-2'>
  269. <div class='control'>
  270. <?php echo html::input("teamConsumed[key]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->consumed}'") ?>
  271. </div>
  272. </div>
  273. <div class='cell-2'>
  274. <div class='control'>
  275. <?php echo html::input("teamLeft[key]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->left}'") ?>
  276. </div>
  277. </div>
  278. <div class='cell flex-none'>
  279. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  280. </div>
  281. </div>
  282. </div>
  283. <script>
  284. $(function()
  285. {
  286. $('[name^=multiple]').change(function()
  287. {
  288. if($(this).prop('checked'))
  289. {
  290. $('#assignedTo').addClass('hidden');
  291. $('#assignedTo').parent('div').removeClass('select');
  292. $('#taskTeam').removeClass('hidden');
  293. $('#estimate').attr('readonly', true);
  294. }
  295. else
  296. {
  297. $('#assignedTo').removeClass('hidden');
  298. $('#assignedTo').parent('div').addClass('select');
  299. $('#taskTeam').addClass('hidden');
  300. $('#estimate').attr('readonly', false);
  301. }
  302. });
  303. $('[name^=multiple]').change();
  304. $('#submitButton').click(function(){$('#editTaskForm').submit()});
  305. var memberKey = <?php echo ++$memberKey;?>;
  306. $('#taskTeam').on($.TapName, '.member-deleter', function()
  307. {
  308. if($('#taskTeam').find('.row').length == 1) return false;
  309. $(this).closest('.row').remove();
  310. });
  311. $('body').on($.TapName, '.btn-add-member', function(e)
  312. {
  313. var $member = $('.template').html().replace(/key/g, memberKey);
  314. $('.btn-add-member').before($member);
  315. memberKey ++;
  316. e.stopPropagation();
  317. e.preventDefault();
  318. });
  319. $(document).on('change', '[name*=teamEstimate]', function()
  320. {
  321. var time = 0;
  322. $('[name*=teamEstimate]').each(function()
  323. {
  324. var $this = $(this);
  325. estimate = parseFloat($this.val());
  326. if(!isNaN(estimate))
  327. {
  328. time += estimate;
  329. }
  330. $('#estimate').val(time);
  331. })
  332. });
  333. })
  334. </script>