gocodebox/lifterlms

View on GitHub
includes/forms/class-llms-forms-admin-bar.php

Summary

Maintainability
A
35 mins
Test Coverage
A
96%
<?php
/**
 * LLMS_Forms_Admin_Bar calss
 *
 * @package  LifterLMS/Classes
 *
 * @since 5.0.0
 * @version 5.0.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Add WP Admin Bar Nodes to enable editing of the currently-viewed form by a qualifying user
 *
 * @since 5.0.0
 */
class LLMS_Forms_Admin_Bar {

    /**
     * Constructor
     *
     * @since 5.0.0
     *
     * @return void
     */
    public function __construct() {

        add_action( 'admin_bar_menu', array( $this, 'add_menu_items' ), 999 );

    }

    /**
     * Add view links to the admin menu bar for qualifying users.
     *
     * @since 3.7.0
     * @since 3.16.0 Unknown.
     * @since 4.2.0 Updated icon.
     * @since 4.5.1 Use `should_display()` method to determine if the view manager should be added to the admin bar.
     * @since 4.16.0 Retrieve nodes to add from `get_menu_items_to_add()`.
     *
     * @param WP_Admin_Bar $wp_admin_bar Admin bar class instance.
     * @return void
     */
    public function add_menu_items( $wp_admin_bar ) {

        if ( ! $this->should_display() ) {
            return;
        }

        $args = array( $this->get_current_location() );
        $plan = llms_filter_input( INPUT_GET, 'plan', FILTER_SANITIZE_NUMBER_INT );
        if ( $plan ) {
            $args[] = array( 'plan' => llms_get_post( $plan ) );
        }
        $form = llms_get_form( ...$args );

        $wp_admin_bar->add_node(
            array(
                'id'     => 'llms-edit-form',
                'parent' => 'edit',
                'title'  => __( 'Edit Form', 'lifterlms' ),
                'href'   => get_edit_post_link( $form->ID ),
            )
        );

    }

    /**
     * Retrieve the form location for the current screen
     *
     * Must be on a checkout screen, the "edit account" tab of the dashboard,
     * or be viewing as a visitor on the main dashboard page with open registration enabled.
     *
     * @since 5.0.0
     *
     * @return string|boolean Returns the location id as a string or `false` if not on a form location screen.
     */
    private function get_current_location() {

        if ( is_llms_checkout() ) {

            return 'checkout';

        } elseif ( is_llms_account_page() ) {

            $tab = LLMS_Student_Dashboard::get_current_tab( 'tab' );

            if ( 'edit-account' === $tab ) {
                return 'account';
            }

            if ( 'dashboard' === $tab && 'visitor' === llms_filter_input( INPUT_GET, 'llms-view-as' ) && llms_parse_bool( llms_get_open_registration_status() ) ) {
                return 'registration';

            }
        }

        return false;

    }

    /**
     * Determine whether or an Edit Form node should be added to the admin bar.
     *
     * The user must be able to edit forms and be on a screen with a displayed form.
     *
     * @return boolean
     */
    private function should_display() {

        $display = ( current_user_can( LLMS_Forms::instance()->get_capability() ) && $this->get_current_location() );

        /**
         * Filters whether or not the "Edit Form" WP_Admin_Bar node is displayed
         *
         * @since 5.0.0
         *
         * @param boolean $display Whether or not to display the node.
         */
        return apply_filters( 'llms_should_display_wp_admin_bar_nodes_for_forms', $display );

    }

}

return new LLMS_Forms_Admin_Bar();