Przeglądaj źródła

Fix tree view sort prio bug - dont use deleted rows

Piotr Labudda 11 lat temu
rodzic
commit
a9c6aa7b41
2 zmienionych plików z 103 dodań i 95 usunięć
  1. 10 95
      SE/procesy5.php
  2. 93 0
      SE/se-lib/TreeSortChildren.php

+ 10 - 95
SE/procesy5.php

@@ -38,6 +38,7 @@ Lib::loadClass('S');
 Lib::loadClass('ProcesHelper');
 Lib::loadClass('Tree');
 Lib::loadClass('TreeHelper');
+Lib::loadClass('TreeSortChildren');
 
 //   ==========  Task functions  ==============
 require_once APP_PATH_ROOT . DS . 'procesy' . DS . 'legacy.php';
@@ -295,111 +296,25 @@ function SESSION_USER_PARAMS() {
 	}
 }
 
-
 function SORT_PRIO_ZASOB() {
-	SORT_PRIO( 'CRM_LISTA_ZASOBOW', 'PARENT_ID' );
+	$id = V::get('arg1', '', $_GET, 'int');
+	$sort_prio_dir = V::get('arg1_val', '', $_GET);
+	TreeSortChildren::sortPrio($id, 'CRM_LISTA_ZASOBOW', 'PARENT_ID', $sort_prio_dir);
 }
 
-
 function SORT_PRIO_WSKAZNIK() {
-	SORT_PRIO( 'CRM_WSKAZNIK', 'ID_PROCES' );
+	$id = V::get('arg1', '', $_GET, 'int');
+	$sort_prio_dir = V::get('arg1_val', '', $_GET);
+	TreeSortChildren::sortPrio($id, 'CRM_WSKAZNIK', 'ID_PROCES', $sort_prio_dir);
 }
 
-
 function SORT_PRIO_PROCES() {
+	$id = V::get('arg1', '', $_GET, 'int');
 	//$_GET['arg1_val'] = ($_GET['arg1_val'] == 'up')? 'dw' : 'up';// procesy w odwrotnej kolejnosci, w SQL order by SORT_PRIO DESC
-	SORT_PRIO( 'CRM_PROCES', 'PARENT_ID' );
+	$sort_prio_dir = V::get('arg1_val', '', $_GET);
+	TreeSortChildren::sortPrio($id, 'CRM_PROCES', 'PARENT_ID', $sort_prio_dir);
 }
 
