|
<?php |
|
|
|
use Elementor\Controls_Manager; |
|
use ElementorPro\Modules\DisplayConditions\Classes\Comparator_Provider; |
|
use ElementorPro\Modules\DisplayConditions\Classes\Comparators_Checker; |
|
use ElementorPro\Modules\DisplayConditions\Classes\DynamicTags\Custom_Fields_Data_Provider; |
|
use ElementorPro\Modules\DisplayConditions\Classes\DynamicTags\Dynamic_Tags_Data_Provider; |
|
use ElementorPro\Modules\DisplayConditions\Conditions\Dynamic_Tags_Condition; |
|
|
|
if ( ! defined( 'ABSPATH' ) ) { |
|
exit; // Exit if accessed directly. |
|
} |
|
|
|
class Seg_Dynamic_Tags_Condition extends Dynamic_Tags_Condition { |
|
|
|
/** |
|
* @var Dynamic_Tags_Data_Provider |
|
*/ |
|
private $dynamic_tags_data_provider; |
|
|
|
/** |
|
* @var Custom_Fields_Data_Provider |
|
*/ |
|
private $custom_fields_data_provider; |
|
|
|
public function __construct() { |
|
parent::__construct(); |
|
|
|
$this->dynamic_tags_data_provider = new Dynamic_Tags_Data_Provider(); |
|
$this->custom_fields_data_provider = new Custom_Fields_Data_Provider(); |
|
} |
|
|
|
public function get_name(): string { |
|
return 'seg_dynamic_tags'; |
|
} |
|
|
|
public function get_label(): string { |
|
return esc_html__( 'Dynamic Tag Empty', 'elementor-pro' ); |
|
} |
|
|
|
public function get_group() { |
|
return 'other'; |
|
} |
|
|
|
public function check( $args ): bool { |
|
$value = $this->get_condition_value( $args ); |
|
if ( false === $value ) { |
|
return false; |
|
} |
|
|
|
if(is_string( $value )) { |
|
return Comparators_Checker::check_string_contains_and_empty( $args['comparator'], $args['dynamic_tag_value'] ?? '', $value ); |
|
} else { |
|
switch ( $args['comparator'] ) { |
|
case Comparator_Provider::COMPARATOR_IS_EMPTY: |
|
return empty( $actual_value ); |
|
|
|
case Comparator_Provider::COMPARATOR_IS_NOT_EMPTY: |
|
return ! empty( $actual_value ); |
|
|
|
default: |
|
return false; |
|
} |
|
} |
|
} |
|
|
|
public function get_options() { |
|
$this->add_control( |
|
'dynamic_tag', |
|
[ |
|
'type' => Controls_Manager::SELECT, |
|
'options' => $this->dynamic_tags_data_provider->get_control_options() + $this->custom_fields_data_provider->get_control_options(), |
|
'default' => $this->dynamic_tags_data_provider->get_default_control_option(), |
|
'disabled_options' => ! current_user_can( 'manage_options' ) ? [ 'author_info_email' ] : [], |
|
'disabled_type' => 'hidden', |
|
] |
|
); |
|
|
|
$this->add_control( |
|
'comparator', |
|
[ |
|
'type' => Controls_Manager::SELECT, |
|
'options' => Comparator_Provider::get_comparators( |
|
[ |
|
Comparator_Provider::COMPARATOR_IS_EMPTY, |
|
Comparator_Provider::COMPARATOR_IS_NOT_EMPTY, |
|
] |
|
), |
|
'default' => Comparator_Provider::COMPARATOR_IS_NOT_EMPTY, |
|
] |
|
); |
|
} |
|
|
|
/** |
|
* Conditionally retrieve the value of a dynamic tag or custom field. |
|
* |
|
* @return string | bool |
|
*/ |
|
private function get_condition_value( array $args ) { |
|
$dt_value = $this->dynamic_tags_data_provider->get_value( $args ); |
|
|
|
if ( $dt_value ) { |
|
return $dt_value; |
|
} |
|
|
|
return $this->custom_fields_data_provider->get_value( $args ); |
|
} |
|
|
|
} |