fix: resolve container width issues, spa redirects, and appearance settings overwrite. feat: enhance order/sub details and newsletter layout
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Store REST API Controller
|
||||
*
|
||||
@@ -11,28 +12,31 @@ namespace WooNooW\API;
|
||||
|
||||
use WooNooW\Compat\StoreSettingsProvider;
|
||||
use WooNooW\Compat\CustomerSettingsProvider;
|
||||
use WooNooW\Compat\SecuritySettingsProvider;
|
||||
use WP_REST_Controller;
|
||||
use WP_REST_Server;
|
||||
use WP_REST_Request;
|
||||
use WP_REST_Response;
|
||||
use WP_Error;
|
||||
|
||||
class StoreController extends WP_REST_Controller {
|
||||
|
||||
class StoreController extends WP_REST_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Namespace
|
||||
*/
|
||||
protected $namespace = 'woonoow/v1';
|
||||
|
||||
|
||||
/**
|
||||
* Rest base
|
||||
*/
|
||||
protected $rest_base = 'store';
|
||||
|
||||
|
||||
/**
|
||||
* Register routes
|
||||
*/
|
||||
public function register_routes() {
|
||||
public function register_routes()
|
||||
{
|
||||
// GET /woonoow/v1/store/branding (PUBLIC - for login page)
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/branding', [
|
||||
[
|
||||
@@ -41,7 +45,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => '__return_true', // Public endpoint
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// GET /woonoow/v1/store/settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/settings', [
|
||||
[
|
||||
@@ -50,7 +54,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// POST /woonoow/v1/store/settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/settings', [
|
||||
[
|
||||
@@ -59,7 +63,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// GET /woonoow/v1/store/countries
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/countries', [
|
||||
[
|
||||
@@ -68,7 +72,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// GET /woonoow/v1/store/timezones
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/timezones', [
|
||||
[
|
||||
@@ -77,7 +81,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// GET /woonoow/v1/store/currencies
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/currencies', [
|
||||
[
|
||||
@@ -86,7 +90,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// GET /woonoow/v1/store/customer-settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/customer-settings', [
|
||||
[
|
||||
@@ -95,7 +99,7 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// POST /woonoow/v1/store/customer-settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/customer-settings', [
|
||||
[
|
||||
@@ -104,15 +108,34 @@ class StoreController extends WP_REST_Controller {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
// GET /woonoow/v1/store/security-settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/security-settings', [
|
||||
[
|
||||
'methods' => WP_REST_Server::READABLE,
|
||||
'callback' => [$this, 'get_security_settings'],
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
// POST /woonoow/v1/store/security-settings
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/security-settings', [
|
||||
[
|
||||
'methods' => WP_REST_Server::EDITABLE,
|
||||
'callback' => [$this, 'save_security_settings'],
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get store branding (PUBLIC - for login page)
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response Response object
|
||||
*/
|
||||
public function get_branding(WP_REST_Request $request) {
|
||||
public function get_branding(WP_REST_Request $request)
|
||||
{
|
||||
$branding = [
|
||||
'store_name' => get_option('woonoow_store_name', '') ?: get_option('blogname', 'WooNooW'),
|
||||
'store_logo' => get_option('woonoow_store_logo', ''),
|
||||
@@ -120,26 +143,27 @@ class StoreController extends WP_REST_Controller {
|
||||
'store_icon' => get_option('woonoow_store_icon', ''),
|
||||
'store_tagline' => get_option('woonoow_store_tagline', ''),
|
||||
];
|
||||
|
||||
|
||||
$response = rest_ensure_response($branding);
|
||||
$response->header('Cache-Control', 'max-age=300'); // Cache for 5 minutes
|
||||
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
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(
|
||||
@@ -149,16 +173,17 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
public function save_settings(WP_REST_Request $request)
|
||||
{
|
||||
$settings = $request->get_json_params();
|
||||
|
||||
|
||||
if (empty($settings)) {
|
||||
return new WP_Error(
|
||||
'missing_settings',
|
||||
@@ -166,10 +191,10 @@ class StoreController extends WP_REST_Controller {
|
||||
['status' => 400]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
$result = StoreSettingsProvider::save_settings($settings);
|
||||
|
||||
|
||||
if (!$result) {
|
||||
return new WP_Error(
|
||||
'save_failed',
|
||||
@@ -177,7 +202,7 @@ class StoreController extends WP_REST_Controller {
|
||||
['status' => 500]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return rest_ensure_response([
|
||||
'success' => true,
|
||||
'message' => 'Settings saved successfully',
|
||||
@@ -191,20 +216,21 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
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(
|
||||
@@ -214,20 +240,21 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
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(
|
||||
@@ -237,20 +264,21 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
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(
|
||||
@@ -260,20 +288,21 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get customer settings
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response|WP_Error Response object or error
|
||||
*/
|
||||
public function get_customer_settings(WP_REST_Request $request) {
|
||||
public function get_customer_settings(WP_REST_Request $request)
|
||||
{
|
||||
try {
|
||||
$settings = CustomerSettingsProvider::get_settings();
|
||||
|
||||
|
||||
$response = rest_ensure_response($settings);
|
||||
$response->header('Cache-Control', 'max-age=60');
|
||||
|
||||
|
||||
return $response;
|
||||
} catch (\Exception $e) {
|
||||
return new WP_Error(
|
||||
@@ -283,17 +312,18 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save customer settings
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response|WP_Error Response object or error
|
||||
*/
|
||||
public function save_customer_settings(WP_REST_Request $request) {
|
||||
public function save_customer_settings(WP_REST_Request $request)
|
||||
{
|
||||
try {
|
||||
$settings = $request->get_json_params();
|
||||
|
||||
|
||||
if (empty($settings)) {
|
||||
return new WP_Error(
|
||||
'invalid_settings',
|
||||
@@ -301,9 +331,9 @@ class StoreController extends WP_REST_Controller {
|
||||
['status' => 400]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
$updated = CustomerSettingsProvider::update_settings($settings);
|
||||
|
||||
|
||||
if (!$updated) {
|
||||
return new WP_Error(
|
||||
'update_failed',
|
||||
@@ -311,16 +341,15 @@ class StoreController extends WP_REST_Controller {
|
||||
['status' => 500]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Return updated settings
|
||||
$new_settings = CustomerSettingsProvider::get_settings();
|
||||
|
||||
|
||||
return new WP_REST_Response([
|
||||
'success' => true,
|
||||
'message' => __('Customer settings updated successfully', 'woonoow'),
|
||||
'settings' => $new_settings,
|
||||
], 200);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return new WP_Error(
|
||||
'save_customer_settings_failed',
|
||||
@@ -329,13 +358,84 @@ class StoreController extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get security settings
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response|WP_Error Response object or error
|
||||
*/
|
||||
public function get_security_settings(WP_REST_Request $request)
|
||||
{
|
||||
try {
|
||||
$settings = SecuritySettingsProvider::get_settings();
|
||||
|
||||
$response = rest_ensure_response($settings);
|
||||
$response->header('Cache-Control', 'max-age=60');
|
||||
|
||||
return $response;
|
||||
} catch (\Exception $e) {
|
||||
return new WP_Error(
|
||||
'get_security_settings_failed',
|
||||
$e->getMessage(),
|
||||
['status' => 500]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save security settings
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response|WP_Error Response object or error
|
||||
*/
|
||||
public function save_security_settings(WP_REST_Request $request)
|
||||
{
|
||||
try {
|
||||
$settings = $request->get_json_params();
|
||||
|
||||
if (empty($settings)) {
|
||||
return new WP_Error(
|
||||
'invalid_settings',
|
||||
__('Invalid settings data', 'woonoow'),
|
||||
['status' => 400]
|
||||
);
|
||||
}
|
||||
|
||||
$updated = SecuritySettingsProvider::update_settings($settings);
|
||||
|
||||
if (!$updated) {
|
||||
return new WP_Error(
|
||||
'update_failed',
|
||||
__('Failed to update security settings', 'woonoow'),
|
||||
['status' => 500]
|
||||
);
|
||||
}
|
||||
|
||||
// Return updated settings
|
||||
$new_settings = SecuritySettingsProvider::get_settings();
|
||||
|
||||
return new WP_REST_Response([
|
||||
'success' => true,
|
||||
'message' => __('Security settings updated successfully', 'woonoow'),
|
||||
'settings' => $new_settings,
|
||||
], 200);
|
||||
} catch (\Exception $e) {
|
||||
return new WP_Error(
|
||||
'save_security_settings_failed',
|
||||
$e->getMessage(),
|
||||
['status' => 500]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user has permission
|
||||
*
|
||||
* @return bool True if user has permission
|
||||
*/
|
||||
public function check_permission() {
|
||||
public function check_permission()
|
||||
{
|
||||
// Check WooCommerce capability first, fallback to manage_options
|
||||
return current_user_can('manage_woocommerce') || current_user_can('manage_options');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user