LLMS_Helper_Admin_Add_Ons
Contents
Source Source
File: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php
class LLMS_Helper_Admin_Add_Ons { /** * Caches current state of the sites keys * * Use $this->has_keys() to retrieve the value. * * @var bool */ private $has_keys = null; /** * Constructor * * @since 3.0.0 */ public function __construct() { add_action( 'admin_init', array( $this, 'handle_actions' ) ); // Output navigation items. add_action( 'lifterlms_before_addons_nav', array( $this, 'output_navigation_items' ) ); // Output the license manager interface button / dropdown. add_action( 'llms_addons_page_after_title', array( $this, 'output_license_manager' ) ); // Filter current section default. add_filter( 'llms_admin_add_ons_get_current_section', array( $this, 'filter_get_current_section' ) ); // Filter the content display for a section. add_filter( 'llms_admin_add_ons_get_current_section_default_content', array( $this, 'filter_get_current_section_content' ), 10, 2 ); // Add install & update actions to the list of available management actions powered by the bulk actions functions in core. add_filter( 'llms_admin_add_ons_manage_actions', array( $this, 'filter_manage_actions' ) ); // Output html for helper-powered actions (install & update). add_action( 'llms_add_ons_single_item_actions', array( $this, 'output_single_install_action' ), 5, 2 ); add_action( 'llms_add_ons_single_item_after_actions', array( $this, 'output_single_update_action' ), 5, 2 ); add_filter( 'llms_admin_addon_features_exclude_ids', array( $this, 'filter_feature_exclude_ids' ) ); } /** * Change the default section from "All" to "Mine" but only if license keys have been saved * * @since 3.0.0 * * @param string $section Section slug. * @return string */ public function filter_get_current_section( $section ) { if ( 'all' === $section && empty( $_GET['section'] ) && $this->has_keys() ) { return 'mine'; } return $section; } /** * Add "mine" tab content * * @since 3.0.0 * @since 3.0.2 Unknown. * * @param array $content Default items to display. * @param string $section Current tab slug. * @return array */ public function filter_get_current_section_content( $content, $section ) { if ( 'mine' === $section ) { $mine = llms_helper_get_available_add_ons(); $addons = llms_get_add_ons(); if ( ! is_wp_error( $addons ) && isset( $addons['items'] ) ) { foreach ( $addons['items'] as $item ) { if ( in_array( $item['id'], $mine ) ) { $content[] = $item; } } } } return $content; } /** * Exclude IDs for all add-ons that are currently available on the site * * @since 3.0.0 * * @param array $ids Existing product ids to exclude. * @return array */ public function filter_feature_exclude_ids( $ids ) { return array_unique( array_merge( $ids, llms_helper_get_available_add_ons( false ) ) ); } /** * Add installatino & update actions to the list of available management actions * * @since 3.0.0 * * @param array $actions List of available actions, the action should correspond to a method in the LLMS_Helper_Add_On class. * @return array */ public function filter_manage_actions( $actions ) { return array_merge( array( 'install', 'update' ), $actions ); } /** * Handle form submission actions * * @since 3.0.0 * @since 3.2.0 Let the LifterLMS Core output flashed notices * @since 3.2.1 Flush cached addon and package update data when adding or removing keys. * * @return void */ public function handle_actions() { // License key addition & removal. if ( ! llms_verify_nonce( '_llms_manage_keys_nonce', 'llms_manage_keys' ) ) { return; } $flush = false; if ( isset( $_POST['llms_activate_keys'] ) && ! empty( $_POST['llms_add_keys'] ) ) { $flush = true; $this->handle_activations(); } elseif ( isset( $_POST['llms_deactivate_keys'] ) && ! empty( $_POST['llms_remove_keys'] ) ) { $flush = true; $this->handle_deactivations(); } if ( $flush ) { llms_helper_flush_cache(); } } /** * Activate license keys with LifterLMS.com api * * Output errors / successes & saves successful keys to the db. * * @since 3.0.0 * @since 3.2.0 Don't access $_POST directly. * @since 3.4.0 Use core textdomain. * @since 3.5.0 Passing force parameter to activate_keys() method. * * @return void */ private function handle_activations() { $res = LLMS_Helper_Keys::activate_keys( llms_filter_input( INPUT_POST, 'llms_add_keys', FILTER_SANITIZE_STRING ), true ); if ( is_wp_error( $res ) ) { LLMS_Admin_Notices::flash_notice( $res->get_error_message(), 'error' ); return; } $data = $res['data']; if ( isset( $data['errors'] ) ) { foreach ( $data['errors'] as $error ) { LLMS_Admin_Notices::flash_notice( make_clickable( $error ), 'error' ); } } if ( isset( $data['activations'] ) ) { foreach ( $data['activations'] as $activation ) { LLMS_Helper_Keys::add_license_key( $activation ); // Translators: %s = License key. LLMS_Admin_Notices::flash_notice( sprintf( __( '"%s" has been saved!', 'lifterlms' ), $activation['license_key'] ), 'success' ); } } } /** * Deactivate license keys with LifterLMS.com api * * Output errors / successes & removes keys from the db. * * @since 3.0.0 * @since 3.2.0 Don't access $_POST directly. * @since 3.4.0 Use core textdomain. * * @return void */ private function handle_deactivations() { $keys = llms_filter_input( INPUT_POST, 'llms_remove_keys', FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY ); $res = LLMS_Helper_Keys::deactivate_keys( $keys ); if ( is_wp_error( $res ) ) { LLMS_Admin_Notices::flash_notice( $res->get_error_message(), 'error' ); return; } foreach ( $keys as $key ) { LLMS_Helper_Keys::remove_license_key( $key ); /* Translators: %s = License Key */ LLMS_Admin_Notices::flash_notice( sprintf( __( 'License key "%s" was removed from this site.', 'lifterlms' ), $key ), 'info' ); } if ( isset( $data['errors'] ) ) { foreach ( $data['errors'] as $error ) { LLMS_Admin_Notices::flash_notice( make_clickable( $error ), 'error' ); } } } /** * Determine if the current site has active license keys * * @since 3.0.0 * * @return bool */ public function has_keys() { if ( is_null( $this->has_keys ) ) { $this->has_keys = ( count( llms_helper_options()->get_license_keys() ) ); } return $this->has_keys; } /** * Output the HTML for the license manager area * * @since 3.0.0 * @since 3.4.0 Use core textdomain. * * @return void */ public function output_license_manager() { $my_keys = llms_helper_options()->get_license_keys(); if ( $my_keys ) { wp_enqueue_style( 'plugin-install' ); wp_enqueue_script( 'plugin-install' ); add_thickbox(); } ?> <section class="llms-licenses"> <button class="llms-button-primary" id="llms-active-keys-toggle"> <?php _e( 'My License Keys', 'lifterlms' ); ?> <i class="fa fa-chevron-down" aria-hidden="true"></i> </button> <form action="" class="llms-key-field" id="llms-key-field-form" method="POST"> <?php if ( $my_keys ) : ?> <h3 class="llms-license-header"><?php _e( 'Manage Saved License Keys', 'lifterlms' ); ?></h3> <ul class="llms-active-keys"> <?php foreach ( $my_keys as $key ) : ?> <li> <label for="llms_key_<?php echo esc_attr( $key['license_key'] ); ?>"> <input id="llms_key_<?php echo esc_attr( $key['license_key'] ); ?>" name="llms_remove_keys[]" type="checkbox" value="<?php echo esc_attr( $key['license_key'] ); ?>"> <span><?php echo $key['license_key']; ?></span> </label> </li> <?php endforeach; ?> </ul> <button class="llms-button-danger small" name="llms_deactivate_keys" type="submit"><?php _e( 'Remove Selected', 'lifterlms' ); ?></button> <?php endif; ?> <label for="llms_keys_field"> <h3 class="llms-license-header"><?php _e( 'Add New License Keys', 'lifterlms' ); ?></h3> <textarea name="llms_add_keys" id="llms_keys_field" placeholder="<?php esc_attr_e( 'Enter each license on a new line', 'lifterlms' ); ?>"></textarea> </label> <button class="llms-button-primary small" name="llms_activate_keys" type="submit"><?php _e( 'Add New', 'lifterlms' ); ?></button> <?php wp_nonce_field( 'llms_manage_keys', '_llms_manage_keys_nonce' ); ?> </form> </section> <?php } /** * Output html for installation action * * Does not output for "featured" items on general settings. * * @since 3.0.0 * @since 3.2.1 Output single install action if the addon doesn't require license (e.g. free product). * @since 3.4.0 Use core textdomain. * * @param obj $addon LLMS_Add_On instance. * @param string $curr_tab Slug of the current tab being viewed. * @return void */ public function output_single_install_action( $addon, $curr_tab ) { if ( 'featured' === $curr_tab ) { return; } if ( $addon->is_installable() && ! $addon->is_installed() && ( ! $addon->requires_license() || $addon->is_licensed() ) ) { ?> <label class="llms-status-icon status--<?php echo esc_attr( $addon->get_install_status() ); ?>" for="<?php echo esc_attr( sprintf( '%s-install', $addon->get( 'id' ) ) ); ?>"> <input class="llms-bulk-check" data-action="install" name="llms_install[]" id="<?php echo esc_attr( sprintf( '%s-install', $addon->get( 'id' ) ) ); ?>" type="checkbox" value="<?php echo esc_attr( $addon->get( 'id' ) ); ?>"> <i class="fa fa-check-square-o" aria-hidden="true"></i> <i class="fa fa-cloud-download" aria-hidden="true"></i> <span class="llms-status-text"><?php _e( 'Install', 'lifterlms' ); ?></span> </label> <a href="<?php echo admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $addon->get( 'id' ) . '§ion=changelog&TB_iframe=true&width=600&height=800' ); ?>" class="thickbox open-plugin-details-modal tip--bottom-left" data-tip="<?php esc_attr_e( 'View add-on details', 'lifterlms' ); ?>"> <i class="fa fa-info-circle" aria-hidden="true"></i> </a> <?php } } /** * Output html for update action * * Does not output for "featured" items on general settings. * * @since 3.0.0 * @since 3.2.1 Output single update action if the addon doesn't require license (e.g. free product). * @since 3.4.0 Use core textdomain. * * @param obj $addon LLMS_Add_On instance. * @param string $curr_tab Slug of the current tab being viewed. * @return void */ public function output_single_update_action( $addon, $curr_tab ) { if ( 'featured' === $curr_tab ) { return; } if ( $addon->is_installable() && $addon->is_installed() && ( ! $addon->requires_license() || $addon->is_licensed() ) && $addon->has_available_update() ) { ?> <label class="llms-status-icon status--update-available" for="<?php echo esc_attr( sprintf( '%s-update', $addon->get( 'id' ) ) ); ?>"> <input class="llms-bulk-check" data-action="update" name="llms_update[]" id="<?php echo esc_attr( sprintf( '%s-update', $addon->get( 'id' ) ) ); ?>" type="checkbox" value="<?php echo esc_attr( $addon->get( 'id' ) ); ?>"> <i class="fa fa-check-square-o" aria-hidden="true"></i> <i class="fa fa-arrow-circle-up" aria-hidden="true"></i> <span class="llms-status-text"><?php _e( 'Update', 'lifterlms' ); ?></span> </label> <a href="<?php echo admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $addon->get( 'id' ) . '§ion=changelog&TB_iframe=true&width=600&height=800' ); ?>" class="thickbox open-plugin-details-modal tip--bottom-left" data-tip="<?php esc_attr_e( 'View update details', 'lifterlms' ); ?>"> <i class="fa fa-info-circle" aria-hidden="true"></i> </a> <?php } } /** * Output additional navigation items * * @since 3.0.0 * @since 3.4.0 Use core textdomain. * * @param string $current_section Current section slug. * @return void */ public function output_navigation_items( $current_section ) { if ( ! $this->has_keys() ) { return; } ?> <li class="llms-nav-item<?php echo ( 'mine' === $current_section ) ? ' llms-active' : ''; ?>"> <a class="llms-nav-link" href="<?php echo esc_url( admin_url( 'admin.php?page=llms-add-ons§ion=mine' ) ); ?>"><?php _e( 'My Add-Ons', 'lifterlms' ); ?></a> </li> <?php }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor
- filter_feature_exclude_ids — Exclude IDs for all add-ons that are currently available on the site
- filter_get_current_section — Change the default section from "All" to "Mine" but only if license keys have been saved
- filter_get_current_section_content — Add "mine" tab content
- filter_manage_actions — Add installatino & update actions to the list of available management actions
- handle_actions — Handle form submission actions
- handle_activations — Activate license keys with LifterLMS.com api
- handle_deactivations — Deactivate license keys with LifterLMS.com api
- has_keys — Determine if the current site has active license keys
- output_license_manager — Output the HTML for the license manager area
- output_navigation_items — Output additional navigation items
- output_single_install_action — Output html for installation action
- output_single_update_action — Output html for update action
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |