__( 'General', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'slug' => 'woofunnels_general_settings', 'link' => apply_filters( 'bwf_general_settings_link', 'javascript:void(0)' ), 'priority' => 5, ) ); return $menu; } ); add_action( 'wp_ajax_bwf_general_settings_update', [ $this, 'update_general_settings' ] ); add_action( 'init', array( $this, 'maybe_flush_rewrite_rules' ), 101 ); add_action( 'admin_head', array( $this, 'hide_from_menu' ) ); add_filter( 'admin_title', array( $this, 'maybe_change_title' ), 99 ); add_filter( 'woofunnels_global_settings_fields', array( $this, 'add_settings_fields_array' ), 99 ); add_action( 'bwf_global_save_settings_woofunnels_general_settings', array( $this, 'update_global_settings_fields' ), 99 ); } /** * Get the instance of the BWF_Admin_General_Settings class * * @return BWF_Admin_General_Settings The instance of the class */ public static function get_instance() { if ( null === self::$ins ) { self::$ins = new self; } return self::$ins; } public function maybe_flush_rewrite_rules() { $is_required_rewrite = get_option( 'bwf_needs_rewrite', 'no' ); if ( 'yes' === $is_required_rewrite ) { flush_rewrite_rules(); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.flush_rewrite_rules_flush_rewrite_rules WooFunnels_Dashboard::get_all_templates(); update_option( 'bwf_needs_rewrite', 'no', true ); } } public function add_settings_fields_array( $fields ) { $fields['woofunnels_general_settings'] = $this->all_fields(); return $fields; } public function __callback() { /** Registering Settings in top bar */ if ( class_exists( 'BWF_Admin_Breadcrumbs' ) ) { BWF_Admin_Breadcrumbs::register_node( [ 'text' => 'Settings' ] ); } BWF_Admin_Breadcrumbs::render_sticky_bar(); ?>

render_tab_html( 'woofunnels_general_settings' ); $i = 0; ?>

'', 'is_tiktok_add_to_cart_bump' => '', 'tiktok_add_to_cart_event' => '', 'tiktok_initiate_checkout_event' => '', 'is_tiktok_purchase_event' => array(), 'pint_key' => '', 'is_pint_lead_op' => array(), 'is_pint_add_to_cart_bump' => '', 'is_pint_custom_bump' => '', 'is_pint_page_view_lp' => array(), 'is_pint_page_view_op' => array(), 'is_pint_pageview_event' => array(), 'is_pint_page_view_global' => '', 'pint_is_page_view' => '', 'pint_add_to_cart_event' => '', 'pint_initiate_checkout_event' => '', 'is_pint_purchase_event' => array(), 'is_pint_custom_events' => '', 'pint_variable_as_simple' => '', 'pint_content_id_type' => '0', 'pint_content_id_prefix' => '', 'pint_content_id_suffix' => '', 'pint_exclude_from_total' => array(), 'gad_key' => '', 'gad_conversion_label' => '', 'gad_lead_conversion_label' => '', 'gad_addtocart_checkout_conversion_label' => '', 'gad_addtocart_bump_conversion_label' => '', 'gad_addtocart_global_conversion_label' => '', 'is_gad_page_view_global' => '', 'is_gad_view_item_global' => '', 'is_gad_page_view_lp' => array(), 'is_gad_page_view_op' => array(), 'is_gad_lead_op' => array(), 'is_gad_add_to_cart_bump' => '', 'is_gad_custom_bump' => '', 'google_ads_is_page_view' => '', 'google_ads_add_to_cart_event' => '', 'is_gad_pageview_event' => array(), 'is_gad_purchase_event' => array(), 'is_gad_custom_events' => '', 'google_ads_variable_as_simple' => '', 'google_ads_content_id_type' => '0', 'google_ads_content_id_prefix' => '', 'google_ads_content_id_suffix' => '', 'gad_exclude_from_total' => array(), 'ga_key' => '', 'is_ga_page_view_global' => '', 'is_ga_view_item_global' => '', 'is_ga_page_view_lp' => array(), 'is_ga_page_view_op' => array(), 'is_ga_lead_op' => array(), 'google_ua_is_page_view' => '', 'google_ua_add_to_cart_event' => '', 'google_ua_initiate_checkout_event' => '', 'google_ua_add_payment_info_event' => '', 'is_ga_purchase_page_view' => array(), 'is_ga_purchase_event' => array(), 'is_ga_custom_events' => '', 'google_ua_variable_as_simple' => '', 'google_ua_content_id_type' => '0', 'google_ua_content_id_prefix' => '', 'google_ua_content_id_suffix' => '', 'ga_exclude_from_total' => array(), 'fb_pixel_key' => '', 'conversion_api_access_token' => '', 'is_fb_conv_enable_test' => array(), 'conversion_api_test_event_code' => '', 'is_fb_conversion_api_log' => array(), 'is_fb_page_view_global' => '', 'is_fb_page_product_content_global' => '', 'is_fb_page_view_lp' => array(), 'is_fb_page_view_op' => array(), 'is_fb_lead_op' => array(), 'is_fb_add_to_cart_bump' => '', 'is_fb_custom_bump' => '', 'label_section_head_fb' => '', 'pixel_is_page_view' => '', 'pixel_initiate_checkout_event' => '', 'pixel_add_to_cart_event' => '', 'pixel_add_payment_info_event' => '', 'is_fb_purchase_page_view' => array(), 'is_fb_purchase_event' => array(), 'enable_general_event' => array(), 'general_event_name' => 'GeneralEvent', 'is_fb_custom_events' => '', 'is_fb_enable_content' => [], 'pixel_variable_as_simple' => '', 'pixel_content_id_type' => '0', 'pixel_content_id_prefix' => '', 'pixel_content_id_suffix' => '', 'exclude_from_total' => array(), 'is_fb_advanced_event' => array(), 'is_tiktok_advanced_event' => array(), 'default_selected_builder' => '', 'track_utms' => "1", 'snapchat_pixel' => '', 'is_snapchat_page_view_global' => '', 'is_snapchat_page_view_lp' => array(), 'is_snapchat_page_view_op' => array(), 'is_snapchat_add_to_cart_bump' => '', 'label_section_head_snapchat' => '', 'snapchat_is_page_view' => '', 'snapchat_add_to_cart_event' => '', 'snapchat_initiate_checkout_event' => '', 'snapchat_add_payment_info_event' => '', 'is_snapchat_purchase_event' => array(), 'snapchat_variable_as_simple' => '', 'is_fb_add_to_cart_global' => '', 'is_ga_add_to_cart_global' => '', 'is_gad_add_to_cart_global' => '', 'is_snapchat_add_to_cart_global' => '', 'is_tiktok_page_view_global' => '', 'is_tiktok_page_view_lp' => array(), 'is_tiktok_page_view_op' => array(), 'is_tiktok_pageview_event' => array(), 'tiktok_is_page_view' => '', 'tiktok_variable_as_simple' => '', 'is_tiktok_add_to_cart_global' => '', 'is_pint_add_to_cart_global' => '', 'is_pint_page_visit_global' => '', 'track_traffic_source' => [], //for backcompat, not calling anywhere 'ga_track_traffic_source' => [], //for backcompat, not calling anywhere 'is_ga_add_to_cart_bump' => '', 'is_ga_custom_bump' => '', 'custom_aud_opt_conf' => [], 'allow_theme_css' => array( 'wfacp_checkout' ), 'bwf_enable_notification' => true, 'bwf_notification_frequency' => array( 'weekly', 'monthly' ), 'bwf_notification_user_selector' => array(), 'bwf_external_user' => array(), 'bwf_notification_time' => [ 'hours' => '10', 'minutes' => '00', 'ampm' => 'am' ], ) ); } public function get_option( $key = 'all' ) { if ( empty( $this->options ) ) { $this->setup_options(); } if ( 'all' === $key ) { return $this->options; } return isset( $this->options[ $key ] ) ? $this->options[ $key ] : false; } public function setup_options() { $db_options = get_option( 'bwf_gen_config', [] ); $db_options = ( ! empty( $db_options ) && is_array( $db_options ) ) ? array_map( function ( $val ) { return is_scalar( $val ) ? html_entity_decode( $val ) : $val; }, $db_options ) : array(); $this->options = wp_parse_args( $db_options, $this->default_general_settings() ); return $this->options; } public function maybe_add_js() { wp_enqueue_script( 'bwf-general-settings', plugin_dir_url( WooFunnel_Loader::$ultimate_path ) . 'woofunnels/assets/js/bwf-general-settings.js', [], BWF_VERSION ); wp_enqueue_style( 'bwf-general-settings', plugin_dir_url( WooFunnel_Loader::$ultimate_path ) . 'woofunnels/assets/css/bwf-general-settings.css', array(), BWF_VERSION ); wp_localize_script( 'bwf-general-settings', 'bwfAdminGen', $this->get_localized_data() ); } public function get_localized_data() { $localized_data = [ 'nonce_general_settings' => wp_create_nonce( 'bwf_general_settings_update' ), 'texts' => array( 'settings_success' => __( 'Changes saved', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'permalink_help_text' => __( 'Leave empty to remove slug completely from url', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch ), 'globalOptionsFields' => array( 'options' => $this->filter_admin_options( $this->get_option() ), 'legends_texts' => array( 'fb' => __( 'Facebook Pixel', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'ga' => __( 'Google Analytics', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'gad' => __( 'Google Ads', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'pint' => __( 'Pinterest', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'permalinks' => __( 'Permalinks', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'tiktok' => __( 'Tiktok', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'snapchat' => __( 'Snapchat', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch ), 'fields' => $this->all_fields() ) ]; $localized_data['is_pinterest_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_pinterest', false ) ) ? 1 : 0; $localized_data['is_tiktok_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_tiktok', false ) ) ? 1 : 0; $localized_data['is_snapchat_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_snapchat', false ) ) ? 1 : 0; $localized_data['is_gad_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_gad', false ) ) ? 1 : 0; $localized_data['is_pixel_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_pixel', false ) ) ? 1 : 0; $localized_data['is_ga_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_ga', false ) ) ? 1 : 0; $localized_data['if_fb_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_fb_checkout', false ) ) ? 1 : 0; $localized_data['if_fb_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_fb_purchase', false ) ) ? 1 : 0; $localized_data['if_ga_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_ga_checkout', false ) ) ? 1 : 0; $localized_data['if_ga_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_ga_purchase', false ) ) ? 1 : 0; $localized_data['if_gad_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_gad_checkout', false ) ) ? 1 : 0; $localized_data['if_gad_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_gad_purchase', false ) ) ? 1 : 0; $localized_data['if_pint_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_pint_checkout', false ) ) ? 1 : 0; $localized_data['if_pint_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_pint_purchase', false ) ) ? 1 : 0; $localized_data['if_tiktok_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_tiktok_checkout', false ) ) ? 1 : 0; $localized_data['if_tiktok_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_tiktok_purchase', false ) ) ? 1 : 0; $localized_data['if_snapchat_checkout_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_snapchat_checkout', false ) ) ? 1 : 0; $localized_data['if_snapchat_purchase_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_snapchat_purchase', false ) ) ? 1 : 0; $localized_data['if_landing_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_landing', false ) ) ? 1 : 0; $localized_data['if_optin_enabled'] = ( true === apply_filters( 'bwf_enable_ecommerce_integration_optin', false ) ) ? 1 : 0; $localized_data['if_ga4_enabled'] = ( true === apply_filters( 'bwf_enable_ga4', false ) ) ? 1 : 0; $checkout_page_slug = 'checkout'; $checkout_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'checkout' ) : 0; if ( $checkout_id > - 1 ) { $checkout_page = get_post( $checkout_id ); if ( $checkout_page instanceof WP_Post ) { $checkout_page_slug = $checkout_page->post_name; } } $localized_data['checkout_page_slug'] = $checkout_page_slug; $localized_data['permalink_structure'] = get_option( 'permalink_structure' ); $localized_data['errors'] = array( 'checkout_slug' => sprintf( __( 'Error: The permalink "%s" is reserved by Native WooCommerce Checkout Page. Try another permalink.', 'woofunnels' ), $checkout_page_slug ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment 'empty_base' => sprintf( __( 'Error: The current Permalinks settings does not allow blank values. Switch Permalink settings to \'Post name\'. Click Here To Change', 'woofunnels' ), admin_url( 'options-permalink.php' ) ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment ); return $localized_data; } public function get_localized_bwf_data() { $localized_data = []; $checkout_page_slug = 'checkout'; $checkout_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'checkout' ) : 0; if ( $checkout_id > - 1 ) { $checkout_page = get_post( $checkout_id ); if ( $checkout_page instanceof WP_Post ) { $checkout_page_slug = $checkout_page->post_name; } } $localized_data['checkout_page_slug'] = $checkout_page_slug; $localized_data['permalink_structure'] = get_option( 'permalink_structure' ); $localized_data['errors'] = array( 'checkout_slug' => sprintf( __( 'Error: The permalink "%s" is reserved by Native WooCommerce Checkout Page. Try another permalink.', 'woofunnels' ), $checkout_page_slug ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment 'empty_base' => sprintf( __( 'Error: The current Permalinks settings does not allow blank values. Switch Permalink settings to \'Post name\'. Click Here To Change', 'woofunnels' ), admin_url( 'options-permalink.php' ) ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment ); $localized_data['pro_status'] = []; $License = WooFunnels_licenses::get_instance(); if ( is_object( $License ) && is_array( $License->plugins_list ) && count( $License->plugins_list ) ) { foreach ( $License->plugins_list as $license ) { if ( in_array( $license['product_file_path'], array( '7b31c172ac2ca8d6f19d16c4bcd56d31026b1bd8', '913d39864d876b7c6a17126d895d15322e4fd2e8' ), true ) ) { continue; } $license_data = []; if ( isset( $license['_data'] ) && isset( $license['_data']['data_extra'] ) ) { $license_data = $license['_data']['data_extra']; if ( isset( $license_data['api_key'] ) ) { $license_data['api_key'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' . substr( $license_data['api_key'], - 6 ); $license_data['licence'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' . substr( $license_data['api_key'], - 6 ); } } if ( $license['plugin'] === 'FunnelKit Funnel Builder Pro' || $license['plugin'] === 'FunnelKit Funnel Builder Basic' ) { $data = array( 'id' => $license['product_file_path'], 'label' => $license['plugin'], 'type' => 'license', 'key' => $license['product_file_path'], 'license' => ! empty( $license_data ) ? $license_data : false, 'is_manually_deactivated' => ( isset( $license['_data']['manually_deactivated'] ) && true === bwf_string_to_bool( $license['_data']['manually_deactivated'] ) ) ? 1 : 0, 'activated' => ( isset( $license['_data']['activated'] ) && true === bwf_string_to_bool( $license['_data']['activated'] ) ) ? 1 : 0, 'expired' => ( isset( $license['_data']['expired'] ) && true === bwf_string_to_bool( $license['_data']['expired'] ) ) ? 1 : 0 ); $localized_data['pro_status'] = $data; } } } return $localized_data; } public function update_general_settings() { check_admin_referer( 'bwf_general_settings_update', '_nonce' ); $options = isset( $_POST['data'] ) ? bwf_clean( $_POST['data'] ) : 0; $resp = $this->update_global_settings_fields( $options ); wp_send_json( $resp ); } public function update_global_settings_fields( $options ) { $options = ( is_array( $options ) && wp_unslash( bwf_clean( $options ) ) ) ? bwf_clean( $options ) : 0; $resp = [ 'status' => false, 'msg' => __( 'Settings Updated', 'woofunnels' ), // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch 'data' => '', ]; $db_options = get_option( 'bwf_gen_config', [] ); if(!is_array($db_options)) { $db_options = []; } $options = array_merge( $this->default_general_settings(), $db_options, $options ); if ( $options !== 0 ) { update_option( 'bwf_gen_config', $options, true ); update_option( 'bwf_needs_rewrite', 'yes', true ); if ( class_exists( 'BWF_JSON_Cache' ) && method_exists( 'BWF_JSON_Cache', 'run_json_endpoints_cache_handling' ) ) { BWF_JSON_Cache::run_json_endpoints_cache_handling(); } $resp['status'] = true; } do_action( 'bwf_general_settings_updated', $options ); return $resp; } public function get_settings_link() { return apply_filters( 'bwf_general_settings_link', 'javascript:void(0)' ); } public function hide_from_menu() { global $woofunnels_menu_slug; global $parent_file, $plugin_page, $submenu_file; //phpcs:ignore if ( filter_input( INPUT_GET, 'tab', FILTER_UNSAFE_RAW ) === 'bwf_settings' ) : $parent_file = $woofunnels_menu_slug;//phpcs:ignore $submenu_file = 'admin.php?page=woofunnels_settings'; //phpcs:ignore endif; } /** * Filter options before passing it to the javascript * * @param $config array configuration array * * @return array */ public function filter_admin_options( $config ) { foreach ( $config as $key => &$data ) { /** * Check if data is 'false' (string) then make it blank so that checkboxes works accordingly */ if ( 'false' === $data ) { $config[ $key ] = ''; } } return $config; } public function maybe_change_title( $title ) { if ( 'bwf_settings' === filter_input( INPUT_GET, 'tab', FILTER_UNSAFE_RAW ) || 'bwf_settings' === filter_input( INPUT_GET, 'section', FILTER_UNSAFE_RAW ) ) { $admin_title = get_bloginfo( 'name' ); $title = sprintf( __( '%1$s ‹ %2$s — WordPress', 'woofunnels' ), 'FunnelKit', $admin_title ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment } return $title; } public function all_fields() { $static_config = include WooFunnel_Loader::$ultimate_path . '/helpers/settings.php'; $legacy = apply_filters( 'bwf_general_settings_fields', [] ); $legacy_altered = []; if ( count( $legacy ) > 0 ) { $i = 0; foreach ( $legacy as $key => $new ) { $legacy_altered[ $i ] = array( 'key' => $key ); $legacy_altered[ $i ] = array_merge( $legacy_altered[ $i ], $new ); $i ++; } } $static_config['permalinks']['fields'] = $legacy_altered; foreach ( $static_config as &$arr ) { $values = []; foreach ( $arr['fields'] as &$field ) { $values[ $field['key'] ] = $this->get_option( $field['key'] ); } $arr['values'] = $values; } return $static_config; } } } BWF_Admin_General_Settings::get_instance();