installed plugin Easy Digital Downloads
version 3.1.0.3
This commit is contained in:
@ -0,0 +1,324 @@
|
||||
<?php
|
||||
/**
|
||||
* Sections Class
|
||||
*
|
||||
* @package EDD
|
||||
* @subpackage Admin
|
||||
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 3.0
|
||||
*/
|
||||
|
||||
namespace EDD\Admin;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Main class for creating a vertically tabbed UI
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
class Sections {
|
||||
|
||||
/**
|
||||
* Section ID
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $id = 'edd_general_';
|
||||
|
||||
/**
|
||||
* Sections
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $sections = array();
|
||||
|
||||
/**
|
||||
* ID of the currently selected section
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $current_section = 'general';
|
||||
|
||||
/**
|
||||
* Whether to use JavaScript should
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $use_js = true;
|
||||
|
||||
/**
|
||||
* Base URL for each section
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $base_url = '';
|
||||
|
||||
/**
|
||||
* The object, if any
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
public $item = false;
|
||||
|
||||
/** Public Methods ********************************************************/
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* Might be useful someday
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
public function __construct() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup default sections
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
public function set_sections( $sections = array() ) {
|
||||
if ( empty( $sections ) ) {
|
||||
$this->add_section( array(
|
||||
'id' => 'general',
|
||||
'label' => esc_html__( 'General', 'easy-digital-downloads' ),
|
||||
'callback' => array( $this, 'section_general' )
|
||||
) );
|
||||
} elseif ( count( $sections ) ) {
|
||||
foreach ( $sections as $section ) {
|
||||
$this->add_section( $section );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the sections for the current item
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param object $item
|
||||
*/
|
||||
public function set_item( $item = false ) {
|
||||
$this->item = $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the contents
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
public function display() {
|
||||
$use_js = ! empty( $this->use_js )
|
||||
? ' use-js'
|
||||
: '';
|
||||
$role = $this->use_js ? 'tablist' : 'menu';
|
||||
|
||||
ob_start(); ?>
|
||||
|
||||
<div class="edd-sections-wrap">
|
||||
<div class="edd-vertical-sections<?php echo $use_js; ?>">
|
||||
<ul class="section-nav" role="<?php echo esc_attr( $role ); ?>">
|
||||
<?php echo $this->get_all_section_links(); ?>
|
||||
</ul>
|
||||
|
||||
<div class="section-wrap">
|
||||
<?php echo $this->get_all_section_contents(); ?>
|
||||
</div>
|
||||
<br class="clear" />
|
||||
</div>
|
||||
<?php $this->nonce_field();
|
||||
|
||||
if ( ! empty( $this->item ) ) : ?>
|
||||
|
||||
<input type="hidden" name="edd-item-id" value="<?php echo esc_attr( $this->item->id ); ?>" />
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
// Output current buffer
|
||||
echo ob_get_clean();
|
||||
}
|
||||
|
||||
/** Private Methods *******************************************************/
|
||||
|
||||
/**
|
||||
* Add a section
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param array $section
|
||||
*/
|
||||
private function add_section( $section = array() ) {
|
||||
$this->sections[] = (object) wp_parse_args( $section, array(
|
||||
'id' => '',
|
||||
'label' => '',
|
||||
'icon' => 'admin-settings',
|
||||
'callback' => ''
|
||||
) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Is a section the current section?
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param string $section_id
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_current_section( $section_id = '' ) {
|
||||
return ( $section_id === $this->current_section );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the nonce field for the meta box
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
protected function nonce_field() {
|
||||
wp_nonce_field(
|
||||
'edd_' . $this->id . '_sections_nonce',
|
||||
'edd_' . $this->id . 'nonce_sections',
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all section links
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_all_section_links() {
|
||||
ob_start();
|
||||
|
||||
// Loop through sections
|
||||
foreach ( $this->sections as $section ) :
|
||||
|
||||
$url = $this->use_js
|
||||
? '#' . esc_attr( $this->id . $section->id )
|
||||
: add_query_arg( 'view', sanitize_key( $section->id ), $this->base_url );
|
||||
|
||||
// Special selected section
|
||||
$selected = ! $this->use_js && $this->is_current_section( $section->id )
|
||||
? 'aria-current="true"'
|
||||
: '';
|
||||
$class = $this->is_current_section( $section->id ) ? 'section-title section-title--is-active' : 'section-title';
|
||||
$aria_attributes = $this->use_js ? 'role="tab" aria-controls="' . esc_attr( $this->id . $section->id ) . '"' : 'role="menuitem"';
|
||||
?>
|
||||
|
||||
<li class="<?php echo esc_attr( $class ); ?>" <?php echo $aria_attributes . ' ' . $selected; ?>>
|
||||
<a href="<?php echo esc_url( $url ); ?>">
|
||||
<span class="dashicons dashicons-<?php echo esc_attr( $section->icon ); ?>"></span>
|
||||
<span class="label"><?php echo $section->label; // Allow HTML ?></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<?php endforeach;
|
||||
|
||||
// Return current buffer
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all section contents
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_all_section_contents() {
|
||||
ob_start();
|
||||
|
||||
// Maybe reduce sections down to single
|
||||
$sections = empty( $this->use_js )
|
||||
? wp_filter_object_list( $this->sections, array( 'id' => $this->current_section ) )
|
||||
: $this->sections;
|
||||
|
||||
// Bail if no sections
|
||||
if ( empty( $sections ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Loop through sections
|
||||
foreach ( $sections as $section ) :
|
||||
|
||||
// Special selected section
|
||||
$selected = ! $this->is_current_section( $section->id )
|
||||
? 'style="display: none;"'
|
||||
: ''; ?>
|
||||
|
||||
<div id="<?php echo esc_attr( $this->id . $section->id ); ?>" class="section-content" <?php echo $selected; ?>><?php
|
||||
|
||||
// Callback or action
|
||||
if ( ! empty( $section->callback ) ) {
|
||||
if ( is_callable( $section->callback ) ) {
|
||||
call_user_func( $section->callback, $this->item );
|
||||
|
||||
} elseif ( is_array( $section->callback ) && is_callable( $section->callback[0] ) ) {
|
||||
isset( $section->callback[1] )
|
||||
? call_user_func_array( $section->callback[0], $section->callback[1] )
|
||||
: call_user_func_array( $section->callback[0], array() );
|
||||
|
||||
} else {
|
||||
_e( 'Invalid section', 'easy-digital-downloads' );
|
||||
}
|
||||
} else {
|
||||
die;
|
||||
do_action( 'edd_' . $section->id . 'section_contents', $this );
|
||||
}
|
||||
|
||||
?></div>
|
||||
|
||||
<?php endforeach;
|
||||
|
||||
// Return current buffer
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Output a section
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param object $item
|
||||
*/
|
||||
protected function section_general() {
|
||||
?>
|
||||
|
||||
<table class="form-table rowfat">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
<label><?php esc_html_e( 'Empty', 'easy-digital-downloads' ); ?></label>
|
||||
</th>
|
||||
|
||||
<td>
|
||||
—
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user