namespace, '/' . $this->rest_base . '/channels', [ [ 'methods' => 'GET', 'callback' => [$this, 'get_channels'], 'permission_callback' => [$this, 'check_permission'], ], ]); // GET /woonoow/v1/notifications/events register_rest_route($this->namespace, '/' . $this->rest_base . '/events', [ [ 'methods' => 'GET', 'callback' => [$this, 'get_events'], 'permission_callback' => [$this, 'check_permission'], ], ]); // GET /woonoow/v1/notifications/settings register_rest_route($this->namespace, '/' . $this->rest_base . '/settings', [ [ 'methods' => 'GET', 'callback' => [$this, 'get_settings'], 'permission_callback' => [$this, 'check_permission'], ], ]); // POST /woonoow/v1/notifications/settings register_rest_route($this->namespace, '/' . $this->rest_base . '/settings', [ [ 'methods' => 'POST', 'callback' => [$this, 'update_settings'], 'permission_callback' => [$this, 'check_permission'], ], ]); } /** * Get available notification channels * * @param WP_REST_Request $request Request object * @return WP_REST_Response */ public function get_channels(WP_REST_Request $request) { $channels = NotificationManager::get_channels(); // Add enabled status from settings $settings = NotificationSettingsProvider::get_settings(); $channel_settings = $settings['channels'] ?? []; foreach ($channels as $id => &$channel) { $channel['enabled'] = $channel_settings[$id]['enabled'] ?? $channel['builtin']; } return new WP_REST_Response(array_values($channels), 200); } /** * Get notification events * * @param WP_REST_Request $request Request object * @return WP_REST_Response */ public function get_events(WP_REST_Request $request) { $events = NotificationManager::get_events(); $settings = NotificationSettingsProvider::get_settings(); $event_settings = $settings['events'] ?? []; // Merge event data with settings foreach ($events as $id => &$event) { $event_config = $event_settings[$id] ?? []; $event['enabled'] = $event_config['enabled'] ?? true; $event['channels'] = $event_config['channels'] ?? ['email']; $event['recipients'] = $event_config['recipients'] ?? ['email' => 'admin']; } // Group by category $grouped = [ 'orders' => [], 'products' => [], 'customers' => [], ]; foreach ($events as $event) { $category = $event['category'] ?? 'general'; if (!isset($grouped[$category])) { $grouped[$category] = []; } $grouped[$category][] = $event; } return new WP_REST_Response($grouped, 200); } /** * Get notification settings * * @param WP_REST_Request $request Request object * @return WP_REST_Response */ public function get_settings(WP_REST_Request $request) { $settings = NotificationSettingsProvider::get_settings(); return new WP_REST_Response($settings, 200); } /** * Update notification settings * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error */ public function update_settings(WP_REST_Request $request) { $new_settings = $request->get_json_params(); if (empty($new_settings)) { return new WP_Error( 'invalid_settings', __('Invalid settings data', 'woonoow'), ['status' => 400] ); } $updated = NotificationSettingsProvider::update_settings($new_settings); if (!$updated) { return new WP_Error( 'update_failed', __('Failed to update notification settings', 'woonoow'), ['status' => 500] ); } return new WP_REST_Response([ 'success' => true, 'message' => __('Notification settings updated successfully', 'woonoow'), 'settings' => NotificationSettingsProvider::get_settings(), ], 200); } /** * Check if user has permission * * @return bool */ public function check_permission() { return current_user_can('manage_woocommerce') || current_user_can('manage_options'); } }