namespace, '/' . $this->rest_base, [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_modules'], 'permission_callback' => [$this, 'check_permission'], ], ]); // POST /woonoow/v1/modules/toggle register_rest_route($this->namespace, '/' . $this->rest_base . '/toggle', [ [ 'methods' => WP_REST_Server::CREATABLE, 'callback' => [$this, 'toggle_module'], 'permission_callback' => [$this, 'check_permission'], 'args' => [ 'module_id' => [ 'required' => true, 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field', ], 'enabled' => [ 'required' => true, 'type' => 'boolean', ], ], ], ]); // GET /woonoow/v1/modules/enabled (public endpoint for frontend) register_rest_route($this->namespace, '/' . $this->rest_base . '/enabled', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_enabled_modules'], 'permission_callback' => '__return_true', ], ]); } /** * Check permission * * @return bool */ public function check_permission() { return current_user_can('manage_options'); } /** * Get all modules with status * * @param WP_REST_Request $request * @return WP_REST_Response */ public function get_modules($request) { $modules = ModuleRegistry::get_all_with_status(); $grouped = ModuleRegistry::get_grouped_modules(); // Add enabled status to grouped modules $enabled_modules = ModuleRegistry::get_enabled_modules(); foreach ($grouped as $category => &$category_modules) { foreach ($category_modules as &$module) { $module['enabled'] = in_array($module['id'], $enabled_modules); } } return new WP_REST_Response([ 'modules' => $modules, 'grouped' => $grouped, 'categories' => ModuleRegistry::get_categories(), ], 200); } /** * Toggle module enabled/disabled * * @param WP_REST_Request $request * @return WP_REST_Response|WP_Error */ public function toggle_module($request) { $module_id = $request->get_param('module_id'); $enabled = $request->get_param('enabled'); $modules = ModuleRegistry::get_all_modules(); if (!isset($modules[$module_id])) { return new WP_Error( 'invalid_module', __('Invalid module ID', 'woonoow'), ['status' => 400] ); } if ($enabled) { $result = ModuleRegistry::enable($module_id); } else { $result = ModuleRegistry::disable($module_id); } if ($result) { return new WP_REST_Response([ 'success' => true, 'message' => $enabled ? __('Module enabled successfully', 'woonoow') : __('Module disabled successfully', 'woonoow'), 'module_id' => $module_id, 'enabled' => $enabled, ], 200); } return new WP_Error( 'toggle_failed', __('Failed to toggle module', 'woonoow'), ['status' => 500] ); } /** * Get enabled modules (public endpoint) * * @param WP_REST_Request $request * @return WP_REST_Response */ public function get_enabled_modules($request) { $enabled = ModuleRegistry::get_enabled_modules(); return new WP_REST_Response([ 'enabled' => $enabled, ], 200); } }