File "class-wp-rest-customizer-nonces.php"

Full Path: /home/pumpbmko/public_html/wp-content/plugins/gutenberg/lib/experimental/class-wp-rest-customizer-nonces.php
File size: 2.09 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * WP_Rest_Customizer_Nonces class.
 *
 * @package gutenberg
 */

if ( ! class_exists( 'WP_Rest_Customizer_Nonces' ) ) {

	/**
	 * Class that returns the customizer "save" nonce that's required for the
	 * batch save operation using the customizer API endpoint.
	 */
	class WP_Rest_Customizer_Nonces extends WP_REST_Controller {

		/**
		 * Constructor.
		 */
		public function __construct() {
			$this->namespace = '__experimental';
			$this->rest_base = 'customizer-nonces';
		}

		/**
		 * Registers the necessary REST API routes.
		 *
		 * @access public
		 */
		public function register_routes() {
			register_rest_route(
				$this->namespace,
				'/' . $this->rest_base . '/get-save-nonce',
				array(
					array(
						'methods'             => WP_REST_Server::READABLE,
						'callback'            => array( $this, 'get_save_nonce' ),
						'permission_callback' => array( $this, 'permissions_check' ),
						'args'                => $this->get_collection_params(),
					),
					'schema' => array( $this, 'get_public_item_schema' ),
				)
			);
		}

		/**
		 * Checks if a given request has access to read menu items if they have access to edit them.
		 *
		 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
		 */
		public function permissions_check() {
			$post_type = get_post_type_object( 'nav_menu_item' );
			if ( ! current_user_can( $post_type->cap->edit_posts ) ) {
				return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit posts in this post type.', 'gutenberg' ), array( 'status' => rest_authorization_required_code() ) );
			}
			return true;
		}

		/**
		 * Returns the nonce required to request the customizer API endpoint.
		 *
		 * @access public
		 */
		public function get_save_nonce() {
			require_once ABSPATH . 'wp-includes/class-wp-customize-manager.php';
			$wp_customize = new WP_Customize_Manager();
			$nonce        = wp_create_nonce( 'save-customize_' . $wp_customize->get_stylesheet() );
			return array(
				'success'    => true,
				'nonce'      => $nonce,
				'stylesheet' => $wp_customize->get_stylesheet(),
			);
		}
	}
}