\d+)', array( 'methods' => \WP_REST_Server::EDITABLE, 'callback' => array( $this, 'rest_save_content_permissions' ), 'permission_callback' => array( $this, 'rest_can_save_content_permissions' ), 'args' => array( 'id' => array( 'type' => 'integer', 'required' => true, ), 'roles' => array( 'type' => 'array', 'items' => array( 'type' => 'string' ), 'required' => true, ), 'message' => array( 'type' => 'string', 'required' => true, ), ), ) ); } /** * Permission check for the save route. * * @since 3.2.28 * @access public * @param \WP_REST_Request $request REST request object. * @return bool */ public function rest_can_save_content_permissions( $request ) { $post = get_post( (int) $request['id'] ); if ( ! $post instanceof \WP_Post || ! members_is_content_permissions_enabled_for_post_type( $post->post_type ) ) { return false; } return members_current_user_can_manage_post_content_permissions( $post->ID ); } /** * Saves the panel's roles and error message. * * @since 3.2.28 * @access public * @param \WP_REST_Request $request REST request object. * @return \WP_REST_Response */ public function rest_save_content_permissions( $request ) { $post_id = (int) $request['id']; members_save_post_content_permissions( $post_id, $request['roles'], $request['message'] ); return rest_ensure_response( array( 'roles' => members_get_post_roles_for_rest( $post_id ), 'message' => (string) members_get_post_access_message( $post_id ), ) ); } /** * Enqueues the block editor document panel script. * * @since 3.2.22 * @access public * @return void */ public function enqueue_block_editor_panel() { $post = members_get_post_for_content_permissions(); if ( ! $post instanceof \WP_Post || ! members_is_content_permissions_enabled_for_post_type( $post->post_type ) ) { return; } if ( ! members_current_user_can_manage_post_content_permissions( $post->ID ) ) { return; } $_wp_roles = apply_filters( 'members_wp_roles', wp_roles()->role_names, $post ); asort( $_wp_roles ); $roles = array(); foreach ( $_wp_roles as $role => $name ) { $roles[ $role ] = members_translate_role( $role ); } // A brand-new post gets the default roles saved right away, like the classic meta box's // pre-checked boxes, so it is restricted from its very first save. The post is still the // auto-draft this screen just created, so nothing else can be reading it yet. if ( 'auto-draft' === $post->post_status && empty( members_get_post_roles_for_rest( $post->ID ) ) ) { $default_roles = apply_filters( 'members_default_post_roles', array(), $post->ID ); if ( ! empty( $default_roles ) && is_array( $default_roles ) ) { members_set_post_roles( $post->ID, members_sanitize_access_role_meta_list( $default_roles ) ); } } $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; $panel_file = members_plugin()->dir . "js/editor-content-permissions-panel{$min}.js"; $panel_ver = file_exists( $panel_file ) ? filemtime( $panel_file ) : false; wp_enqueue_style( 'members-admin' ); wp_enqueue_script( 'members-cp-panel', members_plugin()->uri . "js/editor-content-permissions-panel{$min}.js", array( 'wp-api-fetch', 'wp-components', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-plugins', ), $panel_ver, true ); if ( function_exists( 'wp_set_script_translations' ) ) { wp_set_script_translations( 'members-cp-panel', 'members', members_plugin()->dir . 'languages' ); } $panel_data = array( 'path' => '/' . self::REST_NAMESPACE . '/content-permissions/' . $post->ID, 'roles' => $roles, 'saved' => array( 'roles' => members_get_post_roles_for_rest( $post->ID ), 'message' => (string) members_get_post_access_message( $post->ID ), ), ); if ( ! members_is_memberpress_active() ) { $panel_data['memberPressUpsell'] = array( 'message' => __( 'To protect this block by paid membership or centrally with a content protection rule, add MemberPress.', 'members' ), 'cta' => __( 'Add MemberPress', 'members' ), 'url' => 'https://memberpress.com/plans/pricing/?utm_source=members_plugin&utm_medium=link&utm_campaign=in_plugin&utm_content=content_protection', ); } wp_localize_script( 'members-cp-panel', 'membersCpPanel', $panel_data ); } /** * Returns the instance. * * @since 3.2.22 * @access public * @return object */ public static function get_instance() { if ( ! self::$instance ) { self::$instance = new self(); } return self::$instance; } } Content_Permissions_Editor::get_instance();