quadmenu/redux/ReduxCore/core/enqueue.php
2025-01-20 16:38:41 +05:30

522 lines
23 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'reduxCoreEnqueue' ) ) {
class reduxCoreEnqueue {
public $parent = null;
private $min = '';
private $timestamp = '';
public function __construct( $parent ) {
$this->parent = $parent;
Redux_Functions::$_parent = $parent;
}
public function init() {
$this->min = Redux_Functions::isMin();
$this->timestamp = ReduxFramework::$_version;
if ( $this->parent->args['dev_mode'] ) {
$this->timestamp .= '.' . time();
}
$this->register_styles();
$this->register_scripts();
add_thickbox();
$this->enqueue_fields();
add_filter("redux/{$this->parent->args['opt_name']}/localize", array('Redux_Helpers', 'localize'));
$this->set_localized_data();
/**
* action 'redux-enqueue-{opt_name}'
*
* @deprecated
*
* @param object $this ReduxFramework
*/
do_action( "redux-enqueue-{$this->parent->args['opt_name']}", $this->parent ); // REMOVE
/**
* action 'redux/page/{opt_name}/enqueue'
*/
do_action( "redux/page/{$this->parent->args['opt_name']}/enqueue" );
}
private function register_styles() {
//*****************************************************************
// Redux Admin CSS
//*****************************************************************
wp_enqueue_style(
'redux-admin-css',
ReduxFramework::$_url . 'assets/css/redux-admin.css',
array(),
$this->timestamp,
'all'
);
//*****************************************************************
// Redux Fields CSS
//*****************************************************************
if ( ! $this->parent->args['dev_mode'] ) {
wp_enqueue_style(
'redux-fields-css',
ReduxFramework::$_url . 'assets/css/redux-fields.css',
array(),
$this->timestamp,
'all'
);
}
//*****************************************************************
// Select2 CSS
//*****************************************************************
Redux_CDN::register_style(
'select2-css',
'//cdn.jsdelivr.net/select2/3.5.2/select2.css',
array(),
'3.5.2',//$this->timestamp,
'all'
);
//*****************************************************************
// Spectrum CSS
//*****************************************************************
//$css_file = 'redux-spectrum.min.css';
//if ($this->parent->args['dev_mode']) {
$css_file = 'redux-spectrum.css';
//}
wp_register_style(
'redux-spectrum-css',
ReduxFramework::$_url . 'assets/css/vendor/spectrum/' . $css_file,
array(),
'1.3.3',
'all'
);
//*****************************************************************
// Elusive Icon CSS
//*****************************************************************
wp_enqueue_style(
'redux-elusive-icon',
ReduxFramework::$_url . 'assets/css/vendor/elusive-icons/elusive-icons.css',
array(),
$this->timestamp,
'all'
);
//*****************************************************************
// QTip CSS
//*****************************************************************
$css_file = 'jquery.qtip.min.css';
if ($this->parent->args['dev_mode']) {
$css_file = 'jquery.qtip.css';
}
wp_enqueue_style(
'qtip-css',
ReduxFramework::$_url . 'assets/css/vendor/qtip/' . $css_file,
array(),
'2.2.0',
'all'
);
//*****************************************************************
// JQuery UI CSS
//*****************************************************************
wp_enqueue_style(
'jquery-ui-css',
apply_filters( "redux/page/{$this->parent->args['opt_name']}/enqueue/jquery-ui-css", ReduxFramework::$_url . 'assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css' ),
array(),
$this->timestamp,
'all'
);
//*****************************************************************
// Iris CSS
//*****************************************************************
wp_enqueue_style( 'wp-color-picker' );
if ( $this->parent->args['dev_mode'] ) {
//*****************************************************************
// Color Picker CSS
//*****************************************************************
wp_register_style(
'redux-color-picker-css',
ReduxFramework::$_url . 'assets/css/color-picker/color-picker.css',
array( 'wp-color-picker' ),
$this->timestamp,
'all'
);
//*****************************************************************
// Media CSS
//*****************************************************************
wp_enqueue_style(
'redux-field-media-css',
ReduxFramework::$_url . 'assets/css/media/media.css',
array(),
time(),
'all'
);
}
//*****************************************************************
// RTL CSS
//*****************************************************************
if ( is_rtl() ) {
wp_enqueue_style(
'redux-rtl-css',
ReduxFramework::$_url . 'assets/css/rtl.css',
array( 'redux-admin-css' ),
$this->timestamp,
'all'
);
}
}
private function register_scripts() {
//*****************************************************************
// JQuery / JQuery UI JS
//*****************************************************************
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-ui-dialog' );
//*****************************************************************
// Select2 Sortable JS
//*****************************************************************
wp_register_script(
'redux-select2-sortable-js',
ReduxFramework::$_url . 'assets/js/vendor/redux.select2.sortable' . $this->min . '.js',
array( 'jquery', 'jquery-ui-sortable' ),
$this->timestamp,
true
);
//*****************************************************************
// Select2 JS
//*****************************************************************
// JWp6 plugin giving us problems. They need to update.
if ( wp_script_is ( 'jquerySelect2' )) {
wp_deregister_script( 'jquerySelect2' );
wp_dequeue_script('jquerySelect2');
wp_dequeue_style('jquerySelect2Style');
}
Redux_CDN::register_script(
'select2-js',
'//cdn.jsdelivr.net/select2/3.5.2/select2' . $this->min . '.js',
array( 'jquery', 'redux-select2-sortable-js' ),
'3.5.2',
true
);
//*****************************************************************
// QTip JS
//*****************************************************************
$js_file = 'jquery.qtip.min.js';
if ($this->parent->args['dev_mode']) {
$js_file = 'jquery.qtip.js';
}
wp_enqueue_script(
'qtip-js',
ReduxFramework::$_url . 'assets/js/vendor/qtip/' . $js_file,
array( 'jquery' ),
'2.2.0',
true
);
//*****************************************************************
// Spectrum JS
//*****************************************************************
$js_file = 'redux-spectrum.min.js';
if ($this->parent->args['dev_mode']) {
$js_file = 'redux-spectrum.js';
}
wp_register_script(
'redux-spectrum-js',
ReduxFramework::$_url . 'assets/js/vendor/spectrum/' . $js_file,
array( 'jquery' ),
'1.3.3',
true
);
$depArray = array( 'jquery' );
//*****************************************************************
// Vendor JS
//*****************************************************************
wp_register_script(
'redux-vendor',
ReduxFramework::$_url . 'assets/js/vendor.min.js',
array( 'jquery' ),
$this->timestamp,
true
);
array_push( $depArray, 'redux-vendor' );
//*****************************************************************
// Redux JS
//*****************************************************************
wp_register_script(
'redux-js',
ReduxFramework::$_url . 'assets/js/redux' . $this->min . '.js',
$depArray,
$this->timestamp,
true
);
wp_enqueue_script(
'webfontloader',
'https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js',
array( 'jquery' ),
'1.5.0',
true
);
}
public function _enqueue_field($field) {
// TODO AFTER GROUP WORKS - Revert IF below
// if( isset( $field['type'] ) && $field['type'] != 'callback' ) {
if ( isset( $field['type'] ) && $field['type'] != 'callback' ) {
$field_class = 'ReduxFramework_' . $field['type'];
/**
* Field class file
* filter 'redux/{opt_name}/field/class/{field.type}
*
* @param string field class file path
* @param array $field field config data
*/
$class_file = apply_filters( "redux/{$this->parent->args['opt_name']}/field/class/{$field['type']}", ReduxFramework::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field );
if ( $class_file ) {
if ( ! class_exists( $field_class ) ) {
if ( file_exists( $class_file ) ) {
require_once $class_file;
}
}
if ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) {
if ( ! isset( $this->parent->options[ $field['id'] ] ) ) {
$this->parent->options[ $field['id'] ] = "";
}
$theField = new $field_class( $field, $this->parent->options[ $field['id'] ], $this->parent );
// Move dev_mode check to a new if/then block
if ( ! wp_script_is( 'redux-field-' . $field['type'] . '-js', 'enqueued' ) && class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) {
$theField->enqueue();
}
if ( method_exists( $field_class, 'localize' ) ) {
$params = $theField->localize( $field );
if ( ! isset( $this->parent->localize_data[ $field['type'] ] ) ) {
$this->parent->localize_data[ $field['type'] ] = array();
}
$this->parent->localize_data[ $field['type'] ][ $field['id'] ] = $theField->localize( $field );
}
unset( $theField );
}
}
}
}
private function enqueue_fields() {
foreach ( $this->parent->sections as $section ) {
if ( isset( $section['fields'] ) ) {
foreach ( $section['fields'] as $field ) {
$this->_enqueue_field( $field );
}
}
}
}
public function get_warnings_and_errors_array() {
// Construct the errors array.
if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['errors'] ) ) {
$theTotal = 0;
$theErrors = array();
foreach ( $this->parent->transients['notices']['errors'] as $error ) {
$theErrors[ $error['section_id'] ]['errors'][] = $error;
if ( ! isset( $theErrors[ $error['section_id'] ]['total'] ) ) {
$theErrors[ $error['section_id'] ]['total'] = 0;
}
$theErrors[ $error['section_id'] ]['total'] ++;
$theTotal ++;
}
$this->parent->localize_data['errors'] = array( 'total' => $theTotal, 'errors' => $theErrors );
unset( $this->parent->transients['notices']['errors'] );
}
// Construct the warnings array.
if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['warnings'] ) ) {
$theTotal = 0;
$theWarnings = array();
foreach ( $this->parent->transients['notices']['warnings'] as $warning ) {
$theWarnings[ $warning['section_id'] ]['warnings'][] = $warning;
if ( ! isset( $theWarnings[ $warning['section_id'] ]['total'] ) ) {
$theWarnings[ $warning['section_id'] ]['total'] = 0;
}
$theWarnings[ $warning['section_id'] ]['total'] ++;
$theTotal ++;
}
unset( $this->parent->transients['notices']['warnings'] );
$this->parent->localize_data['warnings'] = array(
'total' => $theTotal,
'warnings' => $theWarnings
);
}
if ( empty( $this->parent->transients['notices'] ) ) {
unset( $this->parent->transients['notices'] );
}
}
private function set_localized_data() {
if (!empty($this->parent->args['last_tab'])) {
$this->parent->localize_data['last_tab'] = $this->parent->args['last_tab'];
}
$this->parent->localize_data['required'] = $this->parent->required;
$this->parent->localize_data['fonts'] = $this->parent->fonts;
$this->parent->localize_data['required_child'] = $this->parent->required_child;
$this->parent->localize_data['fields'] = $this->parent->fields;
if ( isset( $this->parent->font_groups['google'] ) ) {
$this->parent->localize_data['googlefonts'] = $this->parent->font_groups['google'];
}
if ( isset( $this->parent->font_groups['std'] ) ) {
$this->parent->localize_data['stdfonts'] = $this->parent->font_groups['std'];
}
if ( isset( $this->parent->font_groups['customfonts'] ) ) {
$this->parent->localize_data['customfonts'] = $this->parent->font_groups['customfonts'];
}
$this->parent->localize_data['folds'] = $this->parent->folds;
// Make sure the children are all hidden properly.
foreach ( $this->parent->fields as $key => $value ) {
if ( in_array( $key, $this->parent->fieldsHidden ) ) {
foreach ( $value as $k => $v ) {
if ( ! in_array( $k, $this->parent->fieldsHidden ) ) {
$this->parent->fieldsHidden[] = $k;
$this->parent->folds[ $k ] = "hide";
}
}
}
}
$this->parent->localize_data['fieldsHidden'] = $this->parent->fieldsHidden;
$this->parent->localize_data['options'] = $this->parent->options;
$this->parent->localize_data['defaults'] = $this->parent->options_defaults;
/**
* Save pending string
* filter 'redux/{opt_name}/localize/save_pending
*
* @param string save_pending string
*/
$save_pending = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/save_pending", __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ) );
/**
* Reset all string
* filter 'redux/{opt_name}/localize/reset
*
* @param string reset all string
*/
$reset_all = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset", __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ) );
/**
* Reset section string
* filter 'redux/{opt_name}/localize/reset_section
*
* @param string reset section string
*/
$reset_section = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset_section", __( 'Are you sure? Resetting will lose all custom values in this section.', 'redux-framework' ) );
/**
* Preset confirm string
* filter 'redux/{opt_name}/localize/preset
*
* @param string preset confirm string
*/
$preset_confirm = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/preset", __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ) );
/**
* Import confirm string
* filter 'redux/{opt_name}/localize/import
*
* @param string import confirm string
*/
$import_confirm = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/import", __( 'Your current options will be replaced with the values of this import. Would you like to proceed?', 'redux-framework' ) );
global $pagenow;
$this->parent->localize_data['args'] = array(
'save_pending' => $save_pending,
'reset_confirm' => $reset_all,
'reset_section_confirm' => $reset_section,
'import_section_confirm' => $import_confirm,
'preset_confirm' => $preset_confirm,
'please_wait' => __( 'Please Wait', 'redux-framework' ),
'opt_name' => $this->parent->args['opt_name'],
'slug' => $this->parent->args['page_slug'],
'hints' => $this->parent->args['hints'],
'disable_save_warn' => $this->parent->args['disable_save_warn'],
'class' => $this->parent->args['class'],
'ajax_save' => $this->parent->args['ajax_save'],
'menu_search' => $pagenow . '?page=' . $this->parent->args['page_slug'] . "&tab="
);
$this->parent->localize_data['ajax'] = array(
'console' => __( 'There was an error saving. Here is the result of your action:', 'redux-framework' ),
'alert' => __( 'There was a problem with your action. Please try again or reload the page.', 'redux-framework' ),
);
$this->parent->localize_data = apply_filters( "redux/{$this->parent->args['opt_name']}/localize", $this->parent->localize_data );
$this->get_warnings_and_errors_array();
wp_localize_script(
'redux-js',
'redux',
$this->parent->localize_data
);
wp_enqueue_script( 'redux-js' ); // Enque the JS now
}
}
}