get_route(), '/aam/') !== false) { $user_id = get_current_user_id(); if (function_exists('switch_to_user_locale')) { switch_to_user_locale($user_id); } elseif (is_a($wp_locale_switcher, 'WP_Locale_Switcher')) { $wp_locale_switcher->switch_to_locale( get_user_locale($user_id), $user_id ); } } return $r; }, 10, 3); // Register API endpoint add_action('rest_api_init', function() { $permission_cb = function() { return current_user_can('aam_manager') && AAM::api()->misc->is_admin(); }; // Load the workspace for a selected access level and service. $this->_register_route('/preload', [ 'methods' => WP_REST_Server::READABLE, 'callback' => [ $this, 'preload' ], 'args' => [ 'access_level' => [ 'type' => 'string', 'required' => true, 'enum' => [ 'role', 'user', 'visitor', 'default' ] ], 'role_id' => [ 'type' => 'string' ], 'user_id' => [ 'type' => 'integer' ], 'screen' => [ 'type' => 'string' ] ] ], self::PERMISSIONS, false); // Reset AAM $this->_register_route('/core/reset', [ 'methods' => WP_REST_Server::DELETABLE, 'callback' => [ $this, 'reset' ] ], $permission_cb, false); // Export AAM settings, configurations & roles $this->_register_route('/core/export', [ 'methods' => WP_REST_Server::READABLE, 'callback' => [ $this, 'export' ] ], $permission_cb, false); // Import AAM settings, configurations & roles $this->_register_route('/core/import', [ 'methods' => WP_REST_Server::EDITABLE, 'callback' => [ $this, 'import' ] ], $permission_cb, false); }); // Get currently managed "Access Level" add_filter( 'aam_rest_get_access_level_filter', [ $this, 'get_access_level' ], 10, 2 ); // Handle common REST errors add_filter( 'aam_rest_get_error_response_filter', [ $this, 'get_error_response' ], 10, 4 ); // Register a common AAM, access level aware RESTful API endpoint add_action( 'aam_rest_register_route', function($route, $args, $auth, $access_level_aware = true, $ns = null) { return $this->_register_route( $route, $args, $auth, $access_level_aware, $ns ); }, 10, 5 ); } /** Load a workspace context using REST query parameters. */ public function preload(WP_REST_Request $request) { $type = sanitize_key($request->get_param('access_level')); $id = $type === 'role' ? sanitize_text_field((string) $request->get_param('role_id')) : ($type === 'user' ? absint($request->get_param('user_id')) : null); try { AAM_Backend_React::validate_context($type, $id); $access_level = AAM::api()->access_levels->get($type, $id); return rest_ensure_response(AAM_Backend_React::payload( sanitize_key($request->get_param('screen') ?: 'admin_menu'), $access_level )); } catch (Throwable $exception) { return new WP_Error( 'rest_forbidden', $exception->getMessage(), [ 'status' => 403 ] ); } } /** * Reset all AAM settings * * @return void * @access public * * @version 7.0.0 */ public function reset() { return rest_ensure_response([ 'success' => AAM_Service_Core::get_instance()->reset() ]); } /** * Export all AAM settings * * @return void * @access public * * @version 7.0.0 */ public function export() { return rest_ensure_response(AAM_Service_Core::get_instance()->export()); } /** * Export all AAM settings * * @param WP_REST_Request $request * * @return void * @access public * * @version 7.0.0 */ public function import($request) { return rest_ensure_response([ 'success' => AAM_Service_Core::get_instance()->import( $request->get_param('dataset') ) ]); } /** * Get current access level * * @param null|object $access_level * @param WP_REST_Request $request * * @return null|object * @access public * * @version 7.0.0 */ public function get_access_level($access_level, $request) { if (is_null($access_level)) { $access_level = $this->_determine_access_level($request); } return $access_level; } /** * Get RESTful error response * * @param mixed $response * @param Exception $exception * @param string $rest_code * @param int $http_status * * @return WP_REST_Response * @access public * * @version 7.0.0 */ public function get_error_response( $response, $exception, $rest_code, $http_status ) { if (is_null($response)) { $response = $this->_prepare_error_response( $exception, $rest_code, $http_status ); } return $response; } }