LLMS_Admin_Meta_Boxes
LLMS_Admin_Meta_Boxes class
Description Description
Sets up base metabox functionality and global save.
Source Source
File: includes/admin/post-types/class.llms.meta.boxes.php
class LLMS_Admin_Meta_Boxes { /** * Array of collected errors. * * @access public * @var string */ private static $errors = array(); /** * Constructor. * * @since 1.0.0 * @since 3.16.0 Unknown. * @since 6.0.0 Instantiate award engagement submit meta box. * Instantiate meta boxes to sync awarded certificates and achievements with their templates. * * @return void */ public function __construct() { // Achievements. new LLMS_Meta_Box_Achievement(); new LLMS_Meta_Box_Achievement_Sync(); // Certs. new LLMS_Meta_Box_Certificate(); new LLMS_Meta_Box_Certificate_Sync(); // Emails. new LLMS_Meta_Box_Email_Settings(); // Engagements. new LLMS_Meta_Box_Engagement(); // Award Engagements. new LLMS_Meta_Box_Award_Engagement_Submit(); // Membership restriction metabox. new LLMS_Meta_Box_Access(); // Courses. new LLMS_Meta_Box_Course_Options(); // Memberships. new LLMS_Meta_Box_Membership(); // Courses & memberships. require_once 'meta-boxes/class.llms.meta.box.course.builder.php'; require_once 'meta-boxes/class.llms.meta.box.visibility.php'; require_once 'meta-boxes/class.llms.meta.box.instructors.php'; new LLMS_Meta_Box_Product(); new LLMS_Meta_Box_Students(); // Lessons. require_once 'meta-boxes/class.llms.meta.box.lesson.php'; // Coupons. new LLMS_Meta_Box_Coupon(); // Orders. new LLMS_Meta_Box_Order_Submit(); new LLMS_Meta_Box_Order_Details(); new LLMS_Meta_Box_Order_Transactions(); new LLMS_Meta_Box_Order_Enrollment(); new LLMS_Meta_Box_Order_Notes(); // Vouchers. new LLMS_Meta_Box_Voucher(); add_action( 'add_meta_boxes', array( $this, 'hide_meta_boxes' ), 10 ); add_action( 'add_meta_boxes', array( $this, 'refresh_meta_boxes' ), 10 ); add_action( 'add_meta_boxes', array( $this, 'get_meta_boxes' ), 10 ); add_action( 'save_post', array( $this, 'save_meta_boxes' ), 10, 2 ); add_action( 'lifterlms_process_llms_voucher_meta', 'LLMS_Meta_Box_Voucher_Export::export', 10, 2 ); // Error handling. add_action( 'admin_notices', array( $this, 'display_errors' ) ); add_action( 'shutdown', array( $this, 'set_errors' ) ); // Modify the title placeholder text for achievement and certificate templates. add_filter( 'enter_title_here', array( $this, 'maybe_modify_title_placeholder' ), 10, 2 ); // Add default image information for achievement and certificate templates. add_filter( 'admin_post_thumbnail_html', array( $this, 'maybe_modify_post_thumbnail_html' ), 10, 3 ); } /** * Add error messages from metaboxes * * @param string $text */ public static function add_error( $text ) { self::$errors[] = $text; } /** * Save messages to the database */ public function set_errors() { update_option( 'lifterlms_errors', self::$errors ); } /** * Display the messages in the error dialog box */ public function display_errors() { $errors = get_option( 'lifterlms_errors' ); if ( empty( $errors ) ) { return; } $errors = maybe_unserialize( $errors ); echo '<div id="lifterlms_errors" class="error"><p>'; foreach ( $errors as $error ) { echo esc_html( $error ); } echo '</p></div>'; delete_option( 'lifterlms_errors' ); } /** * Add Metaboxes * * @return void * @since 1.0.0 * @version 3.16.0 */ public function get_meta_boxes() { add_action( 'media_buttons', 'llms_merge_code_button' ); /** * @todo Transition to new style metaboxes. */ add_meta_box( 'lifterlms-voucher-export', __( 'Export CSV', 'lifterlms' ), 'LLMS_Meta_Box_Voucher_Export::output', 'llms_voucher', 'side', 'default' ); } /** * Remove Metaboxes * * @return void * @since 3.4.0 * @version 3.13.0 */ public function hide_meta_boxes() { // Remove some defaults from orders. remove_meta_box( 'commentstatusdiv', 'llms_order', 'normal' ); remove_meta_box( 'commentsdiv', 'llms_order', 'normal' ); remove_meta_box( 'slugdiv', 'llms_order', 'normal' ); // Remove the default submit box in favor of our custom box. remove_meta_box( 'submitdiv', 'llms_order', 'side' ); // Remove some defaults from the course. remove_meta_box( 'postexcerpt', 'course', 'normal' ); remove_meta_box( 'tagsdiv-course_difficulty', 'course', 'side' ); } /** * Modifies the featured image metabox for achievement and certificate templates. * * Displays the default image, text denoting that the default image is being used, * and a link to the settings page where the default image can be changed. * * This additional content is only displayed when there's no featured image set * for the template. * * @since 6.0.0 * * @param string $content Default metabox HTML. * @param int $post_id WP_Post ID of the post being edited. * @param int $image_id Attachment ID for the saved featured image. * @return string */ public function maybe_modify_post_thumbnail_html( $content, $post_id, $image_id ) { $post_types = array( 'llms_achievement', 'llms_my_achievement', 'llms_certificate', 'llms_my_certificate', ); $post_type = get_post_type( $post_id ); if ( ! $image_id && in_array( $post_type, $post_types, true ) ) { $add_content = ''; $class = str_replace( array( 'llms_', 'my_' ), '', $post_type ) . 's'; $image_id = llms()->$class()->get_default_image_id(); $alt = $image_id ? get_post_meta( $image_id, '_wp_attachment_image_alt', true ) : __( 'Default image', 'lifterlms' ); $add_content = '<p><img alt="' . trim( wp_strip_all_tags( $alt ) ) . '" src="' . esc_url( llms()->$class()->get_default_image( $post_id ) ) . '" /></p>'; $settings_url = admin_url( 'admin.php?page=llms-settings&tab=engagements' ); $add_content .= '<p class="howto">' . __( 'Using the global default.', 'lifterlms' ) . ' <a href="' . esc_url( $settings_url ) . '">' . __( 'Edit', 'lifterlms' ) . '</a></p>'; $content = $add_content . $content; } return $content; } /** * Modifies the placeholder text for the post title field. * * This is used to denote that the achievement and certificate template title fields * are for internal use only to help avoid confusion as to why there are two separate * titles. * * @since 6.0.0 * * @param string $placeholder Default placeholder text. * @param WP_Post $post Post object. * @return string */ public function maybe_modify_title_placeholder( $placeholder, $post ) { $post_types = array( 'llms_achievement', 'llms_certificate', ); if ( in_array( $post->post_type, $post_types, true ) ) { $placeholder = sprintf( '%1$s (%2$s)', $placeholder, _x( 'for internal use only', 'added achievement and certificate template post title placeholder', 'lifterlms' ) ); } return $placeholder; } /** * Updates global $post variable * * @return void */ public function refresh_meta_boxes() { global $post; } /** * Validates post and metabox data before saving. * * @since Unknown * @since 3.35.0 Verify nonces and sanitize `$_POST` data. * * @param int $post_id WP Post ID. * @param WP_Post $post Post object. * @return bool */ public function validate_post( $post_id, $post ) { if ( ! current_user_can( 'edit_post', $post_id ) ) { return false; } elseif ( empty( $post_id ) || empty( $post ) ) { return false; } elseif ( defined( 'DOING_AUTOSAVE' ) || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) { return false; } elseif ( ! llms_verify_nonce( 'lifterlms_meta_nonce', 'lifterlms_save_data' ) ) { return false; } elseif ( empty( $_POST['post_ID'] ) || $_POST['post_ID'] != $post_id ) { return false; } return true; } /** * Check whether the post is a LifterLMS post type. * * @since unknown * @since 6.0.0 Added 'llms_my_achievement' and 'llms_my_certificate'. * * @param WP_Post $post WP_Post instance. * @return boolean */ public function is_llms_post_type( $post ) { $post_types = array( 'course', 'section', 'lesson', 'llms_order', 'llms_email', 'llms_certificate', 'llms_my_certificate', 'llms_achievement', 'llms_my_achievement', 'llms_engagement', 'llms_membership', 'llms_quiz', 'llms_question', 'llms_coupon', 'llms_voucher', ); /** * Filters the post type names that are secific of LifterLMS. * * Used to determine whether or not fire actions of the type "lifterlms_process_{$post->post_type}_meta" on save. * * @since 6.0.0 * * @param string[] $post_types Array of post type names. * @param WP_Post $post WP_Post instance. */ $post_types = apply_filters( 'llms_metaboxes_llms_post_types', $post_types, $post ); if ( in_array( $post->post_type, $post_types, true ) ) { return true; } } /** * Global Metabox Save * * @return void * @param $post, $post_id */ public function save_meta_boxes( $post_id, $post ) { if ( self::validate_post( $post_id, $post ) ) { if ( self::is_llms_post_type( $post ) ) { do_action( 'lifterlms_process_' . $post->post_type . '_meta', $post_id, $post ); } } } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor.
- add_error — Add error messages from metaboxes
- display_errors — Display the messages in the error dialog box
- get_meta_boxes — Add Metaboxes
- hide_meta_boxes — Remove Metaboxes
- is_llms_post_type — Check whether the post is a LifterLMS post type.
- maybe_modify_post_thumbnail_html — Modifies the featured image metabox for achievement and certificate templates.
- maybe_modify_title_placeholder — Modifies the placeholder text for the post title field.
- refresh_meta_boxes — Updates global $post variable
- save_meta_boxes — Global Metabox Save
- set_errors — Save messages to the database
- validate_post — Validates post and metabox data before saving.
Changelog Changelog
Version | Description |
---|---|
3.35.0 | Verify nonces and sanitize $_POST data. |
1.0.0 | Introduced. |