LLMS_Settings_Page
Admin Settings Page Base class
Source Source
File: includes/admin/settings/class.llms.settings.page.php
class LLMS_Settings_Page {
/**
* Allow settings page to determine if a rewrite flush is required
*
* @var boolean
*/
protected $flush = false;
/**
* Settings identifier
*
* @var string
*/
public $id = '';
/**
* Settings page label / title.
*
* @var string
*/
public $label = '';
/**
* Tab priority
*
* Determines the order of the page when registered with the core settings array.
*
* @var int
*/
public $tab_priority = 20;
/**
* Constructor.
*
* @since 3.37.3
*
* @return void
*/
public function __construct() {
$this->label = $this->set_label();
add_filter( 'lifterlms_settings_tabs_array', array( $this, 'add_settings_page' ), $this->tab_priority );
if ( $this->id ) {
add_action( 'lifterlms_settings_' . $this->id, array( $this, 'output' ) );
add_action( 'lifterlms_settings_save_' . $this->id, array( $this, 'save' ) );
}
}
/**
* Add the settings page
*
* @since 1.0.0
*
* @return array
*/
public function add_settings_page( $pages ) {
$pages[ $this->id ] = $this->label;
return $pages;
}
/**
* Flushes rewrite rules when necessary
*
* @since 3.0.4
*
* @return void
*/
public function flush_rewrite_rules() {
// Add the updated endpoints.
$query = new LLMS_Query();
$query->add_endpoints();
// Flush rewrite rules.
flush_rewrite_rules();
}
/**
* Retrieve current section from URL var
*
* @since 3.17.5
* @since 3.35.0 Unslash input data.
*
* @return string
*/
protected function get_current_section() {
return isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : 'main';
}
/**
* Retrieve the page label.
*
* Extending classes should override this to return a translated string used as the page's title.
*
* @since 3.37.3
*
* @return string
*/
protected function set_label() {
return $this->id;
}
/**
* Generates a group of settings.
*
* @since 3.37.3
*
* @param string $id Group ID. Used to create IDs for the start, end, and title fields.
* @param string $title Title of the group (should be translatable).
* @param string $title_desc (Optional) title field description text.
* @param array[] $settings Array of settings field arrays.
* @return array[]
*/
protected function generate_settings_group( $id, $title, $title_desc = '', $settings = array() ) {
$start = array(
array(
'type' => 'sectionstart',
'id' => $id,
),
array(
'type' => 'title',
'id' => sprintf( '%s_title', $id ),
'title' => $title,
'desc' => $title_desc,
),
);
$end = array(
array(
'type' => 'sectionend',
'id' => sprintf( '%s_end', $id ),
),
);
return array_merge( $start, $settings, $end );
}
/**
* Get the page sections (stub)
*
* When overriding, this should return an associative array where the key is the
* section id and the value is the (translated) section title. The "default" tab
* should always use the id "main".
*
* @since 1.0.0
* @since 3.17.5 Return an array instead of void.
*
* @return array
*/
public function get_sections() {
return array();
}
/**
* Retrieve the page's settings (stub)
*
* @since 3.17.5
*
* @return array
*/
public function get_settings() {
return array();
}
/**
* Output the settings fields
*
* @since 1.0.0
* @since 3.17.5 Unknown.
*
* @return void
*/
public function output() {
LLMS_Admin_Settings::output_fields( $this->get_settings() );
}
/**
* Output settings sections as tabs and set post href
*
* @since 3.17.5
*
* @return void
*/
public function output_sections_nav() {
$sections = $this->get_sections();
if ( empty( $sections ) ) {
return;
}
$curr = $this->get_current_section();
?>
<nav class="llms-nav-tab-wrapper llms-nav-text">
<ul class="llms-nav-items">
<?php foreach ( $sections as $key => $title ) : ?>
<li class="llms-nav-item<?php echo ( $key === $curr ) ? ' llms-active' : ''; ?>">
<a class="llms-nav-link" href="<?php echo esc_url( admin_url( 'admin.php?page=llms-settings&tab=' . $this->id . '§ion=' . $key ) ); ?>"><?php echo $title; ?></a>
</li>
<?php endforeach; ?>
</ul>
</nav>
<?php
}
/**
* Save the settings field values
*
* @since 1.0.0
* @since 3.17.5 Unknown.
*
* @return void
*/
public function save() {
LLMS_Admin_Settings::save_fields( $this->get_settings() );
if ( $this->flush ) {
add_action( 'shutdown', array( $this, 'flush_rewrite_rules' ) );
}
}
}
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor.
- add_settings_page — Add the settings page
- flush_rewrite_rules — Flushes rewrite rules when necessary
- generate_settings_group — Generates a group of settings.
- get_current_section — Retrieve current section from URL var
- get_sections — Get the page sections (stub)
- get_settings — Retrieve the page's settings (stub)
- output — Output the settings fields
- output_sections_nav — Output settings sections as tabs and set post href
- save — Save the settings field values
- set_label — Retrieve the page label.
Changelog Changelog
| Version | Description |
|---|---|
| 3.37.3 | Add a constructor which registers the settings page and automatically saves and outputs settings content. Add public method stub get_label() which is used to automatically set the $label property on class initialization. Add utility method to generate a group of settings. |
| 3.35.0 | Unslash input data. |
| 3.30.3 | Explicitly define class properties. |
| 1.0.0 | Introduced. |