otherproblem.html.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace zin;
  3. $buildOtherproblems = function() use ($otherproblems, $projectID, $executionID, $lang)
  4. {
  5. $total = count($otherproblems);
  6. $canSave = hasPriv('milestone', 'saveOtherProblem');
  7. $table = h::table
  8. (
  9. setID('otherproblems'),
  10. setClass('table bordered condensed bg-white mb-4'),
  11. h::tbody
  12. (
  13. h::tr(h::th(set::colspan(5), setClass('text-left'), $lang->milestone->otherproblem)),
  14. h::tr
  15. (
  16. h::td(set::rowspan($total + 2), setID('problemTd'), $lang->milestone->problemandsuggest),
  17. h::td($lang->milestone->prodescr),
  18. h::td($lang->milestone->needhelp),
  19. h::td($lang->milestone->suggest),
  20. h::td(setClass('w-36'), $lang->milestone->options)
  21. ),
  22. empty($total) ? h::tr
  23. (
  24. h::td(input(set::name('contents[]'))),
  25. h::td(input(set::name('support[]'))),
  26. h::td(input(set::name('measures[]'))),
  27. $canSave ? h::td
  28. (
  29. btn(icon('plus'), set::type('link'), setClass('addItem'), set::onclick('addProblemItem(this)')),
  30. btn(icon('close'), set::type('link'), setClass('addItem'), set::onclick('delProblemItem(this)')),
  31. btn(set::btnType('submit'), set::type('primary'), setClass('ml-2'), $lang->save)
  32. ) : h::td()
  33. ) : null,
  34. $total ? array_map(function($item) use($lang, $canSave)
  35. {
  36. return h::tr
  37. (
  38. h::td(input(set::name('contents[]'), set::value($item->contents))),
  39. h::td(input(set::name('support[]'), set::value($item->support))),
  40. h::td(input(set::name('measures[]'), set::value($item->measures))),
  41. $canSave ? h::td
  42. (
  43. btn(icon('plus'), set::type('link'), setClass('addItem'), set::onclick('addProblemItem(this)')),
  44. btn(icon('close'), set::type('link'), setClass('addItem'), set::onclick('delProblemItem(this)')),
  45. btn(set::btnType('submit'), set::type('primary'), setClass('ml-2'), $lang->save)
  46. ) : h::td()
  47. );
  48. }, $otherproblems) : null
  49. )
  50. );
  51. return div
  52. (
  53. form
  54. (
  55. setID('otherproblemsForm'),
  56. set::method('post'),
  57. set::action($this->createLink('milestone', 'saveOtherProblem')),
  58. set::actions(array()),
  59. $table,
  60. formHidden('projectID', $projectID),
  61. formHidden('executionID', $executionID)
  62. ),
  63. jsVar('canSaveOtherProblem', $canSave),
  64. pageJS
  65. (
  66. <<<'JAVASCRIPT'
  67. window.addProblemItem = function(obj)
  68. {
  69. const $this = $(obj);
  70. const $tr = $this.closest('tr');
  71. $tr.after($tr.prop('outerHTML'));
  72. const $next = $tr.next();
  73. $next.find('input').val('');
  74. const $problemTd = $tr.closest('table').find('#problemTd');
  75. const rowspan = $problemTd.attr('rowspan');
  76. $problemTd.attr('rowspan', Number(rowspan) + 1)
  77. };
  78. window.delProblemItem = function(obj)
  79. {
  80. const length = $('#otherproblems tbody tr').length;
  81. if(length <= 3) return;
  82. const $this = $(obj);
  83. const $tr = $this.closest('tr');
  84. $tr.remove();
  85. const $problemTd = $tr.closest('table').find('#problemTd');
  86. const rowspan = $problemTd.attr('rowspan');
  87. $problemTd.attr('rowspan', Number(rowspan) - 1);
  88. if(canSaveOtherProblem)
  89. {
  90. const formData = new FormData($('#otherproblemsForm')[0]);
  91. $.post($.createLink('milestone', 'saveOtherProblem'), formData);
  92. }
  93. };
  94. JAVASCRIPT
  95. )
  96. );
  97. };