-
-function SORT_PRIO( $table, $parent_id_field ) {
-	if (!isset($_GET['arg1']) || !isset($_GET['arg1_val'])) {
-		return;
-	} else if (($id = intval($_GET['arg1'])) > 0) {
-		$sort_prio_dir = $_GET['arg1_val'];
-		//echo'TODO: wskaznik id ('.$id.') -> '.$sort_prio_dir;
-		$sql = "select
-				w.`ID`
-				, w.`SORT_PRIO`
-			from `".$table."` as w0
-				left join `".$table."` as w on(w.`".$parent_id_field."`=w0.`".$parent_id_field."`)
-			where
-				w0.`ID`='".$id."'
-			order by w.`SORT_PRIO` asc, w.`ID` asc
-		";
-		$res = DB::query( $sql );
-		$wsk = array();
-		$wsk_order = array();
-		$sort_prio = 0;
-		while ($r = DB::fetch( $res )) {
-			$wsk [$r->ID] = $sort_prio;//$r->SORT_PRIO;
-			$wsk_order [$sort_prio]= $r->ID;
-			$sort_prio += 1;
-		}
-		if (empty($wsk)) return;
-		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk ';print_r($wsk);echo'</pre>';
-		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk_order ';print_r($wsk_order);echo'</pre>';
-		$wsk_new = array();
-		if ($sort_prio_dir == 'up') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
-			$old_wsk_id = $wsk[ $id ];
-			if ($old_wsk_id == 0) return;
-			//echo'zamien "'.$id.'" na "'.$wsk_order[ $wsk[ $id ] - 1 ].'"';
-			$tmp = $wsk_order[ $wsk[ $id ] ];
-			$wsk_order[ $wsk[ $id ] ] = $wsk_order[ $wsk[ $id ] - 1 ];
-			$wsk_order[ $wsk[ $id ] - 1 ] = $tmp;
-		} else if ($sort_prio_dir == 'upup') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
-			$old_wsk_id = $wsk[ $id ];
-			if ($old_wsk_id == 0) return;
-			$tmp = $wsk_order[ $wsk[ $id ] ];
-			$tmp1 = $wsk_order[ $wsk[ $id ] -1 ];
-			$tmp2 = $wsk_order[ $wsk[ $id ] -2 ];
-			$tmp3 = $wsk_order[ $wsk[ $id ] -3 ];
-			$tmp4 = $wsk_order[ $wsk[ $id ] -4 ];
-			$tmp5 = $wsk_order[ $wsk[ $id ] -5 ];
-			$tmp6 = $wsk_order[ $wsk[ $id ] -6 ];
-			$wsk_order[ $wsk[ $id ] ] = $tmp1;
-			$wsk_order[ $wsk[ $id ] - 1 ] = $tmp2;
-			$wsk_order[ $wsk[ $id ] - 2 ] = $tmp3;
-			$wsk_order[ $wsk[ $id ] - 3 ] = $tmp4;
-			$wsk_order[ $wsk[ $id ] - 4 ] = $tmp5;
-			$wsk_order[ $wsk[ $id ] - 5 ] = $tmp6;
-			$wsk_order[ $wsk[ $id ] - 6 ] = $tmp;
-		} else if ($sort_prio_dir == 'downdown') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
-			$old_wsk_id = $wsk[ $id ];
-			if ($old_wsk_id == 0) return;
-			$tmp = $wsk_order[ $wsk[ $id ] ];
-			$tmp1 = $wsk_order[ $wsk[ $id ] +1 ];
-			$tmp2 = $wsk_order[ $wsk[ $id ] +2 ];
-			$tmp3 = $wsk_order[ $wsk[ $id ] +3 ];
-			$tmp4 = $wsk_order[ $wsk[ $id ] +4 ];
-			$tmp5 = $wsk_order[ $wsk[ $id ] +5 ];
-			$tmp6 = $wsk_order[ $wsk[ $id ] +6 ];
-			$wsk_order[ $wsk[ $id ] ] = $tmp1;
-			$wsk_order[ $wsk[ $id ] + 1 ] = $tmp2;
-			$wsk_order[ $wsk[ $id ] + 2 ] = $tmp3;
-			$wsk_order[ $wsk[ $id ] + 3 ] = $tmp4;
-			$wsk_order[ $wsk[ $id ] + 4 ] = $tmp5;
-			$wsk_order[ $wsk[ $id ] + 5 ] = $tmp6;
-			$wsk_order[ $wsk[ $id ] + 6 ] = $tmp;
-		} else {// wskaznik $wsk_id 'w dol' (zwieksz sort_prio)
-			$old_wsk_id = $wsk[ $id ];
-			if ($old_wsk_id + 1 == count($wsk)) return;
-			//echo'zamien "'.$id.'" na "'.$wsk_order[ $wsk[ $id ] + 1 ].'"';
-			$tmp = $wsk_order[ $wsk[ $id ] ];
-			$wsk_order[ $wsk[ $id ] ] = $wsk_order[ $wsk[ $id ] + 1 ];
-			$wsk_order[ $wsk[ $id ] + 1 ] = $tmp;
-		}
-		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk ';print_r($wsk);echo'</pre>';
-		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk_order ';print_r($wsk_order);echo'</pre>';
-		if (empty($wsk_order)) return;
-		foreach ($wsk_order as $k_osrt_prio => $v_wsk_id) {
-			$sql = "update `".$table."` set `SORT_PRIO`='".$k_osrt_prio."' where `ID`='".$v_wsk_id."'; ";
-			DB::query( $sql );
-		}
-	}
-}
-
-
 //   ==========  TASK - funkcje  ==============
 
 

+ 93 - 0
SE/se-lib/TreeSortChildren.php

