Sindbad~EG File Manager
<?php
/**
* Header Builder: Main loader file
*
* @since 5.9.0
* @package Header_Builder
*/
/**
* Main class used for loading all Header Builder files.
*
* @since 5.9.0
* @since 5.9.3 Refactor it as main class.
* @since 5.9.4 Add parameters on HB_Grid declaration.
* @since 5.9.5 Include make internal CSS inside hb_grid_style hook. Run HB_Grid after wp_loaded. Add
* new conditional statement to check if HB is activated from TO. Remove conditional
* statement to check HB is activated from HB admin page.
* @since 5.9.8 Add conditional statements to call hb-grid only when HB is activated and called on
* frontend or preview only. Remove array type operand, check if the variable is array
* or not instead. Includes common.js.
* @since 6.0.0 Remove unused codes.
*/
class MKHB_Main {
/**
* Constructor.
*
* Call some functions to load Header Builder and load all necessary files.
*
* @since 5.9.3
* @since 5.9.5 Manage how to load the walkers for navigation. Join init_load and init_hooks.
* @since 5.9.8 Hook HB_Grid on 'wp'. Previously, it's called on 'wp_loaded'.
* @since 6.0.0 Load all the shortcode files on the frontend. Remove unused files.
* @since 6.0.3 Load SimpleCssMinifier for compressing internal CSS.
*/
public function __construct() {
// Load the constants, helpers, etc.
require_once dirname( __FILE__ ) . '/mkhb-config.php';
require_once HB_INCLUDES_DIR . '/helpers/general.php';
require_once HB_INCLUDES_DIR . '/link-template.php';
require_once HB_INCLUDES_DIR . '/helpers/array.php';
require_once dirname( __FILE__ ) . '/class-mkhb-migration.php';
// Load the nav walkers. Should be loaded here because the class will be used in admin panel too.
require_once HB_INCLUDES_DIR . '/helpers/walkers/class-mkhb-walker-nav-responsive.php';
require_once HB_INCLUDES_DIR . '/helpers/walkers/class-mkhb-walker-nav-burger.php';
// Load main HB files.
require_once HB_INCLUDES_DIR . '/class-mkhb-hooks.php';
require_once HB_INCLUDES_DIR . '/revision.php';
if ( is_user_logged_in() ) {
require_once HB_ADMIN_DIR . '/includes/post.php';
}
require_once HB_INCLUDES_DIR . '/class-mkhb-render.php';
if ( is_admin() ) {
require_once HB_ADMIN_DIR . '/class-mkhb-model.php';
require_once HB_ADMIN_DIR . '/class-mkhb-screen.php';
}
// Call hooks.
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
add_filter( 'submenu_file', array( $this, 'return_query_tag' ) );
add_filter( 'template_include', array( $this, 'preview_template' ), 99 );
add_filter( 'query_vars', array( $this, 'query_vars_filter' ) );
add_filter( 'get_header_style', array( $this, 'header_style' ) );
add_filter( 'body_class', array( $this, 'body_class' ) );
add_action( 'mk_enqueue_styles', array( $this, 'enqueue_styles' ) );
add_action( 'mk_enqueue_styles_minified', array( $this, 'enqueue_styles' ) );
add_action( 'wp', array( $this, 'hb_grid' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
// Load shortcode files on the frontend only.
if ( ! is_admin() ) {
// CSS Minifier lib, used by Jupiter.
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-row.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-column.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-logo.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-shopping-icon.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-textbox.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-search.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-navigation.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-icon.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-social.php';
require_once HB_INCLUDES_DIR . '/shortcodes/mkhb-button.php';
}
}
/**
* Add's "Header Builder" to Jupiter WordPress menu.
*
* @since 5.9.3
*/
public function admin_menu() {
add_submenu_page( THEME_NAME, __( 'Header Builder', 'mk_framework' ), __( 'Header Builder <span class="mk-beta-badge">Beta</span>', 'mk_framework' ), 'edit_theme_options', 'header-builder', '__return_null' );
}
/**
* Add the current page URL as the "return" parameter to our "Jupiter" > Header Builder" submenu.
*
* @since 5.9.3
*/
public function return_query_tag() {
global $submenu;
if ( array_key_exists( 'Jupiter', $submenu ) ) {
return;
}
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$header_builder_url = add_query_arg( 'return', rawurlencode( $current_url ), 'admin.php?page=header-builder' );
if ( ! array_key_exists( 'Jupiter', $submenu ) ) {
return;
}
// The following position needs update if the header builder submenu location changes.
foreach ( $submenu['Jupiter'] as $submenu_key => $submenu_array ) {
if ( 'header-builder' === $submenu_array[2] ) {
break;
}
}
// @todo WordPress not allowed to override global $submenu. Need to find better way.
$submenu['Jupiter'][ $submenu_key ][2] = $header_builder_url; // WPCS: override ok.
}
/**
* Render the "Preview" template when the URL loaded is "?header-builder=preview"
*
* @since 5.9.3
*
* @param string $template The path of the template to include.
*/
public function preview_template( $template ) {
if ( 'navigation-preview' === get_query_var( 'header-builder' ) ) {
return HB_INCLUDES_DIR . '/templates/navigation-preview.php';
}
return $template;
}
/**
* Add header-builder to query vars. This is used for the preview functionality.
*
* @since 5.9.3
*
* @param array $public_query_vars The array of whitelisted query variables.
*/
public function query_vars_filter( $public_query_vars ) {
$public_query_vars[] = 'header-builder-preview-id';
$public_query_vars[] = 'header-builder-preview';
$public_query_vars[] = 'header-builder-preview-nonce';
$public_query_vars[] = 'header-builder-id';
return $public_query_vars;
}
/**
* Override default header style from theme-options.
*
* @since 5.9.3
* @since 5.9.5 Add conditional statement to check if HB is activated from TO. Remove conditional
* statement to check HB is activated from HB admin page.
*
* @param string $style The Theme Options style to override.
*/
public function header_style( $style ) {
// Is HB active from Theme Options.
if ( mkhb_is_to_active() ) {
return 'custom';
}
// Is user open HB in preview mode.
$is_previewing = (bool) get_query_var( 'header-builder-preview' );
if ( $is_previewing ) {
return 'custom';
}
return $style;
}
/**
* Add new class 'mkhb-jupiter' to body.
*
* @since 5.9.5
* @since 5.9.8 Add conditional statement to add hb-jupiter class only if HB is active or
* user open Preview page.
* @since 5.9.5 Rename hb-jupiter into mkhb-jupiter.
*
* @param string $classes Current body class list.
* @return array $classes Latest body class list with additional mkhb-jupiter class.
*/
public function body_class( $classes ) {
// Is user open HB in preview mode.
if ( mkhb_is_to_active() || (bool) get_query_var( 'header-builder-preview' ) ) {
$classes[] = 'mkhb-jupiter';
}
return $classes;
}
/**
* Load our styles when mk_enqueue_styles() is called.
*
* @since 5.9.3
* @since 5.9.4 Add parameters on HB_Grid declaration.
* @since 5.9.5 Include make internal CSS inside hb_grid_style hook.
* @since 5.9.8 Include common.js as common HB Javscript file.
* @since 6.0.0 Remove unused enqueue files. Remove grid style hook.
* @since 6.0.2 Add row and column assets because both of them always used in the FE.
*/
public function enqueue_styles() {
wp_enqueue_style( 'mkhb-render', HB_ASSETS_URI . 'css/mkhb-render.css', array(), THEME_VERSION );
wp_enqueue_style( 'mkhb-row', HB_ASSETS_URI . 'css/mkhb-row.css', array(), THEME_VERSION );
wp_enqueue_style( 'mkhb-column', HB_ASSETS_URI . 'css/mkhb-column.css', array(), THEME_VERSION );
wp_enqueue_script( 'mkhb-render', HB_ASSETS_URI . 'js/mkhb-render.js', array( 'jquery' ), THEME_VERSION, true );
wp_enqueue_script( 'mkhb-column', HB_ASSETS_URI . 'js/mkhb-column.js', array( 'jquery' ), THEME_VERSION, true );
}
/**
* Create global JS variable on admin init.
*
* @since 5.9.5
*/
public function admin_enqueue_scripts() {
?>
<script type="text/javascript">
window.headerBuilderEnabledInThemeOptions = <?php echo (int) mkhb_is_to_active(); ?>;
</script>
<?php
}
/**
* Load and run HB_Grid in Front End on wp_loaded action. Front-End: init -> widgets_init -> wp_loaded.
*
* @since 5.9.5
* @since 5.9.8 Add conditional statement to add mkhb-jupiter class only if HB is active and it's
* frontend page or user open Preview page.
* @since 6.0.0 Run additonal hooks for HB Shopping Icon. Add HB_Render initialize to render all
* shortcodes based on the devices and workspaces.
* @since 6.1.2 Add mkhb_is_po_active in conditional statement based on template
* setting of Page Options.
*/
public function hb_grid() {
if ( ! is_admin() && ( mkhb_is_to_active() || (bool) get_query_var( 'header-builder-preview' ) ) && mkhb_is_po_active() ) {
new MKHB_Render();
}
}
}
new MKHB_Main();
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists