예제 #1
0
 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));
 }
예제 #2
0
 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"];
 }