@@ -0,0 +1,93 @@
+<?php
+
+class TreeSortChildren {
+
+	public static function sortPrio($id, $tblName, $parentdFldName, $sortDir) {
+		if ($id < 0 || empty($tblName) || empty($parentdFldName) || empty($sortDir)) {
+			return;
+		}
+		$db = DB::getDB();
+		$sql = "select w.`ID`
+				, w.`SORT_PRIO`
+			from `{$tblName}` as w0
+				left join `{$tblName}` as w on(w.`{$parentdFldName}`=w0.`{$parentdFldName}`)
+			where w0.`ID`='{$id}'
+				and w0.`A_STATUS` not in('DELETED')
+				and w.`A_STATUS` not in('DELETED')
+			order by w.`SORT_PRIO` asc, w.`ID` asc
+		";
+		$res = $db->query($sql);
+		$wsk = array();
+		$wskOrder = array();
+		$sort_prio = 0;
+		while ($r = $db->fetch($res)) {
+			$wsk[$r->ID] = $sort_prio;//$r->SORT_PRIO;
+			$wskOrder[$sort_prio] = $r->ID;
+			$sort_prio += 1;
+		}
+		if (empty($wsk)) return;
+		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk ';print_r($wsk);echo'</pre>';
+		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">wsk_order ';print_r($wskOrder);echo'</pre>';
+		$wsk_new = array();
+		if ($sortDir == 'up') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
+			$old_wsk_id = $wsk[$id];
+			if ($old_wsk_id == 0) return;
+			//echo'zamien "'.$id.'" na "'.$wskOrder[$wsk[$id] - 1 ].'"';
+			$tmp = $wskOrder[$wsk[$id]];
+			$wskOrder[$wsk[$id]] = $wskOrder[$wsk[$id] - 1];
+			$wskOrder[$wsk[$id] - 1] = $tmp;
+		} else if ($sortDir == 'upup') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
+			$old_wsk_id = $wsk[$id];
+			if ($old_wsk_id == 0) return;
+			$tmp = $wskOrder[$wsk[$id]];
+			$tmp1 = $wskOrder[$wsk[$id] - 1];
+			$tmp2 = $wskOrder[$wsk[$id] - 2];
+			$tmp3 = $wskOrder[$wsk[$id] - 3];
+			$tmp4 = $wskOrder[$wsk[$id] - 4];
+			$tmp5 = $wskOrder[$wsk[$id] - 5];
+			$tmp6 = $wskOrder[$wsk[$id] - 6];
+			$wskOrder[$wsk[$id]] = $tmp1;
+			$wskOrder[$wsk[$id] - 1] = $tmp2;
+			$wskOrder[$wsk[$id] - 2] = $tmp3;
+			$wskOrder[$wsk[$id] - 3] = $tmp4;
+			$wskOrder[$wsk[$id] - 4] = $tmp5;
+			$wskOrder[$wsk[$id] - 5] = $tmp6;
+			$wskOrder[$wsk[$id] - 6] = $tmp;
+		} else if ($sortDir == 'downdown') {// wskaznik $wsk_id 'w gore' (zmniejsz sort_prio)
+			$old_wsk_id = $wsk[$id];
+			if ($old_wsk_id == 0) return;
+			$tmp = $wskOrder[$wsk[$id]];
+			$tmp1 = $wskOrder[$wsk[$id] + 1];
+			$tmp2 = $wskOrder[$wsk[$id] + 2];
+			$tmp3 = $wskOrder[$wsk[$id] + 3];
+			$tmp4 = $wskOrder[$wsk[$id] + 4];
+			$tmp5 = $wskOrder[$wsk[$id] + 5];
+			$tmp6 = $wskOrder[$wsk[$id] + 6];
+			$wskOrder[$wsk[$id]] = $tmp1;
+			$wskOrder[$wsk[$id] + 1] = $tmp2;
+			$wskOrder[$wsk[$id] + 2] = $tmp3;
+			$wskOrder[$wsk[$id] + 3] = $tmp4;
+			$wskOrder[$wsk[$id] + 4] = $tmp5;
+			$wskOrder[$wsk[$id] + 5] = $tmp6;
+			$wskOrder[$wsk[$id] + 6] = $tmp;
+		} else {// wskaznik $wsk_id 'w dol' (zwieksz sort_prio)
+			$old_wsk_id = $wsk[$id];
+			if ($old_wsk_id + 1 == count($wsk)) return;
+			//echo'zamien "'.$id.'" na "'.$wskOrder[$wsk[$id] + 1 ].'"';
+			$tmp = $wskOrder[$wsk[$id]];
+			$wskOrder[$wsk[$id]] = $wskOrder[$wsk[$id] + 1];
+			$wskOrder[$wsk[$id] + 1] = $tmp;
+		}
+		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk ';print_r($wsk);echo'</pre>';
+		//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">2 wsk_order ';print_r($wskOrder);echo'</pre>';
+		if (empty($wskOrder)) return;
+		foreach ($wskOrder as $k_osrt_prio => $v_wsk_id) {
+			$sql = "update `{$tblName}`
+				set `SORT_PRIO`='{$k_osrt_prio}'
+				where `ID`='{$v_wsk_id}'
+			";
+			$db->query($sql);
+		}
+	}
+
+}