static function delete_items($folder, $view, $items, $mode = "delete") { if (empty($folder) or empty($view) or !is_array($items) or $mode == "") { return; } $sgsml = new sgsml($folder, $view, $items); $tname = $sgsml->tname; $handler = $sgsml->handler; if (!isset($sgsml->buttons[$mode]) or $mode == "delete" and count($items) == 0) { return; } if ($mode == "empty") { $sgsml->where = array("folder in (@folders@)"); } if ($mode == "purgeall") { $sgsml->where = array(); } if (in_array($mode, array("purge", "purgeall"))) { $delete = true; } else { $delete = false; } if (folder_in_trash($folder)) { $delete = true; } if ($handler == "") { $file_fields = $sgsml->get_fields_by_type("files"); } else { $file_fields = array(); } if (!empty($sgsml->att["TRIGGER_DELETE"])) { $fields = array("*"); } else { if (isset($sgsml->fields["notification"])) { $fields = array("id", "folder", "notification"); foreach ($sgsml->fields as $key => $field) { if (isset($field["REQUIRED"]) and $field["SIMPLE_TYPE"] != "files" and !in_array($key, $fields)) { $fields[] = $key; } } } else { $fields = array("id"); } $fields = array_unique(array_merge($fields, $file_fields)); } $rows = $sgsml->get_rows($fields); if (!is_array($rows) or count($rows) == 0 or count($rows) < count($items)) { exit("{t}Item(s) not found or access denied.{/t}"); } if ($delete) { foreach ($rows as $row) { foreach ($file_fields as $field) { $files = explode("|", $row[$field]); sys_unlink($files); } $data = array("id" => $row["id"], "folder" => $folder); db_delete($tname, array("id=@id@"), $data, array("handler" => $handler)); } } else { $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash")); if (empty($trash)) { exit("{t}Error{/t}: {t}Trash folder not found.{/t}"); } foreach ($rows as $row) { $id = folders::create(sys_date("{t}m/d/Y{/t}"), "blank", "", $trash, true); $tid = folders::create($sgsml->att["MODULENAME"], str_replace("simple_", "", $tname), "", $id, true); $data = array("folder" => $tid, "history" => sprintf("{t}Item deleted by %s at %s{/t}\n", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}"))); db_update($tname, $data, array("id=@id@"), array("id" => $row["id"]), array("handler" => $handler)); db_update_treesize($tname, $tid); if (!isset($row["notification"])) { $row["notification"] = ""; } $tree_notification = db_select_value("simple_sys_tree", "notification", "id=@id@", array("id" => $folder)); if ($tree_notification) { $row["notification"] .= "," . $tree_notification; } if (!empty($row["notification"])) { $smtp_data = self::build_notification($tname, $sgsml->fields, $row, $data, $id); asset_process_trigger("sendmail", $row["id"], $smtp_data); } if (!empty($sgsml->att["TRIGGER_DELETE"])) { asset_process_trigger($sgsml->att["TRIGGER_DELETE"], $row["id"], $row, $tname); } db_update("simple_sys_tree", array("history" => "[" . $row["id"] . "/details] " . $data["history"]), array("id=@id@"), array("id" => $folder)); db_search_delete($tname, $row["id"], $folder); db_notification_delete($tname, $row["id"]); } } db_update_treesize($tname, $folder); sys_log_stat("deleted_records", count($rows)); }
static function delete($folder) { $row = db_select_first("simple_sys_tree", array("id", "rgt", "lft", "ftitle", "parent"), "id=@id@", "", array("id" => $folder)); $rows = array(); if (!empty($row["id"])) { $rows = db_select("simple_sys_tree", array("id", "ftype"), "lft between @left@ and @right@", "lft asc", "", array("left" => $row["lft"], "right" => $row["rgt"])); } if (!is_array($rows) or count($rows) == 0) { return ""; } if (!folder_in_trash($folder)) { $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash")); if (empty($trash)) { exit("{t}Error{/t}: {t}Trash folder not found.{/t}"); } $id = self::create(sys_date("{t}m/d/Y{/t}"), "blank", "", $trash, true); $old_path = modify::getpath($folder); if (!self::move($row["id"], $id, true)) { exit("{t}The folder cannot be deleted.{/t}"); } $data = array("rread_users" => "", "rread_groups" => "", "rwrite_users" => "", "rwrite_groups" => "", "radmin_users" => "", "radmin_groups" => "", "rexception_users" => "", "rexception_groups" => "", "anchor" => ""); $data["history"] = sprintf("{t}Item deleted by %s at %s{/t}\n", $_SESSION["username"], sys_date("{t}m/d/y g:i:s a{/t}")); foreach ($rows as $folder) { db_update("simple_sys_tree", $data, array("id=@id@"), array("id" => $folder["id"])); } db_update("simple_sys_tree", array("history" => "{t}Origin{/t}: " . $old_path . "\n"), array("id=@id@"), array("id" => $rows[0]["id"])); sys_log_stat("deleted_folders", count($rows)); } else { foreach ($rows as $folder) { if ($folder["ftype"] != "sys_tree") { $schema_data = db_get_schema(sys_find_module($folder["ftype"])); $tname = $schema_data["att"]["NAME"]; if (!strpos($tname, "_nodb_")) { $delete_fields = array(); foreach ($schema_data["fields"] as $key => $field) { if ($field["SIMPLE_TYPE"] == "files") { $delete_fields[] = $key; } } if (count($delete_fields) > 0) { $data = db_select($tname, $delete_fields, "folder=@folder@", "created asc", "", array("folder" => $folder["id"])); if (is_array($data) and count($data) > 0) { foreach ($data as $ditem) { foreach ($delete_fields as $field) { $files = explode("|", $ditem[$field]); sys_unlink($files); } } } } db_delete($tname, array("folder=@folder@"), array("folder" => $folder["id"])); } } db_search_delete("simple_sys_tree", $folder["id"], $folder["id"]); db_search_delete_folder($folder["id"]); db_delete("simple_sys_tree", array("id=@id@"), array("id" => $folder["id"])); } db_update_subfolder_count($row["parent"]); } $folder = $row["id"]; if (isset($_SESSION["folder_states"][$folder])) { foreach ($_SESSION["folder_states"][$folder] as $child) { unset($_SESSION["folder_states"][$child]); } unset($_SESSION["folder_states"][$folder]); } return $row["parent"]; }