LLMS_REST_Fields
Registers REST fields used by LifterLMS objects.
Contents
Source Source
File: includes/class-llms-rest-fields.php
class LLMS_REST_Fields { /** * Constructor * * @since 6.0.0 * * @return void */ public function __construct() { add_action( 'rest_api_init', array( $this, 'register' ) ); add_filter( 'rest_prepare_llms_my_certificate', array( $this, 'remove_author_assign_link' ) ); } /** * Retrieves an array of data used to register fields for certificates. * * @since 6.0.0 * * @return array */ private function get_fields_for_certificates() { return array( 'size' => array( 'description' => __( 'Certificate size.', 'lifterlms' ), 'type' => 'string', 'enum' => array_merge( array_keys( llms_get_certificate_sizes() ), array( 'CUSTOM' ) ), ), 'width' => array( 'description' => __( 'Certificate width.', 'lifterlms' ), 'type' => 'number', ), 'height' => array( 'description' => __( 'Certificate height.', 'lifterlms' ), 'type' => 'number', ), 'unit' => array( 'description' => __( 'Certificate sizing unit applied to the width and height properties.', 'lifterlms' ), 'type' => 'string', 'enum' => array_keys( llms_get_certificate_units() ), ), 'orientation' => array( 'description' => __( 'Certificate orientation.', 'lifterlms' ), 'type' => 'string', 'enum' => array_keys( llms_get_certificate_orientations() ), ), 'margins' => array( 'description' => __( 'Certificate margins.', 'lifterlms' ), 'type' => 'array', 'minItems' => 4, 'maxItems' => 4, 'items' => array( 'type' => 'number', ), ), 'background' => array( 'description' => __( 'Certificate background color.', 'lifterlms' ), 'type' => 'string', ), ); } /** * Register the REST fields. * * @since 6.0.0 * * @return void */ public function register() { if ( llms_is_block_editor_supported_for_certificates() ) { $this->register_fields_for_certificates(); $this->register_fields_for_certificate_awards(); $this->register_fields_for_certificate_templates(); } } /** * Register rest fields used for awarded certificates. * * @since 6.0.0 * * @return void */ private function register_fields_for_certificate_awards() { register_rest_field( 'llms_my_certificate', 'certificate_template', array( 'schema' => array( 'description' => __( 'Certificate template ID.', 'lifterlms' ), 'type' => 'integer', 'arg_options' => array( 'validate_callback' => function( $value ) { return ! $value || 'llms_certificate' === get_post_type( $value ); }, ), ), 'get_callback' => function( $object ) { return wp_get_post_parent_id( $object['id'] ); }, 'update_callback' => function( $value, $post ) { $update = array( 'ID' => $post->ID, 'post_parent' => $value, ); return wp_update_post( $update ); }, ) ); } /** * Register rest fields used for certificate templates. * * @since 6.0.0 * * @return void */ private function register_fields_for_certificate_templates() { register_rest_field( 'llms_certificate', 'certificate_title', array( 'schema' => array( 'description' => __( 'Certificate title.', 'lifterlms' ), 'type' => 'string', ), 'get_callback' => function( $object ) { $cert = llms_get_certificate( $object['id'], true ); return $cert ? $cert->get( 'certificate_title' ) : null; }, 'update_callback' => function( $value, $post ) { $cert = llms_get_certificate( $post->ID, true ); return $cert ? $cert->set( 'certificate_title', $value ) : null; }, ) ); register_rest_field( 'llms_certificate', 'certificate_sequential_id', array( 'schema' => array( 'description' => __( 'Next sequential ID.', 'lifterlms' ), 'type' => 'integer', 'arg_options' => array( 'validate_callback' => function( $value, $request ) { return (int) $value >= llms_get_certificate_sequential_id( $request['id'] ); }, ), ), 'get_callback' => function( $object ) { return llms_get_certificate_sequential_id( $object['id'] ); }, 'update_callback' => function( $value, $post ) { $cert = llms_get_certificate( $post->ID, true ); return $cert ? $cert->set( 'sequential_id', $value ) : null; }, ) ); } /** * Register fields for template and earned certificates. * * @since 6.0.0 * * @return void */ private function register_fields_for_certificates() { foreach ( $this->get_fields_for_certificates() as $key => $schema ) { $schema['context'] = array( 'view', 'edit' ); register_rest_field( array( 'llms_certificate', 'llms_my_certificate' ), "certificate_{$key}", array( 'schema' => $schema, 'get_callback' => function( $object ) use ( $key ) { $cert = llms_get_certificate( $object['id'], true ); $func = "get_{$key}"; return $cert ? $cert->$func() : null; }, 'update_callback' => function( $value, $post ) use ( $key ) { $cert = llms_get_certificate( $post->ID, true ); return $cert ? $cert->set( $key, $value ) : null; }, ) ); } } /** * Remove the author assign action link for llms_my_certificate REST responses. * * This is a hack put in place to prevent the default <PostAuthor> control component * cannot be disabled in any other way I can find, the check in place on it determines * if the control can be displayed based on the presence of this link in the REST response. * * Removing this probably isn't generally idea but I cannot conceive of any other way to handle this. * * @since 6.0.0 * * @link https://github.com/WordPress/gutenberg/tree/trunk/packages/editor/src/components/post-author * * @param WP_REST_Response $res Rest response. * @return WP_REST_Response */ public function remove_author_assign_link( $res ) { $res->remove_link( 'https://api.w.org/action-assign-author' ); return $res; } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor
- get_fields_for_certificates — Retrieves an array of data used to register fields for certificates.
- register — Register the REST fields.
- register_fields_for_certificate_awards — Register rest fields used for awarded certificates.
- register_fields_for_certificate_templates — Register rest fields used for certificate templates.
- register_fields_for_certificates — Register fields for template and earned certificates.
- remove_author_assign_link — Remove the author assign action link for llms_my_certificate REST responses.
Changelog Changelog
Version | Description |
---|---|
6.0.0 | Introduced. |