2364 lines
68 KiB
PHP
2364 lines
68 KiB
PHP
<?php
|
|
|
|
namespace Essential_Addons_Elementor\Pro\Extensions;
|
|
|
|
use Elementor\Controls_Manager;
|
|
use Elementor\Element_Base;
|
|
use Elementor\Repeater;
|
|
use \Elementor\Plugin;
|
|
use \Essential_Addons_Elementor\Classes\Helper as ControlsHelper;
|
|
use Essential_Addons_Elementor\Pro\Classes\Helper;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
class Conditional_Display {
|
|
|
|
/**
|
|
* Initialize hooks
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'elementor/element/common/_section_style/after_section_end', [ $this, 'register_controls' ] );
|
|
add_action( 'elementor/element/column/section_advanced/after_section_end', [ $this, 'register_controls' ] );
|
|
add_action( 'elementor/element/section/section_advanced/after_section_end', [ $this, 'register_controls' ] );
|
|
add_action( 'elementor/element/container/section_layout/after_section_end', [ $this, 'register_controls' ] );
|
|
add_filter( 'elementor/frontend/widget/should_render', [ $this, 'content_render' ], 10, 2 );
|
|
add_filter( 'elementor/frontend/column/should_render', [ $this, 'content_render' ], 10, 2 );
|
|
add_filter( 'elementor/frontend/section/should_render', [ $this, 'content_render' ], 10, 2 );
|
|
add_filter( 'elementor/frontend/container/should_render', [ $this, 'content_render' ], 10, 2 );
|
|
}
|
|
|
|
public function register_controls( $element ) {
|
|
$element->start_controls_section(
|
|
'eael_conditional_logic_section',
|
|
[
|
|
'label' => __( '<i class="eaicon-logo"></i> Conditional Display', 'essential-addons-elementor' ),
|
|
'tab' => Controls_Manager::TAB_ADVANCED
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_notice',
|
|
[
|
|
'raw' => esc_html__( 'Conditional Display will take effect only on preview or live page, and not while editing in Elementor.', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::RAW_HTML,
|
|
'content_classes' => 'elementor-descriptor',
|
|
'condition' => [
|
|
'eael_cl_enable' => 'yes'
|
|
]
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_enable',
|
|
[
|
|
'label' => __( 'Enable Conditional Display', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
'default' => '',
|
|
'label_on' => __( 'Yes', 'essential-addons-elementor' ),
|
|
'label_off' => __( 'No', 'essential-addons-elementor' ),
|
|
'return_value' => 'yes',
|
|
'style_transfer' => false
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_visibility_action',
|
|
[
|
|
'label' => __( 'Visibility Action', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'show' => [
|
|
'title' => esc_html__( 'Show', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-eye-solid',
|
|
],
|
|
'hide' => [
|
|
'title' => esc_html__( 'Hide', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-eye-slash-solid',
|
|
],
|
|
'forcefully_hide' => [
|
|
'title' => esc_html__( 'Hide Without Condition', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-ban-solid',
|
|
],
|
|
],
|
|
'default' => 'show',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'eael_cl_enable' => 'yes',
|
|
],
|
|
'style_transfer' => false
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_action_apply_if',
|
|
[
|
|
'label' => __( 'Action Applicable if', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'all' => [
|
|
'title' => esc_html__( 'True All Logic', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-dice-six-solid',
|
|
],
|
|
'any' => [
|
|
'title' => esc_html__( 'True Any Logic', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-dice-one-solid',
|
|
],
|
|
],
|
|
'default' => 'all',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'eael_cl_enable' => 'yes',
|
|
'eael_cl_visibility_action!' => 'forcefully_hide',
|
|
],
|
|
'style_transfer' => false
|
|
]
|
|
);
|
|
|
|
$repeater = new Repeater();
|
|
|
|
$repeater->add_control(
|
|
'logic_type',
|
|
[
|
|
'label' => __( 'Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'default' => 'login_status',
|
|
'options' => [
|
|
'login_status' => __( 'User Status', 'essential-addons-elementor' ),
|
|
'post_type' => __( 'Post Type', 'essential-addons-elementor' ),
|
|
'browser' => __( 'Browser', 'essential-addons-elementor' ),
|
|
'date_time' => __( 'Date & Time', 'essential-addons-elementor' ),
|
|
'recurring_day' => __( 'Recurring Day', 'essential-addons-elementor' ),
|
|
'dynamic' => __( 'Dynamic Field', 'essential-addons-elementor' ),
|
|
'query_string' => __( 'Query String', 'essential-addons-elementor' ),
|
|
'visit_count' => __( 'Visit Count', 'essential-addons-elementor' ),
|
|
'url_contains' => __( 'URL Contains', 'essential-addons-elementor' ),
|
|
'archive' => __( 'Archive', 'essential-addons-elementor' ),
|
|
'woo_products' => __( 'Woo Products', 'essential-addons-elementor' ),
|
|
'woo_cart' => __( 'Woo Cart', 'essential-addons-elementor' ),
|
|
'woo_orders' => __( 'Woo Orders', 'essential-addons-elementor' ),
|
|
],
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'logic_operator_between',
|
|
[
|
|
'label' => __( 'Logic Operator', 'essential-addons-elementor' ),
|
|
'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'between' => [
|
|
'title' => esc_html__( 'Include', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_between' => [
|
|
'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'between',
|
|
'toggle' => false,
|
|
'conditions' => [
|
|
'relation' => 'or',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'browser',
|
|
],
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'post_type',
|
|
],
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'query_string',
|
|
],
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'archive',
|
|
],
|
|
[
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'login_status',
|
|
],
|
|
[
|
|
'name' => 'login_status_operand',
|
|
'operator' => '===',
|
|
'value' => 'logged_in',
|
|
],
|
|
[
|
|
'name' => 'user_and_role',
|
|
'operator' => '!==',
|
|
'value' => '',
|
|
],
|
|
],
|
|
],
|
|
[
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_products',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '!in',
|
|
'value' => [ 'amount', 'count' ],
|
|
],
|
|
],
|
|
]
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
//Logic Type: User Status
|
|
$this->user_status_controls( $repeater );
|
|
|
|
//Logic Type: Post Type
|
|
$this->post_types_controls( $repeater );
|
|
|
|
//Logic Type: Browser
|
|
$this->browser_logics_controls( $repeater );
|
|
|
|
//Logic Type: Dynamic Field
|
|
$this->dynamic_logic_controls( $repeater );
|
|
|
|
//Logic Type: Date & Time and Recurring Day
|
|
$this->date_time_controls( $repeater );
|
|
|
|
//Logic Type: Query String
|
|
$this->query_string_controls( $repeater );
|
|
|
|
//Logic Type: URL Contains
|
|
$this->url_contains_controls( $repeater );
|
|
|
|
//Logic Type: Archive
|
|
$this->archive_controls( $repeater );
|
|
|
|
//Logic Type: Woo Cart & Woo Products
|
|
$this->woocommerce_controls( $repeater );
|
|
|
|
$repeater->add_control(
|
|
'user_visit_count_type',
|
|
[
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'less' => [
|
|
'title' => esc_html__( 'Less Than', 'textdomain' ),
|
|
'icon' => 'eicon-chevron-left',
|
|
],
|
|
'greater' => [
|
|
'title' => esc_html__( 'Greater Than', 'textdomain' ),
|
|
'icon' => 'eicon-chevron-right',
|
|
],
|
|
],
|
|
'default' => 'less',
|
|
'condition' => [
|
|
'logic_type' => 'visit_count',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'user_visit_count',
|
|
[
|
|
'label' => esc_html__( 'Visit Count', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'default' => 3,
|
|
'condition' => [
|
|
'logic_type' => 'visit_count',
|
|
]
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_logics',
|
|
[
|
|
'label' => __( 'Logics', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::REPEATER,
|
|
'fields' => $repeater->get_controls(),
|
|
'default' => [
|
|
[
|
|
'logic_type' => 'login_status',
|
|
'login_status_operand' => 'logged_in',
|
|
],
|
|
],
|
|
'style_transfer' => false,
|
|
'title_field' => '{{{ ea_conditional_logic_type_title(logic_type) }}}',
|
|
'condition' => [
|
|
'eael_cl_enable' => 'yes',
|
|
'eael_cl_visibility_action!' => 'forcefully_hide',
|
|
]
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_fallback',
|
|
[
|
|
'label' => esc_html__( 'Fallback', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'content' => [
|
|
'title' => esc_html__( 'Content', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-text-area',
|
|
],
|
|
'template' => [
|
|
'title' => esc_html__( 'Template', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-folder-o',
|
|
],
|
|
'none' => [
|
|
'title' => esc_html__( 'No Fallback', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-ban',
|
|
],
|
|
],
|
|
'default' => 'none',
|
|
'separator' => 'before',
|
|
'condition' => [
|
|
'eael_cl_enable' => 'yes'
|
|
]
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_fallback_content',
|
|
[
|
|
'label' => esc_html__( 'Content', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::WYSIWYG,
|
|
'default' => esc_html__( 'The content is hidden', 'essential-addons-elementor' ),
|
|
'placeholder' => esc_html__( 'Type your content here', 'essential-addons-elementor' ),
|
|
'condition' => [
|
|
'eael_cl_fallback' => 'content',
|
|
'eael_cl_enable' => 'yes'
|
|
]
|
|
]
|
|
);
|
|
|
|
$element->add_control(
|
|
'eael_cl_fallback_template',
|
|
[
|
|
'label' => __( 'Choose Template', 'essential-addons-elementor' ),
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'post_type',
|
|
'source_type' => 'elementor_library',
|
|
'label_block' => true,
|
|
'condition' => [
|
|
'eael_cl_fallback' => 'template',
|
|
'eael_cl_enable' => 'yes'
|
|
],
|
|
]
|
|
);
|
|
|
|
$element->end_controls_section();
|
|
}
|
|
|
|
/**
|
|
* Get All editable roles and return array with simple slug|name pare
|
|
*
|
|
* @param $first_index
|
|
* @param $output
|
|
*
|
|
* @return array|string
|
|
*/
|
|
public function get_editable_roles() {
|
|
$wp_roles = [ '' => __( 'Select', 'essential-addons-elementor' ) ];
|
|
$all_roles = wp_roles()->roles;
|
|
$editable_roles = apply_filters( 'editable_roles', $all_roles );
|
|
|
|
foreach ( $editable_roles as $slug => $editable_role ) {
|
|
$wp_roles[ $slug ] = $editable_role['name'];
|
|
}
|
|
|
|
return $wp_roles;
|
|
}
|
|
|
|
/**
|
|
* Get all browser list and return array with simple slug|name pare
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_browser_list() {
|
|
return [
|
|
'chrome' => __( 'Google Chrome', 'essential-addons-elementor' ),
|
|
'firefox' => __( 'Mozilla Firefox', 'essential-addons-elementor' ),
|
|
'safari' => __( 'Safari', 'essential-addons-elementor' ),
|
|
'i_safari' => __( 'Iphone Safari', 'essential-addons-elementor' ),
|
|
'opera' => __( 'Opera', 'essential-addons-elementor' ),
|
|
'edge' => __( 'Edge', 'essential-addons-elementor' ),
|
|
'ie' => __( 'Internet Explorer', 'essential-addons-elementor' ),
|
|
'mac_ie' => __( 'Internet Explorer for Mac OS X', 'essential-addons-elementor' ),
|
|
'netscape4' => __( 'Netscape 4', 'essential-addons-elementor' ),
|
|
'lynx' => __( 'Lynx', 'essential-addons-elementor' ),
|
|
'others' => __( 'Others', 'essential-addons-elementor' ),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get all days list of a week and return array with simple slug|name pare
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_days_list() {
|
|
return [
|
|
'sun' => __( 'Sunday', 'essential-addons-elementor' ),
|
|
'mon' => __( 'Monday', 'essential-addons-elementor' ),
|
|
'tue' => __( 'Tuesday', 'essential-addons-elementor' ),
|
|
'wed' => __( 'Wednesday', 'essential-addons-elementor' ),
|
|
'thu' => __( 'Thursday', 'essential-addons-elementor' ),
|
|
'fri' => __( 'Friday', 'essential-addons-elementor' ),
|
|
'sat' => __( 'Saturday', 'essential-addons-elementor' )
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get current browser
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_current_browser() {
|
|
global $is_lynx, $is_gecko, $is_winIE, $is_macIE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_edge;
|
|
|
|
$browser = 'others';
|
|
|
|
switch ( true ) {
|
|
case $is_chrome:
|
|
$browser = 'chrome';
|
|
break;
|
|
case $is_gecko:
|
|
$browser = 'firefox';
|
|
break;
|
|
case $is_safari:
|
|
$browser = 'safari';
|
|
break;
|
|
case $is_iphone:
|
|
$browser = 'i_safari';
|
|
break;
|
|
case $is_opera:
|
|
$browser = 'opera';
|
|
break;
|
|
case $is_edge:
|
|
$browser = 'edge';
|
|
break;
|
|
case $is_winIE:
|
|
$browser = 'ie';
|
|
break;
|
|
case $is_macIE:
|
|
$browser = 'mac_ie';
|
|
break;
|
|
case $is_NS4:
|
|
$browser = 'netscape4';
|
|
break;
|
|
case $is_lynx:
|
|
$browser = 'lynx';
|
|
break;
|
|
|
|
}
|
|
|
|
return $browser;
|
|
}
|
|
|
|
public function parse_arg( $arg ) {
|
|
$arg = wp_parse_args( $arg, [
|
|
'eael_cl_enable' => '',
|
|
'eael_cl_visibility_action' => '',
|
|
'eael_cl_logics' => [],
|
|
'eael_cl_action_apply_if' => '',
|
|
] );
|
|
|
|
return $arg;
|
|
}
|
|
|
|
/**
|
|
* Check all logics and return the final result
|
|
*
|
|
* @param $settings
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function check_logics( $settings ) {
|
|
$return = false;
|
|
$needed_any_logic_true = $settings['eael_cl_action_apply_if'] === 'any';
|
|
$needed_all_logic_true = $settings['eael_cl_action_apply_if'] === 'all';
|
|
|
|
foreach ( $settings['eael_cl_logics'] as $cl_logic ) {
|
|
switch ( $cl_logic['logic_type'] ) {
|
|
case 'login_status':
|
|
$return = $cl_logic['login_status_operand'] === 'logged_in' ? is_user_logged_in() : ! is_user_logged_in();
|
|
|
|
if ( is_user_logged_in() && $cl_logic['user_and_role'] !== '' ) {
|
|
if ( $cl_logic['user_and_role'] === 'user_role' ) {
|
|
$user_roles = get_userdata( get_current_user_id() )->roles;
|
|
$operand = $cl_logic['user_role_operand_multi'];
|
|
$result = array_intersect( $user_roles, $operand );
|
|
$return = ( $cl_logic['logic_operator_between'] === 'between' ) ? count( $result ) > 0 : count( $result ) == 0;
|
|
} elseif ( $cl_logic['user_and_role'] === 'user' ) {
|
|
$user = get_current_user_id();
|
|
$operand = array_map( 'intval', (array) $cl_logic['user_operand'] );
|
|
$return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $user, $operand ) : ! in_array( $user, $operand );
|
|
}
|
|
}
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
case 'post_type':
|
|
$ID = get_the_ID();
|
|
$post_type_operand = $cl_logic['post_type_operand'];
|
|
$operand = empty( $post_type_operand ) ? (array) $cl_logic['post_operand'] : (array) $cl_logic["post_operand_{$post_type_operand}"];
|
|
|
|
if ( count( $operand ) ) {
|
|
$return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $ID, $operand ) : ! in_array( $ID, $operand );
|
|
} else {
|
|
$post_type = get_post_type( $ID );
|
|
$return = $cl_logic['logic_operator_between'] === 'between' ? $post_type === $post_type_operand : $post_type !== $post_type_operand;
|
|
}
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
case 'browser':
|
|
$browser = $this->get_current_browser();
|
|
$operand = (array) $cl_logic['browser_operand'];
|
|
$return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $browser, $operand ) : ! in_array( $browser, $operand );
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
case 'date_time':
|
|
$current_time = current_time( 'U' );
|
|
$from = ( $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'not_equal' ) ? strtotime( "{$cl_logic['single_date']} 00:00:00" ) : strtotime( $cl_logic['from_date'] );
|
|
$to = ( $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'not_equal' ) ? strtotime( "{$cl_logic['single_date']} 23:59:59" ) : strtotime( $cl_logic['to_date'] );
|
|
$return = $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'between' ? $from <= $current_time && $current_time <= $to : $from >= $current_time || $current_time >= $to;
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
case 'recurring_day':
|
|
$current_time = current_time( 'U' );
|
|
$from_date = isset( $cl_logic['recurring_days_duration_from'] ) && $cl_logic['recurring_days_duration_from'] ? strtotime( "{$cl_logic['recurring_days_duration_from']} 00:00:00" ) : $current_time - WEEK_IN_SECONDS;
|
|
$to_date = isset( $cl_logic['recurring_days_duration_to'] ) && $cl_logic['recurring_days_duration_to'] ? strtotime( "{$cl_logic['recurring_days_duration_to']} 23:59:59" ) : $current_time + WEEK_IN_SECONDS;
|
|
$is_today = isset( $cl_logic['recurring_days_all'] ) && $cl_logic['recurring_days_all'] === 'yes' || in_array( strtolower( date( 'D' ) ), $cl_logic['recurring_days'] );
|
|
$from_time = isset( $cl_logic['from_time'] ) ? strtotime( $cl_logic['from_time'] ) : strtotime( '00:00:00' );
|
|
$to_time = isset( $cl_logic['to_time'] ) ? strtotime( $cl_logic['to_time'] ) : strtotime( '23:59:59' );
|
|
|
|
$return = $is_today && $from_date < $current_time && $to_date > $current_time && $from_time < $current_time && $to_time > $current_time;
|
|
$return = $cl_logic['recurring_day_logic'] === 'between' ? $return : ! $return;
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
case 'dynamic':
|
|
if ( defined( 'ELEMENTOR_PRO_VERSION' ) ) {
|
|
$dynamic_field = strip_tags( $cl_logic['dynamic_field'] );
|
|
$dynamic_field = strtolower( $dynamic_field );
|
|
$dynamic_field = explode( '|', $dynamic_field );
|
|
$dynamic_field = array_map( 'trim', $dynamic_field );
|
|
$value = explode( '|', strtolower( $cl_logic['dynamic_operand'] ) );
|
|
$value = array_map( 'trim', $value );
|
|
$result = array_intersect( $dynamic_field, $value );
|
|
$return = ( $cl_logic['logic_operator_dynamic'] === 'between' ) ? count( $result ) > 0 : count( $result ) == 0;
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 'query_string':
|
|
|
|
$return = $cl_logic['query_key'] && isset( $_GET[ $cl_logic['query_key'] ] ) && sanitize_text_field( $_GET[ $cl_logic['query_key'] ] ) === $cl_logic['query_value'];
|
|
$return = $cl_logic['logic_operator_between'] === 'between' ? $return : ! $return;
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
|
|
case 'visit_count':
|
|
$cookie_key = 'eael_' . md5( 'visit_count_' . $cl_logic['_id'] );
|
|
$visit_count = isset( $_COOKIE[ $cookie_key ] ) ? $_COOKIE[ $cookie_key ]: 0;
|
|
$return = $cl_logic['user_visit_count'] && absint( $cl_logic['user_visit_count'] ) > $visit_count;
|
|
$return = $cl_logic['user_visit_count_type'] === 'less' ? $return: ! $return;
|
|
$visit_count++;
|
|
?>
|
|
<script>
|
|
const d = new Date();
|
|
d.setTime(d.getTime() + (1*24*60*60*1000));
|
|
let expires = "expires="+ d.toUTCString();
|
|
document.cookie = "<?php echo esc_html( $cookie_key ); ?>=" + <?php echo esc_html( $visit_count ); ?> + ";" + expires + ";path=/";
|
|
</script>
|
|
<?php
|
|
|
|
break;
|
|
|
|
case 'url_contains':
|
|
|
|
$url = 'current' === $cl_logic['url_contains_url_type'] ? $_SERVER['REQUEST_URI'] : $_SERVER['HTTP_REFERER'];
|
|
$string = trim( $cl_logic['url_contains_string'] );
|
|
if( $string ){
|
|
$return = str_contains( $url, $string );
|
|
$return = 'in' === $cl_logic['url_contains_logic_operator'] ? $return : ! $return;
|
|
}
|
|
|
|
if ( $needed_any_logic_true && $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
if ( $needed_all_logic_true && ! $return ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
|
|
case 'archive':
|
|
|
|
if( 'search' === $cl_logic['archive_type'] ){
|
|
$return = is_search();
|
|
|
|
} else if( 'post' === $cl_logic['archive_type'] ) {
|
|
|
|
if( 'post' === $cl_logic['archive_post_type'] ) {
|
|
$return = is_home();
|
|
} else if ( function_exists( 'WC' ) && 'product' === $cl_logic['archive_post_type'] ){
|
|
$return = is_shop();
|
|
} else if ( '' !== $cl_logic['archive_post_type'] ){
|
|
$return = is_post_type_archive( $cl_logic['archive_post_type'] );
|
|
}
|
|
|
|
} else if( 'taxonomy' === $cl_logic['archive_type'] ){
|
|
|
|
if( 'category' === $cl_logic['archive_taxonomies'] ){
|
|
$return = is_category();
|
|
|
|
} else if ( 'post_tag' === $cl_logic['archive_taxonomies'] ) {
|
|
$return = is_tag();
|
|
|
|
} else if ( 'post_format' === $cl_logic['archive_taxonomies'] ) {
|
|
$return = has_post_format();
|
|
|
|
} else if ( '' !== $cl_logic['archive_taxonomies'] ){
|
|
$return = is_tax( $cl_logic['archive_taxonomies'] );
|
|
|
|
}
|
|
} else if( 'terms' === $cl_logic['archive_type'] ){
|
|
if( 'category' === $cl_logic['archive_taxonomies'] && isset( $cl_logic['archive_terms_for_category'] ) && ! empty( $cl_logic['archive_terms_for_category'] ) ){
|
|
$return = is_category( $cl_logic['archive_terms_for_category'] );
|
|
|
|
} else if ( 'post_tag' === $cl_logic['archive_taxonomies'] && isset( $cl_logic['archive_terms_for_post_tag'] ) && ! empty( $cl_logic['archive_terms_for_post_tag'] ) ) {
|
|
$return = is_tag( $cl_logic['archive_terms_for_post_tag'] );
|
|
|
|
} else if ( 'post_format' === $cl_logic['archive_taxonomies'] && isset( $cl_logic['archive_terms_for_post_format'] ) && ! empty( $cl_logic['archive_terms_for_post_format'] ) ) {
|
|
foreach( $cl_logic['archive_terms_for_post_format'] as $post_format ){
|
|
if( has_post_format( $post_format ) ){
|
|
$return = has_post_format( $post_format );
|
|
}
|
|
}
|
|
|
|
} else if ( '' !== $cl_logic['archive_taxonomies'] && isset( $cl_logic['archive_terms_for_' . $cl_logic['archive_taxonomies'] ] ) && ! empty( isset( $cl_logic['archive_terms_for_' . $cl_logic['archive_taxonomies'] ] ) ) ){
|
|
$return = is_tax( $cl_logic['archive_taxonomies'], $cl_logic['archive_terms_for_' . $cl_logic['archive_taxonomies'] ] );
|
|
}
|
|
} else if( 'author' === $cl_logic['archive_type'] && is_author() ){
|
|
if( "user" === $cl_logic['archive_author_type'] ){
|
|
if( empty( $cl_logic['archive_users'] ) ){
|
|
$return = is_author();
|
|
|
|
} else if( ! empty( $cl_logic['archive_users'] ) ){
|
|
$author_id = get_queried_object_id();
|
|
$return = in_array( $author_id, $cl_logic['archive_users'] );
|
|
}
|
|
|
|
} else if( "user_role" === $cl_logic['archive_author_type'] ){
|
|
if( empty( $cl_logic['archive_user_role'] ) ){
|
|
$return = is_author();
|
|
|
|
} else if( ! empty( $cl_logic['archive_user_role'] ) ){
|
|
$author_id = get_queried_object_id();
|
|
$author = get_user_by( 'ID', $author_id );
|
|
$has_role = array_intersect( $cl_logic['archive_user_role'], $author->roles );
|
|
$return = count( $has_role ) > 0;
|
|
}
|
|
}
|
|
} else if ( 'date' === $cl_logic['archive_type'] ){
|
|
if( "" === $cl_logic['archive_date_from'] || "" === $cl_logic['archive_date_to'] ){
|
|
$return = is_date();
|
|
|
|
} else if ( is_year() ) {
|
|
$start_year = date( 'Y', strtotime( $cl_logic['archive_date_from'] ) );
|
|
$end_year = date( 'Y', strtotime( $cl_logic['archive_date_to'] ) );
|
|
$archive_year = get_query_var( 'year' );
|
|
$return = $start_year <= $archive_year && $archive_year <= $end_year;
|
|
|
|
} elseif ( is_month() ) {
|
|
$start = strtotime( $cl_logic['archive_date_from'] );
|
|
$end = strtotime( $cl_logic['archive_date_to'] );
|
|
$archive_year = get_query_var( 'year' );
|
|
$archive_month = get_query_var( 'monthnum' );
|
|
$time_str = strtotime("$archive_year-$archive_month-01");
|
|
$month_first = strtotime( date('Y-m-01', $time_str ) );
|
|
$month_last = strtotime( date('Y-m-t', $time_str ) );
|
|
$return = $start <= $month_first && $month_last <= $end;
|
|
|
|
} elseif ( is_day() ) {
|
|
$start = strtotime( $cl_logic['archive_date_from'] );
|
|
$end = strtotime( $cl_logic['archive_date_to'] );
|
|
$archive_year = get_query_var( 'year' );
|
|
$archive_month = get_query_var( 'monthnum' );
|
|
$archive_day = get_query_var( 'day' );
|
|
$archive_date = strtotime("$archive_year-$archive_month-$archive_day");
|
|
$return = $start <= $archive_date && $archive_date <= $end;
|
|
|
|
}
|
|
}
|
|
|
|
if ( $cl_logic['logic_operator_between'] === 'not_between' ) {
|
|
$return = ! $return;
|
|
}
|
|
|
|
if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) {
|
|
break( 2 );
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
case 'woo_cart':
|
|
|
|
if ( ! function_exists( 'WC' ) ) {
|
|
break;
|
|
}
|
|
|
|
$is_cart_empty = WC()->cart->is_empty();
|
|
|
|
if ( $cl_logic['woo_cart_logic_operator'] === 'empty' ) {
|
|
$return = $is_cart_empty;
|
|
} else if ( ! $is_cart_empty ) {
|
|
$cart_items = WC()->cart->get_cart_contents();
|
|
$compare_to = $compare_with = [];
|
|
|
|
if ( $cl_logic['woo_cart_item_type'] === 'product' && ! empty( $cl_logic['product_ids'] ) ) {
|
|
$cart_item_ids = [];
|
|
foreach ( $cart_items as $item ) {
|
|
$cart_item_ids[] = $item['product_id'];
|
|
}
|
|
|
|
$compare_to = array_unique( $cart_item_ids );
|
|
$compare_with = $cl_logic['product_ids'];
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'ptype' && ! empty( $cl_logic['product_types'] ) ) {
|
|
$cart_item_types = [];
|
|
foreach ( $cart_items as $item ) {
|
|
$cart_item_types[] = $item['data']->get_type();
|
|
}
|
|
|
|
$compare_to = array_unique( $cart_item_types );
|
|
$compare_with = $cl_logic['product_types'];
|
|
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'category' && ! empty( $cl_logic['product_categories'] ) ) {
|
|
$product_category_ids = [];
|
|
foreach ( $cart_items as $item ) {
|
|
$product_category_ids = array_merge( $product_category_ids, $item['data']->get_category_ids() );
|
|
}
|
|
|
|
$compare_to = array_unique( $product_category_ids );
|
|
$compare_with = $cl_logic['product_categories'];
|
|
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'count' && $cl_logic['cart_item_count'] > 0 ){
|
|
$item_count = WC()->cart->get_cart_contents_count();
|
|
|
|
if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) {
|
|
$return = $item_count < absint( $cl_logic['cart_item_count'] );
|
|
} else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) {
|
|
$return = $item_count > absint( $cl_logic['cart_item_count'] );
|
|
}
|
|
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'amount' && $cl_logic['cart_item_amount'] > 0 ){
|
|
$item_total = WC()->cart->subtotal;
|
|
|
|
if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) {
|
|
$return = $item_total < floatval( $cl_logic['cart_item_amount'] );
|
|
} else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) {
|
|
$return = $item_total > floatval( $cl_logic['cart_item_amount'] );
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $compare_to ) && ! empty( $compare_with ) ) {
|
|
$has_items = array_intersect( $compare_with, $compare_to );
|
|
|
|
if ( $cl_logic['woo_cart_logic_operator'] === 'in' ) {
|
|
$return = count( $has_items ) > 0;
|
|
} else if ( $cl_logic['woo_cart_logic_operator'] === 'not_in' ) {
|
|
$return = count( $has_items ) < 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) {
|
|
break( 2 );
|
|
}
|
|
|
|
case 'woo_products':
|
|
|
|
if ( ! function_exists( 'WC' ) ) {
|
|
break;
|
|
}
|
|
|
|
$product_id = get_the_ID();
|
|
$has_items = false;
|
|
|
|
if ( get_post_type( $product_id ) !== 'product' ) {
|
|
break;
|
|
}
|
|
|
|
if ( 'product' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_ids'] ) ) {
|
|
$has_items = true;
|
|
$return = in_array( $product_id, $cl_logic['product_ids'] );
|
|
} else if ( 'ptype' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_types'] ) ) {
|
|
$has_items = true;
|
|
$product = wc_get_product( $product_id );
|
|
$return = in_array( $product->get_type(), $cl_logic['product_types'] );
|
|
} else if ( 'category' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_categories'] ) ) {
|
|
$has_items = true;
|
|
$product = wc_get_product( $product_id );
|
|
$has_categories = array_intersect( $cl_logic['product_categories'], $product->get_category_ids() );
|
|
$return = count( $has_categories ) > 0;
|
|
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'count' ){
|
|
$product = wc_get_product( $product_id );
|
|
$is_manage_stock = $product->get_manage_stock();
|
|
|
|
if( $is_manage_stock ){
|
|
if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) {
|
|
$return = $product->get_stock_quantity() < absint( $cl_logic['product_stock_count'] );
|
|
|
|
} else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) {
|
|
$return = $product->get_stock_quantity() > absint( $cl_logic['product_stock_count'] );
|
|
|
|
}
|
|
|
|
} else if ( ! $is_manage_stock && $cl_logic['product_stock_count'] > 0 ){
|
|
$status = $product->get_stock_status();
|
|
$return = 'instock' === $status;
|
|
}
|
|
|
|
|
|
} else if ( $cl_logic['woo_cart_item_type'] === 'amount' ){
|
|
$product = wc_get_product( $product_id );
|
|
$price = $product->get_regular_price();
|
|
if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) {
|
|
$return = $price < $cl_logic['product_price'];
|
|
|
|
} else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) {
|
|
$return = $price > $cl_logic['product_price'];
|
|
|
|
}
|
|
}
|
|
|
|
if ( $has_items && $cl_logic['logic_operator_between'] === 'not_between' ) {
|
|
$return = ! $return;
|
|
}
|
|
|
|
if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) {
|
|
break( 2 );
|
|
}
|
|
|
|
break;
|
|
|
|
case 'woo_orders':
|
|
|
|
if ( ! function_exists( 'WC' ) || ! is_user_logged_in() ) {
|
|
break;
|
|
}
|
|
|
|
$user_id = get_current_user_id();
|
|
|
|
if( 'no_order' === $cl_logic['woo_purchase_type'] ){
|
|
$order_count = wc_get_customer_order_count( $user_id );
|
|
$return = 'no_order' === $cl_logic['woo_purchase_type'] && $order_count < 1;
|
|
|
|
} else {
|
|
if ( 'product' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_ids'] ) ){
|
|
|
|
$product_ids = $this->get_ordered_products( 'ids', $cl_logic );
|
|
$has_items = array_intersect( $cl_logic['product_ids'], $product_ids );
|
|
$return = count( $has_items ) > 0;
|
|
|
|
} else if ( 'ptype' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_types'] ) ){
|
|
|
|
$product_types = $this->get_ordered_products( 'types', $cl_logic );
|
|
$has_items = array_intersect( $cl_logic['product_types'], $product_types );
|
|
$return = count( $has_items ) > 0;
|
|
|
|
} else if ( 'category' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_categories'] ) ){
|
|
|
|
$product_cats = $this->get_ordered_products( 'categories', $cl_logic );
|
|
$has_items = array_intersect( $cl_logic['product_categories'], $product_cats );
|
|
$return = count( $has_items ) > 0;
|
|
}
|
|
|
|
if ( $has_items && $cl_logic['woo_products_logic_oparator'] === 'exclude' ) {
|
|
$return = ! $return;
|
|
}
|
|
|
|
if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) {
|
|
break( 2 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
public function content_render( $should_render, Element_Base $element ) {
|
|
$settings = $element->get_settings_for_display();
|
|
$settings = $this->parse_arg( $settings );
|
|
|
|
if ( $settings['eael_cl_enable'] === 'yes' ) {
|
|
switch ( $settings['eael_cl_visibility_action'] ) {
|
|
case 'show':
|
|
$should_render = $this->check_logics( $settings ) ? true : false;
|
|
break;
|
|
case 'hide':
|
|
$should_render = $this->check_logics( $settings ) ? false : true;
|
|
break;
|
|
case 'forcefully_hide':
|
|
$should_render = false;
|
|
}
|
|
|
|
if ( ! $should_render && $settings['eael_cl_fallback'] !== 'none' ) {
|
|
if ( $settings['eael_cl_fallback'] === 'content' ) {
|
|
echo wp_kses( $settings['eael_cl_fallback_content'], Helper::eael_allowed_tags() );
|
|
} else if ( $settings['eael_cl_fallback'] === 'template' ) {
|
|
echo Plugin::$instance->frontend->get_builder_content( $settings['eael_cl_fallback_template'] );
|
|
}
|
|
}
|
|
}
|
|
|
|
return $should_render;
|
|
}
|
|
|
|
private function dynamic_logic_controls( $repeater ) {
|
|
$repeater->add_control(
|
|
'dynamic_field',
|
|
[
|
|
'label' => esc_html__( 'Dynamic Field', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'label_block' => true,
|
|
'default' => '',
|
|
'dynamic' => [
|
|
'active' => true,
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'dynamic'
|
|
],
|
|
'ai' => [
|
|
'active' => false,
|
|
],
|
|
'description' => esc_html__( 'If Dynamic Field has multiple values please use pipe ( | ) as separator. Please remove Before and After field texts from Advanced tab.', 'essential-addons-elementor' )
|
|
]
|
|
);
|
|
|
|
if ( defined( 'ELEMENTOR_PRO_VERSION' ) ) {
|
|
$repeater->add_control(
|
|
'logic_operator_dynamic',
|
|
[
|
|
'label' => __( 'Logic Operator', 'essential-addons-elementor' ),
|
|
'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'between' => [
|
|
'title' => esc_html__( 'Include', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_between' => [
|
|
'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'between',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'dynamic',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'dynamic_operand',
|
|
[
|
|
'label' => esc_html__( 'Value', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'label_block' => true,
|
|
'default' => '',
|
|
'condition' => [
|
|
'logic_type' => 'dynamic'
|
|
],
|
|
'ai' => [
|
|
'active' => false,
|
|
],
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'eael_cl_dynamic_notice',
|
|
[
|
|
'raw' => __( 'Separate multiple value with the | (pipe) character. (e.g. <strong>value 1 | value 2</strong>)', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::RAW_HTML,
|
|
'content_classes' => 'elementor-descriptor',
|
|
'condition' => [
|
|
'logic_type' => 'dynamic',
|
|
]
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
private function user_status_controls( $repeater ) {
|
|
$repeater->add_control(
|
|
'login_status_operand',
|
|
[
|
|
'label' => __( 'Login Status', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'logged_in' => [
|
|
'title' => esc_html__( 'Logged In', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-user-solid',
|
|
],
|
|
'not_logged_in' => [
|
|
'title' => esc_html__( 'Not Logged In', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-user-slash-solid',
|
|
],
|
|
],
|
|
'default' => 'logged_in',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'login_status',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'user_and_role',
|
|
[
|
|
'label' => __( 'Select User Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'user_role' => [
|
|
'title' => esc_html__( 'User Role', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-users-solid',
|
|
],
|
|
'user' => [
|
|
'title' => esc_html__( 'User', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-user-plus-solid',
|
|
],
|
|
],
|
|
'default' => '',
|
|
'condition' => [
|
|
'logic_type' => 'login_status',
|
|
'login_status_operand' => 'logged_in',
|
|
]
|
|
]
|
|
);
|
|
|
|
$roles = $this->get_editable_roles();
|
|
|
|
$repeater->add_control(
|
|
'user_role_operand_multi',
|
|
[
|
|
'label' => __( 'Select User Roles', 'essential-addons-elementor' ),
|
|
'label_block' => true,
|
|
'type' => Controls_Manager::SELECT2,
|
|
'multiple' => true,
|
|
'options' => $roles,
|
|
'default' => [],
|
|
'condition' => [
|
|
'logic_type' => 'login_status',
|
|
'login_status_operand' => 'logged_in',
|
|
'user_and_role' => 'user_role'
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'user_operand',
|
|
[
|
|
'label' => esc_html__( 'Select Users', 'essential-addons-elementor' ),
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'user',
|
|
'source_type' => 'all',
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'condition' => [
|
|
'logic_type' => 'login_status',
|
|
'login_status_operand' => 'logged_in',
|
|
'user_and_role' => 'user'
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
private function post_types_controls( $repeater ) {
|
|
$_post_types = ControlsHelper::get_post_types();
|
|
$post_types = array_merge( [ '' => 'All' ], $_post_types );
|
|
|
|
$repeater->add_control(
|
|
'post_type_operand',
|
|
[
|
|
'label' => esc_html__( 'Select Post Types', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'label_block' => true,
|
|
'options' => $post_types,
|
|
'default' => key( $post_types ),
|
|
'condition' => [
|
|
'logic_type' => 'post_type',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'post_operand',
|
|
[
|
|
'label' => esc_html__( 'Select Any Post', 'essential-addons-elementor' ),
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'post_type',
|
|
'source_type' => 'any',
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'condition' => [
|
|
'logic_type' => 'post_type',
|
|
'post_type_operand' => ''
|
|
]
|
|
]
|
|
);
|
|
|
|
foreach ( $_post_types as $post_type_slug => $post_type_name ) {
|
|
$repeater->add_control(
|
|
"post_operand_{$post_type_slug}",
|
|
[
|
|
'label' => esc_html__( 'Select ', 'essential-addons-elementor' ) . $post_type_name,
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'post_type',
|
|
'source_type' => $post_type_slug,
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'condition' => [
|
|
'logic_type' => 'post_type',
|
|
'post_type_operand' => $post_type_slug
|
|
]
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
private function browser_logics_controls( $repeater ) {
|
|
$repeater->add_control(
|
|
'browser_operand',
|
|
[
|
|
'label' => __( 'Select Browser', 'essential-addons-elementor' ),
|
|
'label_block' => true,
|
|
'type' => Controls_Manager::SELECT2,
|
|
'multiple' => true,
|
|
'options' => $this->get_browser_list(),
|
|
'default' => key( $this->get_browser_list() ),
|
|
'condition' => [
|
|
'logic_type' => 'browser',
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
private function date_time_controls( $repeater ) {
|
|
$repeater->add_control(
|
|
'date_time_logic',
|
|
[
|
|
'label' => __( 'Date and time', 'essential-addons-elementor' ),
|
|
'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'equal' => [
|
|
'title' => esc_html__( 'Is', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-equals-solid',
|
|
],
|
|
'not_equal' => [
|
|
'title' => esc_html__( 'Is Not', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-not-equal-solid',
|
|
],
|
|
'between' => [
|
|
'title' => esc_html__( 'Between', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_between' => [
|
|
'title' => esc_html__( 'Not Between', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'equal',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'date_time',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'single_date',
|
|
[
|
|
'label' => esc_html__( 'Date', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'enableTime' => false,
|
|
'altInput' => true,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d'
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'date_time',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'between',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'not_between',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'from_date',
|
|
[
|
|
'label' => esc_html__( 'From', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'M j, Y h:i K',
|
|
'dateFormat' => 'Y-m-d H:i:S'
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'date_time',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'equal',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'not_equal',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'to_date',
|
|
[
|
|
'label' => esc_html__( 'To', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'M j, Y h:i K',
|
|
'dateFormat' => 'Y-m-d H:i:S'
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'date_time',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'equal',
|
|
],
|
|
[
|
|
'name' => 'date_time_logic',
|
|
'operator' => '!==',
|
|
'value' => 'not_equal',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_day_logic',
|
|
[
|
|
'label' => __( 'Recurring Day', 'essential-addons-elementor' ),
|
|
'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'between' => [
|
|
'title' => esc_html__( 'Between', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_between' => [
|
|
'title' => esc_html__( 'Not Between', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'between',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'recurring_day',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days_all',
|
|
[
|
|
'label' => __( 'All Days', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
'default' => '',
|
|
'label_on' => __( 'Yes', 'essential-addons-elementor' ),
|
|
'label_off' => __( 'No', 'essential-addons-elementor' ),
|
|
'return_value' => 'yes',
|
|
'condition' => [
|
|
'logic_type' => 'recurring_day',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days',
|
|
[
|
|
'label' => __( 'Recurring Days', 'essential-addons-elementor' ),
|
|
'label_block' => true,
|
|
'type' => Controls_Manager::SELECT2,
|
|
'multiple' => true,
|
|
'options' => $this->get_days_list(),
|
|
'default' => [ key( $this->get_days_list() ) ],
|
|
'condition' => [
|
|
'logic_type' => 'recurring_day',
|
|
'recurring_days_all!' => 'yes'
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days_heading',
|
|
[
|
|
'label' => __( 'Date Duration', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::HEADING,
|
|
'condition' => [
|
|
'logic_type' => 'recurring_day',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days_duration_from',
|
|
[
|
|
'label' => esc_html__( 'From', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
'enableTime' => false,
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'recurring_day',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days_duration_to',
|
|
[
|
|
'label' => esc_html__( 'To', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
'enableTime' => false,
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'recurring_day',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'recurring_days_heading2',
|
|
[
|
|
'label' => __( 'Time Duration', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::HEADING,
|
|
'condition' => [
|
|
'logic_type' => 'recurring_day',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'from_time',
|
|
[
|
|
'label' => esc_html__( 'From', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'h:i K',
|
|
'enableTime' => true,
|
|
'noCalendar' => true,
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'recurring_day',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'to_time',
|
|
[
|
|
'label' => esc_html__( 'To', 'essential-addons-elementor' ),
|
|
'label_block' => false,
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'altInput' => true,
|
|
'altFormat' => 'h:i K',
|
|
'enableTime' => true,
|
|
'noCalendar' => true,
|
|
],
|
|
'conditions' => [
|
|
'relation' => 'and',
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'recurring_day',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
private function query_string_controls( $repeater ) {
|
|
$repeater->add_control(
|
|
'query_key',
|
|
[
|
|
'label' => esc_html__( 'Key', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'placeholder' => esc_html__( 'Query Key', 'essential-addons-elementor' ),
|
|
'condition' => [
|
|
'logic_type' => 'query_string',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'query_value',
|
|
[
|
|
'label' => esc_html__( 'Value', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'placeholder' => esc_html__( 'Query Value', 'essential-addons-elementor' ),
|
|
'condition' => [
|
|
'logic_type' => 'query_string',
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
private function url_contains_controls( $repeater ) {
|
|
|
|
$repeater->add_control(
|
|
'url_contains_url_type',
|
|
[
|
|
'label' => __( 'URL Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'default' => 'current',
|
|
'options' => [
|
|
'current' => [
|
|
'title' => esc_html__( 'Current', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-editor-link',
|
|
],
|
|
'refferer' => [
|
|
'title' => esc_html__( 'Refferer', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-editor-external-link',
|
|
],
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'url_contains',
|
|
],
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'url_contains_logic_operator',
|
|
[
|
|
'label' => __( 'Logic Operator', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'default' => 'in',
|
|
'options' => [
|
|
'in' => [
|
|
'title' => esc_html__( 'In', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_in' => [
|
|
'title' => esc_html__( 'Not In', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'url_contains',
|
|
],
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'url_contains_string',
|
|
[
|
|
'label' => __( 'String', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'ai' => [ 'active' => false ],
|
|
'condition' => [
|
|
'logic_type' => 'url_contains',
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
private function archive_controls( $repeater ){
|
|
$repeater->add_control(
|
|
'archive_type',
|
|
[
|
|
'label' => esc_html__( 'Archive Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'default' => 'post',
|
|
'options' => [
|
|
'post' => esc_html__( 'Post Type', 'essential-addons-elementor' ),
|
|
'taxonomy' => esc_html__( 'Taxonomy', 'essential-addons-elementor' ),
|
|
'terms' => esc_html__( 'Terms', 'essential-addons-elementor' ),
|
|
'author' => esc_html__( 'Author', 'essential-addons-elementor' ),
|
|
'date' => esc_html__( 'Date', 'essential-addons-elementor' ),
|
|
'search' => esc_html__( 'Search', 'essential-addons-elementor' ),
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
]
|
|
]
|
|
);
|
|
|
|
$_post_types = ControlsHelper::get_post_types();
|
|
$post_types = array_merge( [ 'all' => 'All' ], $_post_types );
|
|
|
|
$repeater->add_control(
|
|
'archive_post_type',
|
|
[
|
|
'label' => esc_html__( 'Select Post Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'label_block' => true,
|
|
'options' => $post_types,
|
|
'default' => 'post',
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'post',
|
|
]
|
|
]
|
|
);
|
|
|
|
$taxonomies = get_taxonomies( [ 'public' => true ], 'objects' );
|
|
$taxon_options = [];
|
|
foreach( $taxonomies as $taxonomy ){
|
|
$taxon_options[ $taxonomy->name ] = $taxonomy->label;
|
|
}
|
|
|
|
$repeater->add_control(
|
|
'archive_taxonomies',
|
|
[
|
|
'label' => esc_html__( 'Select Taxonomoies', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT2,
|
|
'label_block' => true,
|
|
'options' => $taxon_options,
|
|
'default' => 'category',
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => [ 'taxonomy', 'terms' ],
|
|
]
|
|
]
|
|
);
|
|
|
|
foreach( $taxonomies as $taxonomy ){
|
|
$repeater->add_control(
|
|
"archive_terms_for_{$taxonomy->name}",
|
|
[
|
|
'label' => esc_html__( 'Select ', 'essential-addons-elementor' ) . $taxonomy->label,
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'taxonomy',
|
|
'source_type' => $taxonomy->name,
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_taxonomies' => $taxonomy->name,
|
|
'archive_type' => 'terms',
|
|
]
|
|
]
|
|
);
|
|
}
|
|
|
|
$repeater->add_control(
|
|
'archive_author_type',
|
|
[
|
|
'label' => esc_html__( 'Author Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'user' => [
|
|
'title' => esc_html__( 'User', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-user-plus-solid',
|
|
],
|
|
'user_role' => [
|
|
'title' => esc_html__( 'User Role', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-users-solid',
|
|
],
|
|
],
|
|
'default' => 'user',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'author',
|
|
]
|
|
]
|
|
);
|
|
|
|
$roles = $this->get_editable_roles();
|
|
|
|
$repeater->add_control(
|
|
'archive_user_role',
|
|
[
|
|
'label' => __( 'Select User Roles', 'essential-addons-elementor' ),
|
|
'label_block' => true,
|
|
'type' => Controls_Manager::SELECT2,
|
|
'multiple' => true,
|
|
'options' => $roles,
|
|
'default' => [],
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'author',
|
|
'archive_author_type' => 'user_role',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'archive_users',
|
|
[
|
|
'label' => esc_html__( 'Select Users', 'essential-addons-elementor' ),
|
|
'type' => 'eael-select2',
|
|
'source_name' => 'user',
|
|
'source_type' => 'all',
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'author',
|
|
'archive_author_type' => 'user',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'archive_date_from',
|
|
[
|
|
'label' => esc_html__( 'Archive Date From', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'enableTime' => false,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'date',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'archive_date_to',
|
|
[
|
|
'label' => esc_html__( 'Archive Date To', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'enableTime' => false,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'archive',
|
|
'archive_type' => 'date',
|
|
]
|
|
]
|
|
);
|
|
|
|
}
|
|
|
|
private function woocommerce_controls( $repeater ) {
|
|
|
|
if ( ! function_exists( 'WC' ) ) {
|
|
$repeater->add_control(
|
|
'woo_installation_notice_for_cart',
|
|
[
|
|
'type' => Controls_Manager::RAW_HTML,
|
|
'raw' => __( '<strong>WooCommerce</strong> is not installed/activated on your site. Please install and activate <a href="plugin-install.php?s=woocommerce&tab=search&type=term" target="_blank">WooCommerce</a> first.', 'essential-addons-elementor' ),
|
|
'content_classes' => 'eael-warning',
|
|
'condition' => [
|
|
'logic_type' => 'woo_cart',
|
|
]
|
|
]
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
$repeater->add_control(
|
|
'woo_purchase_type',
|
|
[
|
|
'label' => esc_html__( 'Purchase Type', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'default' => 'last_order',
|
|
'options' => [
|
|
'no_order' => esc_html__( 'Has No Order', 'essential-addons-elementor' ),
|
|
'last_order' => esc_html__( 'From Last Purchase', 'essential-addons-elementor' ),
|
|
'all_orders' => esc_html__( 'Between All Orders', 'essential-addons-elementor' ),
|
|
'date_range' => esc_html__( 'Between Date Period', 'essential-addons-elementor' ),
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'woo_orders',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_order_date_from',
|
|
[
|
|
'label' => esc_html__( 'Purchased Date From', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'enableTime' => false,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'woo_orders',
|
|
'woo_purchase_type' => 'date_range',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_order_date_to',
|
|
[
|
|
'label' => esc_html__( 'Purchased Date To', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::DATE_TIME,
|
|
'picker_options' => [
|
|
'enableTime' => false,
|
|
'altFormat' => 'M j, Y',
|
|
'dateFormat' => 'Y-m-d',
|
|
],
|
|
'condition' => [
|
|
'logic_type' => 'woo_orders',
|
|
'woo_purchase_type' => 'date_range',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_products_logic_oparator',
|
|
[
|
|
'label' => esc_html__( 'Oparator', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'include' => [
|
|
'title' => esc_html__( 'Include', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'exclude' => [
|
|
'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'include',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'woo_orders',
|
|
'woo_purchase_type!' => 'no_order',
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_cart_logic_operator',
|
|
[
|
|
'label' => __( 'Cart items', 'essential-addons-elementor' ),
|
|
// 'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'empty' => [
|
|
'title' => esc_html__( 'Empty', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-trash',
|
|
],
|
|
'in' => [
|
|
'title' => esc_html__( 'IN', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-check-solid',
|
|
],
|
|
'not_in' => [
|
|
'title' => esc_html__( 'Not IN', 'essential-addons-elementor' ),
|
|
'icon' => 'eaicon-xmark-solid',
|
|
],
|
|
],
|
|
'default' => 'in',
|
|
'toggle' => false,
|
|
'condition' => [
|
|
'logic_type' => 'woo_cart',
|
|
'woo_cart_item_type!' => [ 'count', 'amount' ]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_cart_logic_operator_2',
|
|
[
|
|
'label' => __( 'Compare Oparator', 'essential-addons-elementor' ),
|
|
// 'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'less' => [
|
|
'title' => esc_html__( 'Less Than', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-chevron-left',
|
|
],
|
|
'greater' => [
|
|
'title' => esc_html__( 'Greater Than', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-chevron-right',
|
|
],
|
|
],
|
|
'toggle' => false,
|
|
'default' => 'greater',
|
|
'condition' => [
|
|
'logic_type' => [ 'woo_cart', 'woo_products' ],
|
|
'woo_cart_item_type' => [ 'count', 'amount' ]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'woo_cart_item_type',
|
|
[
|
|
'label' => __( 'Products By', 'essential-addons-elementor' ),
|
|
// 'show_label' => false,
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'product' => [
|
|
'title' => esc_html__( 'Product', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-menu-toggle',
|
|
],
|
|
'ptype' => [
|
|
'title' => esc_html__( 'Type', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-flow',
|
|
],
|
|
'category' => [
|
|
'title' => esc_html__( 'Category', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-sitemap',
|
|
],
|
|
'count' => [
|
|
'title' => esc_html__( 'Count', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-woo-cart',
|
|
],
|
|
'amount' => [
|
|
'title' => esc_html__( 'Total', 'essential-addons-elementor' ),
|
|
'icon' => 'eicon-product-price',
|
|
],
|
|
],
|
|
'toggle' => false,
|
|
'default' => 'product',
|
|
'conditions' => [
|
|
'relation' => 'or',
|
|
'terms' => [
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_cart',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_logic_operator',
|
|
'operator' => '!==',
|
|
'value' => 'empty',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_products',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_orders',
|
|
],
|
|
[
|
|
'name' => 'woo_purchase_type',
|
|
'operator' => '!==',
|
|
'value' => 'no_order',
|
|
],
|
|
]
|
|
],
|
|
]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'product_ids',
|
|
[
|
|
'label' => __( 'Search & Select Products', 'essential-addons-for-elementor-lite' ),
|
|
'type' => 'eael-select2',
|
|
'options' => ControlsHelper::get_post_list( 'product' ),
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'source_name' => 'post_type',
|
|
'source_type' => 'product',
|
|
'conditions' => [
|
|
'relation' => 'or',
|
|
'terms' => [
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_cart',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_logic_operator',
|
|
'operator' => '!==',
|
|
'value' => 'empty',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'product',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_products',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'product',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_orders',
|
|
],
|
|
[
|
|
'name' => 'woo_purchase_type',
|
|
'operator' => '!==',
|
|
'value' => 'no_order',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'product',
|
|
]
|
|
]
|
|
],
|
|
]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'product_types',
|
|
[
|
|
'label' => esc_html__( 'Select Product Types', 'essential-addons-for-elementor-lite' ),
|
|
'type' => Controls_Manager::SELECT2,
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'options' => wc_get_product_types(),
|
|
'conditions' => [
|
|
'relation' => 'or',
|
|
'terms' => [
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_cart',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_logic_operator',
|
|
'operator' => '!==',
|
|
'value' => 'empty',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'ptype',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_products',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'ptype',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_orders',
|
|
],
|
|
[
|
|
'name' => 'woo_purchase_type',
|
|
'operator' => '!==',
|
|
'value' => 'no_order',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'ptype',
|
|
]
|
|
]
|
|
],
|
|
]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'product_categories',
|
|
[
|
|
'label' => __( 'Search & Select Categories', 'essential-addons-for-elementor-lite' ),
|
|
'type' => 'eael-select2',
|
|
'options' => Helper::get_taxonomies_by_post( [ 'object_type' => 'product' ] ),
|
|
'label_block' => true,
|
|
'multiple' => true,
|
|
'source_name' => 'taxonomy',
|
|
'source_type' => 'product_cat',
|
|
'conditions' => [
|
|
'relation' => 'or',
|
|
'terms' => [
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_cart',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_logic_operator',
|
|
'operator' => '!==',
|
|
'value' => 'empty',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'category',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_products',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'category',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'terms' => [
|
|
[
|
|
'name' => 'logic_type',
|
|
'operator' => '===',
|
|
'value' => 'woo_orders',
|
|
],
|
|
[
|
|
'name' => 'woo_purchase_type',
|
|
'operator' => '!==',
|
|
'value' => 'no_order',
|
|
],
|
|
[
|
|
'name' => 'woo_cart_item_type',
|
|
'operator' => '===',
|
|
'value' => 'category',
|
|
]
|
|
]
|
|
],
|
|
]
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'cart_item_count',
|
|
[
|
|
'label' => esc_html__( 'Cart item Count', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'min' => 1,
|
|
'step' => 1,
|
|
'default' => 2,
|
|
'condition' => [
|
|
'logic_type' => 'woo_cart',
|
|
'woo_cart_item_type' => 'count'
|
|
]
|
|
]
|
|
);
|
|
|
|
$currency = get_woocommerce_currency_symbol();
|
|
$repeater->add_control(
|
|
'cart_item_amount',
|
|
[
|
|
'label' => sprintf( esc_html__( 'Cart total (%s)', 'essential-addons-elementor' ), $currency ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'min' => 1,
|
|
'step' => 1,
|
|
'default' => 20,
|
|
'condition' => [
|
|
'logic_type' => 'woo_cart',
|
|
'woo_cart_item_type' => 'amount'
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'product_stock_count',
|
|
[
|
|
'label' => esc_html__( 'Stock Count', 'essential-addons-elementor' ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'min' => 0,
|
|
'step' => 1,
|
|
'default' => 2,
|
|
'condition' => [
|
|
'logic_type' => 'woo_products',
|
|
'woo_cart_item_type' => 'count'
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'product_price',
|
|
[
|
|
'label' => sprintf( esc_html__( 'Product Price (%s)', 'essential-addons-elementor' ), $currency ),
|
|
'type' => Controls_Manager::NUMBER,
|
|
'min' => 0,
|
|
'step' => 1,
|
|
'default' => 20,
|
|
'condition' => [
|
|
'logic_type' => 'woo_products',
|
|
'woo_cart_item_type' => 'amount'
|
|
]
|
|
]
|
|
);
|
|
|
|
$repeater->add_control(
|
|
'cart_item_count_note',
|
|
[
|
|
'label' => esc_html__( 'Important Note about item count', 'essential-addons-elementor' ),
|
|
'show_label' => false,
|
|
'type' => Controls_Manager::RAW_HTML,
|
|
'raw' => esc_html__( 'This is only applicable for Logic type Woo Cart & Woo Products', 'essential-addons-elementor' ),
|
|
'content_classes' => 'eael-warning',
|
|
'condition' => [
|
|
'logic_type' => [ 'woo_orders' ],
|
|
'woo_cart_item_type' => [ 'count', 'amount' ]
|
|
]
|
|
]
|
|
);
|
|
|
|
}
|
|
|
|
private function get_ordered_products( $data_type, $cl_logic ){
|
|
|
|
$user_id = get_current_user_id();
|
|
$args = [
|
|
'customer_id' => $user_id,
|
|
'limit' => -1,
|
|
];
|
|
|
|
if( 'last_order' === $cl_logic['woo_purchase_type'] ){
|
|
$args['limit'] = 1;
|
|
|
|
} else if ( 'date_range' === $cl_logic['woo_purchase_type'] && "" !== $cl_logic['woo_order_date_from'] && "" !== $cl_logic['woo_order_date_to'] ) {
|
|
|
|
$args['date_after'] = $cl_logic['woo_order_date_from'];
|
|
$args['date_before'] = $cl_logic['woo_order_date_to'];
|
|
}
|
|
|
|
$orders = wc_get_orders( $args );
|
|
|
|
if( empty( $orders ) ){
|
|
return [];
|
|
}
|
|
|
|
$data = [];
|
|
if( 'ids' === $data_type ){
|
|
foreach( $orders as $order ){
|
|
foreach ( $order->get_items() as $item_id => $item ) {
|
|
$product = $this->get_product_from_order_item( $item );
|
|
$data[] = $product->get_id();
|
|
}
|
|
}
|
|
} else if( 'types' === $data_type ){
|
|
foreach( $orders as $order ){
|
|
foreach ( $order->get_items() as $item_id => $item ) {
|
|
$product = $this->get_product_from_order_item( $item );
|
|
$data[] = $product->get_type();
|
|
}
|
|
}
|
|
} else if( 'categories' === $data_type ){
|
|
foreach( $orders as $order ){
|
|
foreach ( $order->get_items() as $item_id => $item ) {
|
|
$product = $this->get_product_from_order_item( $item );
|
|
$data = array_merge( $data, $product->get_category_ids() );
|
|
}
|
|
}
|
|
}
|
|
|
|
return array_unique( $data );
|
|
}
|
|
|
|
private function get_product_from_order_item( $item ){
|
|
$product = $item->get_product();
|
|
$variation_id = $item->get_variation_id();
|
|
|
|
if( $variation_id ){
|
|
$parent_id = $product->get_parent_id();
|
|
$product = wc_get_product( $parent_id );
|
|
}
|
|
|
|
return $product;
|
|
}
|
|
}
|