create.html.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. <?php
  2. /**
  3. * The create ui file of todo 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 Zemei Wang<wangzemei@easycorp.ltd>
  8. * @package todo
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. jsVar('noTodo', $lang->todo->noTodo);
  13. jsVar('moduleList', $config->todo->moduleList);
  14. jsVar('objectsMethod', $config->todo->getUserObjectsMethod);
  15. jsVar('nameBoxLabel', array('custom' => $lang->todo->name, 'objectID' => $lang->todo->objectID));
  16. jsVar('vision', $config->vision);
  17. jsVar('noOptions', $lang->todo->noOptions);
  18. jsVar('chosenType', $lang->todo->typeList);
  19. jsVar('today', date('Y-m-d'));
  20. jsVar('nowTime', $time);
  21. jsVar('start', key($times));
  22. jsVar('defaultType', '');
  23. jsVar('defaultDate', date('Y-m-d'));
  24. jsVar('userID', $app->user->id);
  25. jsVar('userAccount', $app->user->account);
  26. jsVar('todoAccount', $app->user->account);
  27. jsVar('dayLang', $lang->todo->day);
  28. $timesKeys = array_keys($times);
  29. $defaultEnd = $timesKeys[(array_search($time, $timesKeys) + 3)];
  30. $isInModal = isInModal();
  31. $cycleTypeOptions = array(
  32. array('text' => $lang->todo->cycleDay, 'value' => 'day'),
  33. array('text' => $lang->todo->cycleWeek, 'value' => 'week'),
  34. array('text' => $lang->todo->cycleMonth, 'value' => 'month'),
  35. array('text' => $lang->todo->cycleYear, 'value' => 'year')
  36. );
  37. $days = array();
  38. for($day = 1; $day <= 31; $day ++) $days[$day] = $day . $lang->todo->day;
  39. formPanel
  40. (
  41. set::title($lang->todo->create),
  42. formRow
  43. (
  44. setClass('items-center'),
  45. formGroup
  46. (
  47. set
  48. (
  49. array(
  50. 'label' => $lang->todo->date,
  51. 'class' => 'items-center',
  52. 'width' => $isInModal ? '3/5' : '1/3'
  53. )
  54. ),
  55. inputGroup
  56. (
  57. set::seg(true),
  58. control
  59. (
  60. setID('date'),
  61. setClass('date'),
  62. set::name('date'),
  63. set::value('today'),
  64. set::type('datePicker'),
  65. on::change('changeCreateDate')
  66. ),
  67. div(
  68. setClass('input-group-addon'),
  69. checkbox
  70. (
  71. setID('switchDate'),
  72. setClass($lang->todo->periods['future']),
  73. set::name('switchDate'),
  74. set::text($lang->todo->periods['future']),
  75. on::change("zui.DatePicker.query('#date').render({disabled: e.target.checked})")
  76. )
  77. ),
  78. common::hasPriv('todo', 'createcycle') ? div(
  79. setClass('input-group-addon'),
  80. checkbox
  81. (
  82. setID('cycle'),
  83. set::name('cycle'),
  84. set::value('1'),
  85. set::text($lang->todo->cycle),
  86. on::change('toggleCycle')
  87. )
  88. ) : null
  89. )
  90. )
  91. ),
  92. formRow
  93. (
  94. setClass('cycle-config hidden'),
  95. formGroup
  96. (
  97. set::label($lang->todo->cycleType),
  98. set::required(true),
  99. radioList
  100. (
  101. set
  102. (
  103. array(
  104. 'name' => 'config[type]',
  105. 'id' => 'cycleType',
  106. 'value' => 'day',
  107. 'inline' => true,
  108. 'items' => $cycleTypeOptions
  109. )
  110. ),
  111. on::change('changeCycleType')
  112. )
  113. )
  114. ),
  115. formRow
  116. (
  117. setClass('cycle-config cycle-type-detail type-day hidden'),
  118. formGroup
  119. (
  120. set::label($lang->todo->cycleConfig),
  121. set::required(true),
  122. set::width('9/24'),
  123. inputGroup
  124. (
  125. setClass('have-fix'),
  126. inputGroupAddon
  127. (
  128. setClass('justify-center'),
  129. $lang->todo->from
  130. ),
  131. control
  132. (
  133. setID('configDate'),
  134. set::type('datePicker'),
  135. set::name('config[date]'),
  136. setClass('cycle-date'),
  137. on::change("e.target.closest('.input-group').classList.toggle('has-error', !e.target.value)")
  138. )
  139. )
  140. ),
  141. formGroup
  142. (
  143. set::label($lang->todo->every),
  144. set::required(true),
  145. setClass('config-day flex items-center highlight-suffix'),
  146. inputControl
  147. (
  148. set::suffix($lang->todo->cycleDay),
  149. set::suffixWidth('30'),
  150. input
  151. (
  152. setID('spaceDay'),
  153. set::name('config[day]'),
  154. on::blur('verifySpaceDay')
  155. )
  156. )
  157. )
  158. ),
  159. formRow
  160. (
  161. setClass('cycle-config cycle-type-detail type-week hidden'),
  162. formGroup
  163. (
  164. set
  165. (
  166. array(
  167. 'label' => $lang->todo->cycleConfig,
  168. 'required' => true,
  169. 'width' => $isInModal ? '3/5' : '1/3'
  170. )
  171. ),
  172. inputGroup
  173. (
  174. setClass('have-fix'),
  175. span
  176. (
  177. setClass('input-group-addon'),
  178. set::style(array('width' => $app->getClientLang() == 'en' ? '80px' : '42px')),
  179. $lang->todo->weekly
  180. ),
  181. picker
  182. (
  183. set
  184. (
  185. array(
  186. 'required' => true,
  187. 'id' => 'config_week',
  188. 'name' => 'config[week]',
  189. 'items' => $lang->todo->dayNames,
  190. 'multiple' => true
  191. )
  192. )
  193. )
  194. )
  195. )
  196. ),
  197. formRow
  198. (
  199. setClass('cycle-config cycle-type-detail type-month hidden'),
  200. formGroup
  201. (
  202. set
  203. (
  204. array(
  205. 'label' => $lang->todo->cycleConfig,
  206. 'required' => true,
  207. 'class' => 'have-fix',
  208. 'width' => $isInModal ? '3/5' : '1/3'
  209. )
  210. ),
  211. inputGroup
  212. (
  213. span
  214. (
  215. setClass('input-group-addon'),
  216. set::style(array('width' => $app->getClientLang() == 'en' ? '80px' : '42px')),
  217. $lang->todo->monthly
  218. ),
  219. picker
  220. (
  221. set
  222. (
  223. array(
  224. 'required' => true,
  225. 'id' => 'config_month',
  226. 'name' => 'config[month]',
  227. 'items' => $days,
  228. 'multiple' => true
  229. )
  230. )
  231. )
  232. )
  233. )
  234. ),
  235. formRow
  236. (
  237. setClass('cycle-config cycle-type-detail type-year hidden'),
  238. formGroup
  239. (
  240. set
  241. (
  242. array(
  243. 'label' => $lang->todo->cycleConfig,
  244. 'required' => true,
  245. 'class' => 'have-fix',
  246. 'width' => $isInModal ? '3/5' : '1/3'
  247. )
  248. ),
  249. inputGroup
  250. (
  251. span
  252. (
  253. setClass('input-group-addon'),
  254. set::style(array('width' => $app->getClientLang() == 'en' ? '80px' : '42px')),
  255. $lang->todo->specify
  256. ),
  257. picker
  258. (
  259. set
  260. (
  261. array(
  262. 'id' => 'config_specify_month',
  263. 'name' => 'config[specify][month]',
  264. 'items' => $lang->datepicker->monthNames,
  265. 'multiple' => false,
  266. 'required' => true,
  267. 'value' => 0
  268. )
  269. ),
  270. on::change('setDays')
  271. ),
  272. picker
  273. (
  274. set
  275. (
  276. array(
  277. 'id' => 'specifiedDay',
  278. 'name' => 'config[specify][day]',
  279. 'items' => $days,
  280. 'multiple' => false,
  281. 'required' => true,
  282. 'value' => 1
  283. )
  284. )
  285. )
  286. )
  287. )
  288. ),
  289. formRow
  290. (
  291. setClass('cycle-config hidden'),
  292. formGroup
  293. (
  294. set::label($lang->todo->generate),
  295. set::className('have-fix highlight-suffix'),
  296. set::width($isInModal ? '3/5' : '1/3'),
  297. inputControl
  298. (
  299. set::prefix($lang->todo->advance),
  300. set::prefixWidth($app->getClientLang() == 'en' ? '80' : '42'),
  301. input
  302. (
  303. setClass('before-days'),
  304. set::style(array('padding-left' => $app->getClientLang() == 'en' ? '88px' : '50px')),
  305. set::name('config[beforeDays]')
  306. ),
  307. to::suffix($lang->todo->cycleDay),
  308. set::suffixWidth('30')
  309. )
  310. )
  311. ),
  312. formRow
  313. (
  314. setClass('cycle-config hidden'),
  315. formGroup(set::label($lang->todo->deadline), set::width($isInModal ? '3/5' : '1/3'), datePicker(set::name('config[end]')))
  316. ),
  317. formGroup
  318. (
  319. setClass('typeBox'),
  320. set::label($lang->todo->type),
  321. set::width($isInModal ? '3/5' : '1/3'),
  322. set::items($lang->todo->typeList),
  323. set::name('type'),
  324. set::required(true),
  325. on::change("loadList(e.target.value, '');")
  326. ),
  327. formRow
  328. (
  329. formGroup
  330. (
  331. set::width('1/3'),
  332. set::label($lang->todo->assignTo),
  333. set::required(true),
  334. set::items($users),
  335. set::value($app->user->account),
  336. set::name('assignedTo'),
  337. on::change('changeAssignedTo()')
  338. ),
  339. formGroup
  340. (
  341. setClass('items-center ml-4'),
  342. checkbox
  343. (
  344. setID('private'),
  345. set::name('private'),
  346. set::text($lang->todo->private),
  347. on::change("zui.Picker.query('[name=assignedTo]').render({disabled: e.target.checked})")
  348. ),
  349. btn
  350. (
  351. set::icon('help'),
  352. toggle::tooltip(array('placement' => 'right', 'title' => $lang->todo->privateTip, 'type' => 'white', 'class-name' => 'text-gray border border-light')),
  353. set::square(true),
  354. setClass('ghost h-6 mt-0.5 tooltip-btn')
  355. )
  356. )
  357. ),
  358. formRow
  359. (
  360. formGroup
  361. (
  362. set::width('3/4'),
  363. set(array('id' => 'nameBox', 'required' => true, 'label' => $lang->todo->name, 'class' => 'name-box')),
  364. div
  365. (
  366. setID('nameInputBox'),
  367. setClass('w-full'),
  368. input(set(array('id' => 'name', 'name' => 'name')))
  369. )
  370. ),
  371. formGroup
  372. (
  373. set::width('1/4'),
  374. setClass('priBox'),
  375. inputGroup
  376. (
  377. setClass('flex items-center'),
  378. span
  379. (
  380. setClass('ml-2 w-16'),
  381. $lang->todo->pri
  382. ),
  383. priPicker
  384. (
  385. setID('pri'),
  386. set::name('pri'),
  387. set::items($lang->todo->priList),
  388. set::value(3),
  389. set::required(true)
  390. )
  391. )
  392. )
  393. ),
  394. formGroup
  395. (
  396. set::label($lang->todo->desc),
  397. control
  398. (
  399. set::name('desc'),
  400. set::type('editor'),
  401. set::value(isset($desc) ? $desc : ''),
  402. set::rows('5')
  403. )
  404. ),
  405. formGroup
  406. (
  407. setID('status'),
  408. set::width('1/3'),
  409. set::label($lang->todo->status),
  410. set::name('status'),
  411. set::items($lang->todo->statusList),
  412. set::required(true)
  413. ),
  414. formRow
  415. (
  416. setClass('items-center'),
  417. formGroup
  418. (
  419. setClass('flex items-center'),
  420. set::label($lang->todo->beginAndEnd),
  421. set::width('1/2'),
  422. inputGroup
  423. (
  424. picker
  425. (
  426. set::id('begin'),
  427. set::width('80px'),
  428. set::name('begin'),
  429. set::required(true),
  430. set::items($times),
  431. set::value(date('Y-m-d') != $date ? $timesKeys[0] : $time),
  432. on::change('selectNext()')
  433. ),
  434. inputGroupAddon($lang->todo->timespanTo),
  435. picker
  436. (
  437. set::id('end'),
  438. set::width('80px'),
  439. set::name('end'),
  440. set::required(true),
  441. set::items($times),
  442. set::value(date('Y-m-d') != $date ? $timesKeys[3] : $defaultEnd),
  443. on::change('verifyEndTime')
  444. )
  445. ),
  446. div
  447. (
  448. setClass('ml-4 flex items-center'),
  449. checkbox
  450. (
  451. set(array('id' => 'switchTime', 'name' => 'switchTime', 'text' => $lang->todo->periods['future'])),
  452. on::change('switchDateFeature')
  453. )
  454. )
  455. )
  456. )
  457. );
  458. render();