Browse Source

Cleanup, block some cat moves

Vova Tkach 6 years ago
parent
commit
cef82603d3
1 changed files with 62 additions and 56 deletions
  1. 62 56
      modules/module_blog_categories_act_modify.go

+ 62 - 56
modules/module_blog_categories_act_modify.go

@@ -1,7 +1,8 @@
 package modules
 package modules
 
 
 import (
 import (
-	// "golang-fave/engine/sqlw"
+	"errors"
+
 	"golang-fave/engine/wrapper"
 	"golang-fave/engine/wrapper"
 	"golang-fave/utils"
 	"golang-fave/utils"
 )
 )
@@ -85,71 +86,76 @@ func (this *Modules) blog_ActionCategoryUpdate(wrap *wrapper.Wrapper, pf_id, pf_
 		wrap.LogError("parentL = %d, parentR = %d", parentL, parentR)
 		wrap.LogError("parentL = %d, parentR = %d", parentL, parentR)
 		wrap.LogError("targetL = %d, targetR = %d", targetL, targetR)
 		wrap.LogError("targetL = %d, targetR = %d", targetL, targetR)
 
 
-		// Select data
-		rows, err := tx.Query("SELECT id, lft, rgt FROM blog_cats WHERE lft >= ? and rgt <= ? ORDER BY lft ASC", targetL, targetR)
-		if err != nil {
-			return err
-		}
-		defer rows.Close()
-		var rows_id []int
-		var rows_lft []int
-		var rows_rgt []int
-		for rows.Next() {
-			var row_id int
-			var row_lft int
-			var row_rgt int
-			if err := rows.Scan(&row_id, &row_lft, &row_rgt); err == nil {
-				rows_id = append(rows_id, row_id)
-				rows_lft = append(rows_lft, row_lft)
-				rows_rgt = append(rows_rgt, row_rgt)
-			}
-		}
-
-		wrap.LogError("rows_id = %v", rows_id)
-		wrap.LogError("rows_lft = %v", rows_lft)
-		wrap.LogError("rows_rgt = %v", rows_rgt)
-
-		if targetL > parentR {
-			// From right to left
-			// Shift
-			step := targetR - targetL + 1
-			if _, err := tx.Exec("UPDATE blog_cats SET lft = lft + ? WHERE lft > ? and lft < ?;", step, parentR, targetL); err != nil {
-				return err
-			}
-			if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + ? WHERE rgt > ? and rgt < ?;", step, parentR, targetL); err != nil {
+		if !(targetL < parentL && targetR > parentR) {
+			// Select data
+			rows, err := tx.Query("SELECT id, lft, rgt FROM blog_cats WHERE lft >= ? and rgt <= ? ORDER BY lft ASC", targetL, targetR)
+			if err != nil {
 				return err
 				return err
 			}
 			}
-			if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + ? WHERE id = ?;", step, pf_parent); err != nil {
-				return err
+			defer rows.Close()
+			var rows_id []int
+			var rows_lft []int
+			var rows_rgt []int
+			for rows.Next() {
+				var row_id int
+				var row_lft int
+				var row_rgt int
+				if err := rows.Scan(&row_id, &row_lft, &row_rgt); err == nil {
+					rows_id = append(rows_id, row_id)
+					rows_lft = append(rows_lft, row_lft)
+					rows_rgt = append(rows_rgt, row_rgt)
+				}
 			}
 			}
 
 
-			// Update target rows
-			for i, _ := range rows_id {
-				new_lft := rows_lft[i] - (targetL - parentR)
-				new_rgt := rows_rgt[i] - (targetL - parentR)
-				if _, err := tx.Exec("UPDATE blog_cats SET lft = ?, rgt = ? WHERE id = ?;", new_lft, new_rgt, rows_id[i]); err != nil {
+			wrap.LogError("rows_id = %v", rows_id)
+			wrap.LogError("rows_lft = %v", rows_lft)
+			wrap.LogError("rows_rgt = %v", rows_rgt)
+
+			if targetL > parentR {
+				// From right to left
+				// Shift
+				step := targetR - targetL + 1
+				if _, err := tx.Exec("UPDATE blog_cats SET lft = lft + ? WHERE lft > ? and lft < ?;", step, parentR, targetL); err != nil {
+					return err
+				}
+				if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + ? WHERE rgt > ? and rgt < ?;", step, parentR, targetL); err != nil {
+					return err
+				}
+				if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + ? WHERE id = ?;", step, pf_parent); err != nil {
 					return err
 					return err
 				}
 				}
-			}
-		} else {
-			// From left to right
-			// Shift
-			step := targetR - targetL + 1
-			if _, err := tx.Exec("UPDATE blog_cats SET lft = lft - ? WHERE lft > ? and lft < ?;", step, targetR, parentR); err != nil {
-				return err
-			}
-			if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt - ? WHERE rgt > ? and rgt < ?;", step, targetR, parentR); err != nil {
-				return err
-			}
 
 
-			// Update target rows
-			for i, _ := range rows_id {
-				new_lft := rows_lft[i] + (parentR - targetL - step)
-				new_rgt := rows_rgt[i] + (parentR - targetL - step)
-				if _, err := tx.Exec("UPDATE blog_cats SET lft = ?, rgt = ? WHERE id = ?;", new_lft, new_rgt, rows_id[i]); err != nil {
+				// Update target rows
+				for i, _ := range rows_id {
+					new_lft := rows_lft[i] - (targetL - parentR)
+					new_rgt := rows_rgt[i] - (targetL - parentR)
+					if _, err := tx.Exec("UPDATE blog_cats SET lft = ?, rgt = ? WHERE id = ?;", new_lft, new_rgt, rows_id[i]); err != nil {
+						return err
+					}
+				}
+			} else {
+				// From left to right
+				// Shift
+				step := targetR - targetL + 1
+				if _, err := tx.Exec("UPDATE blog_cats SET lft = lft - ? WHERE lft > ? and lft < ?;", step, targetR, parentR); err != nil {
+					return err
+				}
+				if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt - ? WHERE rgt > ? and rgt < ?;", step, targetR, parentR); err != nil {
 					return err
 					return err
 				}
 				}
+
+				// Update target rows
+				for i, _ := range rows_id {
+					new_lft := rows_lft[i] + (parentR - targetL - step)
+					new_rgt := rows_rgt[i] + (parentR - targetL - step)
+					if _, err := tx.Exec("UPDATE blog_cats SET lft = ?, rgt = ? WHERE id = ?;", new_lft, new_rgt, rows_id[i]); err != nil {
+						return err
+					}
+				}
 			}
 			}
+		} else {
+			// Trying to move category to they child as parent
+			return errors.New("You can't do this")
 		}
 		}
 
 
 		// Update target cat data
 		// Update target cat data