TreeSortChildren.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. class TreeSortChildren {
  3. public static function sortPrio($id, $tblName, $parentdFldName, $sortDir) {
  4. if ($id < 0 || empty($tblName) || empty($parentdFldName) || empty($sortDir)) {
  5. return;
  6. }
  7. $db = DB::getDB();
  8. $sql = "select w.`ID`
  9. , w.`SORT_PRIO`
  10. from `{$tblName}` as w0
  11. left join `{$tblName}` as w on(w.`{$parentdFldName}`=w0.`{$parentdFldName}`)
  12. where w0.`ID`='{$id}'
  13. and w0.`A_STATUS` not in('DELETED')
  14. and w.`A_STATUS` not in('DELETED')
  15. order by w.`SORT_PRIO` asc, w.`ID` asc
  16. ";
  17. $res = $db->query($sql);
  18. $wsk = array();
  19. $wskOrder = array();
  20. $sort_prio = 0;
  21. while ($r = $db->fetch($res)) {
  22. $wsk[$r->ID] = $sort_prio;//$r->SORT_PRIO;
  23. $wskOrder[$sort_prio] = $r->ID;
  24. $sort_prio += 1;
  25. }
  26. if (empty($wsk)) return;
  27. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk ';print_r($wsk);echo'</pre>';
  28. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk_order ';print_r($wskOrder);echo'</pre>';
  29. $wsk_new = array();
  30. if ($sortDir == 'up') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
  31. $old_wsk_id = $wsk[$id];
  32. if ($old_wsk_id == 0) return;
  33. //echo'zamien "'.$id.'" na "'.$wskOrder[$wsk[$id] - 1 ].'"';
  34. $tmp = $wskOrder[$wsk[$id]];
  35. $wskOrder[$wsk[$id]] = $wskOrder[$wsk[$id] - 1];
  36. $wskOrder[$wsk[$id] - 1] = $tmp;
  37. } else if ($sortDir == 'upup') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
  38. $old_wsk_id = $wsk[$id];
  39. if ($old_wsk_id == 0) return;
  40. $tmp = $wskOrder[$wsk[$id]];
  41. $tmp1 = $wskOrder[$wsk[$id] - 1];
  42. $tmp2 = $wskOrder[$wsk[$id] - 2];
  43. $tmp3 = $wskOrder[$wsk[$id] - 3];
  44. $tmp4 = $wskOrder[$wsk[$id] - 4];
  45. $tmp5 = $wskOrder[$wsk[$id] - 5];
  46. $tmp6 = $wskOrder[$wsk[$id] - 6];
  47. $wskOrder[$wsk[$id]] = $tmp1;
  48. $wskOrder[$wsk[$id] - 1] = $tmp2;
  49. $wskOrder[$wsk[$id] - 2] = $tmp3;
  50. $wskOrder[$wsk[$id] - 3] = $tmp4;
  51. $wskOrder[$wsk[$id] - 4] = $tmp5;
  52. $wskOrder[$wsk[$id] - 5] = $tmp6;
  53. $wskOrder[$wsk[$id] - 6] = $tmp;
  54. } else if ($sortDir == 'downdown') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
  55. $old_wsk_id = $wsk[$id];
  56. if ($old_wsk_id == 0) return;
  57. $tmp = $wskOrder[$wsk[$id]];
  58. $tmp1 = $wskOrder[$wsk[$id] + 1];
  59. $tmp2 = $wskOrder[$wsk[$id] + 2];
  60. $tmp3 = $wskOrder[$wsk[$id] + 3];
  61. $tmp4 = $wskOrder[$wsk[$id] + 4];
  62. $tmp5 = $wskOrder[$wsk[$id] + 5];
  63. $tmp6 = $wskOrder[$wsk[$id] + 6];
  64. $wskOrder[$wsk[$id]] = $tmp1;
  65. $wskOrder[$wsk[$id] + 1] = $tmp2;
  66. $wskOrder[$wsk[$id] + 2] = $tmp3;
  67. $wskOrder[$wsk[$id] + 3] = $tmp4;
  68. $wskOrder[$wsk[$id] + 4] = $tmp5;
  69. $wskOrder[$wsk[$id] + 5] = $tmp6;
  70. $wskOrder[$wsk[$id] + 6] = $tmp;
  71. } else {// wskaznik $wsk_id 'w dol' (zwieksz sort_prio)
  72. $old_wsk_id = $wsk[$id];
  73. if ($old_wsk_id + 1 == count($wsk)) return;
  74. //echo'zamien "'.$id.'" na "'.$wskOrder[$wsk[$id] + 1 ].'"';
  75. $tmp = $wskOrder[$wsk[$id]];
  76. $wskOrder[$wsk[$id]] = $wskOrder[$wsk[$id] + 1];
  77. $wskOrder[$wsk[$id] + 1] = $tmp;
  78. }
  79. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk ';print_r($wsk);echo'</pre>';
  80. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk_order ';print_r($wskOrder);echo'</pre>';
  81. if (empty($wskOrder)) return;
  82. foreach ($wskOrder as $k_osrt_prio => $v_wsk_id) {
  83. $sql = "update `{$tblName}`
  84. set `SORT_PRIO`='{$k_osrt_prio}'
  85. where `ID`='{$v_wsk_id}'
  86. ";
  87. $db->query($sql);
  88. }
  89. }
  90. }