site_oueb_2/wp-content/plugins/ocean-extra/includes/panel/theme-panel.php

687 lines
22 KiB
PHP
Raw Normal View History

2022-11-22 20:23:31 +01:00
<?php
/**
* Theme Panel
*
* @package Ocean_Extra
* @category Core
* @author OceanWP
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// Start Class
class Ocean_Extra_Theme_Panel {
/**
* Start things up
*/
public function __construct() {
// Display notice if the Sticky Header is not activated
add_action( 'admin_notices', array( 'Ocean_Extra_Theme_Panel', 'sticky_notice' ) );
add_action( 'admin_init', array( 'Ocean_Extra_Theme_Panel', 'dismiss_sticky_notice' ) );
add_action( 'admin_enqueue_scripts', array( 'Ocean_Extra_Theme_Panel', 'sticky_notice_css' ) );
// Add panel menu
add_action( 'admin_menu', array( 'Ocean_Extra_Theme_Panel', 'add_page' ), 0 );
// Add panel submenu
add_action( 'admin_menu', array( 'Ocean_Extra_Theme_Panel', 'add_menu_subpage' ) );
// Add custom CSS for the theme panel
add_action( 'admin_enqueue_scripts', array( 'Ocean_Extra_Theme_Panel', 'css' ) );
// Register panel settings
add_action( 'admin_init', array( 'Ocean_Extra_Theme_Panel', 'register_settings' ) );
// Load addon files
self::load_addons();
}
/**
* Display notice if the Sticky Header is not activated
*
* @since 1.4.12
*/
public static function sticky_notice() {
global $pagenow;
global $owp_fs;
$need_to_upgrade = ! empty( $owp_fs ) ? $owp_fs->is_pricing_page_visible() : false;
if ( ! $need_to_upgrade
|| '1' === get_option( 'owp_dismiss_sticky_notice' )
|| true == apply_filters( 'oceanwp_licence_tab_enable', false )
|| ! current_user_can( 'manage_options' ) ) {
return;
}
// Display on the plugins and Theme Panel pages
if ( 'plugins.php' == $pagenow || ( 'admin.php' == $pagenow && 'oceanwp' == $_GET['page'] ) ) {
wp_enqueue_style( 'oe-admin-notice', plugins_url( '/assets/css/notice.min.css', __FILE__ ) );
$dismiss = wp_nonce_url( add_query_arg( 'owp_sticky_notice', 'dismiss_btn' ), 'dismiss_btn' );
?>
<div class="notice notice-success ocean-extra-notice owp-sticky-notice">
<div class="notice-inner">
<span class="icon-side">
<span class="owp-notification-icon">
<img src="<?php echo esc_attr ( OE_URL . 'includes/themepanel/assets/img/themepanel-icon.svg'); ?>">
</span>
</span>
<div class="notice-content">
<h2><?php echo esc_html__( 'Lovely jubbly! Your website is starting to look fabulous!','ocean-extra' ); ?></h2>
<h3 class="notice-subheading">
<?php
echo sprintf(
esc_html__( 'But you know what would make your website look stunning and leave your visitors in awe? The %1$sOcean Core Extensions Bundle%2$s features.', 'ocean-extra' ),
'<a href="https://oceanwp.org/core-extensions-bundle/" target="_blank">',
'</a>'
);
?>
</h3>
<p><?php echo esc_html__( 'You\'ll get:', 'ocean-extra' ); ?></p>
<ul>
<li> <?php echo esc_html__('access to premium website template demos,','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('sticky header,','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('royalty free images and icons with templates,','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('Elementor widgets','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('Gutenberg blocks,','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('images and icons library,','ocean-extra' ); ?> </li>
<li> <?php echo esc_html__('and so much more.','ocean-extra' ); ?> </li>
</ul>
<p><a href="<?php echo esc_url('https://oceanwp.org/core-extensions-bundle/' ); ?>" class="btn button-primary" target="_blank"><span class="dashicons dashicons-external"></span><span><?php _e( 'Yes! I want the Upgrade', 'ocean-extra' ); ?></span></a></p>
</div>
<a href="<?php echo $dismiss; ?>" class="dismiss"><span class="dashicons dashicons-dismiss"></span></a>
</div>
</div>
<?php
}
}
/**
* Dismiss Sticky Header admin notice
*
* @since 1.4.12
*/
public static function dismiss_sticky_notice() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
if ( ! isset( $_GET['owp_sticky_notice'] ) ) {
return;
}
if ( 'dismiss_btn' === $_GET['owp_sticky_notice'] ) {
check_admin_referer( 'dismiss_btn' );
update_option( 'owp_dismiss_sticky_notice', '1' );
}
wp_redirect( remove_query_arg( 'owp_sticky_notice' ) );
exit;
}
/**
* Sticky Header CSS
*
* @since 1.4.19
*/
public static function sticky_notice_css( $hook ) {
global $pagenow;
global $owp_fs;
$need_to_upgrade = ! empty( $owp_fs ) ? $owp_fs->is_pricing_page_visible() : false;
if ( ! $need_to_upgrade
|| '1' === get_option( 'owp_dismiss_sticky_notice' )
|| true == apply_filters( 'oceanwp_licence_tab_enable', false )
|| ! current_user_can( 'manage_options' ) ) {
return;
}
if ( 'toplevel_page_oceanwp' != $hook && 'plugins.php' != $pagenow ) {
return;
}
// CSS
wp_enqueue_style( 'oe-rating-notice', plugins_url( '/assets/css/notice.min.css', __FILE__ ) );
}
/**
* Return customizer panels
*
* @since 1.0.8
*/
private static function get_panels() {
$panels = array(
'oe_general_panel' => array(
'label' => esc_html__( 'General Panel', 'ocean-extra' ),
),
'oe_typography_panel' => array(
'label' => esc_html__( 'Typography Panel', 'ocean-extra' ),
),
'oe_topbar_panel' => array(
'label' => esc_html__( 'Top Bar Panel', 'ocean-extra' ),
),
'oe_header_panel' => array(
'label' => esc_html__( 'Header Panel', 'ocean-extra' ),
),
'oe_blog_panel' => array(
'label' => esc_html__( 'Blog Panel', 'ocean-extra' ),
),
'oe_sidebar_panel' => array(
'label' => esc_html__( 'Sidebar Panel', 'ocean-extra' ),
),
'oe_footer_widgets_panel' => array(
'label' => esc_html__( 'Footer Widgets Panel', 'ocean-extra' ),
),
'oe_footer_bottom_panel' => array(
'label' => esc_html__( 'Footer Bottom Panel', 'ocean-extra' ),
),
'oe_custom_code_panel' => array(
'label' => esc_html__( 'Custom CSS/JS Panel', 'ocean-extra' ),
),
);
// Apply filters and return
return apply_filters( 'oe_theme_panels', $panels );
}
/**
* Return customizer options
*
* @since 1.0.8
*/
private static function get_options() {
$options = array(
'custom_logo' => array(
'label' => esc_html__( 'Upload your logo', 'ocean-extra' ),
'desc' => esc_html__( 'Add your own logo and retina logo used for retina screens.', 'ocean-extra' ),
),
'site_icon' => array(
'label' => esc_html__( 'Add your favicon', 'ocean-extra' ),
'desc' => esc_html__( 'The favicon is used as a browser and app icon for your website.', 'ocean-extra' ),
),
'ocean_primary_color' => array(
'label' => esc_html__( 'Choose your primary color', 'ocean-extra' ),
'desc' => esc_html__( 'Replace the default primary and hover color by your own colors.', 'ocean-extra' ),
),
'ocean_typography_panel' => array(
'label' => esc_html__( 'Choose your typography', 'ocean-extra' ),
'desc' => esc_html__( 'Choose your own typography for any parts of your website.', 'ocean-extra' ),
'panel' => true,
),
'ocean_top_bar' => array(
'label' => esc_html__( 'Top bar options', 'ocean-extra' ),
'desc' => esc_html__( 'Enable/Disable the top bar, add your own paddings and colors.', 'ocean-extra' ),
),
'ocean_header_style' => array(
'label' => esc_html__( 'Header options', 'ocean-extra' ),
'desc' => esc_html__( 'Choose the style, the height and the colors for your site header.', 'ocean-extra' ),
),
'ocean_footer_widgets' => array(
'label' => esc_html__( 'Footer widgets options', 'ocean-extra' ),
'desc' => esc_html__( 'Choose the columns number, paddings and colors for the footer widgets.', 'ocean-extra' ),
),
'ocean_footer_bottom' => array(
'label' => esc_html__( 'Footer bottom options', 'ocean-extra' ),
'desc' => esc_html__( 'Add your copyright, paddings and colors for the footer bottom.', 'ocean-extra' ),
),
);
// Apply filters and return
return apply_filters( 'oe_customizer_options', $options );
}
/**
* Registers a new menu page
*
* @since 1.0.0
*/
public static function add_page() {
add_menu_page(
esc_html__( 'Theme Panel', 'ocean-extra' ),
'Theme Panel', // This menu cannot be translated because it's used for the $hook prefix
apply_filters( 'ocean_theme_panel_capabilities', 'manage_options' ),
'oceanwp-panel',
'',
'dashicons-admin-generic',
null
);
// here can be some condition
remove_menu_page( 'oceanwp-panel' );
}
/**
* Registers a new submenu page
*
* @since 1.0.0
*/
public static function add_menu_subpage() {
add_submenu_page(
'oceanwp-general',
esc_html__( 'General', 'ocean-extra' ),
esc_html__( 'General', 'ocean-extra' ),
apply_filters( 'ocean_theme_panel_capabilities', 'manage_options' ),
'oceanwp-panel',
array( 'Ocean_Extra_Theme_Panel', 'create_admin_page' )
);
}
/**
* Register a setting and its sanitization callback.
*
* @since 1.0.0
*/
public static function register_settings() {
register_setting( 'oe_panels_settings', 'oe_panels_settings', array( 'Ocean_Extra_Theme_Panel', 'validate_panels' ) );
register_setting( 'oceanwp_options', 'oceanwp_options', array( 'Ocean_Extra_Theme_Panel', 'admin_sanitize_license_options' ) );
}
/**
* Validate Settings Options
*
* @since 1.0.0
*/
public static function admin_sanitize_license_options( $input ) {
if ( current_user_can( 'manage_options' ) ) {
// filter to save all settings to database
$oceanwp_options = get_option( 'oceanwp_options' );
if ( isset( $input['licenses'] ) && ! empty( $input['licenses'] ) ) {
foreach ( $input['licenses'] as $key => $value ) {
if ( $oceanwp_options['licenses'][ $key ] ) {
if ( strpos( $value, 'XXX' ) !== false && isset( $oceanwp_options['licenses'][ $key ] ) ) {
$input['licenses'][ $key ] = $oceanwp_options['licenses'][ $key ];
}
}
}
}
return $input;
}
}
/**
* Main Sanitization callback
*
* @since 1.2.2
*/
public static function validate_panels( $settings ) {
// Get panels array
$panels = self::get_panels();
if ( current_user_can( 'manage_options' ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'oe_panels_settings-options' ) ) {
foreach ( $panels as $key => $val ) {
$settings[ $key ] = ! empty( $settings[ $key ] ) ? true : false;
}
}
// Return the validated/sanitized settings
return $settings;
}
/**
* Get settings.
*
* @since 1.2.2
*/
public static function get_setting( $option = '' ) {
$defaults = self::get_default_settings();
$settings = wp_parse_args( get_option( 'oe_panels_settings', $defaults ), $defaults );
return isset( $settings[ $option ] ) ? $settings[ $option ] : false;
}
/**
* Get default settings value.
*
* @since 1.2.2
*/
public static function get_default_settings() {
// Get panels array
$panels = self::get_panels();
// Add array
$default = array();
foreach ( $panels as $key => $val ) {
$default[ $key ] = 1;
}
// Return
return apply_filters( 'oe_default_panels', $default );
}
/**
* Settings page sidebar
*
* @since 1.4.0
*/
public static function admin_page_sidebar() {
// Image url
$facebook = OE_URL . 'includes/panel/assets/img/facebook.svg';
// Bundle link
$bundle_link = 'https://oceanwp.org/core-extensions-bundle/?utm_source=dash&utm_medium=theme-panel&utm_campaign=bundle';
// If bundle box
$class = '';
if ( true != apply_filters( 'oceanwp_licence_tab_enable', false ) ) {
$class = ' has-bundle';
}
// Setup Wizard button
if ( ! get_option( 'owp_wizard' ) ) {
?>
<div class="oceanwp-wizard">
<a href="<?php echo esc_url( admin_url( 'admin.php?page=owp_setup' ) ); ?>" class="button owp-button"><?php esc_html_e( 'Run the Setup Wizard', 'ocean-extra' ); ?></a>
</div>
<?php
}
// if no premium extensions activated
if ( true != apply_filters( 'oceanwp_licence_tab_enable', false ) ) {
?>
<div class="oceanwp-bloc oceanwp-bundle">
<p class="owp-text">
<a href="<?php echo esc_url( $bundle_link ); ?>" class="logo-text" target="_blank">OceanWP<span class="circle"></span></a>
</p>
<div class="content-wrap">
<p class="content">
<?php
echo sprintf( esc_html__( 'Take your website to the next level.%1$sGain access to all premium extensions with a single purchase. %2$sClick here%3$s for more information.', 'ocean-extra' ), '<br>', '<a href="' . esc_url( $bundle_link ) . '" target="_blank">', '</a>' );
?>
</p>
<a href="<?php echo esc_url( $bundle_link ); ?>" class="button owp-button" target="_blank"><?php esc_html_e( 'Read More', 'ocean-extra' ); ?></a>
</div>
<i class="dashicons dashicons-admin-appearance"></i>
</div>
<?php
}
?>
<div class="oceanwp-bloc oceanwp-facebook<?php echo esc_attr( $class ); ?>">
<div class="owp-ribbon"><div><?php esc_html_e( 'VIP', 'ocean-extra' ); ?></div></div>
<p class="owp-img">
<a href="https://www.facebook.com/groups/oceanwptheme/" target="_blank">
<img src="<?php echo esc_url( $facebook ); ?>" alt="Facebook Group" />
</a>
</p>
<div class="content-wrap">
<p class="content"><?php esc_html_e( 'Become part of the OceanWP VIP Community on Facebook. You will get access to the latest beta releases, get help with issues or simply meet like-minded people.', 'ocean-extra' ); ?></p>
<a href="https://www.facebook.com/groups/oceanwptheme/" class="button owp-button" target="_blank"><?php esc_html_e( 'Join the Group', 'ocean-extra' ); ?></a>
</div>
<i class="dashicons dashicons-facebook-alt"></i>
</div>
<div class="oceanwp-buttons<?php echo esc_attr( $class ); ?>">
<a href="https://www.youtube.com/c/OceanWP" class="button owp-button owp-yt-btn" target="_blank"><?php esc_html_e( 'How-to Videos', 'ocean-extra' ); ?></a>
<a href="http://docs.oceanwp.org/" class="button owp-button owp-doc-btn" target="_blank"><?php esc_html_e( 'Documentation', 'ocean-extra' ); ?></a>
<a href="https://oceanwp.org/support/" class="button owp-button owp-support-btn" target="_blank"><?php esc_html_e( 'Open a Support Ticket', 'ocean-extra' ); ?></a>
</div>
<?php
}
/**
* Settings page output
*
* @since 1.0.0
*/
public static function create_admin_page() {
// Get panels array
$theme_panels = self::get_panels();
// Get options array
$options = self::get_options();
?>
<div class="wrap oceanwp-theme-panel clr">
<h1><?php esc_attr_e( 'Theme Panel', 'ocean-extra' ); ?></h1>
<h2 class="nav-tab-wrapper">
<?php
// Get current tab
$curr_tab = ! empty( $_GET['tab'] ) ? $_GET['tab'] : 'features';
// Feature url
$feature_url = add_query_arg(
array(
'page' => 'oceanwp-panel',
'tab' => 'features',
),
'admin.php'
);
?>
<?php do_action( 'ocean_theme_panel_before_tab' ); ?>
<a href="<?php echo esc_url( $feature_url ); ?>" class="nav-tab <?php echo $curr_tab == 'features' ? 'nav-tab-active' : ''; ?>"><?php esc_attr_e( 'Features', 'ocean-extra' ); ?></a>
<?php do_action( 'ocean_theme_panel_after_tab' ); ?>
</h2>
<?php do_action( 'ocean_theme_panel_before_content' ); ?>
<div class="oceanwp-settings clr" <?php echo $curr_tab == 'features' ? '' : 'style="display:none;"'; ?>>
<?php if ( true != apply_filters( 'oceanwp_theme_panel_sidebar_enabled', false ) ) { ?>
<div class="oceanwp-sidebar right clr">
<?php self::admin_page_sidebar(); ?>
<?php do_action( 'oe_panels_sidebar_after' ); ?>
</div>
<?php } ?>
<div class="left clr">
<form id="oceanwp-theme-panel-form" method="post" action="options.php">
<?php // wp_nonce_field('oe_panels_settings_nounce', 'oe_panels_settings_nounce'); ?>
<?php settings_fields( 'oe_panels_settings' ); ?>
<div class="oceanwp-panels clr">
<h2 class="oceanwp-title"><?php esc_html_e( 'Customizer Search', 'ocean-extra' ); ?></h2>
<p class="oceanwp-desc"><?php esc_html_e( 'Disable or Enable the Customizer Search. ', 'ocean-extra' ); ?></p>
<div id="ocean-customizer-search" class="column-wrap clr">
<label for="oceanwp-switch-customizer-search" class="column-name clr">
<h3 class="title"><?php esc_html_e( 'Customizer Search', 'ocean-extra' ); ?></h3>
<input type="checkbox" name="oe_panels_settings[customizer-search]" value="true" id="oceanwp-switch[customizer-search]" <?php checked( (bool) self::get_setting( 'customizer-search' ) ); ?>>
</label>
</div>
</div>
<div class="oceanwp-panels clr">
<h2 class="oceanwp-title"><?php esc_html_e( 'Customizer Sections', 'ocean-extra' ); ?></h2>
<p class="oceanwp-desc"><?php esc_html_e( 'Disable the Customizer panels that you do not have or need anymore to load it quickly. Your settings are saved, so do not worry.', 'ocean-extra' ); ?></p>
<?php
// Loop through theme pars and add checkboxes
foreach ( $theme_panels as $key => $val ) :
// Var
$label = isset( $val['label'] ) ? $val['label'] : '';
$desc = isset( $val['desc'] ) ? $val['desc'] : '';
// Get settings
$settings = self::get_setting( $key );
?>
<div id="<?php echo esc_attr( $key ); ?>" class="column-wrap clr">
<label for="oceanwp-switch-[<?php echo esc_attr( $key ); ?>]" class="column-name clr">
<h3 class="title"><?php echo esc_attr( $label ); ?></h3>
<input type="checkbox" name="oe_panels_settings[<?php echo esc_attr( $key ); ?>]" value="true" id="oceanwp-switch-[<?php echo esc_attr( $key ); ?>]" <?php checked( $settings ); ?>>
<?php if ( $desc ) { ?>
<div class="desc"><?php echo esc_attr( $desc ); ?></div>
<?php } ?>
</label>
</div>
<?php endforeach; ?>
<?php submit_button(); ?>
</div>
</form>
<?php do_action( 'oe_theme_panel_after' ); ?>
<div class="divider clr"></div>
<div class="oceanwp-options clr">
<h2 class="oceanwp-title"><?php esc_html_e( 'Getting started', 'ocean-extra' ); ?></h2>
<p class="oceanwp-desc"><?php esc_html_e( 'Take a look in the options of the Customizer and see yourself how easy and quick to customize your website as you wish.', 'ocean-extra' ); ?></p>
<div class="options-inner clr">
<?php
// Loop through options
foreach ( $options as $key => $val ) :
// Var
$label = isset( $val['label'] ) ? $val['label'] : '';
$desc = isset( $val['desc'] ) ? $val['desc'] : '';
$panel = isset( $val['panel'] ) ? $val['panel'] : false;
$id = $key;
if ( true == $panel ) {
$focus = 'panel';
} else {
$focus = 'control';
}
?>
<div class="column-wrap">
<div class="column-inner clr">
<h3 class="title"><?php echo esc_attr( $label ); ?></h3>
<?php if ( $desc ) { ?>
<p class="desc"><?php echo esc_attr( $desc ); ?></p>
<?php } ?>
<div class="bottom-column">
<a class="option-link" href="<?php echo esc_url( admin_url( 'customize.php?autofocus[' . $focus . ']=' . $id . '' ) ); ?>" target="_blank"><?php esc_html_e( 'Go to the option', 'ocean-extra' ); ?></a>
</div>
</div>
</div>
<?php endforeach; ?>
</div><!-- .options-inner -->
</div>
</div>
</div><!-- .oceanwp-settings -->
<?php do_action( 'ocean_theme_panel_after_content' ); ?>
</div>
<?php
}
/**
* Include addons
*
* @since 1.0.0
*/
private static function load_addons() {
// Addons directory location
$dir = OE_PATH . '/includes/panel/';
if ( is_admin() ) {
// Import/Export
require_once $dir . 'import-export.php';
/**
* Since the SDK is initiated within the functions.php of the theme, make sure to check if the SDK is set only after the theme's setup.
*
* @author Vova Feldman
*/
add_action( 'after_setup_theme', 'Ocean_Extra_Theme_Panel::load_addons_after_theme_setup' );
}
// Scripts panel - if minimum PHP 5.6
if ( version_compare( PHP_VERSION, '5.6', '>=' ) ) {
require_once $dir . 'scripts.php';
}
}
/**
* Since the SDK is initiated within the functions.php of the theme, make sure to check if the SDK is set only after the theme's setup.
*
* @author Vova Feldman
*/
public static function load_addons_after_theme_setup() {
if ( function_exists( 'owp_fs' ) ) {
// Don't add extensions and licenses when Freemius is in place.
return;
}
// Addons directory location
$dir = OE_PATH . '/includes/panel/';
// Extensions
require_once $dir . 'extensions.php';
// Licenses
require_once $dir . 'licenses.php';
}
/**
* Theme panel CSS
*
* @since 1.0.0
*/
public static function css( $hook ) {
// Only load scripts when needed
if ( 'toplevel_page_oceanwp-panel' != $hook ) {
return;
}
// CSS
wp_enqueue_style( 'oceanwp-theme-panel', plugins_url( '/assets/css/panel.min.css', __FILE__ ) );
}
}
new Ocean_Extra_Theme_Panel();