start_controls_section( 'section_pa_display_conditions', array( 'label' => sprintf( ' %s', __( 'Display Conditions', 'premium-addons-for-elementor' ) ), 'tab' => Controls_Manager::TAB_ADVANCED, ) ); $controls_obj = new PA_Controls_Handler(); $options = $controls_obj::$conditions; if ( class_exists( 'ACF' ) ) { $options = array_merge( array( 'acf' => array( 'label' => __( 'ACF (PRO)', 'premium-addons-for-elementor' ), 'options' => array( 'acf_choice' => __( 'Choice', 'premium-addons-for-elementor' ), 'acf_text' => __( 'Text', 'premium-addons-for-elementor' ), 'acf_boolean' => __( 'True/False', 'premium-addons-for-elementor' ), ), ), ), $options ); } if ( class_exists( 'woocommerce' ) ) { $options = array_merge( $options, array( 'woocommerce' => array( 'label' => __( 'WooCommerce (PRO)', 'premium-addons-for-elementor' ), 'options' => array( 'woo_cat_page' => __( 'Current Category Page', 'premium-addons-for-elementor' ), 'woo_product_cat' => __( 'Current Product Category', 'premium-addons-for-elementor' ), 'woo_product_price' => __( 'Current Product Price', 'premium-addons-for-elementor' ), 'woo_product_stock' => __( 'Current Product Stock', 'premium-addons-for-elementor' ), 'woo_orders' => __( 'Purchased/In Cart Orders', 'premium-addons-for-elementor' ), 'woo_category' => __( 'Purchased/In Cart Categories', 'premium-addons-for-elementor' ), 'woo_last_purchase' => __( 'Last Purchase In Cart', 'premium-addons-for-elementor' ), 'woo_total_price' => __( 'Amount In Cart', 'premium-addons-for-elementor' ), 'woo_cart_products' => __( 'Products In Cart', 'premium-addons-for-elementor' ), 'woo_purchase_products' => __( 'Purchased Products', 'premium-addons-for-elementor' ), ), ), ) ); } $options = apply_filters( 'pa_display_conditions', $options ); $element->add_control( 'pa_display_conditions_switcher', array( 'label' => __( 'Enable Display Conditions', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'render_type' => 'template', 'prefix_class' => 'pa-display-conditions-', 'frontend_available' => true, ) ); $element->add_control( 'pa_display_action', array( 'label' => __( 'Action', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'show', 'options' => array( 'show' => __( 'Show Element', 'premium-addons-for-elementor' ), 'hide' => __( 'Hide Element', 'premium-addons-for-elementor' ), ), 'condition' => array( 'pa_display_conditions_switcher' => 'yes', ), ) ); $element->add_control( 'pa_display_when', array( 'label' => __( 'Display When', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'any', 'options' => array( 'all' => __( 'All Conditions Are Met', 'premium-addons-for-elementor' ), 'any' => __( 'Any Condition is Met', 'premium-addons-for-elementor' ), ), 'condition' => array( 'pa_display_conditions_switcher' => 'yes', ), ) ); $repeater = new Repeater(); $repeater->add_control( 'pa_condition_key', array( 'label' => __( 'Type', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::SELECT, 'groups' => $options, 'default' => 'browser', 'label_block' => true, ) ); $options_conditions = apply_filters( 'pa_pro_display_conditions', array( 'url_string', 'url_referer', 'shortcode', 'woo_orders', 'woo_cat_page', 'woo_category', 'woo_product_price', 'woo_product_stock', 'woo_product_cat', 'woo_last_purchase', 'woo_total_price', 'woo_purchase_products', 'woo_cart_products', 'acf_choice', 'acf_text', 'acf_boolean', ) ); $get_pro = Helper_Functions::get_campaign_link( 'https://premiumaddons.com/pro', 'editor-page', 'wp-editor', 'get-pro' ); $repeater->add_control( 'display_conditions_notice', array( 'type' => Controls_Manager::RAW_HTML, 'raw' => __( 'This option is available in Premium Addons Pro.', 'premium-addons-for-elementor' ) . '' . __( 'Upgrade now!', 'premium-addons-for-elementor' ) . '', 'content_classes' => 'papro-upgrade-notice', 'condition' => array( 'pa_condition_key' => $options_conditions, ), ) ); $controls_obj->add_repeater_source_controls( $repeater ); $repeater->add_control( 'pa_condition_operator', array( 'type' => Controls_Manager::SELECT, 'default' => 'is', 'label_block' => true, 'options' => array( 'is' => __( 'Is', 'premium-addons-for-elementor' ), 'not' => __( 'Is Not', 'premium-addons-for-elementor' ), ), 'condition' => array( 'pa_condition_key!' => $options_conditions, ), ) ); $controls_obj->add_repeater_compare_controls( $repeater ); $repeater->add_control( 'pa_condition_timezone', array( 'label' => 'Timezone', 'type' => Controls_Manager::SELECT, 'default' => 'server', 'label_block' => true, 'options' => array( 'local' => __( 'Local Time', 'premium-addons-for-elementor' ), 'server' => __( 'Server Timezone', 'premium-addons-for-elementor' ), ), 'condition' => array( 'pa_condition_key' => array( 'date_range', 'time_range', 'date', 'day' ), ), ) ); $repeater->add_control( 'pa_condition_loc_method', array( 'label' => __( 'Location Detect Method', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'old', 'label_block' => true, 'options' => array( 'old' => __( 'Old', 'premium-addons-for-elementor' ), 'new' => __( 'New', 'premium-addons-for-elementor' ), ), 'condition' => array( 'pa_condition_key' => 'ip_location', ), ) ); $should_apply = apply_filters( 'pa_display_conditions_values', true ); $values = $repeater->get_controls(); if ( $should_apply ) { // $values = array_values( $values ); } $element->add_control( 'pa_condition_repeater', array( 'label' => __( 'Conditions', 'premium-addons-for-elementor' ), 'type' => Controls_Manager::REPEATER, 'label_block' => true, 'fields' => $values, 'title_field' => '<# print( pa_condition_key.replace(/_/g, " ").split(" ").map((s) => s.charAt(0).toUpperCase() + s.substring(1)).join(" ")) #>', 'prevent_empty' => false, 'condition' => array( 'pa_display_conditions_switcher' => 'yes', ), ) ); $this->add_helpful_information( $element ); $element->end_controls_section(); } /** * Add Help & Docs * * @since 4.9.39 * @access private * @param object $element for current element. */ private function add_helpful_information( $element ) { $element->add_control( 'pa_condition_info', array( 'label' => __( 'Help & Docs', 'premium-addons-for-elementor' ), 'separator' => 'before', 'type' => Controls_Manager::HEADING, 'condition' => array( 'pa_display_conditions_switcher' => 'yes', ), ) ); $docs = array( 'https://premiumaddons.com/docs/elementor-display-conditions-tutorial/' => __( 'Getting started »', 'premium-addons-for-elementor' ), 'https://premiumaddons.com/docs/elementor-editor-not-loading-with-display-conditions/' => __( 'Fix editor not loading with Display Conditions enabled »', 'premium-addons-for-elementor' ), 'https://premiumaddons.com/docs/how-to-show-hide-element-based-on-browser-elementor-display-conditions/' => __( 'Show/Hide Element Based on Browser »', 'premium-addons-for-elementor' ), 'https://premiumaddons.com/docs/how-to-show-hide-element-on-specific-time-range-elementor-display-conditions/' => __( 'Show/Hide Element Based on Time Range »', 'premium-addons-for-elementor' ), 'https://premiumaddons.com/docs/how-to-show-hide-element-with-location-elementor-display-conditions/' => __( 'Show/Hide Element Based on Location »', 'premium-addons-for-elementor' ), ); $doc_index = 1; foreach ( $docs as $url => $title ) { $doc_url = Helper_Functions::get_campaign_link( $url, 'editor-page', 'wp-editor', 'get-support' ); $element->add_control( 'pa_condition_doc_' . $doc_index, array( 'type' => Controls_Manager::RAW_HTML, 'raw' => sprintf( '%s', $doc_url, $title ), 'content_classes' => 'editor-pa-doc', 'condition' => array( 'pa_display_conditions_switcher' => 'yes', ), ) ); ++$doc_index; } } /** * Check Script Enqueue * * Check if the script files should be loaded. * * @since 4.9.21 * @access public * * @param object $element for current element. */ public function check_script_enqueue( $element ) { if ( self::$load_script ) { return; } $settings = $element->get_active_settings(); if ( ! empty( $settings[ 'pa_display_conditions_switcher' ] ) ) { $this->enqueue_scripts(); self::$load_script = true; remove_action( 'elementor/frontend/before_render', array( $this, 'check_script_enqueue' ) ); } } /** * Returns an instance of this class. * * @access public */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } }