807 lines
21 KiB
PHP
807 lines
21 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Settings
|
||
*
|
||
* @package Menu_Icons
|
||
* @author Dzikri Aziz <kvcrvt@gmail.com>
|
||
*/
|
||
|
||
/**
|
||
* Menu Icons Settings module
|
||
*/
|
||
final class Menu_Icons_Settings {
|
||
|
||
const UPDATE_KEY = 'menu-icons-settings-update';
|
||
|
||
const RESET_KEY = 'menu-icons-settings-reset';
|
||
|
||
const TRANSIENT_KEY = 'menu_icons_message';
|
||
|
||
/**
|
||
* Default setting values
|
||
*
|
||
* @since 0.3.0
|
||
* @var array
|
||
* @access protected
|
||
*/
|
||
protected static $defaults = array(
|
||
'global' => array(
|
||
'icon_types' => array( 'dashicons' ),
|
||
),
|
||
);
|
||
|
||
/**
|
||
* Setting values
|
||
*
|
||
* @since 0.3.0
|
||
* @var array
|
||
* @access protected
|
||
*/
|
||
protected static $settings = array();
|
||
|
||
/**
|
||
* Script dependencies
|
||
*
|
||
* @since 0.9.0
|
||
* @access protected
|
||
* @var array
|
||
*/
|
||
protected static $script_deps = array( 'jquery' );
|
||
|
||
/**
|
||
* Settings init
|
||
*
|
||
* @since 0.3.0
|
||
*/
|
||
public static function init() {
|
||
// Include Menu Icons for Block Editor
|
||
if ( class_exists( '\ThemeIsle\GutenbergMenuIcons' ) ) {
|
||
\ThemeIsle\GutenbergMenuIcons::instance();
|
||
add_action( 'enqueue_block_assets', array( __CLASS__, '_enqueue_font_awesome' ) );
|
||
}
|
||
|
||
/**
|
||
* Allow themes/plugins to override the default settings
|
||
*
|
||
* @since 0.9.0
|
||
*
|
||
* @param array $default_settings Default settings.
|
||
*/
|
||
self::$defaults = apply_filters( 'menu_icons_settings_defaults', self::$defaults );
|
||
|
||
self::$settings = get_option( 'menu-icons', self::$defaults );
|
||
|
||
foreach ( self::$settings as $key => &$value ) {
|
||
if ( 'global' === $key ) {
|
||
// Remove unregistered icon types.
|
||
$value['icon_types'] = array_values(
|
||
array_intersect(
|
||
array_keys( Menu_Icons::get( 'types' ) ),
|
||
array_filter( (array) $value['icon_types'] )
|
||
)
|
||
);
|
||
} else {
|
||
// Backward-compatibility.
|
||
if ( isset( $value['width'] ) && ! isset( $value['svg_width'] ) ) {
|
||
$value['svg_width'] = $value['width'];
|
||
}
|
||
|
||
unset( $value['width'] );
|
||
}
|
||
}
|
||
|
||
unset( $value );
|
||
|
||
/**
|
||
* Allow themes/plugins to override the settings
|
||
*
|
||
* @since 0.9.0
|
||
*
|
||
* @param array $settings Menu Icons settings.
|
||
*/
|
||
self::$settings = apply_filters( 'menu_icons_settings', self::$settings );
|
||
|
||
if ( self::is_menu_icons_disabled_for_menu() ) {
|
||
return;
|
||
}
|
||
|
||
if ( ! empty( self::$settings['global']['icon_types'] ) ) {
|
||
require_once Menu_Icons::get( 'dir' ) . 'includes/picker.php';
|
||
Menu_Icons_Picker::init();
|
||
self::$script_deps[] = 'icon-picker';
|
||
}
|
||
|
||
add_action( 'load-nav-menus.php', array( __CLASS__, '_load_nav_menus' ), 1 );
|
||
add_action( 'wp_ajax_menu_icons_update_settings', array( __CLASS__, '_ajax_menu_icons_update_settings' ) );
|
||
}
|
||
|
||
/**
|
||
* Check if menu icons is disabled for a menu
|
||
*
|
||
* @since 0.8.0
|
||
*
|
||
* @param int $menu_id Menu ID. Defaults to current menu being edited.
|
||
*
|
||
* @return bool
|
||
*/
|
||
public static function is_menu_icons_disabled_for_menu( $menu_id = 0 ) {
|
||
if ( empty( $menu_id ) ) {
|
||
$menu_id = self::get_current_menu_id();
|
||
}
|
||
|
||
// When we're creating a new menu or the recently edited menu
|
||
// could not be found.
|
||
if ( empty( $menu_id ) ) {
|
||
return true;
|
||
}
|
||
|
||
$menu_settings = self::get_menu_settings( $menu_id );
|
||
$is_disabled = ! empty( $menu_settings['disabled'] );
|
||
|
||
return $is_disabled;
|
||
}
|
||
|
||
/**
|
||
* Get ID of menu being edited
|
||
*
|
||
* @since 0.7.0
|
||
* @since 0.8.0 Get the recently edited menu from user option.
|
||
*
|
||
* @return int
|
||
*/
|
||
public static function get_current_menu_id() {
|
||
global $nav_menu_selected_id;
|
||
|
||
if ( ! empty( $nav_menu_selected_id ) ) {
|
||
return $nav_menu_selected_id;
|
||
}
|
||
|
||
if ( is_admin() && isset( $_REQUEST['menu'] ) ) {
|
||
$menu_id = absint( $_REQUEST['menu'] );
|
||
} else {
|
||
$menu_id = absint( get_user_option( 'nav_menu_recently_edited' ) );
|
||
}
|
||
|
||
return $menu_id;
|
||
}
|
||
|
||
/**
|
||
* Get menu settings
|
||
*
|
||
* @since 0.3.0
|
||
*
|
||
* @param int $menu_id
|
||
*
|
||
* @return array
|
||
*/
|
||
public static function get_menu_settings( $menu_id ) {
|
||
$menu_settings = self::get( sprintf( 'menu_%d', $menu_id ) );
|
||
$menu_settings = apply_filters( 'menu_icons_menu_settings', $menu_settings, $menu_id );
|
||
|
||
if ( ! is_array( $menu_settings ) ) {
|
||
$menu_settings = array();
|
||
}
|
||
|
||
return $menu_settings;
|
||
}
|
||
|
||
/**
|
||
* Get setting value
|
||
*
|
||
* @since 0.3.0
|
||
* @return mixed
|
||
*/
|
||
public static function get() {
|
||
$args = func_get_args();
|
||
|
||
return kucrut_get_array_value_deep( self::$settings, $args );
|
||
}
|
||
|
||
/**
|
||
* Prepare wp-admin/nav-menus.php page
|
||
*
|
||
* @since 0.3.0
|
||
* @wp_hook action load-nav-menus.php
|
||
*/
|
||
public static function _load_nav_menus() {
|
||
add_action( 'admin_enqueue_scripts', array( __CLASS__, '_enqueue_assets' ), 99 );
|
||
|
||
/**
|
||
* Allow settings meta box to be disabled.
|
||
*
|
||
* @since 0.4.0
|
||
*
|
||
* @param bool $disabled Defaults to FALSE.
|
||
*/
|
||
$settings_disabled = apply_filters( 'menu_icons_disable_settings', false );
|
||
if ( true === $settings_disabled ) {
|
||
return;
|
||
}
|
||
|
||
self::_maybe_update_settings();
|
||
self::_add_settings_meta_box();
|
||
|
||
add_action( 'admin_notices', array( __CLASS__, '_admin_notices' ) );
|
||
}
|
||
|
||
/**
|
||
* Update settings
|
||
*
|
||
* @since 0.3.0
|
||
*/
|
||
public static function _maybe_update_settings() {
|
||
if ( ! empty( $_POST['menu-icons']['settings'] ) ) {
|
||
check_admin_referer( self::UPDATE_KEY, self::UPDATE_KEY );
|
||
|
||
$redirect_url = self::_update_settings( $_POST['menu-icons']['settings'] ); // Input var okay.
|
||
wp_redirect( $redirect_url );
|
||
} elseif ( ! empty( $_REQUEST[ self::RESET_KEY ] ) ) {
|
||
check_admin_referer( self::RESET_KEY, self::RESET_KEY );
|
||
wp_redirect( self::_reset_settings() );
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Update settings
|
||
*
|
||
* @since 0.7.0
|
||
* @access protected
|
||
*
|
||
* @param array $values Settings values.
|
||
*
|
||
* @return string Redirect URL.
|
||
*/
|
||
protected static function _update_settings( $values ) {
|
||
update_option(
|
||
'menu-icons',
|
||
wp_parse_args(
|
||
kucrut_validate( $values ),
|
||
self::$settings
|
||
)
|
||
);
|
||
set_transient( self::TRANSIENT_KEY, 'updated', 30 );
|
||
|
||
$redirect_url = remove_query_arg(
|
||
array( 'menu-icons-reset' ),
|
||
wp_get_referer()
|
||
);
|
||
|
||
return $redirect_url;
|
||
}
|
||
|
||
/**
|
||
* Reset settings
|
||
*
|
||
* @since 0.7.0
|
||
* @access protected
|
||
* @return string Redirect URL.
|
||
*/
|
||
protected static function _reset_settings() {
|
||
delete_option( 'menu-icons' );
|
||
set_transient( self::TRANSIENT_KEY, 'reset', 30 );
|
||
|
||
$redirect_url = remove_query_arg(
|
||
array( self::RESET_KEY, 'menu-icons-updated' ),
|
||
wp_get_referer()
|
||
);
|
||
|
||
return $redirect_url;
|
||
}
|
||
|
||
/**
|
||
* Settings meta box
|
||
*
|
||
* @since 0.3.0
|
||
* @access private
|
||
*/
|
||
private static function _add_settings_meta_box() {
|
||
add_meta_box(
|
||
'menu-icons-settings',
|
||
__( 'Menu Icons Settings', 'menu-icons' ),
|
||
array( __CLASS__, '_meta_box' ),
|
||
'nav-menus',
|
||
'side',
|
||
'low',
|
||
array()
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Update settings via ajax
|
||
*
|
||
* @since 0.7.0
|
||
* @wp_hook action wp_ajax_menu_icons_update_settings
|
||
*/
|
||
public static function _ajax_menu_icons_update_settings() {
|
||
check_ajax_referer( self::UPDATE_KEY, self::UPDATE_KEY );
|
||
|
||
if ( empty( $_POST['menu-icons']['settings'] ) ) {
|
||
wp_send_json_error();
|
||
}
|
||
|
||
$redirect_url = self::_update_settings( $_POST['menu-icons']['settings'] ); // Input var okay.
|
||
wp_send_json_success( array( 'redirectUrl' => $redirect_url ) );
|
||
}
|
||
|
||
/**
|
||
* Print admin notices
|
||
*
|
||
* @since 0.3.0
|
||
* @wp_hook action admin_notices
|
||
*/
|
||
public static function _admin_notices() {
|
||
$messages = array(
|
||
'updated' => __( '<strong>Menu Icons Settings</strong> have been successfully updated.', 'menu-icons' ),
|
||
'reset' => __( '<strong>Menu Icons Settings</strong> have been successfully reset.', 'menu-icons' ),
|
||
);
|
||
|
||
$message_type = get_transient( self::TRANSIENT_KEY );
|
||
|
||
if ( ! empty( $message_type ) && ! empty( $messages[ $message_type ] ) ) {
|
||
printf(
|
||
'<div class="updated notice is-dismissible"><p>%s</p></div>',
|
||
wp_kses( $messages[ $message_type ], array( 'strong' => true ) )
|
||
);
|
||
}
|
||
|
||
delete_transient( self::TRANSIENT_KEY );
|
||
}
|
||
|
||
/**
|
||
* Settings meta box
|
||
*
|
||
* @since 0.3.0
|
||
*/
|
||
public static function _meta_box() {
|
||
?>
|
||
<div class="taxonomydiv">
|
||
<ul id="menu-icons-settings-tabs" class="taxonomy-tabs add-menu-item-tabs hide-if-no-js">
|
||
<?php foreach ( self::get_fields() as $section ) : ?>
|
||
<?php
|
||
printf(
|
||
'<li><a href="#" title="%s" class="mi-settings-nav-tab" data-type="menu-icons-settings-%s">%s</a></li>',
|
||
esc_attr( $section['description'] ),
|
||
esc_attr( $section['id'] ),
|
||
esc_html( $section['title'] )
|
||
);
|
||
?>
|
||
<?php endforeach; ?>
|
||
<?php
|
||
printf(
|
||
'<li><a href="#" class="mi-settings-nav-tab" data-type="menu-icons-settings-extensions">%s</a></li>',
|
||
esc_html__( 'Extensions', 'menu-icons' )
|
||
);
|
||
?>
|
||
</ul>
|
||
<?php foreach ( self::_get_fields() as $section_index => $section ) : ?>
|
||
<div id="menu-icons-settings-<?php echo esc_attr( $section['id'] ) ?>"
|
||
class="tabs-panel _<?php echo esc_attr( $section_index ) ?>">
|
||
<h4 class="hide-if-js"><?php echo esc_html( $section['title'] ) ?></h4>
|
||
<?php foreach ( $section['fields'] as $field ) : ?>
|
||
<div class="_field">
|
||
<?php
|
||
printf(
|
||
'<label for="%s" class="_main">%s</label>',
|
||
esc_attr( $field->id ),
|
||
esc_html( $field->label )
|
||
);
|
||
// Help text.
|
||
if ( $field->help_text ) :
|
||
printf( '<i>%s</i>', esc_html( $field->help_text ) );
|
||
endif;
|
||
|
||
$field->render();
|
||
?>
|
||
</div>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
<?php endforeach; ?>
|
||
<div id="menu-icons-settings-extensions" class="tabs-panel _extensions">
|
||
<h4 class="hide-if-js"><?php echo esc_html__( 'Extensions', 'menu-icons' ) ?></h4>
|
||
<ul>
|
||
<li><a target="_blank" href="http://wordpress.org/plugins/menu-icons-icomoon/">IcoMoon</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<p class="submitbox button-controls">
|
||
<?php wp_nonce_field( self::UPDATE_KEY, self::UPDATE_KEY ) ?>
|
||
<span class="list-controls">
|
||
<?php
|
||
printf(
|
||
'<a href="%s" title="%s" class="select-all submitdelete">%s</a>',
|
||
esc_url(
|
||
wp_nonce_url(
|
||
admin_url( '/nav-menus.php' ),
|
||
self::RESET_KEY,
|
||
self::RESET_KEY
|
||
)
|
||
),
|
||
esc_attr__( 'Discard all changes and reset to default state', 'menu-icons' ),
|
||
esc_html__( 'Reset', 'menu-icons' )
|
||
);
|
||
?>
|
||
</span>
|
||
|
||
<span class="add-to-menu">
|
||
<span class="spinner"></span>
|
||
<?php
|
||
submit_button(
|
||
__( 'Save Settings', 'menu-icons' ),
|
||
'secondary',
|
||
'menu-icons-settings-save',
|
||
false
|
||
);
|
||
?>
|
||
</span>
|
||
</p>
|
||
<?php
|
||
}
|
||
|
||
/**
|
||
* Get settings sections
|
||
*
|
||
* @since 0.3.0
|
||
* @uses apply_filters() Calls 'menu_icons_settings_sections'.
|
||
* @return array
|
||
*/
|
||
public static function get_fields() {
|
||
$menu_id = self::get_current_menu_id();
|
||
$icon_types = wp_list_pluck( Menu_Icons::get( 'types' ), 'name' );
|
||
|
||
asort( $icon_types );
|
||
|
||
$sections = array(
|
||
'global' => array(
|
||
'id' => 'global',
|
||
'title' => __( 'Global', 'menu-icons' ),
|
||
'description' => __( 'Global settings', 'menu-icons' ),
|
||
'fields' => array(
|
||
array(
|
||
'id' => 'icon_types',
|
||
'type' => 'checkbox',
|
||
'label' => __( 'Icon Types', 'menu-icons' ),
|
||
'choices' => $icon_types,
|
||
'value' => self::get( 'global', 'icon_types' ),
|
||
),
|
||
array(
|
||
'id' => 'fa5_extra_icons',
|
||
'type' => 'textarea',
|
||
'label' => __( 'FA5 Custom Icon Classes', 'menu-icons' ),
|
||
'value' => self::get( 'global', 'fa5_extra_icons' ),
|
||
'help_text' => '( comma separated icons )',
|
||
),
|
||
),
|
||
'args' => array(),
|
||
),
|
||
);
|
||
|
||
if ( ! empty( $menu_id ) ) {
|
||
$menu_term = get_term( $menu_id, 'nav_menu' );
|
||
$menu_key = sprintf( 'menu_%d', $menu_id );
|
||
$menu_settings = self::get_menu_settings( $menu_id );
|
||
|
||
$sections['menu'] = array(
|
||
'id' => $menu_key,
|
||
'title' => __( 'Current Menu', 'menu-icons' ),
|
||
'description' => sprintf(
|
||
__( '"%s" menu settings', 'menu-icons' ),
|
||
apply_filters( 'single_term_title', $menu_term->name )
|
||
),
|
||
'fields' => self::get_settings_fields( $menu_settings ),
|
||
'args' => array( 'inline_description' => true ),
|
||
);
|
||
}
|
||
|
||
return apply_filters( 'menu_icons_settings_sections', $sections, $menu_id );
|
||
}
|
||
|
||
/**
|
||
* Get settings fields
|
||
*
|
||
* @since 0.4.0
|
||
*
|
||
* @param array $values Values to be applied to each field.
|
||
*
|
||
* @uses apply_filters() Calls 'menu_icons_settings_fields'.
|
||
* @return array
|
||
*/
|
||
public static function get_settings_fields( array $values = array() ) {
|
||
$fields = array(
|
||
'hide_label' => array(
|
||
'id' => 'hide_label',
|
||
'type' => 'select',
|
||
'label' => __( 'Hide Label', 'menu-icons' ),
|
||
'default' => '',
|
||
'choices' => array(
|
||
array(
|
||
'value' => '',
|
||
'label' => __( 'No', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => '1',
|
||
'label' => __( 'Yes', 'menu-icons' ),
|
||
),
|
||
),
|
||
),
|
||
'position' => array(
|
||
'id' => 'position',
|
||
'type' => 'select',
|
||
'label' => __( 'Position', 'menu-icons' ),
|
||
'default' => 'before',
|
||
'choices' => array(
|
||
array(
|
||
'value' => 'before',
|
||
'label' => __( 'Before', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'after',
|
||
'label' => __( 'After', 'menu-icons' ),
|
||
),
|
||
),
|
||
),
|
||
'vertical_align' => array(
|
||
'id' => 'vertical_align',
|
||
'type' => 'select',
|
||
'label' => __( 'Vertical Align', 'menu-icons' ),
|
||
'default' => 'middle',
|
||
'choices' => array(
|
||
array(
|
||
'value' => 'super',
|
||
'label' => __( 'Super', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'top',
|
||
'label' => __( 'Top', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'text-top',
|
||
'label' => __( 'Text Top', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'middle',
|
||
'label' => __( 'Middle', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'baseline',
|
||
'label' => __( 'Baseline', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'text-bottom',
|
||
'label' => __( 'Text Bottom', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'bottom',
|
||
'label' => __( 'Bottom', 'menu-icons' ),
|
||
),
|
||
array(
|
||
'value' => 'sub',
|
||
'label' => __( 'Sub', 'menu-icons' ),
|
||
),
|
||
),
|
||
),
|
||
'font_size' => array(
|
||
'id' => 'font_size',
|
||
'type' => 'number',
|
||
'label' => __( 'Font Size', 'menu-icons' ),
|
||
'default' => '1.2',
|
||
'description' => 'em',
|
||
'attributes' => array(
|
||
'min' => '0.1',
|
||
'step' => '0.1',
|
||
),
|
||
),
|
||
'svg_width' => array(
|
||
'id' => 'svg_width',
|
||
'type' => 'number',
|
||
'label' => __( 'SVG Width', 'menu-icons' ),
|
||
'default' => '1',
|
||
'description' => 'em',
|
||
'attributes' => array(
|
||
'min' => '.5',
|
||
'step' => '.1',
|
||
),
|
||
),
|
||
'image_size' => array(
|
||
'id' => 'image_size',
|
||
'type' => 'select',
|
||
'label' => __( 'Image Size', 'menu-icons' ),
|
||
'default' => 'thumbnail',
|
||
'choices' => kucrut_get_image_sizes(),
|
||
),
|
||
);
|
||
|
||
$fields = apply_filters( 'menu_icons_settings_fields', $fields );
|
||
|
||
foreach ( $fields as &$field ) {
|
||
if ( isset( $values[ $field['id'] ] ) ) {
|
||
$field['value'] = $values[ $field['id'] ];
|
||
}
|
||
|
||
if ( ! isset( $field['value'] ) && isset( $field['default'] ) ) {
|
||
$field['value'] = $field['default'];
|
||
}
|
||
}
|
||
|
||
unset( $field );
|
||
|
||
return $fields;
|
||
}
|
||
|
||
/**
|
||
* Get processed settings fields
|
||
*
|
||
* @since 0.3.0
|
||
* @access private
|
||
* @return array
|
||
*/
|
||
private static function _get_fields() {
|
||
if ( ! class_exists( 'Kucrut_Form_Field' ) ) {
|
||
require_once Menu_Icons::get( 'dir' ) . 'includes/library/form-fields.php';
|
||
}
|
||
|
||
$keys = array( 'menu-icons', 'settings' );
|
||
$sections = self::get_fields();
|
||
|
||
foreach ( $sections as &$section ) {
|
||
$_keys = array_merge( $keys, array( $section['id'] ) );
|
||
$_args = array_merge( array( 'keys' => $_keys ), $section['args'] );
|
||
|
||
foreach ( $section['fields'] as &$field ) {
|
||
$field = Kucrut_Form_Field::create( $field, $_args );
|
||
}
|
||
|
||
unset( $field );
|
||
}
|
||
|
||
unset( $section );
|
||
|
||
return $sections;
|
||
}
|
||
|
||
/**
|
||
* Enqueue scripts & styles for Block Icons
|
||
*
|
||
* @since 0.3.0
|
||
* @wp_hook action enqueue_block_assets
|
||
*/
|
||
public static function _enqueue_font_awesome() {
|
||
$url = Menu_Icons::get( 'url' );
|
||
|
||
wp_register_style(
|
||
'font-awesome-5',
|
||
"{$url}css/fontawesome/css/all.min.css"
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Enqueue scripts & styles for Appearance > Menus page
|
||
*
|
||
* @since 0.3.0
|
||
* @wp_hook action admin_enqueue_scripts
|
||
*/
|
||
public static function _enqueue_assets() {
|
||
$url = Menu_Icons::get( 'url' );
|
||
$suffix = kucrut_get_script_suffix();
|
||
|
||
if ( defined( 'MENU_ICONS_SCRIPT_DEBUG' ) && MENU_ICONS_SCRIPT_DEBUG ) {
|
||
$script_url = '//localhost:8081/';
|
||
} else {
|
||
$script_url = $url;
|
||
}
|
||
|
||
wp_enqueue_style(
|
||
'menu-icons',
|
||
"{$url}css/admin{$suffix}.css",
|
||
false,
|
||
Menu_Icons::VERSION
|
||
);
|
||
|
||
wp_enqueue_script(
|
||
'menu-icons',
|
||
"{$script_url}js/admin{$suffix}.js",
|
||
self::$script_deps,
|
||
Menu_Icons::VERSION,
|
||
true
|
||
);
|
||
|
||
$customizer_url = add_query_arg(
|
||
array(
|
||
'autofocus[section]' => 'custom_css',
|
||
'return' => admin_url( 'nav-menus.php' ),
|
||
),
|
||
admin_url( 'customize.php' )
|
||
);
|
||
|
||
/**
|
||
* Allow plugins/themes to filter the settings' JS data
|
||
*
|
||
* @since 0.9.0
|
||
*
|
||
* @param array $js_data JS Data.
|
||
*/
|
||
$menu_current_theme = '';
|
||
$theme = wp_get_theme();
|
||
if ( ! empty( $theme ) ) {
|
||
if ( is_child_theme() && $theme->parent() ) {
|
||
$menu_current_theme = $theme->parent()->get( 'Name' );
|
||
} else {
|
||
$menu_current_theme = $theme->get( 'Name' );
|
||
}
|
||
}
|
||
$upsell_notices = array();
|
||
$box_data = '<div id="menu-icons-sidebar">';
|
||
|
||
if ( ( $menu_current_theme != 'Neve' ) ) {
|
||
$upsell_notices['neve'] = array(
|
||
'content' => wp_sprintf( '<div class="menu-icon-notice-popup-img"><img src="%s"/></div><div class="menu-icon-notice-popup"><h4>%s</h4>%s', plugin_dir_url( __FILE__ ) . '../images/neve-theme.jpg', __( 'Check-out our latest lightweight FREE theme - Neve', 'menu-icons' ), __( 'Neve’s mobile-first approach, compatibility with AMP and popular page-builders makes website building accessible for everyone.', 'menu-icons' ) ),
|
||
'url' => add_query_arg(
|
||
array(
|
||
'theme' => 'neve',
|
||
),
|
||
admin_url( 'theme-install.php' )
|
||
),
|
||
'btn_text' => __( 'Preview Neve', 'menu-icons' ),
|
||
);
|
||
}
|
||
|
||
if ( ! in_array( 'otter-blocks/otter-blocks.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
|
||
$upsell_notices['otter-blocks'] = array(
|
||
'content' => wp_sprintf( '<div class="menu-icon-notice-popup-img"><img src="%s"/></div><div class="menu-icon-notice-popup"><h4>%s</h4>%s', plugin_dir_url( __FILE__ ) . '../images/otter-block.png', __( 'Build professional pages with Otter Blocks', 'menu-icons' ), __( 'Otter is a dynamic collection of page building blocks and templates, covering all the elements you need to build your WordPress site.', 'menu-icons' ) ),
|
||
'url' => add_query_arg(
|
||
array(
|
||
'tab' => 'plugin-information',
|
||
'plugin' => 'otter-blocks',
|
||
'TB_iframe' => true,
|
||
'width' => 772,
|
||
'height' => 551,
|
||
),
|
||
admin_url( 'plugin-install.php' )
|
||
),
|
||
'btn_text' => __( 'Preview Otter Blocks', 'menu-icons' ),
|
||
);
|
||
}
|
||
|
||
if ( ! empty( $upsell_notices ) ) {
|
||
$rand_key = array_rand( $upsell_notices );
|
||
$menu_upgrade_hestia_box_text = $upsell_notices[ $rand_key ]['content'];
|
||
|
||
$box_data .= '<div class="nv-upgrade-notice postbox new-card">';
|
||
$box_data .= wp_kses_post( wpautop( $menu_upgrade_hestia_box_text ) );
|
||
$box_data .= '<a class="button" href="' . $upsell_notices[ $rand_key ]['url'] . '" target="_blank">' . $upsell_notices[ $rand_key ]['btn_text'] . '</a>';
|
||
$box_data .= '</div></div>';
|
||
}
|
||
$js_data = apply_filters(
|
||
'menu_icons_settings_js_data',
|
||
array(
|
||
'text' => array(
|
||
'title' => __( 'Select Icon', 'menu-icons' ),
|
||
'select' => __( 'Select', 'menu-icons' ),
|
||
'remove' => __( 'Remove', 'menu-icons' ),
|
||
'change' => __( 'Change', 'menu-icons' ),
|
||
'all' => __( 'All', 'menu-icons' ),
|
||
'preview' => __( 'Preview', 'menu-icons' ),
|
||
'settingsInfo' => sprintf(
|
||
'<div> %1$s <p>' . esc_html__( 'Please note that the actual look of the icons on the front-end will also be affected by the style of your active theme. You can add your own CSS using %2$s or a plugin such as %3$s if you need to override it.', 'menu-icons' ) . '</p></div>',
|
||
$box_data,
|
||
sprintf(
|
||
'<a href="%s">%s</a>',
|
||
esc_url( $customizer_url ),
|
||
esc_html__( 'the customizer', 'menu-icons' )
|
||
),
|
||
'<a target="_blank" href="https://wordpress.org/plugins/advanced-css-editor/">Advanced CSS Editor</a>'
|
||
),
|
||
),
|
||
'settingsFields' => self::get_settings_fields(),
|
||
'activeTypes' => self::get( 'global', 'icon_types' ),
|
||
'ajaxUrls' => array(
|
||
'update' => add_query_arg( 'action', 'menu_icons_update_settings', admin_url( '/admin-ajax.php' ) ),
|
||
),
|
||
'menuSettings' => self::get_menu_settings( self::get_current_menu_id() ),
|
||
)
|
||
);
|
||
|
||
wp_localize_script( 'menu-icons', 'menuIcons', $js_data );
|
||
}
|
||
}
|