Snapshot synced v3.6.1 working state as baseline
Machine-sync snapshot: the working tree carried the full 3.0.0-3.6.1 arc (licensing/FileManager/DatabaseExplorer removal, all new replacement screens and REST controllers) that had not been committed on this machine. Captured here as a safety baseline before starting the Adminify-parity revamp. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
07d77bda57
commit
e2db2ad4b5
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
namespace AuroraAdmin\Rest;
|
||||
|
||||
use AuroraAdmin\Media\MediaFolders;
|
||||
|
||||
defined("ABSPATH") || exit();
|
||||
|
||||
/**
|
||||
* REST endpoints for Media Folders.
|
||||
*/
|
||||
class MediaFolderData
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action("rest_api_init", [self::class, "register"]);
|
||||
}
|
||||
|
||||
public static function register()
|
||||
{
|
||||
register_rest_route("aurora-admin/v1", "/media-folders", [
|
||||
"methods" => "GET",
|
||||
"callback" => [self::class, "get_tree"],
|
||||
"permission_callback" => [self::class, "can_manage"],
|
||||
]);
|
||||
|
||||
register_rest_route("aurora-admin/v1", "/media-folders", [
|
||||
"methods" => "POST",
|
||||
"callback" => [self::class, "create_folder"],
|
||||
"permission_callback" => [self::class, "can_manage"],
|
||||
"args" => [
|
||||
"name" => ["type" => "string", "required" => true],
|
||||
"parent" => ["type" => "integer", "required" => false],
|
||||
],
|
||||
]);
|
||||
|
||||
register_rest_route("aurora-admin/v1", "/media-folders/(?P<id>\d+)", [
|
||||
"methods" => "POST",
|
||||
"callback" => [self::class, "update_folder"],
|
||||
"permission_callback" => [self::class, "can_manage"],
|
||||
"args" => [
|
||||
"id" => ["type" => "integer", "required" => true],
|
||||
"name" => ["type" => "string", "required" => false],
|
||||
"parent" => ["type" => "integer", "required" => false],
|
||||
"siblingOrder" => ["type" => "array", "required" => false],
|
||||
],
|
||||
]);
|
||||
|
||||
register_rest_route("aurora-admin/v1", "/media-folders/(?P<id>\d+)", [
|
||||
"methods" => "DELETE",
|
||||
"callback" => [self::class, "delete_folder"],
|
||||
"permission_callback" => [self::class, "can_manage"],
|
||||
"args" => [
|
||||
"id" => ["type" => "integer", "required" => true],
|
||||
],
|
||||
]);
|
||||
|
||||
register_rest_route("aurora-admin/v1", "/media-folders/assign", [
|
||||
"methods" => "POST",
|
||||
"callback" => [self::class, "assign"],
|
||||
"permission_callback" => [self::class, "can_manage"],
|
||||
"args" => [
|
||||
"folderId" => ["type" => "integer", "required" => true],
|
||||
"attachmentIds" => ["type" => "array", "required" => true],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public static function can_manage()
|
||||
{
|
||||
return current_user_can("upload_files");
|
||||
}
|
||||
|
||||
public static function get_tree($request)
|
||||
{
|
||||
return new \WP_REST_Response(
|
||||
[
|
||||
"tree" => MediaFolders::get_tree(),
|
||||
"allMediaCount" => MediaFolders::total_attachment_count(),
|
||||
"uncategorizedCount" => MediaFolders::uncategorized_count(),
|
||||
],
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
public static function create_folder($request)
|
||||
{
|
||||
$name = sanitize_text_field((string) $request->get_param("name"));
|
||||
$parent = (int) ($request->get_param("parent") ?: 0);
|
||||
|
||||
$id = MediaFolders::create_folder($name, $parent);
|
||||
if (!$id) {
|
||||
return new \WP_Error("aurora_folder_invalid", __("Folder name is required.", "aurora-admin"), ["status" => 400]);
|
||||
}
|
||||
|
||||
return new \WP_REST_Response(["id" => $id], 201);
|
||||
}
|
||||
|
||||
public static function update_folder($request)
|
||||
{
|
||||
$id = (int) $request["id"];
|
||||
$name = $request->get_param("name");
|
||||
$parent = $request->get_param("parent");
|
||||
|
||||
if ($name !== null && $name !== "") {
|
||||
MediaFolders::rename_folder($id, sanitize_text_field((string) $name));
|
||||
}
|
||||
|
||||
if ($parent !== null) {
|
||||
$sibling_order = (array) ($request->get_param("siblingOrder") ?: []);
|
||||
$moved = MediaFolders::move_folder($id, (int) $parent, $sibling_order);
|
||||
if (!$moved) {
|
||||
return new \WP_Error(
|
||||
"aurora_folder_move_failed",
|
||||
__("Could not move that folder there.", "aurora-admin"),
|
||||
["status" => 400]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return new \WP_REST_Response(["success" => true], 200);
|
||||
}
|
||||
|
||||
public static function delete_folder($request)
|
||||
{
|
||||
$id = (int) $request["id"];
|
||||
MediaFolders::delete_folder($id);
|
||||
return new \WP_REST_Response(["success" => true], 200);
|
||||
}
|
||||
|
||||
public static function assign($request)
|
||||
{
|
||||
$folder_id = (int) $request->get_param("folderId");
|
||||
$ids = (array) $request->get_param("attachmentIds");
|
||||
|
||||
$ids = array_values(
|
||||
array_filter($ids, function ($id) {
|
||||
return current_user_can("edit_post", (int) $id);
|
||||
})
|
||||
);
|
||||
|
||||
if (empty($ids)) {
|
||||
return new \WP_Error(
|
||||
"aurora_folder_assign_failed",
|
||||
__("There is nothing to move.", "aurora-admin"),
|
||||
["status" => 400]
|
||||
);
|
||||
}
|
||||
|
||||
MediaFolders::assign_attachments($folder_id, $ids);
|
||||
return new \WP_REST_Response(["success" => true], 200);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user