function db_update_treesize($tname, $tfolder) { if (is_numeric($tfolder) and !strpos($tname, "_nodb_") and $tname != "simple_sys_tree") { db_lock_tree(true); $row = db_select_first("simple_sys_tree", array("lft", "fcount", "fsizecount"), "id=@id@", "", array("id" => $tfolder)); if (isset($row["lft"])) { $count = (int) db_select_value($tname, "count(*) as count", "folder=@id@", array("id" => $tfolder)); $sum = (int) db_select_value($tname, "coalesce(sum(dsize),0) as count", "folder=@id@", array("id" => $tfolder)); db_update("simple_sys_tree", array("fcount" => $count), array("id=@id@"), array("id" => $tfolder)); db_update("simple_sys_tree", array("fsizecount" => $sum), array("id=@id@"), array("id" => $tfolder)); $diff_count = $count - $row["fcount"]; $diff_sum = $sum - $row["fsizecount"]; if ($diff_count != 0 or $diff_sum != 0) { if ($diff_count >= 0) { $diff_count = "+" . $diff_count; } if ($diff_sum >= 0) { $diff_sum = "+" . $diff_sum; } db_update("simple_sys_tree", array("fchsizecount" => "fchsizecount" . $diff_sum, "fchcount" => "fchcount" . $diff_count), array("lft<@lft@", "rgt>@lft@"), array("lft" => $row["lft"]), array("quote" => false, "no_defaults" => true)); } } db_lock_tree(false); db_check_quota($tfolder); } }
public static function moveupdown($fmoveupdown, $path) { db_lock_tree(true); $row = db_select_first("simple_sys_tree", array("id", "lft", "rgt", "flevel", "parent"), "id=@id@", "", array("id" => $path)); if (isset($row["lft"])) { if ($fmoveupdown == "up") { $lower = $row; $upper = db_select_first("simple_sys_tree", array("id", "lft", "rgt"), array("parent=@row_parent@", "lft<@row_lft@"), "lft desc", array("row_parent" => $row["parent"], "row_lft" => $row["lft"])); } if ($fmoveupdown == "down") { $upper = $row; $lower = db_select_first("simple_sys_tree", array("id", "lft", "rgt"), array("parent=@row_parent@", "lft>@row_rgt@"), "lft asc", array("row_parent" => $row["parent"], "row_rgt" => $row["rgt"])); } if (isset($lower["lft"]) and isset($upper["lft"])) { $distance = $lower["lft"] - $upper["lft"]; $distance2 = $lower["rgt"] - $upper["rgt"]; $lowers = db_select("simple_sys_tree", "id", "lft between @lft@ and @rgt@", "lft desc", "", array("lft" => $lower["lft"], "rgt" => $lower["rgt"])); $uppers = db_select("simple_sys_tree", "id", "lft between @lft@ and @rgt@", "lft desc", "", array("lft" => $upper["lft"], "rgt" => $upper["rgt"])); if (is_numeric($distance) and $distance != 0 and is_array($lowers) and count($lowers) > 0) { foreach ($lowers as $lowers_item) { db_update("simple_sys_tree", array("lft" => "lft-" . $distance, "rgt" => "rgt-" . $distance), array("id=@id@"), array("id" => $lowers_item["id"]), array("quote" => false, "no_defaults" => true)); } } if (is_numeric($distance2) and $distance2 != 0 and is_array($uppers) and count($uppers) > 0) { foreach ($uppers as $uppers_item) { db_update("simple_sys_tree", array("lft" => "lft+" . $distance2, "rgt" => "rgt+" . $distance2), array("id=@id@"), array("id" => $uppers_item["id"]), array("quote" => false, "no_defaults" => true)); } } } } db_lock_tree(false); }