whoami7 - Manager
:
/
home
/
dataiclx
/
public_html
/
wp-content
/
themes
/
woodmart
/
inc
/
options
/
Upload File:
files >> /home/dataiclx/public_html/wp-content/themes/woodmart/inc/options/class-page.php
<?php /** * Object that handles theme options page. * * @package xts */ namespace XTS; if ( ! defined( 'ABSPATH' ) ) { exit; // Direct access not allowed. } /** * Create page and display the form with all sections and fields. */ class Page extends Singleton { /** * Options set prefix. * * @var array */ public $opt_name = 'woodmart'; /** * Options array loaded from the database. * * @var array */ private $_options; /** * Array of all the available sections. * * @var array */ private $_sections; /** * Array of all the available Field objects. * * @var array */ private $_fields; /** * Array of all the available Presets. * * @var array */ private $_presets; /** * Register hooks and load base data. * * @since 1.0.0 */ public function init() { add_action( 'admin_menu', array( $this, 'admin_page' ) ); add_action( 'admin_bar_menu', array( $this, 'admin_bar_links' ), 100 ); $this->_presets = Presets::get_all(); } /** * Load all field objects and add them to the sections set. * * @since 1.0.0 */ private function load_fields() { $this->_sections = Options::get_sections(); $this->_fields = Options::get_fields(); foreach ( $this->_fields as $key => $field ) { $this->_sections[ $field->args['section'] ]['fields'][] = $field; } $this->_options = Options::get_options(); } /** * Add theme settings links to the admin bar. * * @since 1.0.0 * * @param object $admin_bar Admin bar object. */ public function admin_bar_links( $admin_bar ) { $this->load_fields(); $logo = WOODMART_ASSETS . '/images/theme-admin-icon-2.svg'; $theme_name = esc_html__( 'WoodMart', 'woodmart' ); if ( woodmart_get_opt( 'white_label' ) ) { if ( woodmart_get_opt( 'white_label_theme_name' ) ) { $theme_name = woodmart_get_opt( 'white_label_theme_name' ); } if ( woodmart_get_opt( 'white_label_sidebar_icon_logo' ) ) { $image_data = woodmart_get_opt( 'white_label_sidebar_icon_logo' ); if ( isset( $image_data['url'] ) && $image_data['url'] ) { $logo = wp_get_attachment_image_url( $image_data['id'] ); } } } $admin_bar->add_node( array( 'id' => 'theme-dashboard', 'title' => '<img src="' . esc_url( $logo ) . '" alt="icon">' . $theme_name, 'href' => admin_url( 'admin.php?page=xtemos_options' ), 'meta' => array( 'title' => $theme_name, ), ) ); $admin_bar->add_node( array( 'id' => 'theme-settings', 'title' => esc_html__( 'Theme Settings', 'woodmart' ), 'href' => admin_url( 'admin.php?page=xtemos_options' ), 'parent' => 'theme-dashboard', 'meta' => array( 'title' => esc_html__( 'Theme Settings', 'woodmart' ), ), ) ); if ( $this->_sections ) { foreach ( $this->_sections as $key => $section ) { if ( isset( $section['parent'] ) ) { continue; } $admin_bar->add_node( array( 'id' => $section['id'], 'title' => '<i class="' . $section['icon'] . '"></i>' . $section['name'], 'href' => admin_url( 'admin.php?page=xtemos_options&tab=' . $key ), 'parent' => 'theme-settings', ) ); } } $header = whb_get_header(); $admin_bar->add_node( array( 'id' => 'header-builder', 'title' => esc_html__( 'Header Builder', 'woodmart' ), 'href' => admin_url( 'admin.php?page=woodmart_dashboard&tab=builder' ), 'parent' => 'theme-dashboard', 'meta' => array( 'title' => esc_html__( 'Header Builder', 'woodmart' ), ), ) ); if ( $header && ! is_admin() ) { $hb_url = admin_url( 'admin.php?page=woodmart_dashboard&tab=builder#/builder/' . $header->get_id() ); $admin_bar->add_node( array( 'id' => 'edit-header', 'title' => esc_html__( 'Edit current header', 'woodmart' ), 'href' => $hb_url, 'parent' => 'header-builder', 'meta' => array( 'title' => $header->get_name(), ), ) ); } $active_presets = Presets::get_active_presets(); $all_presets = Presets::get_all(); if ( $active_presets ) { $admin_bar->add_node( array( 'id' => 'theme-settings-presets', 'title' => esc_html__( 'Active presets', 'woodmart' ), 'href' => admin_url( 'admin.php?page=xtemos_options' ), 'parent' => 'theme-dashboard', 'meta' => array( 'title' => esc_html__( 'Active presets', 'woodmart' ), ), ) ); foreach ( $active_presets as $preset ) { $name = isset( $all_presets[ $preset ]['name'] ) ? $all_presets[ $preset ]['name'] : 'Preset name'; $admin_bar->add_node( array( 'id' => 'theme-settings-presets-' . $preset, 'title' => $name, 'href' => admin_url( 'admin.php?page=xtemos_options&preset=' . $preset ), 'parent' => 'theme-settings-presets', 'meta' => array( 'title' => $name, ), ) ); } } } /** * Callback to register a page in the dashboard. * * @since 1.0.0 */ public function admin_page() { $this->load_fields(); $logo = WOODMART_ASSETS . '/images/theme-admin-icon.svg'; if ( woodmart_get_opt( 'white_label_sidebar_icon_logo' ) && woodmart_get_opt( 'white_label' ) ) { $image_data = woodmart_get_opt( 'white_label_sidebar_icon_logo' ); if ( isset( $image_data['url'] ) && $image_data['url'] ) { $logo = wp_get_attachment_image_url( $image_data['id'] ); } } // Create admin page. add_menu_page( esc_html__( 'Theme Settings', 'woodmart' ), esc_html__( 'Theme Settings', 'woodmart' ), 'manage_options', 'xtemos_options', array( &$this, 'page_content' ), $logo, 61 ); foreach ( $this->_sections as $key => $section ) { if ( isset( $section['parent'] ) ) { continue; } add_submenu_page( 'xtemos_options', $section['name'], $section['name'], 'manage_options', 'xtemos_options&tab=' . $key, array( &$this, 'page_content' ) ); } remove_submenu_page( 'xtemos_options', 'xtemos_options' ); } /** * Render the options page content. * * @since 1.0.0 */ public function page_content() { $wrapper_classes = ''; if ( isset( $_GET['preset'] ) ) { // phpcs:ignore $wrapper_classes .= ' xts-preset-active'; } $wrapper_classes .= ' xts-builder-' . woodmart_get_current_page_builder(); ?> <div class="wrap"> <div class="xts-page"> <div class="xts-page-inner"> <div class="xts-options xts-dashboard<?php echo esc_attr( $wrapper_classes ); ?>"> <div class="xts-options-form"> <h2></h2> <?php do_action( 'xts_before_theme_settings' ); ?> <?php if ( isset( $_GET['settings-updated'] ) ) : // phpcs:ignore ?> <?php do_action( 'xts_theme_settings_save' ); ?> <?php endif; ?> <div class="xts-options-form-row xts-row"> <div class="xts-col xts-col-xxl-9"> <div class="xts-options-header"> <div class="xts-options-theme-data"> <h2 class="xts-options-theme-name"> <?php if ( woodmart_get_opt( 'white_label' ) && woodmart_get_opt( 'white_label_theme_name' ) ) : ?> <?php echo esc_html( woodmart_get_opt( 'white_label_theme_name' ) ); ?> <?php else : ?> Woodmart <?php endif; ?> </h2> <span class="xts-options-theme-version"> <?php echo esc_html( woodmart_get_theme_info( 'Version' ) ); ?> </span> </div> <div class="xts-options-search"> <input type="text" placeholder="<?php esc_html_e( 'Start typing to find options...', 'woodmart' ); ?>"> </div> </div> <form action="options.php" method="post"> <div class="xts-fields-tabs"> <div class="xts-sections-nav"> <ul> <?php $this->display_sections_tree(); ?> </ul> </div> <div class="xts-sections"> <?php $this->display_message(); ?> <?php $this->display_sections(); ?> <div class="xts-options-actions"> <input type="hidden" class="xts-last-tab-input" name="xts-<?php echo esc_attr( $this->opt_name ); ?>-options[last_tab]" value="<?php echo esc_attr( $this->get_last_tab() ); ?>" /> <button class="xts-save-options-btn xts-btn xts-btn-primary"><?php esc_html_e( 'Save options', 'woodmart' ); ?></button> <?php if ( isset( $_GET['preset'] ) ) : // phpcs:ignore ?> <a href="<?php echo esc_url( admin_url( 'admin.php?page=xtemos_options' ) ); ?>" class="xts-btn xts-btn-disable"> <?php esc_html_e( 'To global settings', 'woodmart' ); ?> </a> <?php endif; ?> </div> </div> </div> <input type="hidden" name="page_options" value="xts-<?php echo esc_attr( $this->opt_name ); ?>-options" /> <input type="hidden" name="action" value="update" /> <?php if ( Presets::get_current_preset() ) : ?> <input type="hidden" class="xts-fields-to-save" name="xts-<?php echo esc_attr( $this->opt_name ); ?>-options[fields_to_save]" value="<?php echo esc_attr( $this->get_fields_to_save() ); ?>" /> <input type="hidden" name="xts-<?php echo esc_attr( $this->opt_name ); ?>-options[preset]" value="<?php echo esc_attr( Presets::get_current_preset() ); ?>" /> <?php endif; ?> <?php settings_fields( 'xts-options-group' ); ?> </form> </div> <div class="xts-col xts-col-xxl-3"> <?php Presets::output_ui(); ?> </div> </div> </div> </div> </div> </div> </div> <?php do_action( 'xts_after_theme_settings' ); ?> <?php } /** * Get last visited tab by visitor. * * @since 1.0.0 */ private function get_last_tab() { reset( $this->_sections ); $first_tab = key( $this->_sections ); $current_tab = $first_tab; if ( isset( $this->_options['last_tab'] ) && isset( $_GET['settings-updated'] ) ) { $current_tab = $this->_options['last_tab']; } elseif ( isset( $_GET['tab'] ) ) { $current_tab = $_GET['tab']; } return $current_tab; } /** * Display saved/imported message. * * @since 1.0.0 */ private function display_message() { $message = $this->get_last_message(); $text = false; if ( 'save' === $message ) { $text = esc_html__( 'Settings are successfully saved.', 'woodmart' ); } elseif ( 'import' === $message ) { $text = esc_html__( 'New options are successfully imported.', 'woodmart' ); } elseif ( 'reset' === $message ) { $text = esc_html__( 'All options are set to default values.', 'woodmart' ); } if ( $text ) { echo '<div class="xts-options-message">' . $text . '</div>'; // phpcs:ignore } } /** * Get last message. * * @since 1.0.0 */ private function get_last_message() { return ( isset( $this->_options['last_message'] ) && isset( $_GET['settings-updated'] ) ) ? $this->_options['last_message'] : ''; // phpcs:ignore } /** * Display sections navigation tree. * * @since 1.0.0 */ private function display_sections_tree() { $current_tab = $this->get_last_tab(); $active_parent = ''; if ( isset( $this->_sections[ $current_tab ]['parent'] ) ) { $active_parent = $this->_sections[ $current_tab ]['parent']; } foreach ( $this->_sections as $key => $section ) { if ( isset( $section['parent'] ) ) { continue; } $subsections = array_filter( $this->_sections, function( $el ) use ( $section ) { return isset( $el['parent'] ) && $el['parent'] === $section['id']; } ); $classes = ''; if ( $key === $current_tab || $key === $active_parent ) { $classes .= ' xts-active-nav'; } if ( is_array( $subsections ) && count( $subsections ) > 0 ) { $classes .= ' xts-has-child'; } ?> <li class="<?php echo esc_attr( $classes ); ?>"> <a href="javascript:void(0);" data-id="<?php echo esc_attr( $key ); ?>" data-id="<?php echo esc_attr( $key ); ?>"> <span class="xts-section-icon"> <i class="<?php echo esc_html( $section['icon'] ); ?>"></i> </span> <?php echo $section['name']; // phpcs:ignore ?> </a> <?php if ( is_array( $subsections ) && count( $subsections ) > 0 ) : ?> <ul> <?php foreach ( $subsections as $key => $subsection ) : ?> <li class="xts-subsection-nav <?php echo ( $key === $current_tab ) ? 'xts-active-nav' : ''; ?>"> <a href="javascript:void(0);" data-id="<?php echo esc_attr( $key ); ?>"> <?php echo $subsection['name']; // phpcs:ignore ?> </a> </li> <?php endforeach; ?> </ul> <?php endif; ?> </li> <?php } } /** * Loop through all the sections and render all the fields. * * @since 1.0.0 */ private function display_sections() { foreach ( $this->_sections as $key => $section ) { ?> <div class="xts-fields-section <?php echo ( $this->get_last_tab() !== $key ) ? 'xts-hidden' : 'xts-active-section'; ?>" data-id="<?php echo esc_attr( $key ); ?>"> <div class="xts-section-title"> <h3><?php echo esc_html( $section['name'] ); ?></h3> </div> <div class="xts-fields-wrapper"> <?php $previus_group = false; if ( isset( $section['fields'] ) ) { foreach ( $section['fields'] as $key => $field ) { if ( $previus_group && ( ! isset( $field->args['group'] ) || $previus_group !== $field->args['group'] ) ) { echo '</div><!-- close group ' . esc_html( $previus_group ) . '-->'; $previus_group = false; } if ( isset( $field->args['group'] ) && $previus_group !== $field->args['group'] ) { $previus_group = $field->args['group']; echo '<div class="xts-group-title"><span>' . esc_html( $previus_group ) . '</span></div>'; echo '<div class="xts-fields-group">'; } if ( $this->is_inherit_field( $field->get_id() ) ) { $field->inherit_value( true ); } $field->render( null, Presets::get_current_preset() ); } if ( $previus_group ) { echo '</div><!-- close group ' . esc_html( $previus_group ) . '-->'; $previus_group = false; } } ?> </div> </div> <?php } } /** * Get fields to save value. * * @since 1.0.0 */ private function get_fields_to_save() { if ( ! isset( $this->_options[ Presets::get_current_preset() ] ) || ! isset( $this->_options[ Presets::get_current_preset() ]['fields_to_save'] ) ) { return ''; } return $this->_options[ Presets::get_current_preset() ]['fields_to_save']; } /** * Is field by id inherits value. * * @since 1.0.0 * * @param int $id Field's id. * * @return bool */ private function is_inherit_field( $id ) { return false === strpos( $this->get_fields_to_save(), $id ); } } Page::get_instance();
Copyright ©2021 || Defacer Indonesia