HEX
Server: Apache
System: Linux 95-217-38-122.cprapid.com 5.14.0-427.33.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Aug 30 09:45:56 EDT 2024 x86_64
User: targetplatform (1004)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /mnt/data/targetplatform/public_html/de/wp-content/themes/publisher/includes/publisher-setup.php
<?php


/**
 * Publisher Setup
 */
class Publisher_Setup {

	/**
	 * Envato marketplace item ID
	 */
	const item_id = 15801051;


	function __construct() {

		// Register included BF to loader ( After Plugins )
		add_filter( 'better-framework/loader', array( $this, 'register_better_framework' ), 100 );

		add_filter( 'better-framework/oculus/loader', array( $this, 'register_oculus' ), 90 );

		if ( is_admin() ) {
			add_filter( 'better-framework/product-updater/loader', array( $this, 'register_updater' ), 90 );

			//TODO: display update notice  after plugins.php page update checking process completed
			add_action( 'better-framework/product-pages/plugin-update-check', 'Publisher_Setup::add_update_notice' );
			add_action( 'better-framework/product-pages/product-update-check', 'Publisher_Setup::add_update_notice' );
		}

		// Enable needed sections
		add_filter( 'better-framework/sections', array( $this, 'setup_bf_features' ), 100 );

		// Configs "BF Editor Shortcodes" library
		add_filter( 'better-framework/editor-shortcodes/config', array( $this, 'editor_shortcodes_config' ), 100 );

		// Config Version Compatibility library
		include PUBLISHER_THEME_PATH . 'includes/version-compatibilities.php';
		add_filter( 'better-framework/version-compatibility/config', array(
			$this,
			'config_version_compatibility'
		) );
		add_filter( 'better-framework/version-compatibility/checked', 'Publisher_Setup::after_theme_updated' );

		// load only in admin pages and also BF specific Ajax request
		if ( ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'bf_ajax' ) || publisher_is_admin() ) {
			/*
			 * i18n
			 */
			load_theme_textdomain( 'publisher', get_template_directory() . '/languages' );
		} else {

			if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) {
				add_action( 'admin_bar_menu', array( 'Publisher_Setup', 'append_theme_admin_bar_menu' ), 99 );
			}

