/**
  * Constructor
  */
 public function __construct()
 {
     $nav_menus = WPGlobus::_get_nav_menus();
     foreach ($nav_menus as $menu) {
         $this->menus[$menu->slug] = $menu->name;
     }
     if (!empty($nav_menus) && count($nav_menus) > 1) {
         $this->menus['all'] = 'All';
     }
     add_action('init', array($this, 'initSettings'));
     /** remove redux menu under the tools **/
     add_action('admin_menu', array($this, 'remove_redux_menu'), 12);
 }
 /**
  * Callback for customize_register
  *
  * @param WP_Customize_Manager $wp_customize
  */
 public static function action__customize_register(WP_Customize_Manager $wp_customize)
 {
     /**
      * WPGlobus panel
      */
     $wp_customize->add_panel('wpglobus_settings_panel', array('priority' => 1010, 'capability' => 'edit_theme_options', 'theme_supports' => '', 'title' => __('WPGlobus Settings', 'wpglobus'), 'description' => '<div style="background-color:#eee;padding:10px 5px;">' . self::get_content('welcome_message') . '</div>' . self::get_content('deactivate_message')));
     if (!self::is_theme_enabled()) {
         self::sorry_section($wp_customize, self::$theme);
         return;
     }
     /** wpglobus_customize_language_selector_mode <=> wpglobus_option[show_flag_name] */
     update_option('wpglobus_customize_language_selector_mode', WPGlobus::Config()->show_flag_name);
     /**  */
     if (empty(WPGlobus::Config()->nav_menu)) {
         delete_option('wpglobus_customize_language_selector_menu');
     } else {
         update_option('wpglobus_customize_language_selector_menu', WPGlobus::Config()->nav_menu);
     }
     /** wpglobus_customize_selector_wp_list_pages <=> wpglobus_option[selector_wp_list_pages][show_selector]  */
     update_option('wpglobus_customize_selector_wp_list_pages', WPGlobus::Config()->selector_wp_list_pages);
     /** wpglobus_customize_css_editor <=> wpglobus_option[css_editor]  */
     update_option('wpglobus_customize_css_editor', WPGlobus::Config()->css_editor);
     /**
      * SECTION: Language
      */
     if (1) {
         $wp_customize->add_section('wpglobus_languages_section', array('title' => __('Languages', 'wpglobus'), 'priority' => 10, 'panel' => 'wpglobus_settings_panel'));
         self::$sections['wpglobus_languages_section'] = 'wpglobus_languages_section';
         /** Enabled languages */
         $wp_customize->add_setting('wpglobus_customize_enabled_languages', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
         $wp_customize->add_control(new WPGlobusCheckBoxSet($wp_customize, 'wpglobus_customize_enabled_languages', array('section' => 'wpglobus_languages_section', 'settings' => 'wpglobus_customize_enabled_languages', 'priority' => 0, 'items' => WPGlobus::Config()->enabled_languages, 'label' => __('Enabled Languages', 'wpglobus'), 'checkbox_class' => 'wpglobus-listen-change wpglobus-language-item', 'description' => __('These languages are currently enabled on your site.', 'wpglobus'))));
         self::$settings['wpglobus_languages_section']['wpglobus_customize_enabled_languages']['type'] = 'checkbox_set';
         /** @see option wpglobus_option['enabled_languages'] */
         self::$settings['wpglobus_languages_section']['wpglobus_customize_enabled_languages']['option'] = 'enabled_languages';
         /** Add languages */
         /** Generate array $more_languages */
         /** @var array $more_languages */
         $more_languages = array();
         $more_languages['select'] = '---- select ----';
         foreach (WPGlobus::Config()->flag as $code => $file) {
             if (!in_array($code, WPGlobus::Config()->enabled_languages)) {
                 $lang_in_en = '';
                 if (!empty(WPGlobus::Config()->en_language_name[$code])) {
                     $lang_in_en = ' (' . WPGlobus::Config()->en_language_name[$code] . ')';
                 }
                 // '<img src="' . WPGlobus::Config()->flags_url . $file . '" />'
                 $more_languages[$code] = WPGlobus::Config()->language_name[$code] . $lang_in_en;
             }
         }
         $desc_add_languages = __('Choose a language you would like to enable. <br>Press the [Save & Publish] button to confirm.', 'wpglobus') . '<br />';
         // translators: %1$s and %2$s - placeholders to insert HTML link around 'here'
         $desc_add_languages .= sprintf(__('or Add new Language %1$s here %2$s', 'wpglobus'), '<a style="text-decoration:underline;" href="' . admin_url() . 'admin.php?page=' . WPGlobus::LANGUAGE_EDIT_PAGE . '&action=add" target="_blank">', '</a>');
         $wp_customize->add_setting('wpglobus_customize_add_language', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
         $wp_customize->add_control('wpglobus_add_languages_select_box', array('settings' => 'wpglobus_customize_add_language', 'label' => __('Add Languages', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 10, 'choices' => $more_languages, 'description' => $desc_add_languages));
         //self::$settings[ 'wpglobus_languages_section' ][ 'wpglobus_customize_add_language' ] = 'select';
         /** Language Selector Mode */
         $wp_customize->add_setting('wpglobus_customize_language_selector_mode', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'refresh'));
         $wp_customize->add_control('wpglobus_customize_language_selector_mode', array('settings' => 'wpglobus_customize_language_selector_mode', 'label' => __('Language Selector Mode', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 20, 'choices' => array('code' => __('Two-letter Code with flag (en, ru, it, etc.)', 'wpglobus'), 'full_name' => __('Full Name (English, Russian, Italian, etc.)', 'wpglobus'), 'name' => __('Full Name with flag (English, Russian, Italian, etc.)', 'wpglobus'), 'empty' => __('Flags only', 'wpglobus')), 'description' => __('Choose the way language name and country flag are shown in the drop-down menu', 'wpglobus')));
         self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_mode']['type'] = 'select';
         /** @see option wpglobus_option['show_flag_name'] */
         self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_mode']['option'] = 'show_flag_name';
         /**
          * @see https://make.wordpress.org/core/2016/03/22/implementing-selective-refresh-support-for-widgets/
          * @see https://make.wordpress.org/core/2016/03/10/customizer-improvements-in-4-5/
          *
          * $wp_customize->selective_refresh->add_partial( 'wpglobus_customize_language_selector_mode', array(
          * 'selector' => '#site-navigation',
          * 'render_callback' => function() {
          * wp_nav_menu();
          * },
          * ) );
          * // */
         /** Language Selector Menu */
         /** @var array $nav_menus */
         $nav_menus = WPGlobus::_get_nav_menus();
         $menus = array();
         foreach ($nav_menus as $menu) {
             $menus[$menu->slug] = $menu->name;
         }
         if (!empty($nav_menus) && count($nav_menus) > 1) {
             $menus['all'] = 'All';
         }
         if (empty($menus)) {
             $wp_customize->add_control(new WPGlobusLink($wp_customize, 'wpglobus_customize_language_selector_menu', array('section' => 'wpglobus_languages_section', 'title' => esc_html__('Language Selector Menu', 'wpglobus'), 'settings' => array(), 'priority' => 30, 'type' => 'wpglobus_link', 'href' => esc_attr('javascript: wp.customize.panel( "nav_menus" ).focus();'), 'text' => esc_html__('No menus have been created yet. Create some.', 'wpglobus'), 'description' => esc_html__('Choose the navigation menu where the language selector will be shown', 'wpglobus'))));
             self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['type'] = 'wpglobus_link';
             self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['option'] = array();
         } else {
             $wp_customize->add_setting('wpglobus_customize_language_selector_menu', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
             $wp_customize->add_control('wpglobus_customize_language_selector_menu', array('settings' => 'wpglobus_customize_language_selector_menu', 'label' => esc_html__('Language Selector Menu', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 30, 'choices' => $menus, 'description' => esc_html__('Choose the navigation menu where the language selector will be shown', 'wpglobus')));
             self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['type'] = 'select';
             /** @see option wpglobus_option['use_nav_menu'] */
             self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['option'] = 'use_nav_menu';
         }
         /** "All Pages" menus Language selector */
         $wp_customize->add_setting('wpglobus_customize_selector_wp_list_pages', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
         $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, 'wpglobus_customize_selector_wp_list_pages', array('settings' => 'wpglobus_customize_selector_wp_list_pages', 'title' => __('"All Pages" menus Language selector', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'priority' => 40, 'label' => __('Adds language selector to the menus that automatically list all existing pages (using `wp_list_pages`)', 'wpglobus'))));
         self::$settings['wpglobus_languages_section']['wpglobus_customize_selector_wp_list_pages']['type'] = 'wpglobus_checkbox';
         /** @see option wpglobus_option['selector_wp_list_pages']['show_selector'] */
         self::$settings['wpglobus_languages_section']['wpglobus_customize_selector_wp_list_pages']['option'] = 'show_selector';
         /** Custom CSS */
         $wp_customize->add_setting('wpglobus_customize_css_editor', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
         $wp_customize->add_control('wpglobus_customize_css_editor', array('settings' => 'wpglobus_customize_css_editor', 'label' => __('Custom CSS', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'textarea', 'priority' => 50, 'description' => __('Here you can enter the CSS rules to adjust the language selector menu for your theme. Look at the examples in the `style-samples.css` file.', 'wpglobus')));
         self::$settings['wpglobus_languages_section']['wpglobus_customize_css_editor']['type'] = 'textarea';
         /** @see option wpglobus_option['css_editor'] */
         self::$settings['wpglobus_languages_section']['wpglobus_customize_css_editor']['option'] = 'css_editor';
     }
     /** end SECTION: Language */
     /**
      * SECTION: Post types
      */
     if (1) {
         $section = 'wpglobus_post_types_section';
         $wp_customize->add_section($section, array('title' => __('Post types', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel'));
         self::$sections[$section] = $section;
         if (false === ($enabled_post_types = get_transient(self::$enabled_post_types_key))) {
             $post_types = get_post_types();
             $enabled_post_types = array();
             foreach ($post_types as $post_type) {
                 if (!in_array($post_type, array('attachment', 'revision', 'nav_menu_item'), true)) {
                     if (in_array($post_type, array('post', 'page'))) {
                         $enabled_post_types[$post_type] = $post_type;
                         continue;
                     }
                     foreach (WPGlobus::O()->vendors_scripts as $script => $status) {
                         if (empty($status)) {
                             continue;
                         }
                         if ($script == 'ACF' || $script == 'ACFPRO') {
                             /**
                              * get list @see class-wpglobus.php:145
                              */
                             if (in_array($post_type, array('acf-field-group', 'acf-field', 'acf'))) {
                                 continue 2;
                             }
                         }
                         if ($script == 'WOOCOMMERCE') {
                             /**
                              * get list  @see class-wpglobus.php:171
                              */
                             if (in_array($post_type, array('product', 'product_tag', 'product_cat', 'shop_order', 'shop_coupon', 'product_variation', 'shop_order_refund', 'shop_webhook'))) {
                                 continue 2;
                             }
                         }
                         if ($script == 'WPCF7') {
                             /**
                              * get list @see class-wpglobus.php:195
                              */
                             if (in_array($post_type, array('wpcf7_contact_form'))) {
                                 continue 2;
                             }
                         }
                     }
                     $enabled_post_types[$post_type] = $post_type;
                 }
             }
             set_transient(self::$enabled_post_types_key, $enabled_post_types, 60);
         }
         foreach ($enabled_post_types as $post_type) {
             $status = '';
             if (isset(WPGlobus::Config()->extended_options['post_type'][$post_type])) {
                 if (WPGlobus::Config()->extended_options['post_type'][$post_type] == 1) {
                     $status = '1';
                 }
             } else {
                 $status = '1';
             }
             update_option('wpglobus_customize_post_type_' . $post_type, $status);
         }
         $i = 0;
         foreach ($enabled_post_types as $post_type) {
             $pst = 'wpglobus_customize_post_type_' . $post_type;
             $wp_customize->add_setting($pst, array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
             $title = '';
             if ($i == 0) {
                 $title = __('Uncheck to disable WPGlobus', 'wpglobus');
             }
             $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, $pst, array('settings' => $pst, 'title' => $title, 'label' => $post_type, 'section' => $section, 'priority' => 10)));
             $i++;
             self::$settings[$section][$pst]['type'] = 'wpglobus_checkbox';
             /** @see option wpglobus_option['post_type'] */
             self::$settings[$section][$pst]['option'] = 'post_type';
         }
     }
     /** end SECTION: Post types */
     /**
      * SECTION: Add ons
      */
     if (1) {
         global $wp_version;
         self::$sections['wpglobus_addons_section'] = 'wpglobus_addons_section';
         if (version_compare($wp_version, '4.5-RC1', '<')) {
             $wp_customize->add_section(self::$sections['wpglobus_addons_section'], array('title' => __('Add-ons', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel'));
             /** Add ons setting  */
             $wp_customize->add_setting('wpglobus_customize_add_ons', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage'));
             $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, 'wpglobus_customize_add_ons', array('settings' => 'wpglobus_customize_add_ons', 'title' => __('Title', 'wpglobus'), 'label' => __('Label', 'wpglobus'), 'section' => self::$sections['wpglobus_addons_section'], 'type' => 'checkbox', 'priority' => 10, 'description' => __('Description', 'wpglobus'))));
         } else {
             /**
              * Changes in WP 4.5
              * @link https://make.wordpress.org/core/2016/03/10/customizer-improvements-in-4-5/
              */
             $wp_customize->add_section(self::$sections['wpglobus_addons_section'], array('title' => __('Add-ons', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel'));
             $wp_customize->add_control('wpglobus_customize_add_ons', array('section' => self::$sections['wpglobus_addons_section'], 'settings' => array(), 'type' => 'button'));
         }
     }
     /** end SECTION: Add ons */
     /**
      * Fires to add customize settings.
      *
      * @since 1.4.6
      *
      * @param WP_Customize_Manager $wp_customize The WP Customize Manager.
      */
     do_action('wpglobus_customize_register', $wp_customize);
     /** @var array $res */
     $res = apply_filters('wpglobus_customize_data', array('sections' => self::$sections, 'settings' => self::$settings));
     self::$sections = $res['sections'];
     self::$settings = $res['settings'];
 }