rectifying.html.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace zin;
  3. $buildRectifying = function() use($projectID, $executionID, $measures, $lang)
  4. {
  5. $total = count($measures);
  6. $first = array_shift($measures);
  7. $trList = array();
  8. $trList[] = h::tr
  9. (
  10. h::th(set::rowspan($total ? $total : 1), setClass('text-center w-48'), setID('measuresTd'), $lang->milestone->corrective),
  11. h::td(input(set::name('measures[]'), set::value($first), set::onchange('submitMeasurse()'))),
  12. h::td
  13. (
  14. setClass('w-36'),
  15. btn(icon('plus'), set::type('link'), setClass('addItem'), set::onclick('addMeasurseItem(this)')),
  16. btn(icon('close'), set::type('link'), setClass('delItem'), set::onclick('delMeasurseItem(this)')),
  17. btn(set::btnType('submit'), set::type('primary'), setClass('ml-2'), $lang->save)
  18. )
  19. );
  20. if($total > 1)
  21. {
  22. $trList = array_merge($trList, array_map(function($item) use($lang)
  23. {
  24. return h::tr
  25. (
  26. h::td(input(set::name('measures[]'), set::value($item), set::onchange('submitMeasurse()'))),
  27. h::td
  28. (
  29. setClass('w-36'),
  30. btn(icon('plus'), set::type('link'), setClass('addItem'), set::onclick('addMeasurseItem(this)')),
  31. btn(icon('close'), set::type('link'), setClass('delItem'), set::onclick('delMeasurseItem(this)')),
  32. btn(set::btnType('submit'), set::type('primary'), setClass('ml-2'), $lang->save)
  33. )
  34. );
  35. }, $measures));
  36. }
  37. $table = h::table(setClass('table condensed bordered bg-white mb-4'), h::tbody($trList));
  38. return div
  39. (
  40. setClass('mt-4 bg-white'),
  41. form
  42. (
  43. setID('measuresForm'),
  44. set::actions(array()),
  45. set::action(createLink('milestone', 'ajaxAddMeasures')),
  46. $table,
  47. formHidden('projectID', $projectID),
  48. formHidden('executionID', $executionID)
  49. ),
  50. pageJS
  51. (
  52. <<<'JAVASCRIPT'
  53. window.addMeasurseItem = function(obj)
  54. {
  55. const $this = $(obj);
  56. const $tr = $this.closest('tr');
  57. $tr.after($tr.prop('outerHTML'));
  58. const $next = $tr.next();
  59. if($tr.find('#measuresTd').length > 0) $next.find('#measuresTd').remove();
  60. $next.find('input').val('');
  61. const $measuresTd = $tr.closest('table').find("#measuresTd");
  62. const rowspan = $measuresTd.attr("rowspan");
  63. $measuresTd.attr("rowspan", Number(rowspan) + 1);
  64. }
  65. window.delMeasurseItem = function(obj)
  66. {
  67. const $this = $(obj);
  68. const $tr = $this.closest('tr');
  69. const $table = $tr.closest('table');
  70. const $next = $tr.next();
  71. const length = $table.find('tbody tr').length;
  72. if(length <= 1) return;
  73. if($tr.find('#measuresTd').length > 0) $next.prepend($tr.find('#measuresTd').prop('outerHTML'));
  74. $tr.remove();
  75. $table.find("#measuresTd").attr("rowspan", length - 1);
  76. submitMeasurse();
  77. }
  78. window.submitMeasurse = function()
  79. {
  80. const formData = new FormData($('#measuresForm')[0]);
  81. $.post($.createLink('milestone', 'ajaxAddMeasures'), formData);
  82. }
  83. JAVASCRIPT
  84. )
  85. );
  86. };