Files
wp-agentic-writer/includes/class-controller-image.php
Dwindi Ramadhana 690991c526 refactor: Cleanup git state - commit all staged changes
Major refactoring cleanup:
- Add new controller architecture (class-controller-*.php)
- Add new settings-v2 UI (views/settings-v2/)
- Add new CSS architecture (agentic-sidebar.css, tokens)
- Add esbuild build pipeline (scripts/build.js, package.json)
- Add composer dependencies (vendor/)
- Add frontend src directory (assets/js/src/index.jsx)
- Add documentation files
- Remove old/obsolete files (class-settings.php, old CSS)

This commits all pending changes from previous refactoring efforts.
2026-06-17 05:27:58 +07:00

166 lines
4.7 KiB
PHP

<?php
/**
* Image REST Controller
*
* Handles image generation and recommendation operations.
*
* @package WP_Agentic_Writer
*/
/**
* Class WP_Agentic_Writer_Controller_Image
*
* REST controller for image operations.
*
* @since 0.3.0
*/
class WP_Agentic_Writer_Controller_Image
{
/**
* Sidebar instance for dependency access.
*
* @var WP_Agentic_Writer_Gutenberg_Sidebar
*/
private $sidebar;
/**
* Constructor.
*
* @since 0.3.0
* @param WP_Agentic_Writer_Gutenberg_Sidebar $sidebar Sidebar instance.
*/
public function __construct($sidebar)
{
$this->sidebar = $sidebar;
}
/**
* Handle get image recommendations request.
*
* @since 0.1.0
* @param WP_REST_Request $request REST request.
* @return WP_REST_Response|WP_Error Response.
*/
public function handle_get_image_recommendations($request)
{
$post_id = $request->get_param("post_id");
if ($post_id > 0 && !$this->sidebar->check_post_permission($post_id)) {
return new WP_Error(
"forbidden",
__(
"You do not have permission to access this post.",
"wp-agentic-writer",
),
["status" => 403],
);
}
$image_manager = WP_Agentic_Writer_Image_Manager::get_instance();
$images = $image_manager->get_image_recommendations($post_id);
// Block-level sync: ensure each unresolved image block has a stable
// agent id and a corresponding recommendation row.
if ($post_id > 0) {
$post = get_post($post_id);
if ($post instanceof WP_Post && !empty($post->post_content)) {
$post_config = $this->sidebar->get_post_config($post_id);
if (!empty($post_config["include_images"])) {
$images = $this->sidebar->sync_image_block_recommendations(
$post_id,
$post,
);
}
}
}
return new WP_REST_Response(["images" => $images], 200);
}
/**
* Handle generate image request.
*
* @since 0.1.0
* @param WP_REST_Request $request REST request.
* @return WP_REST_Response|WP_Error Response.
*/
public function handle_generate_image($request)
{
// Check rate limit.
$rate_limit = WPAW_Rate_Limiter::check("generate_image");
if (is_wp_error($rate_limit)) {
return $rate_limit;
}
$post_id = $request->get_param("post_id");
$agent_image_id = $request->get_param("agent_image_id");
$prompt = $request->get_param("prompt");
$variant_count = $request->get_param("variant_count") ?? 2;
if ($post_id > 0 && !$this->sidebar->check_post_permission($post_id)) {
return new WP_Error(
"forbidden",
__(
"You do not have permission to edit this post.",
"wp-agentic-writer",
),
["status" => 403],
);
}
$image_manager = WP_Agentic_Writer_Image_Manager::get_instance();
$variants = $image_manager->generate_image_variants(
$post_id,
$agent_image_id,
$prompt,
$variant_count,
);
if (is_wp_error($variants)) {
return $variants;
}
return new WP_REST_Response(["variants" => $variants], 200);
}
/**
* Handle commit image request.
*
* @since 0.1.0
* @param WP_REST_Request $request REST request.
* @return WP_REST_Response|WP_Error Response.
*/
public function handle_commit_image($request)
{
$post_id = $request->get_param("post_id");
$agent_image_id = $request->get_param("agent_image_id");
$variant_id = $request->get_param("variant_id");
$alt_text = $request->get_param("alt");
if ($post_id > 0 && !$this->sidebar->check_post_permission($post_id)) {
return new WP_Error(
"forbidden",
__(
"You do not have permission to edit this post.",
"wp-agentic-writer",
),
["status" => 403],
);
}
$image_manager = WP_Agentic_Writer_Image_Manager::get_instance();
$result = $image_manager->commit_image_variant(
$post_id,
$agent_image_id,
$variant_id,
$alt_text,
);
if (is_wp_error($result)) {
return $result;
}
return new WP_REST_Response($result, 200);
}
}