			add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_admin_icons' ), 99 );
		}

		// Option options
		include PUBLISHER_THEME_PATH . 'includes/options/panel.php';


		// Meta box options
		include PUBLISHER_THEME_PATH . 'includes/options/metabox.php';

		// Category meta box
		include PUBLISHER_THEME_PATH . 'includes/options/category.php';

		// User Meta box options
		include PUBLISHER_THEME_PATH . 'includes/options/user.php';

		// Tag options
		include PUBLISHER_THEME_PATH . 'includes/options/tag.php';

		// Menus options
		include PUBLISHER_THEME_PATH . 'includes/options/menu.php';

		// Widgets options
		include PUBLISHER_THEME_PATH . 'includes/options/widget.php';

		// Init translation texts
		include PUBLISHER_THEME_PATH . 'includes/options/translation.php';

		// Init Ad Locations
		include PUBLISHER_THEME_PATH . 'includes/ads/ads.php';

		// Init Newsletter Location
		include PUBLISHER_THEME_PATH . 'includes/newsletters/init.php';

		// Active and new shortcodes
		add_filter( 'better-framework/shortcodes', array( $this, 'include_shortcode' ), 9 );
		add_filter( 'better-framework/shortcodes', array( $this, 'setup_shortcodes' ), 100 );

		// Add custom items to editor shortcodes menu
		add_filter( 'better-framework/editor-shortcodes/shortcodes-array', array(
			$this,
			'setup_editor_shortcodes_menu'
		), 10 );

		// Initialize no duplicate posts option
		add_action( 'publisher-theme-core/duplicate-posts/config', array( $this, 'setup_no_duplicate_posts' ) );

		// Config shortcodes placeholder
		add_filter( 'publisher-theme-core/shortcodes-placeholder/config', array( $this, 'shortcodes_placeholder' ) );

		// Inits WooCommerce functionality
		if ( function_exists( 'is_woocommerce' ) ) {
			include PUBLISHER_THEME_PATH . 'includes/woocommerce/publisher-wc.php';
		}

		if ( is_user_logged_in() ) {
			add_action( 'better-framework/product-pages/register-menu/params', array(
				$this,
				'set_adminbar_visibility'
			) );
		}

		// Breadcrumb config
		add_filter( 'better-framework/breadcrumb/options', array( $this, 'bf_breadcrumb_config' ), 100 );

		// Register multi level mega menus
		add_action( 'better-framework/menu/walker/init', 'Publisher_Setup::setup_mega_menus', 1, 2 );

		add_filter( 'better-framework/template-compatibility/config', 'Publisher_Setup::enable_template_compatibility' );
		add_filter( 'better-framework/product-pages/system-report/theme-compatibility', 'Publisher_Setup::enable_template_compatibility' );
		add_action( 'better-framework/template-compatibility/done', 'Publisher_Setup::add_template_compatibility_up2date_message' );

		// Config widget & mega-menu cache in booster
		add_filter( 'better-framework/booster/widgets/config', 'Publisher_Setup::widgets_list2cache', 1 );
		add_filter( 'better-framework/booster/mega-menu/config', 'Publisher_Setup::mega_menus_list2cache', 1 );
		add_filter( 'better-framework/booster/shortcodes/config', 'Publisher_Setup::shortcodes_list2cache', 1 );

		add_filter( 'better-framework/booster/widgets/cache', 'Publisher_Setup::disable_widget_caching', 15, 4 );
		add_filter( 'better-framework/booster/shortcodes/cache', 'Publisher_Setup::disable_shortcode_caching', 15, 2 );


		if ( ! class_exists( 'Publisher_Gutenberg_Compatibility' ) ) {

			include PUBLISHER_THEME_PATH . 'includes/gutenberg-compatibility.php';
		}

		Publisher_Gutenberg_Compatibility::run();

		// bbPress customizations
		if ( class_exists( 'bbpress' ) ) {
			include PUBLISHER_THEME_PATH . 'includes/bbpress/class-publisher-bbpress.php';
			new Publisher_bbPress();
		}

	} // __construct


	public function enqueue_admin_icons() {

		if ( ! is_user_logged_in() ) {
			return;
		}

		bf_enqueue_style( 'better-studio-admin-icon' );
	}


	/**
	 * Set publisher admin bar menu visibility status
	 *
	 * @param array $menu
	 *
	 * @return array
	 */
	public function set_adminbar_visibility( $menu ) {

		if ( $menu['on_admin_bar'] ) {
			$menu['on_admin_bar'] = publisher_get_option( 'display_publisher_adminbar_menu' );
		}

		return $menu;
	}


	/**
	 * Adds Publisher menu to WP Navbar
	 *
	 * @param $wp_admin_bar
	 */
	public static function append_theme_admin_bar_menu( $wp_admin_bar ) {

		if ( ! publisher_get_option( 'display_publisher_adminbar_menu' ) ) {
			return;
		}


		/**
		 * @var WP_Admin_Bar $wp_admin_bar
		 */
		$plugins_update_badge = '';
		$update_status        = get_option( 'bs-product-plugins-status' );
		if ( ! empty( $update_status->number ) ) {
			$plugins_update_badge = '&nbsp;<span class="bs-admin-menu-badge"><span class="plugin-count">'
			                        . number_format_i18n( $update_status->number ) .
			                        '</span></span>';
		}

		{
			$icon       = publisher_white_label_get_option( 'theme_icon' );
			$icon_class = '';

			switch ( $icon['type'] ) {

				case 'bs-icons':
					$icon_class = 'bsfii';
					break;

				case 'fontawesome':
					$icon_class = 'fai';
					break;
			}
		}

		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-welcome-parent',
				'title'  => '<p class="bf-admin-bar-icon-bs-product-pages-welcome" style="margin-' . ( is_rtl() ? 'left' : 'right' ) . ': 6px;vertical-align: middle;line-height: 21px;display: inline-block;">' . bf_get_icon_tag( $icon, $icon_class ) . '</p>' .
				            publisher_white_label_get_option( 'publisher' ) . $plugins_update_badge,
				'href'   => admin_url( 'admin.php?page=bs-product-pages-welcome' ),
				'parent' => false,
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-welcome',
				'title'  => __( 'Welcome', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=bs-product-pages-welcome' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-install-plugin',
				'title'  => __( 'Plugins', 'publisher' ) . $plugins_update_badge,
				'href'   => admin_url( 'admin.php?page=bs-product-pages-install-plugin' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-install-demo',
				'title'  => __( 'Install Demos', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=bs-product-pages-install-demo' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'publisher-page-templates',
				'title'  => __( 'Page Templates', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=better-studio/page-templates' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'better-studio/' . publisher_white_label_get_option( 'theme_slug' ),
				'title'  => __( 'Theme Options', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=' . 'better-studio/' . publisher_white_label_get_option( 'theme_slug' ) ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'better-studio/translations/theme-translation',
				'title'  => __( 'Theme Translation', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=better-studio/translations/theme-translation' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-support',
				'title'  => __( 'Support', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=bs-product-pages-support' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);
		$wp_admin_bar->add_node( array(
				'id'     => 'bs-product-pages-report',
				'title'  => __( 'System Report', 'publisher' ),
				'href'   => admin_url( 'admin.php?page=bs-product-pages-report' ),
				'parent' => 'bs-product-pages-welcome-parent',
			)
		);

	}


	/**
	 * Get a WP_Theme object for a theme
	 *
	 * @return WP_Theme
	 */
	public static function get_wp_theme_object() {

		$theme = wp_get_theme();
		if ( '' != $theme->get( 'Template' ) ) {
			$theme = wp_get_theme( $theme->get( 'Template' ) );
		}

		return $theme;
	}


	/**
	 * Get active theme version number
	 *
	 * @param array $config
	 *
	 * @return array
	 */
	public function config_version_compatibility( $config ) {

		$config['products']['publisher'] = array(
			'active-version' => self::get_wp_theme_object()->get( 'Version' )
		);

		$config['compatibility-actions']['publisher'] = array(
			'1.1'   => 'publisher_version_1_1_compatibility',
			'1.4'   => 'publisher_version_1_4_compatibility',
			'1.5'   => 'publisher_version_1_5_compatibility',
			'1.6'   => 'publisher_version_1_6_compatibility',
			'1.7.0' => 'publisher_version_1_7_compatibility',
			'1.7.1' => 'publisher_version_1_7_1_compatibility',
			'1.7.5' => 'publisher_version_1_7_5_compatibility',
			'1.8.0' => 'publisher_version_1_8_0_compatibility',
			'1.8.4' => 'publisher_version_1_8_4_compatibility',
			'1.9.0' => 'publisher_version_1_9_0_compatibility',
			'3.0.1' => 'publisher_version_3_0_1_compatibility',
			'5.0.0' => 'publisher_version_5_0_compatibility',
			'7.5.0' => 'publisher_version_7_5_0_compatibility',
			'7.5.1' => 'publisher_version_7_5_1_compatibility',
			'7.6.0' => 'publisher_version_7_6_0_compatibility',
		);

		return $config;
	}


	/**
	 * Registers included version of BF to BF loader
	 *
	 * @param $frameworks
	 *
	 * @return array
	 */
	function register_better_framework( $frameworks ) {

		$frameworks[] = array(
			'version' => '3.14.0',
			'path'    => PUBLISHER_THEME_PATH . 'includes/libs/better-framework/',
			'uri'     => PUBLISHER_THEME_URI . 'includes/libs/better-framework/',
		);

		return $frameworks;
	}


	/**
	 * Register oculus library
	 *
	 * @param array $libs
	 *
	 * @return array
	 */
	function register_oculus( $libs ) {

		$libs[] = array(
			'version' => '1.2.0',
			'path'    => PUBLISHER_THEME_PATH . 'includes/libs/better-framework/oculus/',
			'uri'     => PUBLISHER_THEME_URI . 'includes/libs/better-framework/oculus/',
		);

		return $libs;
	}


	/**
	 * Register updater library
	 *
	 * @param array $libs
	 *
	 * @return array
	 */
	function register_updater( $libs ) {

		$libs[] = array(
			'version' => '1.0.1',
			'path'    => PUBLISHER_THEME_PATH . 'includes/libs/better-product-updater/',
			'uri'     => PUBLISHER_THEME_URI . 'includes/libs/better-product-updater/'
		);

		return $libs;
	}


	/**
	 * Setups features of BetterFramework
	 *
	 * @param $features
	 *
	 * @return array
	 */
	function setup_bf_features( $features ) {

		/**
		 * 1. => BetterFramework Features
		 */
		$features['admin_panel']            = true;
		$features['meta_box']               = true;
		$features['taxonomy_meta_box']      = true;
		$features['load_in_frontend']       = false;
		$features['better-menu']            = true;
		$features['custom-css-pages']       = true;
		$features['user-meta-box']          = true;
		$features['custom-css-users']       = true;
		$features['vc-extender']            = true;
		$features['booster']                = true;
		$features['content-injector']       = true;
		$features['json-ld']                = true;
		$features['product-pages']          = is_admin() || ( defined( 'DOING_CRON' ) && DOING_CRON );
		$features['product-updater']        = is_admin() || ( defined( 'DOING_CRON' ) && DOING_CRON );
		$features['version-compatibility']  = true;
		$features['template-compatibility'] = is_admin();
		$features['editor-shortcodes']      = true;
		$features['fonts-manager']          = true;

		return $features;
	}

	/**
	 * Include shortcode dependencies.
	 *
	 * @hooked better-framework/shortcodes
	 *
	 * @param array $shortcodes
	 *
	 * @since  7.8.0
	 * @return array
	 */
	public function include_shortcode( $shortcodes ) {

		if ( ! class_exists( 'Publisher_Shortcode' ) ) {

			include PUBLISHER_THEME_PATH . 'includes/shortcodes/publisher-shortcode.php';
		}

		return $shortcodes;
	}

	/**
	 * Setups Shortcodes
	 *
	 * 6. => Setup Shortcodes
	 *
	 * @param $shortcodes
	 *
	 * @return array
	 */
	function setup_shortcodes( $shortcodes ) {

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-highlight-colors.php';
		$shortcodes['bs-highlight-bg']    = array(
			'shortcode_class' => 'Publisher_Highlight_BG_Shortcode',
		);
		$shortcodes['bs-highlight-color'] = array(
			'shortcode_class' => 'Publisher_Highlight_Color_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-modern-grid-listings.php';
		$shortcodes['bs-modern-grid-listing-1']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_1_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-2']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_2_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-3']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_3_Shortcode',
			'widget_class'    => 'Publisher_Modern_Grid_Listing_3_Widget',
		);
		$shortcodes['bs-modern-grid-listing-4']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_4_Shortcode',
			'widget_class'    => 'Publisher_Modern_Grid_Listing_4_Widget',
		);
		$shortcodes['bs-modern-grid-listing-5']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_5_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-6']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_6_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-7']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_7_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-8']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_8_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-9']  = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_9_Shortcode',
		);
		$shortcodes['bs-modern-grid-listing-10'] = array(
			'shortcode_class' => 'Publisher_Modern_Grid_Listing_10_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-mix-listings.php';
		$shortcodes['bs-mix-listing-1-1'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_1_1_Shortcode',
		);
		$shortcodes['bs-mix-listing-1-2'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_1_2_Shortcode',
		);
		$shortcodes['bs-mix-listing-1-3'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_1_3_Shortcode',
		);
		$shortcodes['bs-mix-listing-1-4'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_1_4_Shortcode',
		);
		$shortcodes['bs-mix-listing-2-1'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_2_1_Shortcode',
		);
		$shortcodes['bs-mix-listing-2-2'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_2_2_Shortcode',
		);
		$shortcodes['bs-mix-listing-3-1'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_3_1_Shortcode',
			'widget_class'    => 'Publisher_Mix_Listing_3_1_Widget',
		);
		$shortcodes['bs-mix-listing-3-2'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_3_2_Shortcode',
			'widget_class'    => 'Publisher_Mix_Listing_3_2_Widget',
		);
		$shortcodes['bs-mix-listing-3-3'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_3_3_Shortcode',
			'widget_class'    => 'Publisher_Mix_Listing_3_3_Widget',
		);
		$shortcodes['bs-mix-listing-3-4'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_3_4_Shortcode',
			'widget_class'    => 'Publisher_Mix_Listing_3_4_Widget',
		);
		$shortcodes['bs-mix-listing-4-1'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_1_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-2'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_2_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-3'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_3_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-4'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_4_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-5'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_5_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-6'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_6_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-7'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_7_Shortcode',
		);
		$shortcodes['bs-mix-listing-4-8'] = array(
			'shortcode_class' => 'Publisher_Mix_Listing_4_8_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-blog-listings.php';
		$shortcodes['bs-blog-listing-1'] = array(
			'shortcode_class' => 'Publisher_Blog_Listing_1_Shortcode',
		);
		$shortcodes['bs-blog-listing-2'] = array(
			'shortcode_class' => 'Publisher_Blog_Listing_2_Shortcode',
		);
		$shortcodes['bs-blog-listing-3'] = array(
			'shortcode_class' => 'Publisher_Blog_Listing_3_Shortcode',
		);
		$shortcodes['bs-blog-listing-4'] = array(
			'shortcode_class' => 'Publisher_Blog_Listing_4_Shortcode',
		);
		$shortcodes['bs-blog-listing-5'] = array(
			'shortcode_class' => 'Publisher_Blog_Listing_5_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-classic-listings.php';
		$shortcodes['bs-classic-listing-1'] = array(
			'shortcode_class' => 'Publisher_Classic_Listing_1_Shortcode',
		);
		$shortcodes['bs-classic-listing-2'] = array(
			'shortcode_class' => 'Publisher_Classic_Listing_2_Shortcode',
		);
		$shortcodes['bs-classic-listing-3'] = array(
			'shortcode_class' => 'Publisher_Classic_Listing_3_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-grid-listings.php';
		$shortcodes['bs-grid-listing-1'] = array(
			'shortcode_class' => 'Publisher_Grid_Listing_1_Shortcode',
		);
		$shortcodes['bs-grid-listing-2'] = array(
			'shortcode_class' => 'Publisher_Grid_Listing_2_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-thumbnail-listings.php';
		$shortcodes['bs-thumbnail-listing-1'] = array(
			'shortcode_class' => 'Publisher_Thumbnail_Listing_1_Shortcode',
			'widget_class'    => 'Publisher_Thumbnail_Listing_1_Widget',
		);
		$shortcodes['bs-thumbnail-listing-2'] = array(
			'shortcode_class' => 'Publisher_Thumbnail_Listing_2_Shortcode',
			'widget_class'    => 'Publisher_Thumbnail_Listing_2_Widget',
		);
		$shortcodes['bs-thumbnail-listing-3'] = array(
			'shortcode_class' => 'Publisher_Thumbnail_Listing_3_Shortcode',
			'widget_class'    => 'Publisher_Thumbnail_Listing_3_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-text-listings.php';
		$shortcodes['bs-text-listing-1'] = array(
			'shortcode_class' => 'Publisher_Text_Listing_1_Shortcode',
			'widget_class'    => 'Publisher_Text_Listing_1_Widget',
		);
		$shortcodes['bs-text-listing-2'] = array(
			'shortcode_class' => 'Publisher_Text_Listing_2_Shortcode',
			'widget_class'    => 'Publisher_Text_Listing_2_Widget',
		);
		$shortcodes['bs-text-listing-3'] = array(
			'shortcode_class' => 'Publisher_Text_Listing_3_Shortcode',
			'widget_class'    => 'Publisher_Text_Listing_3_Widget',
		);
		$shortcodes['bs-text-listing-4'] = array(
			'shortcode_class' => 'Publisher_Text_Listing_4_Shortcode',
			'widget_class'    => 'Publisher_Text_Listing_4_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-tall-listings.php';
		$shortcodes['bs-tall-listing-1'] = array(
			'shortcode_class' => 'Publisher_Tall_Listing_1_Shortcode',
		);
		$shortcodes['bs-tall-listing-2'] = array(
			'shortcode_class' => 'Publisher_Tall_Listing_2_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-sliders.php';
		$shortcodes['bs-slider-1'] = array(
			'shortcode_class' => 'Publisher_Slider_1_Shortcode',
		);
		$shortcodes['bs-slider-2'] = array(
			'shortcode_class' => 'Publisher_Slider_2_Shortcode',
		);
		$shortcodes['bs-slider-3'] = array(
			'shortcode_class' => 'Publisher_Slider_3_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-boxes.php';
		$shortcodes['bs-box-1'] = array(
			'shortcode_class' => 'Publisher_Box_1_Shortcode',
			'widget_class'    => 'Publisher_Box_1_Widget',
		);
		$shortcodes['bs-box-2'] = array(
			'shortcode_class' => 'Publisher_Box_2_Shortcode',
			'widget_class'    => 'Publisher_Box_2_Widget',
		);
		$shortcodes['bs-box-3'] = array(
			'shortcode_class' => 'Publisher_Box_3_Shortcode',
			'widget_class'    => 'Publisher_Box_3_Widget',
		);
		$shortcodes['bs-box-4'] = array(
			'shortcode_class' => 'Publisher_Box_4_Shortcode',
			'widget_class'    => 'Publisher_Box_4_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-social-share.php';
		$shortcodes['bs-social-share'] = array(
			'shortcode_class' => 'Publisher_Social_Share_Shortcode',
			'widget_class'    => 'Publisher_Social_Share_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-recent-posts.php';
		$shortcodes['bs-recent-posts'] = array(
			'shortcode_class' => 'Publisher_Recent_Posts_Shortcode',
			'widget_class'    => 'Publisher_Recent_Posts_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-about.php';
		$shortcodes['bs-about'] = array(
			'shortcode_class' => 'Publisher_About_Shortcode',
			'widget_class'    => 'Publisher_About_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-popular-categories.php';
		$shortcodes['bs-popular-categories'] = array(
			'shortcode_class' => 'Publisher_Popular_Categories_Shortcode',
			'widget_class'    => 'Publisher_Popular_Categories_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-newsletter-mailchimp.php';
		$shortcodes['bs-newsletter-mailchimp'] = array(
			'shortcode_class' => 'Publisher_Newsletter_MailChimp_Shortcode',
			'widget_class'    => 'Publisher_Newsletter_MailChimp_Widget',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-newsletter-feedburner.php';
		$shortcodes['bs-subscribe-newsletter'] = array(
			'shortcode_class' => 'Publisher_Subscribe_Newsletter_Shortcode',
			'widget_class'    => 'Publisher_Subscribe_Newsletter_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-flickr.php';
		$shortcodes['bs-flickr'] = array(
			'shortcode_class' => 'Publisher_Flickr_Shortcode',
			'widget_class'    => 'Publisher_Flickr_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-likebox.php';
		$shortcodes['bs-likebox'] = array(
			'shortcode_class' => 'Publisher_Likebox_Shortcode',
			'widget_class'    => 'Publisher_Likebox_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-dribbble.php';
		$shortcodes['bs-dribbble'] = array(
			'shortcode_class' => 'Publisher_Dribbble_Shortcode',
			'widget_class'    => 'Publisher_Dribbble_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-google-plus.php';
		$shortcodes['bs-google-plus'] = array(
			'shortcode_class' => 'Publisher_Google_Plus_Shortcode',
			'widget_class'    => 'Publisher_Google_Plus_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-embed.php';
		$shortcodes['bs-embed'] = array(
			'shortcode_class' => 'Publisher_Embed_Shortcode',
			'widget_class'    => 'Publisher_Embed_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-instagram.php';
		$shortcodes['bs-instagram'] = array(
			'shortcode_class' => 'Publisher_Instagram_Shortcode',
			'widget_class'    => 'Publisher_Instagram_Widget',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-login.php';
		$shortcodes['bs-login'] = array(
			'shortcode_class' => 'Publisher_Login_Shortcode',
			'widget_class'    => 'Publisher_Login_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/better-newsticker.php';
		$shortcodes['better-newsticker'] = array(
			'shortcode_class' => 'Better_Newsticker_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-text.php';
		$shortcodes['bs-text'] = array(
			'shortcode_class' => 'Publisher_Text_Shortcode',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-heading.php';
		$shortcodes['bs-heading'] = array(
			'shortcode_class' => 'Publisher_Heading_Shortcode',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/tabs.php';
		$shortcodes['tab']  = array(
			'shortcode_class'   => 'Publisher_Tab_Shortcode',
			'skip_page_builder' => true,
		);
		$shortcodes['tabs'] = array(
			'shortcode_class' => 'Publisher_Tabs_Shortcode',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/accordions.php';
		$shortcodes['accordion']  = array(
			'shortcode_class'   => 'Publisher_Accordion_Panel_Shortcode',
			'skip_page_builder' => true,
		);
		$shortcodes['accordions'] = array(
			'shortcode_class' => 'Publisher_Accordions_Shortcode',
		);

		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-white-space.php';
		$shortcodes['bs-white-space'] = array(
			'shortcode_class' => 'Publisher_White_Space_Shortcode',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/listing-shortcodes/bs-user-listing.php';
		$shortcodes['bs-user-listing-1'] = array(
			'shortcode_class' => 'Publisher_User_Listing_1_Shortcode',
			'widget_class'    => 'Publisher_User_Listing_1_Widget',
		);
		$shortcodes['bs-user-listing-2'] = array(
			'shortcode_class' => 'Publisher_User_Listing_2_Shortcode',
			'widget_class'    => 'Publisher_User_Listing_2_Widget',
		);
		$shortcodes['bs-user-listing-3'] = array(
			'shortcode_class' => 'Publisher_User_Listing_3_Shortcode',
			'widget_class'    => 'Publisher_User_Listing_3_Widget',
		);
		$shortcodes['bs-user-listing-4'] = array(
			'shortcode_class' => 'Publisher_User_Listing_4_Shortcode',
			'widget_class'    => 'Publisher_User_Listing_4_Widget',
		);
		$shortcodes['bs-user-listing-5'] = array(
			'shortcode_class' => 'Publisher_User_Listing_5_Shortcode',
			'widget_class'    => 'Publisher_User_Listing_5_Widget',
		);


		include PUBLISHER_THEME_PATH . 'includes/shortcodes/bs-push-notification.php';
		$shortcodes['bs-push-notification'] = array(
			'shortcode_class' => 'Publisher_Push_Notification_Shortcode',
			'widget_class'    => 'Publisher_Push_Notification_Widget',
		);


		return $shortcodes;
	}


	/**
	 * Callback: Activate BetterStudio Duplicate Posts
	 *
	 * @param $active_pages
	 *
	 * @return array
	 */
	function setup_no_duplicate_posts( $active_pages ) {

		if ( publisher_get_option( 'bs_remove_duplicate_posts_full' ) ) {
			$active_pages[] = 'full';
		} else {

			if ( publisher_get_option( 'bs_remove_duplicate_posts' ) ) {
				$active_pages[] = 'home';
			}

			if ( publisher_get_option( 'bs_remove_duplicate_posts_categories' ) ) {
				$active_pages[] = 'categories';
			}

			if ( publisher_get_option( 'bs_remove_duplicate_posts_tags' ) ) {
				$active_pages[] = 'tags';
			}

		}

		return $active_pages;
	}


	/**
	 * Configs BF Editor Shortcodes library
	 *
	 * @param $config
	 *
	 * @return array
	 */
	public function editor_shortcodes_config( $config ) {

		// dynamic styles
		$config['editor-dynamic-style'][] = PUBLISHER_THEME_PATH . 'includes/dynamics/style-dynamic-init.php';

		// Publisher icon
		$config['icon']       = publisher_white_label_get_option( 'theme_icon' );
		$config['icon-color'] = publisher_get_option( 'theme_color' );

		// name
		$config['name'] = publisher_white_label_get_option( 'publisher' );

		// Sizes
		$config['layout-2-col'] = publisher_get_option( 'layout-2-col' );
		$config['layout-3-col'] = publisher_get_option( 'layout-3-col' );

		// Show sidebars
		$config['layouts'] = publisher_get_option( 'advanced_post_editor_sidebars' );

		return $config;

	}


	/**
	 * Callback: configs shortcodes placeholder for theme
	 * Filter: better-template/shortcodes-placeholder/config
	 *
	 * @param $config
	 *
	 * @return array
	 */
	public function shortcodes_placeholder( $config ) {

		$plugins_url = admin_url( 'admin.php?page=bs-product-pages-install-plugin' );

		$notice = __( 'Please install "<b>%s</b>" Plugin from <a href="%s">Plugin Installer</a> to show this shortcode.', 'publisher' );

		$special_sidebars = array();


		$config['better-social-counter'] = array(
			'id'               => 'better-social-counter',
			'notice_long'      => sprintf( $notice, __( 'Better Social Counter', 'publisher' ), $plugins_url ),
			bf_trans_allowed_html(),
			'special_sidebars' => $special_sidebars,
		);
		$config['better-social-banner']  = array(
			'id'               => 'better-social-banner',
			'notice_long'      => sprintf( $notice, __( 'Better Social Counter', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);


		$config['BetterWeather']        = array(
			'id'               => 'BetterWeather',
			'notice_long'      => sprintf( $notice, __( 'Better Weather', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['BetterWeather-inline'] = array(
			'id'               => 'BetterWeather-inline',
			'notice_long'      => sprintf( $notice, __( 'Better Weather', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);


		$config['better-ads'] = array(
			'id'               => 'better-ads',
			'notice_long'      => sprintf( $notice, __( 'Better Ads Manager', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);


		$config['better-post-views'] = array(
			'id'               => 'better-post-views',
			'notice_long'      => sprintf( $notice, __( 'Better Post Views', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);


		$config['bs-youtube-playlist-1'] = array(
			'id'               => 'bs-youtube-playlist-1',
			'notice_long'      => sprintf( $notice, __( 'Better Playlist', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bs-youtube-playlist-2'] = array(
			'id'               => 'bs-youtube-playlist-2',
			'notice_long'      => sprintf( $notice, __( 'Better Playlist', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bs-vimeo-playlist-1']   = array(
			'id'               => 'bs-vimeo-album-1',
			'notice_long'      => sprintf( $notice, __( 'Better Playlist', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bs-vimeo-playlist-2']   = array(
			'id'               => 'bs-vimeo-album-2',
			'notice_long'      => sprintf( $notice, __( 'Better Playlist', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);

		$config['bs-products-1'] = array(
			'id'               => 'bs-products-1',
			'notice_long'      => sprintf( $notice, __( 'WooCommerce', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);

		$config['bsfp-cryptocurrency']           = array(
			'id'               => 'bsfp-cryptocurrency',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-cryptocurrency-table']     = array(
			'id'               => 'bsfp-cryptocurrency-table',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-cryptocurrency-events']    = array(
			'id'               => 'bsfp-cryptocurrency-events',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-cryptocurrency-converter'] = array(
			'id'               => 'bsfp-cryptocurrency-converter',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-stockmarket']              = array(
			'id'               => 'bsfp-stockmarket',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-stockmarket-table']        = array(
			'id'               => 'bsfp-stockmarket-table',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-currency']                 = array(
			'id'               => 'bsfp-currency',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);
		$config['bsfp-currency-converter']       = array(
			'id'               => 'bsfp-currency-converter',
			'notice_long'      => sprintf( $notice, __( 'Financial Pack', 'publisher' ), $plugins_url ),
			'special_sidebars' => $special_sidebars,
		);

		return $config;
	}


	/**
	 * Configouration for BF Breadcrumb
	 *
	 * @hooked better-framework/breadcrumb/options
	 *
	 * @param $options
	 *
	 * @return array
	 */
	public function bf_breadcrumb_config( $options ) {

		$options['labels'] = array(
			'aria_label'          => 'Breadcrumbs',
			'home'                => publisher_translation_get( 'bc_home' ),
			'error_404'           => publisher_translation_get( 'bc_404' ),
			'archives'            => publisher_translation_get( 'bc_archives' ),
			'search'              => publisher_translation_get( 'bc_search' ),
			'paged'               => publisher_translation_get( 'bc_paged' ),
			'archive_minute'      => publisher_translation_get( 'bc_archive_minute' ),
			'archive_week'        => publisher_translation_get( 'bc_archive_week' ),
			'archive_minute_hour' => '%s',
			'archive_hour'        => '%s',
			'archive_day'         => '%s',
			'archive_month'       => '%s',
			'archive_year'        => '%s',
		);

		$options['show_date_in_post'] = publisher_get_option( 'breadcrumb_date_in_post' ) !== 'hide';

		if ( publisher_get_option( 'breadcrumb_post_categories' ) !== 'hide' ) {

			$taxonomies = array();

			if ( bf_taxonomy_supports_post_type( 'category', 'post' ) ) {
				$taxonomies['post'] = 'category';
			}

			if ( bf_taxonomy_supports_post_type( 'category', 'page' ) ) {
				$taxonomies['page'] = 'category';
			}

			$options['post_taxonomy'] = $taxonomies;
			unset( $taxonomies );
		}

		return $options;

	} // bf_breadcrumb_config


	/**
	 * Register list of Publisher mega-menus
	 *
	 * @param BF_Menu_Walker $walker
	 *
	 * @since 1.8.0
	 * @return BF_Menu_Walker
	 */
	public static function setup_mega_menus( &$walker ) {

		if ( $walker instanceof BF_Menu_Walker ) {
			$fields = $walker->get_mega_menu_fields_id();

			if ( isset( $fields['mega_menu'] ) ) {

				$fields['mega_menu']['options'] = publisher_mega_menus_list();

				$walker->set_mega_menu_fields_id( $fields );
			}
		}

		return $walker;
	}


	/**
	 * Active template compatibility analyzer
	 *
	 * @param array $config
	 *
	 * @since 1.8.4
	 * @return array
	 */
	public static function enable_template_compatibility( $config ) {

		$force = ! empty( $_GET['template-compatibility'] ) // Handle check again requests
		         || current_filter() === 'better-framework/product-pages/system-report/theme-compatibility';

		$version     = self::get_wp_theme_object()->get( 'Version' );
		$stylesheet  = trailingslashit( get_stylesheet_directory() );
		$template    = trailingslashit( get_template_directory() );
		$callback    = 'Publisher_Setup::check_template_compatibility';
		$directories = array( 'views', 'vc_templates', 'bbpress' ); // override directories

		// TODO: Refactor template compatibility library to use single callback call for all following directories
		foreach ( $directories as $directory ) {

			$config['scan_dir'][] = array(
				'version'  => $version,
				'override' => $stylesheet . $directory,
				'parent'   => $template . $directory,
				'callback' => $callback,
				'options'  => array(
					'recursive'        => true,
					'valid_extensions' => array( 'php' ),
				),
				'force'    => $force,
			);
		}

		$config['scan_dir'][] = array(
			'version'  => $version,
			'override' => $stylesheet,
			'parent'   => $template,
			'callback' => $callback,
			'options'  => array(
				'exclude'          => array( 'functions.php' ),
				'recursive'        => false,
				'valid_extensions' => array( 'php' ),
			),
			'force'    => $force,
		);

		return $config;
	}


	/**
	 * Display notice about child-theme outdated files
	 *
	 * @param array $outdated_files
	 *
	 * @since 1.8.4
	 * @return bool
	 */
	public static function check_template_compatibility( $outdated_files ) {

		static $get_options = false;

		if ( $get_options ) {
			$incompatible_files = get_option( 'publisher-incompatible-files', array() );
		} else {
			$get_options        = true;
			$incompatible_files = array();
		}
		$incompatible_files = array_merge( $outdated_files, $incompatible_files );
		update_option( 'publisher-incompatible-files', $incompatible_files );

		bf_add_notice( array(
			'msg'            => array( 'Publisher_Setup', 'update_notice_message' ),
			'notice-icon'    => PUBLISHER_THEME_URI . 'images/admin/notice-logo.png',
			'product'        => 'theme:publisher',
			'type'           => 'fixed',
			'class'          => 'publisher-override-notice',
			'state'          => 'danger',
			'id'             => 'publisher-v' . self::get_wp_theme_object()->get( 'Version' ),
			'show_all_label' => __( '… See all outdated files', 'publisher' ),
			'_message_type'  => 'template',
		) );

		return true;
	}


	/**
	 * Display up to date message after checking if no outdated file was found
	 *
	 * @param array $all_outdated_files
	 *
	 * @since 1.8.5
	 */
	public static function add_template_compatibility_up2date_message( $all_outdated_files ) {

		if ( is_child_theme() && ! array_filter( $all_outdated_files ) ) {

			delete_option( 'publisher-incompatible-files' );

			bf_add_notice( array(
				'msg'         => __( 'Done! all child-theme files are up to date', 'publisher' ),
				'notice-icon' => PUBLISHER_THEME_URI . 'images/admin/notice-logo.png',
				'product'     => 'theme:publisher',
				'state'       => 'success',
				'id'          => 'publisher-up2date-v' . self::get_wp_theme_object()->get( 'Version' ),
			) );
		}
	}


	/**
	 * Add notice for theme/plugin updates
	 *
	 * @param array $update_status
	 *
	 * @since 1.8.4
	 *
	 */
	public static function add_update_notice( $update_status = array() ) {

		if ( ! $update_status ) {
			return;
		}

		//
		// Theme Update Notice
		//

		if ( ! empty( $update_status->themes ) ) {

			$product_params = publisher_bs_register_product_params();
			$item_id        = $product_params['item_id'];

			if ( ! empty( $update_status->themes[ $item_id ] ) ) {

				bf_add_notice( array(
					'msg'            => array( 'Publisher_Setup', 'update_notice_message' ),
					//
					'notice-icon'    => PUBLISHER_THEME_URI . 'images/admin/notice-logo.png',
					'product'        => 'theme:publisher',
					'type'           => 'fixed',
					'class'          => 'publisher-update-notice',
					'state'          => 'success',
					'id'             => 'publisher-new-version',
					'show_all_label' => __( '… See all plugins', 'publisher' ),
					'_message_type'  => 'theme-update',
				) );
			}
		}

		//
		// Plugin Update Notice
		//
		if ( ! empty( $update_status->remote_plugins ) ) {

			foreach ( $update_status->remote_plugins as $plugin_path => $plugin ) {

				if ( ! class_exists( 'BF_Product_Plugin_Installer' ) ) {
					Better_Framework::factory( 'product-pages' );
					require_once BF_Product_Pages::get_path( 'install-plugin/class-bf-product-plugin-installer.php' );
				}

				// Skip inactivate plugins
				if ( ! isset( $plugin['slug'] ) ||
				     ! BF_Product_Plugin_Installer::is_plugin_installed( $plugin['slug'] ) ||
				     ! BF_Product_Plugin_Installer::is_plugin_active( $plugin['slug'] )
				) {
					continue;
				}

				bf_add_notice( array(
					'msg'            => array( 'Publisher_Setup', 'update_notice_message' ),
					//
					'notice-icon'    => PUBLISHER_THEME_URI . 'images/admin/notice-logo.png',
					'product'        => 'theme:publisher',
					'type'           => 'fixed',
					'class'          => 'publisher-plugin-update-notice',
					'state'          => 'success',
					'id'             => 'publisher-plugin-update',
					'show_all_label' => __( '… See all plugins', 'publisher' ),
					'_message_type'  => 'plugin',
				) );


				break;
			}
		}
	}


	/**
	 *
	 *
	 * @param array $notice
	 * @param BF_Admin_Notices $self
	 *
	 * @return string
	 */
	public static function update_notice_message( $notice, $self ) {

		if ( empty( $notice['_message_type'] ) ) {
			$self->remove_notice( $notice );

			return '';
		}

		if ( $notice['_message_type'] === 'theme-update' ) {
			global $pagenow;

			// Do not show theme update notice in appearance and updates pages
			if ( $pagenow === 'themes.php' || $pagenow === 'update-core.php' ) {
				return '';
			}

			$product_updates = get_option( 'bf-product-items-status' );

			if ( empty( $product_updates->themes[ Publisher_Setup::item_id ] ) ) {

				$self->remove_notice( $notice );

				return '';
			}

			$theme_update_info = $product_updates->themes[ Publisher_Setup::item_id ];

			$new_version   = $theme_update_info['new_version'];
			$title         = sprintf( __( '%s v%s update is available.', 'publisher' ), publisher_white_label_get_option( 'publisher' ), $new_version );
			$changelog_btn = '';

			if ( ! empty( $theme_update_info['changelog'] ) ) {
				$changelog_btn = sprintf(
					'<a href="%s" class="button button-secondary thickbox">%s</a>',
					add_query_arg( array(
						'TB_iframe' => 'true',
						'width'     => 763,
						'height'    => 1323,
					), $theme_update_info['changelog'] ),
					sprintf( __( 'View v%s Changelog', 'publisher' ), $new_version )
				);
			}

			$text = sprintf( __( 'Update %s', 'publisher' ), publisher_white_label_get_option( 'publisher' ) );

			return sprintf( '<h3 class="title">%s</h3> <a href="%s" class="button button-primary">%s</a> %s',
				$title, get_admin_url( null, 'update-core.php' ), $text, $changelog_btn );


		} elseif ( $notice['_message_type'] === 'template' ) {

			//
			// notice message about child-theme outdated files
			//
			$outdated_files = get_option( 'publisher-incompatible-files' );

			if ( empty( $outdated_files ) ) {
				$self->remove_notice( $notice );

				return '';
			}


			$files = '';
			$label = __( 'current version: %s - updated version: %s', 'publisher' );

			foreach ( $outdated_files as $info ) {

				if ( empty( $info['override_version'] ) ) {
					$info['override_version'] = __( 'undefined', 'publisher' );
				}

				$files .= "\n\t<li>";
				$files .= $info['path'];
				$files .= sprintf( ' <span> (' . $label . ')</span>', $info['override_version'], $info['parent_version'] );
				$files .= '</li>';
			}


			$text = sprintf( __( '%s overrided files in child theme should be updated to latest version:', 'publisher' ), publisher_white_label_get_option( 'publisher' ) );

			return sprintf( '<h3 class="title">%s</h3> <div class="detail"><ul>%s</ul> <a href="%s" class="button button-primary">%s</a></div>', $text, $files,
				add_query_arg( 'template-compatibility', 'check' ), __( 'Check Again', 'publisher' ) );

		} elseif ( $notice['_message_type'] === 'plugin' ) {
			global $pagenow;

			// Do not show plugin update notice in plugins page
			if ( $pagenow === 'admin.php' && isset( $_GET['page'] ) && 'bs-product-pages-install-plugin' === $_GET['page'] ) {
				return;
			}

			//
			// notice message about theme/plugin updates
			//
			$plugins = get_option( 'bs-product-plugins-status' );

			if ( ! $plugins || empty( $plugins->remote_plugins ) ) {

				$self->remove_notice( $notice );

				return '';
			}

			if ( ! function_exists( '_get_plugin_data_markup_translate' ) ) {
				include_once ABSPATH . 'wp-admin/includes/plugin.php';
			}

			$plugin2update = '';
			foreach ( $plugins->remote_plugins as $plugin_path => $plugin ) {

				if ( ! class_exists( 'BF_Product_Plugin_Installer' ) ) {
					Better_Framework::factory( 'product-pages' );
					require_once BF_Product_Pages::get_path( 'install-plugin/class-bf-product-plugin-installer.php' );
				}

				// Skip inactivate plugins
				if ( ! isset( $plugin['slug'] ) ||
				     ! BF_Product_Plugin_Installer::is_plugin_installed( $plugin['slug'] ) ||
				     ! BF_Product_Plugin_Installer::is_plugin_active( $plugin['slug'] )
				) {
					continue;
				}

				// Get plugin name
				$plugin_file = WP_PLUGIN_DIR . '/' . $plugin_path;
				$plugin_data = _get_plugin_data_markup_translate( $plugin_file, get_plugin_data( $plugin_file ) );
				$plugin_name = $plugin_data['Name'];

				$plugin2update .= sprintf( "<li>\n\t %s v%s</li>", $plugin_name, $plugin['new_version'] );
			}

			if ( $plugin2update ) {

				$msg = sprintf( __( 'Update Available for %s Plugins', 'publisher' ), publisher_white_label_get_option( 'publisher' ) );
				$msg = sprintf( '<h3 class="title">%s</h3> <div class="detail"><ul>%s</ul> ', $msg, $plugin2update );

				$msg .= sprintf(
					'<a href="%s" class="button button-primary">%s</a>',
					get_admin_url( null, 'admin.php?page=bs-product-pages-install-plugin' ), __( 'Update Plugins', 'publisher' )
				);

				$msg .= '</div>';

				return $msg;
			}

			$self->remove_notice( $notice );
		}

		return '';
	}


	/**
	 * List of the Publisher widget which is available for cache
	 *
	 * @since 1.9.0
	 */
	public static function widgets_list2cache() {

		return array(
			'bs-modern-grid-listing-3' => 'long',
			'bs-modern-grid-listing-4' => 'long',
			'bs-subscribe-newsletter'  => 'long',
			'bs-newsletter-mailchimp'  => 'long',
			'bs-thumbnail-listing-1'   => 'long',
			'bs-thumbnail-listing-2'   => 'long',
			'bs-thumbnail-listing-3'   => 'long',
			'better_weather_widget'    => 'long',
			'bs-popular-categories'    => 'long',
			'betterweather-inline'     => 'long',
			'bs-mix-listing-3-4'       => 'long',
			'bs-mix-listing-3-3'       => 'long',
			'bs-mix-listing-3-2'       => 'long',
			'bs-mix-listing-3-1'       => 'long',
			'bs-text-listing-4'        => 'long',
			'bs-text-listing-3'        => 'long',
			'bs-text-listing-2'        => 'long',
			'bs-text-listing-1'        => 'long',
			'bs-user-listing-5'        => 'long',
			'bs-user-listing-4'        => 'long',
			'bs-user-listing-3'        => 'long',
			'bs-user-listing-2'        => 'long',
			'bs-user-listing-1'        => 'long',
			'bs-social-share'          => 'long',
			'bs-recent-posts'          => 'long',
			'recent-comments'          => 'long',
			'bs-google-plus'           => 'short',
			'bs-instagram'             => 'short',
			'media_video'              => 'long',
			'bs-dribbble'              => 'short',
			'tag_cloud'                => 'long',
			'bs-flickr'                => 'short',
			'calendar'                 => 'long',
			'bs-embed'                 => 'long',
			'bs-about'                 => 'long',
			'pages'                    => 'long',
		);
	}


	/**
	 * List of the shortcodes id which is available for cache
	 *
	 * @since 1.9.0
	 * @return array
	 */
	public static function shortcodes_list2cache() {

		return array(
			'bs-modern-grid-listing-10' => 'long',
			'bs-modern-grid-listing-1'  => 'long',
			'bs-modern-grid-listing-2'  => 'long',
			'bs-modern-grid-listing-3'  => 'long',
			'bs-modern-grid-listing-4'  => 'long',
			'bs-modern-grid-listing-5'  => 'long',
			'bs-modern-grid-listing-6'  => 'long',
			'bs-modern-grid-listing-7'  => 'long',
			'bs-modern-grid-listing-8'  => 'long',
			'bs-modern-grid-listing-9'  => 'long',
			'bs-thumbnail-listing-1'    => 'long',
			'bs-thumbnail-listing-2'    => 'long',
			'bs-thumbnail-listing-3'    => 'long',
			'bs-popular-categories'     => 'long',
			'bs-classic-listing-1'      => 'long',
			'bs-classic-listing-2'      => 'long',
			'bs-classic-listing-3'      => 'long',
			'bs-mix-listing-1-1'        => 'long',
			'bs-mix-listing-1-2'        => 'long',
			'bs-mix-listing-1-3'        => 'long',
			'bs-mix-listing-1-4'        => 'long',
			'bs-mix-listing-2-1'        => 'long',
			'bs-mix-listing-2-2'        => 'long',
			'bs-mix-listing-3-1'        => 'long',
			'bs-mix-listing-3-2'        => 'long',
			'bs-mix-listing-3-3'        => 'long',
			'bs-mix-listing-3-4'        => 'long',
			'bs-mix-listing-4-1'        => 'long',
			'bs-mix-listing-4-2'        => 'long',
			'bs-mix-listing-4-3'        => 'long',
			'bs-mix-listing-4-4'        => 'long',
			'bs-mix-listing-4-5'        => 'long',
			'bs-mix-listing-4-6'        => 'long',
			'bs-mix-listing-4-7'        => 'long',
			'bs-mix-listing-4-8'        => 'long',
			'bs-blog-listing-1'         => 'long',
			'bs-blog-listing-2'         => 'long',
			'bs-blog-listing-3'         => 'long',
			'bs-blog-listing-4'         => 'long',
			'bs-blog-listing-5'         => 'long',
			'bs-grid-listing-2'         => 'long',
			'bs-grid-listing-1'         => 'long',
			'bs-tall-listing-1'         => 'long',
			'bs-tall-listing-2'         => 'long',
			'bs-text-listing-1'         => 'long',
			'bs-text-listing-2'         => 'long',
			'bs-text-listing-3'         => 'long',
			'bs-text-listing-4'         => 'long',
			'bs-user-listing-1'         => 'long',
			'bs-user-listing-2'         => 'long',
			'bs-user-listing-3'         => 'long',
			'bs-user-listing-4'         => 'long',
			'bs-user-listing-5'         => 'long',
			'better-newsticker'         => 'long',
			'bs-recent-posts'           => 'long',
			'bs-slider-1'               => 'long',
			'bs-slider-2'               => 'long',
			'bs-slider-3'               => 'long',
			'bs-box-1'                  => 'long',
			'bs-box-2'                  => 'long',
			'bs-box-3'                  => 'long',
			'bs-box-4'                  => 'long',
		);
	}


	/**
	 * Display booster widget caching for specific widget options
	 *
	 * @param bool $enable
	 * @param array $instance
	 * @param array $args
	 * @param string $id_base
	 *
	 * @since 1.9.0
	 * @return bool
	 */
	public static function disable_widget_caching( $enable, $instance, $args, $id_base ) {

		if ( $enable ) {

			if ( 'better_weather_widget' === $id_base ) {

				$enable = empty( $instance['visitorLocation'] ); # Don't cache Weather Widget if 'Show Visitors Location Status' was checked
			} elseif ( stristr( $id_base, '-listing-' ) && isset( $instance['order_by'] ) ) {

				$enable = 'rand' !== strtolower( trim( $instance['order_by'] ) ); # Don't cache listings with random order by
			}
		}

		return $enable;
	}


	/**
	 * Disable caching for some shortcodes with specific option
	 *
	 * @param bool $enable
	 * @param array|string $atts
	 *
	 * @since 1.9.0
	 * @return bool
	 */
	public static function disable_shortcode_caching( $enable, $atts ) {

		if ( $enable ) {

			// Disable caching for listing shortcode with random order option
			if ( isset( $atts['order_by'] ) ) {
				$enable = 'rand' !== strtolower( trim( $atts['order_by'] ) );
			}

		}

		return $enable;
	}


	/**
	 * List of the Publisher mega-menus which is available for cache
	 *
	 * @since 1.9.0
	 */
	public static function mega_menus_list2cache() {

		return array(
			'tabbed-grid-posts' => 'long',
			'link-3-column'     => 'long',
			'link-2-column'     => 'long',
			'link-4-column'     => 'long',
			'grid-posts'        => 'long',
			'link-list'         => 'long',
		);
	}


	/**
	 * The callback will be fire after theme updated
	 *
	 * @since 1.9.1
	 */
	public static function after_theme_updated() {

		{  # Remove publisher update notice after it updated successfully

			$theme = wp_get_theme();

			if ( '' != $theme->get( 'Template' ) ) { # Do not consider child-theme version as publisher version
				$theme = wp_get_theme( $theme->get( 'Template' ) );
			}

			// Unique notice id where defined in @see Publisher_Setup::add_update_notice
			$message_id = 'publisher-v' . $theme->get( 'Version' );
			bf_remove_notice( $message_id );
		}
	}


	/**
	 * Setups Editor Shortcodes Menu
	 *
	 * @param $shortcodes
	 *
	 * @return array
	 */
	function setup_editor_shortcodes_menu( $shortcodes ) {


		if ( ! empty( $shortcodes ) ) {
			$shortcodes[ 'sep-' . mt_rand() ] = array(
				'type' => 'separator',
			);
		}

		$shortcodes['text-padding'] = array(
			'type'  => 'menu',
			'label' => __( 'Text Padding', 'publisher' ),
			'items' => array(

				'text-padding-right-1' => array(
					'type'              => 'button',
					'label'             => __( 'Text ⇠', 'publisher' ),
					'onclick_raw_js'    => '
								toggleClass("bs-padding-0-1",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-0-1'
					)
				),

				'text-padding-left-1'  => array(
					'type'              => 'button',
					'label'             => __( '⇢ Text', 'publisher' ),
					'onclick_raw_js'    => '
								toggleClass("bs-padding-1-0",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-1-0'
					)
				),
				'text-padding-1'       => array(
					'type'           => 'button',
					'label'          => __( '⇢ Text ⇠', 'publisher' ),
					'onclick_raw_js' => '
							toggleClass("bs-padding-1-1",textPaddingPattern);
							',

					'active_conditions' => array(
						'classes' => 'bs-padding-1-1'
					)
				),
				'text-padding-right-2' => array(
					'type'              => 'button',
					'label'             => __( '⇢ Text ⇠⇠', 'publisher' ),
					'onclick_raw_js'    => '
								toggleClass("bs-padding-1-2",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-1-2'
					)
				),

				'text-padding-left-2' => array(
					'type'              => 'button',
					'label'             => __( '⇢⇢ Text ⇠', 'publisher' ),
					'onclick_raw_js'    => '
							toggleClass("bs-padding-2-1",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-2-1'
					)
				),
				'text-padding-2'      => array(
					'type'              => 'button',
					'label'             => __( '⇢⇢ Text ⇠⇠', 'publisher' ),
					'onclick_raw_js'    => '
							toggleClass("bs-padding-2-2",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-2-2'
					)
				),
				'text-padding-3'      => array(
					'type'              => 'button',
					'label'             => __( '⇢⇢⇢ Text ⇠⇠⇠', 'publisher' ),
					'onclick_raw_js'    => '
							toggleClass("bs-padding-3-3",textPaddingPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-padding-3-3'
					)
				),
			)
		);

		$shortcodes['dropcap'] = array(
			'type'  => 'menu',
			'label' => __( 'Dropcap', 'publisher' ),
			'items' => array(

				'dropcap'                => array(
					'type'              => 'button',
					'label'             => __( 'Dropcap - Simple', 'publisher' ),
					'formatter'         => 'BS_Dropcap_Simple',
					'active_conditions' => array(
						'classes' => 'dropcap dropcap-simple'
					)
				),
				'dropcap-square'         => array(
					'register'          => false,
					'type'              => 'button',
					'label'             => __( 'Dropcap - Square', 'publisher' ),
					'formatter'         => 'BS_Dropcap_Square',
					'active_conditions' => array(
						'classes' => 'dropcap dropcap-square'
					)
				),
				'dropcap-square-outline' => array(
					'register'          => false,
					'type'              => 'button',
					'label'             => __( 'Dropcap - Square Outline', 'publisher' ),
					'formatter'         => 'BS_Dropcap_Square_Outline',
					'active_conditions' => array(
						'classes' => 'dropcap dropcap-square-outline'
					)
				),
				'dropcap-circle'         => array(
					'register'          => false,
					'type'              => 'button',
					'label'             => __( 'Dropcap - Circle', 'publisher' ),
					'formatter'         => 'BS_Dropcap_circle',
					'active_conditions' => array(
						'classes' => 'dropcap dropcap-circle'
					)
				),
				'dropcap-circle-outline' => array(
					'register'          => false,
					'type'              => 'button',
					'label'             => __( 'Dropcap - Circle Outline', 'publisher' ),
					'formatter'         => 'BS_Dropcap_Circle_Outline',
					'active_conditions' => array(
						'classes' => 'dropcap dropcap-circle-outline'
					)
				),
			)
		);

		$shortcodes['intro'] = array(
			'type'  => 'menu',
			'label' => __( 'Intro', 'publisher' ),
			'items' => array(

				'bs-intro'             => array(
					'type'              => 'button',
					'label'             => __( 'Intro', 'publisher' ),
					'onclick_raw_js'    => '
								toggleClass("bs-intro",introClassPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-intro'
					)
				),
				'bs-intro-highlighted' => array(
					'type'              => 'button',
					'label'             => __( 'Highlighted Intro', 'publisher' ),
					'onclick_raw_js'    => '
								toggleClass("bs-intro-highlighted",introClassPattern);
							',
					'active_conditions' => array(
						'classes' => 'bs-intro-highlighted'
					)
				),
			)
		);

		$shortcodes['highlight']    = array(
			'type'  => 'menu',
			'label' => __( 'Highlighted Text', 'publisher' ),
			'items' => array(

				'highlight' => array(
					'type'      => 'button',
					'label'     => __( 'Highlight Yellow', 'publisher' ),
					'formatter' => 'BS_Highlight',
				),

				'highlight-red' => array(
					'register'  => false,
					'type'      => 'button',
					'label'     => __( 'Highlight Red', 'publisher' ),
					'formatter' => 'BS_Highlight_Red',
				),

			)
		);
		$shortcodes['columns']      = array(
			'type'  => 'menu',
			'label' => __( 'Columns', 'publisher' ),
			'items' => array(
				'columns' => array(
					'type'     => 'button',
					'label'    => __( '2 Column', 'publisher' ),
					'callback' => 'columns',
					'command'  => 'BS_Column_2',
				),
				'column'  => array( 'callback' => 'column' ),

				'columns-3' => array(
					'type'     => 'button',
					'register' => false,
					'label'    => __( '3 Column', 'publisher' ),
					'command'  => 'BS_Column_3',
				),

				'columns-4' => array(
					'type'     => 'button',
					'register' => false,
					'label'    => __( '4 Column', 'publisher' ),
					'command'  => 'BS_Column_4',
				),

			)
		);
		$shortcodes['button']       = array(
			'type'  => 'menu',
			'label' => __( 'Buttons', 'publisher' ),
			'items' => array(

				'button' => array(
					'type'           => 'button',
					'label'          => __( 'Button - Large', 'publisher' ),
					'callback'       => 'button',
					'onclick_raw_js' => '
								newButton("lg");
							'
				),

				'button-medium' => array(
					'register'       => false,
					'type'           => 'button',
					'label'          => __( 'Button - Medium', 'publisher' ),
					'callback'       => 'button',
					'onclick_raw_js' => '
								newButton("md");
							'
				),

				'button-small' => array(
					'register'       => false,
					'type'           => 'button',
					'label'          => __( 'Button - Small', 'publisher' ),
					'callback'       => 'button',
					'onclick_raw_js' => '
								newButton("sm");
							'
				),
			)
		);
		$shortcodes['list-drop']    = array(
			'type'  => 'menu',
			'label' => __( 'Custom List', 'publisher' ),
			'items' => array(
				'list' => array(
					'type'              => 'button',
					'label'             => __( 'Check List', 'publisher' ),
					'callback'          => 'list_shortcode',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-check',
						'parent'  => 'ul'
					),
					'command'           => 'BS_CheckList'
				),
				'li'   => array( 'callback' => 'list_item' ),

				'list-star'     => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'Star List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-star',
						'parent'  => 'ul'
					),
					'command'           => 'BS_StarList'
				),
				'list-edit'     => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'Edit List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-edit',
						'parent'  => 'ul',
					),
					'command'           => 'BS_EditList'
				),
				'list-folder'   => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'Folder List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-folder',
						'parent'  => 'ul'
					),
					'command'           => 'BS_FolderList'
				),
				'list-file'     => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'File List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-file',
						'parent'  => 'ul'
					),
					'command'           => 'BS_FileList'
				),
				'list-heart'    => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'Heart List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-heart',
						'parent'  => 'ul'
					),
					'command'           => 'BS_HeartList'
				),
				'list-asterisk' => array(
					'type'              => 'button',
					'register'          => false,
					'label'             => __( 'Asterisk List', 'publisher' ),
					'active_conditions' => array(
						'classes' => 'bs-shortcode-list list-style-asterisk',
						'parent'  => 'ul'
					),
					'command'           => 'BS_AsteriskList'
				),
			)
		);
		$shortcodes['divider-drop'] = array(
			'type'  => 'menu',
			'label' => __( 'Dividers', 'publisher' ),
			'items' => array(
				'divider'        => array(
					'type'     => 'button',
					'label'    => __( 'Divider - Full', 'publisher' ),
					'callback' => 'divider',
					'content'  => '<hr class="bs-divider full large">'
				),
				'divider-small'  => array(
					'type'     => 'button',
					'register' => false,
					'label'    => __( 'Divider - Small', 'publisher' ),
					'callback' => 'divider',
					'content'  => '<hr class="bs-divider full small">'
				),
				'divider-tiny'   => array(
					'type'     => 'button',
					'register' => false,
					'label'    => __( 'Divider - Tiny', 'publisher' ),
					'callback' => 'divider',
					'content'  => '<hr class="bs-divider full tiny">'
				),
				'divider-double' => array(
					'type'     => 'button',
					'register' => false,
					'label'    => __( 'Divider - Dashed Line', 'publisher' ),
					'callback' => 'divider',
					'content'  => '<hr class="bs-divider large dashed-line">'
				),

			)
		);
		$shortcodes['alert-drop']   = array(
			'type'  => 'menu',
			'label' => __( 'Alerts', 'publisher' ),
			'items' => array(
				'alert'         => array(
					'type'              => 'button',
					'label'             => __( 'Alert - Simple', 'publisher' ),
					'formatter'         => 'BS_Alert_Simple',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-alert alert-simple'
					)
				),
				'alert-success' => array(
					'type'              => 'button',
					'label'             => __( 'Alert - Success', 'publisher' ),
					'register'          => false,
					'formatter'         => 'BS_Alert_Success',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-alert alert-success'
					)
				),
				'alert-info'    => array(
					'type'              => 'button',
					'label'             => __( 'Alert - Info', 'publisher' ),
					'register'          => false,
					'formatter'         => 'BS_Alert_Info',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-alert alert-info'
					)
				),
				'alert-warning' => array(
					'type'              => 'button',
					'label'             => __( 'Alert - Warning', 'publisher' ),
					'register'          => false,
					'formatter'         => 'BS_Alert_Warning',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-alert alert-warning'
					)
				),
				'alert-danger'  => array(
					'type'              => 'button',
					'label'             => __( 'Alert - Danger', 'publisher' ),
					'register'          => false,
					'formatter'         => 'BS_Alert_Danger',
					'active_conditions' => array(
						'classes' => 'bs-shortcode-alert alert-danger'
					)
				),
			)
		);

		$shortcodes['tabs'] = array(
			'register' => false,
			'type'     => 'button',
			'label'    => __( 'Tabs', 'publisher' ),
			'callback' => 'tabs',
			'content'  => '[tabs]<br />\
                                        [tab title="' . __( 'Tab 1', 'publisher' ) . '"]' . __( 'Tab 1 content...', 'publisher' ) . '[/tab]<br />\
                                        [tab title="' . __( 'Tab 2', 'publisher' ) . '"]' . __( 'Tab 2 content...', 'publisher' ) . '[/tab]<br />\
                                    [/tabs]<br />\ '
		);


		$shortcodes['accordions'] = array(
			'type'     => 'button',
			'label'    => __( 'Accordions', 'publisher' ),
			'callback' => 'accordions',
			'register' => false,
			'content'  => '[accordions ]<br>[accordion title="Accordion 1 Title" load="show"]Accordion 1 content...[/accordion]<br>[accordion title="Accordion 2 Title" load="hide"]Accordion 2 content...[/accordion]<br>[/accordions]'
		);

		$shortcodes['white-space'] = array(
			'type'     => 'button',
			'label'    => __( 'White Space', 'publisher' ),
			'callback' => 'whiteSpace',
			'register' => false,
			'content'  => '[bs-white-space]',
		);

		return $shortcodes;
	}
} // Publisher_Setup