namespace, '/' . $this->rest_base . '/settings', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_settings'], 'permission_callback' => [$this, 'check_permission'], ], ]); // POST /woonoow/v1/store/settings register_rest_route($this->namespace, '/' . $this->rest_base . '/settings', [ [ 'methods' => WP_REST_Server::EDITABLE, 'callback' => [$this, 'save_settings'], 'permission_callback' => [$this, 'check_permission'], ], ]); // GET /woonoow/v1/store/countries register_rest_route($this->namespace, '/' . $this->rest_base . '/countries', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_countries'], 'permission_callback' => [$this, 'check_permission'], ], ]); // GET /woonoow/v1/store/timezones register_rest_route($this->namespace, '/' . $this->rest_base . '/timezones', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_timezones'], 'permission_callback' => [$this, 'check_permission'], ], ]); // GET /woonoow/v1/store/currencies register_rest_route($this->namespace, '/' . $this->rest_base . '/currencies', [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_currencies'], 'permission_callback' => [$this, 'check_permission'], ], ]); } /** * Get store settings * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error Response object or error */ public function get_settings(WP_REST_Request $request) { try { $settings = StoreSettingsProvider::get_settings(); $response = rest_ensure_response($settings); $response->header('Cache-Control', 'max-age=60'); return $response; } catch (\Exception $e) { return new WP_Error( 'get_settings_failed', $e->getMessage(), ['status' => 500] ); } } /** * Save store settings * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error Response object or error */ public function save_settings(WP_REST_Request $request) { $settings = $request->get_json_params(); if (empty($settings)) { return new WP_Error( 'missing_settings', 'No settings provided', ['status' => 400] ); } try { $result = StoreSettingsProvider::save_settings($settings); if (!$result) { return new WP_Error( 'save_failed', 'Failed to save settings', ['status' => 500] ); } return rest_ensure_response([ 'success' => true, 'message' => 'Settings saved successfully', 'settings' => StoreSettingsProvider::get_settings(), ]); } catch (\Exception $e) { return new WP_Error( 'save_settings_failed', $e->getMessage(), ['status' => 500] ); } } /** * Get countries * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error Response object or error */ public function get_countries(WP_REST_Request $request) { try { $countries = StoreSettingsProvider::get_countries(); $response = rest_ensure_response($countries); $response->header('Cache-Control', 'max-age=3600'); // Cache for 1 hour return $response; } catch (\Exception $e) { return new WP_Error( 'get_countries_failed', $e->getMessage(), ['status' => 500] ); } } /** * Get timezones * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error Response object or error */ public function get_timezones(WP_REST_Request $request) { try { $timezones = StoreSettingsProvider::get_timezones(); $response = rest_ensure_response($timezones); $response->header('Cache-Control', 'max-age=3600'); // Cache for 1 hour return $response; } catch (\Exception $e) { return new WP_Error( 'get_timezones_failed', $e->getMessage(), ['status' => 500] ); } } /** * Get currencies * * @param WP_REST_Request $request Request object * @return WP_REST_Response|WP_Error Response object or error */ public function get_currencies(WP_REST_Request $request) { try { $currencies = StoreSettingsProvider::get_currencies(); $response = rest_ensure_response($currencies); $response->header('Cache-Control', 'max-age=3600'); // Cache for 1 hour return $response; } catch (\Exception $e) { return new WP_Error( 'get_currencies_failed', $e->getMessage(), ['status' => 500] ); } } /** * Check permission * * @return bool True if user has permission */ public function check_permission() { return current_user_can('manage_woocommerce'); } }