LLMS_Settings_Notifications
Description Description
Admin Settings: Notifications Tab.
Source Source
File: includes/admin/settings/class.llms.settings.notifications.php
class LLMS_Settings_Notifications extends LLMS_Settings_Page { /** * @var LLMS_Abstract_Notification_View * * @since 3.8.0 */ public $view; /** * Constructor. * * @since 3.8.0 * @since 3.24.0 Unknown. * @since 6.0.0 Removed loading of class files that don't instantiate their class in favor of autoloading. * * @return void */ public function __construct() { $this->id = 'notifications'; $this->label = __( 'Notifications', 'lifterlms' ); add_filter( 'lifterlms_settings_tabs_array', array( $this, 'add_settings_page' ), 20 ); add_action( 'lifterlms_settings_' . $this->id, array( $this, 'output' ) ); add_action( 'lifterlms_settings_save_' . $this->id, array( $this, 'before_save' ), 5 ); add_action( 'lifterlms_settings_save_' . $this->id, array( $this, 'save' ) ); add_action( 'lifterlms_settings_save_' . $this->id, array( $this, 'after_save' ), 15 ); add_filter( 'llms_settings_' . $this->id . '_has_save_button', array( $this, 'maybe_disable_save' ) ); } /** * Get a breadcrumb custom html for use on notification settings screens (not on the table) * * @since 3.8.0 * * @param string $current_title The title of the current notification. * @return array */ private function get_breadcrumbs( $current_title ) { return array( 'id' => 'notification_options_breadcrumbs', 'type' => 'custom-html', 'value' => '<a href="' . esc_url( admin_url( 'admin.php?page=llms-settings&tab=notifications' ) ) . '">' . __( 'All Notifications', 'lifterlms' ) . '</a> <small>></small> <strong>' . $current_title . '</strong>', ); } /** * Get settings specific to the current notification type * * @since 3.8.0 * @since 3.24.0 Unknown. * @since 5.2.0 Merge controller additional options. * @since 5.9.0 Stop using deprecated `FILTER_SANITIZE_STRING`. * * @param LLMS_Abstract_Notification_Controller $controller Instance of an LLMS_Abstract_Notification_Controller extending class. * @return array */ private function get_notification_settings( $controller ) { $settings = array(); // Setup vars. $type = llms_filter_input_sanitize_string( INPUT_GET, 'type' ); $types = $controller->get_supported_types(); $title = $controller->get_title() . ' (' . $types[ $type ] . ')'; $view = $controller->get_mock_view( $type ); // So the merge code button can use it. $this->view = $view; // Output the merge code button for the WYSIWYG editor. add_action( 'media_buttons', array( $this, 'merge_code_button' ) ); // Add a breadcrumb on the top of the page. $settings[] = $this->get_breadcrumbs( $title ); // Add field options for the view. $settings = array_merge( $settings, $view->get_field_options( $type ) ); $subscribers = $controller->get_subscriber_options( $type ); foreach ( $subscribers as $i => $data ) { $sub_settings = array( 'default' => $data['enabled'], 'desc' => $data['title'], 'id' => sprintf( '%1$s[%2$s]', $controller->get_option_name( $type . '_subscribers' ), $data['id'] ), 'type' => 'checkbox', ); if ( 0 === $i ) { $sub_settings['title'] = __( 'Subscribers', 'lifterlms' ); $sub_settings['checkboxgroup'] = 'start'; } elseif ( count( $subscribers ) - 1 === $i ) { $sub_settings['checkboxgroup'] = 'end'; } else { $sub_settings['checkboxgroup'] = 'middle'; } $settings[] = $sub_settings; if ( 'custom' === $data['id'] ) { $settings[] = array( 'desc' => $data['description'], 'id' => $controller->get_option_name( $type . '_custom_subscribers' ), 'type' => 'text', ); } } // Add additional controller options. $settings = array_merge( $settings, $controller->get_additional_options( $type ) ); if ( $controller->is_testable( $type ) ) { foreach ( $controller->get_test_settings( $type ) as $setting ) { $setting['id'] = 'llms_notification_test_data[' . $setting['id'] . ']'; $settings[] = $setting; } } return apply_filters( 'llms_notification_settings_' . $controller->id . '_' . $type, $settings, $controller, $view ); } /** * Get settings array * * @since 3.8.0 * @since 3.30.3 Fixed typo in title id. * * @return array */ public function get_settings() { $settings = array(); $settings[] = array( 'class' => 'top', 'id' => 'notification_options', 'type' => 'sectionstart', ); $settings[] = array( 'title' => __( 'Notification Settings', 'lifterlms' ), 'type' => 'title', 'id' => 'notification_options_title', ); if ( isset( $_GET['notification'] ) ) { $controller = llms()->notifications()->get_controller( llms_filter_input_sanitize_string( INPUT_GET, 'notification' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended if ( $controller ) { $settings = array_merge( $settings, $this->get_notification_settings( $controller ) ); } else { $settings[] = array( 'id' => 'notification_options_invalid_error', 'type' => 'custom-html', 'value' => __( 'Invalid notification', 'lifterlms' ), ); } } else { $settings[] = array( 'id' => 'llms_notifications_table', 'table' => new LLMS_Table_NotificationSettings(), 'type' => 'table', ); } $settings[] = array( 'id' => 'notification_options', 'type' => 'sectionend', ); return apply_filters( 'lifterlms_notifications_settings', $settings ); } /** * Disable save button on the main notification tab (list) * * @since 3.24.0 * * @param bool $bool Default display value (true). * @return boolean */ public function maybe_disable_save( $bool ) { return ( isset( $_GET['notification'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended } /** * Output a merge code button in the WYSIWYG editor * * @since 3.8.0 * * @return void */ public function merge_code_button() { llms_merge_code_button( $this->view->get_option_name( 'body' ), true, $this->view->get_merge_codes() ); } /** * Remove test data from $_POST so that it wont be saved to the DB * * @since 3.24.0 * @since 3.35.0 Verify nonce & Sanitize input data. * * @return void */ public function before_save() { if ( ! llms_verify_nonce( '_wpnonce', 'lifterlms-settings' ) ) { return; } if ( isset( $_POST['llms_notification_test_data'] ) ) { $_POST['llms_notification_test_data_temp'] = wp_unslash( $_POST['llms_notification_test_data'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized unset( $_POST['llms_notification_test_data'] ); } } /** * Send a test notification after notification data is saved * * @since 3.24.0 * @since 3.35.0 Verify nonce & Sanitize input data. * @since 5.9.0 Stop using deprecated `FILTER_SANITIZE_STRING`. * * @return void */ public function after_save() { if ( ! llms_verify_nonce( '_wpnonce', 'lifterlms-settings' ) ) { return; } if ( isset( $_GET['notification'] ) && isset( $_GET['type'] ) && isset( $_POST['llms_notification_test_data_temp'] ) ) { if ( ! empty( $_POST['llms_notification_test_data_temp'] ) ) { $controller = llms()->notifications()->get_controller( llms_filter_input_sanitize_string( INPUT_GET, 'notification' ) ); $controller->send_test( llms_filter_input_sanitize_string( INPUT_GET, 'type' ), wp_unslash( $_POST['llms_notification_test_data_temp'] ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized ); } } } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor.
- after_save — Send a test notification after notification data is saved
- before_save — Remove test data from $_POST so that it wont be saved to the DB
- get_breadcrumbs — Get a breadcrumb custom html for use on notification settings screens (not on the table)
- get_notification_settings — Get settings specific to the current notification type
- get_settings — Get settings array
- maybe_disable_save — Disable save button on the main notification tab (list)
- merge_code_button — Output a merge code button in the WYSIWYG editor
Changelog Changelog
Version | Description |
---|---|
3.8.0 | |
3.35.0 | Sanitize input data. |
3.30.3 | Introduced. |