1417 lines
46 KiB
PHP
1417 lines
46 KiB
PHP
<?php
|
|
/**
|
|
* Avada Builder Conditional Render Helper class.
|
|
*
|
|
* @package Avada-Builder
|
|
* @since 3.3
|
|
*/
|
|
|
|
// Do not allow directly accessing this file.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit( 'Direct script access denied.' );
|
|
}
|
|
|
|
|
|
/**
|
|
* Avada Builder Conditional Render Helper class.
|
|
*
|
|
* @since 3.3
|
|
*/
|
|
class Fusion_Builder_Conditional_Render_Helper {
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @since 3.3
|
|
* @access public
|
|
*/
|
|
public function __construct() {
|
|
}
|
|
|
|
/**
|
|
* Get conditional logic params.
|
|
*
|
|
* @since 3.3
|
|
* @access public
|
|
* @param array $args The placeholder arguments.
|
|
* @return array
|
|
*/
|
|
public static function get_params( $args ) {
|
|
|
|
// Post Categories.
|
|
$post_categories_field = 'text';
|
|
$post_categories_options = '';
|
|
|
|
if ( 25 > wp_count_terms( 'category' ) ) {
|
|
$post_categories = [];
|
|
$categories = get_terms(
|
|
'category',
|
|
[
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
foreach ( $categories as $category ) {
|
|
$post_categories[ $category->term_id ] = $category->name;
|
|
}
|
|
|
|
$post_categories_field = 'select';
|
|
$post_categories_options = $post_categories;
|
|
}
|
|
|
|
// Post Tags.
|
|
$post_tags_field = 'text';
|
|
$post_tags_options = '';
|
|
|
|
if ( 25 > wp_count_terms( 'post_tag' ) ) {
|
|
$post_tags = [];
|
|
$tags = get_terms(
|
|
'post_tag',
|
|
[
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
foreach ( $tags as $tag ) {
|
|
$post_tags[ $tag->term_id ] = $tag->name;
|
|
}
|
|
|
|
$post_tags_field = 'select';
|
|
$post_tags_options = $post_tags;
|
|
}
|
|
|
|
$params = [
|
|
[
|
|
'type' => 'fusion_logics',
|
|
'heading' => esc_html__( 'Rendering Logic', 'fusion-builder' ),
|
|
'param_name' => 'render_logics',
|
|
'description' => __( 'Add conditional rendering logic for the element. The element will only be part of the post / page contents, if the set conditions are met. <strong>NOTE:</strong> Server cache can interfere with results.', 'fusion-builder' ),
|
|
'group' => esc_attr__( 'Extras', 'fusion-builder' ),
|
|
'placeholder' => [
|
|
'id' => 'placeholder',
|
|
'title' => esc_html__( 'Select A Condition Type', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
'choices' => [
|
|
[
|
|
'id' => 'device_type',
|
|
'title' => esc_html__( 'Device Type', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'desktop' => esc_html__( 'Desktop', 'fusion-builder' ),
|
|
'mobile_tablet' => __( 'Mobile & Tablet', 'fusion-builder' ),
|
|
'mobile' => __( 'Mobile', 'fusion-builder' ),
|
|
'tablet' => __( 'Tablet', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'get_var',
|
|
'title' => esc_html__( 'GET Variable', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'GET', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Variable Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'session_var',
|
|
'title' => esc_html__( 'SESSION Variable', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'SESSION', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Variable Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'user_agent',
|
|
'title' => esc_html__( 'User Agent', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'referrer',
|
|
'title' => esc_html__( 'Referrer', 'fusion-builder' ),
|
|
'placeholder' => esc_attr__( 'Referrer URL', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'user_role',
|
|
'title' => esc_html__( 'User Role', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => self::get_user_roles(),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'user_state',
|
|
'title' => esc_html__( 'User State', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'logged_in' => esc_html__( 'Logged In', 'fusion-builder' ),
|
|
'logged_out' => esc_html__( 'Logged Out', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'custom_field',
|
|
'title' => esc_html__( 'Custom Field', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'published_date',
|
|
'title' => esc_html__( 'Post Published Date', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'format' => esc_html__( 'Published Date Format', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Y-m-d H:i:s', 'fusion-builder' ),
|
|
],
|
|
'placeholder' => esc_attr__( 'Accepts same inputs as strtotime()', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'modified_date',
|
|
'title' => esc_html__( 'Post Modified Date', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'format' => esc_html__( 'Modified Date Format', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Y-m-d H:i:s', 'fusion-builder' ),
|
|
],
|
|
'placeholder' => esc_attr__( 'Accepts same inputs as strtotime()', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'post_category',
|
|
'title' => esc_html__( 'Post Category', 'fusion-builder' ),
|
|
'type' => $post_categories_field,
|
|
'options' => $post_categories_options,
|
|
'placeholder' => esc_attr__( 'Category Name, Slug or ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'post_tag',
|
|
'title' => esc_html__( 'Post Tag', 'fusion-builder' ),
|
|
'type' => $post_tags_field,
|
|
'options' => $post_tags_options,
|
|
'placeholder' => esc_attr__( 'Tag Name, Slug or ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'post_term',
|
|
'title' => esc_html__( 'Post Term', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'placeholder' => esc_attr__( 'Term ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'post_count',
|
|
'title' => esc_html__( 'Post Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'term_count',
|
|
'title' => esc_html__( 'Term Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'is_term',
|
|
'title' => esc_html__( 'Term ID', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'placeholder' => esc_attr__( 'Term ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'featured_images_count',
|
|
'title' => esc_html__( 'Featured Images Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'comments_status',
|
|
'title' => esc_html__( 'Comments Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'open' => esc_html__( 'Open', 'fusion-builder' ),
|
|
'closed' => esc_html__( 'Closed', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'comments_count',
|
|
'title' => esc_html__( 'Comments Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'heading_number',
|
|
'title' => esc_html__( 'Number Of Headings', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
],
|
|
],
|
|
];
|
|
|
|
$params = self::maybe_add_woo_options( $params );
|
|
$params = self::maybe_add_ec_options( $params );
|
|
$params = self::maybe_add_acf_options( $params );
|
|
|
|
// Add in custom params if they are set.
|
|
$custom_conditions = FusionBuilder()->get_custom_conditions();
|
|
if ( ! empty( $custom_conditions ) ) {
|
|
foreach ( $custom_conditions as $condition ) {
|
|
if ( isset( $condition['param'] ) && is_array( $condition['param'] ) ) {
|
|
$params[0]['choices'][] = $condition['param'];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Override params.
|
|
foreach ( $args as $key => $value ) {
|
|
if ( 'fusion_remove_param' === $value && isset( $params[0][ $key ] ) ) {
|
|
unset( $params[0][ $key ] );
|
|
continue;
|
|
}
|
|
|
|
$params[0][ $key ] = $value;
|
|
}
|
|
|
|
return $params;
|
|
}
|
|
|
|
/**
|
|
* Returns all user roles.
|
|
*
|
|
* @since 3.3
|
|
* @return array states.
|
|
*/
|
|
public static function get_user_roles() {
|
|
global $wp_roles;
|
|
$roles = [];
|
|
if ( is_array( $wp_roles->roles ) ) {
|
|
foreach ( $wp_roles->roles as $key => $role ) {
|
|
$roles[ $key ] = $role['name'];
|
|
}
|
|
}
|
|
|
|
return $roles;
|
|
}
|
|
|
|
/**
|
|
* Adds WooCommerce Options.
|
|
*
|
|
* @since 3.3
|
|
* @param array $params The existing params.
|
|
* @return array.
|
|
*/
|
|
public static function maybe_add_woo_options( $params ) {
|
|
if ( ! class_exists( 'WooCommerce' ) ) {
|
|
return $params;
|
|
}
|
|
|
|
// Product categories.
|
|
$product_categories_field = 'text';
|
|
$product_categories_options = '';
|
|
|
|
if ( 25 > wp_count_terms( 'product_cat' ) ) {
|
|
$product_categories = [];
|
|
$categories = get_terms(
|
|
'product_cat',
|
|
[
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
foreach ( $categories as $category ) {
|
|
$product_categories[ $category->term_id ] = $category->name;
|
|
}
|
|
|
|
$product_categories_field = 'select';
|
|
$product_categories_options = $product_categories;
|
|
}
|
|
|
|
// Product tags.
|
|
$product_tags_field = 'text';
|
|
$product_tags_options = '';
|
|
|
|
if ( 25 > wp_count_terms( 'product_tag' ) ) {
|
|
$product_tags = [];
|
|
$tags = get_terms(
|
|
'product_tag',
|
|
[
|
|
'hide_empty' => false,
|
|
]
|
|
);
|
|
foreach ( $tags as $tag ) {
|
|
$product_tags[ $tag->term_id ] = $tag->name;
|
|
}
|
|
|
|
$product_tags_field = 'select';
|
|
$product_tags_options = $product_tags;
|
|
}
|
|
|
|
// Order statuses.
|
|
$statuses = wc_get_order_statuses();
|
|
$wc_statuses = [];
|
|
foreach ( $statuses as $status_id => $status_name ) {
|
|
$status_id = ( 'wc-' === substr( $status_id, 0, 3 ) ? substr( $status_id, 3 ) : $status_id );
|
|
$wc_statuses[ $status_id ] = $status_name;
|
|
}
|
|
|
|
$woo_options = [
|
|
[
|
|
'id' => 'cart_status',
|
|
'title' => esc_html__( 'Cart Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'in' => esc_html__( 'In', 'fusion-builder' ),
|
|
'empty' => esc_html__( 'Empty', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'sale_status',
|
|
'title' => esc_html__( 'Sale Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'started' => esc_html__( 'Started', 'fusion-builder' ),
|
|
'ended' => esc_html__( 'Ended', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'stock_quantity',
|
|
'title' => esc_html__( 'Stock Quantity', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'stock_status',
|
|
'title' => esc_html__( 'Stock Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'in' => esc_html__( 'In Stock', 'fusion-builder' ),
|
|
'out' => esc_html__( 'Out of Stock', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'purchased_product',
|
|
'title' => esc_html__( 'Product Purchase Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'purchased' => esc_html__( 'Purchased', 'fusion-builder' ),
|
|
'not_purchased' => esc_html__( 'Not Purchased', 'fusion-builder' ),
|
|
],
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Product ID', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'ID or empty for current prodcut', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'product_type',
|
|
'title' => esc_html__( 'Product Type', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'simple' => esc_html__( 'Simple Product', 'fusion-builder' ),
|
|
'grouped' => esc_html__( 'Grouped Product', 'fusion-builder' ),
|
|
'external' => esc_html__( 'External/Affiliate Product', 'fusion-builder' ),
|
|
'variable' => esc_html__( 'Variable Product', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'product_category',
|
|
'title' => esc_html__( 'Product Category', 'fusion-builder' ),
|
|
'type' => $product_categories_field,
|
|
'options' => $product_categories_options,
|
|
'placeholder' => esc_html__( 'Category Name, Slug or ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'product_tag',
|
|
'title' => esc_html__( 'Product Tag', 'fusion-builder' ),
|
|
'type' => $product_tags_field,
|
|
'options' => $product_tags_options,
|
|
'placeholder' => esc_html__( 'Tag Name, Slug or ID', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'related_products_count',
|
|
'title' => esc_html__( 'Related Products', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'up_sells_products_count',
|
|
'title' => esc_html__( 'Up-Sells Products', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'cross_sells_products_count',
|
|
'title' => esc_html__( 'Cross-Sells Products', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'product_variations',
|
|
'title' => esc_html__( 'Product Variations', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'placeholder' => esc_html__( 'Attribute Name eg. color or size.', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Has', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Has Not', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'order_received_status',
|
|
'title' => esc_html__( 'Order Received Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'placeholder' => esc_html__( 'If the order received page (after user checks out), is successful (payment successful) or not (payment denied by bank for example).', 'fusion-builder' ),
|
|
'options' => $wc_statuses,
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'order_received_total_value',
|
|
'title' => esc_html__( 'Order Received Total Value', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'placeholder' => esc_html__( 'The total value of the order. Works only on order received page (after user checks out).', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
|
|
[
|
|
'id' => 'order_received_downloads',
|
|
'title' => esc_html__( 'Order Received Download Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'placeholder' => esc_html__( 'How many items can be downloaded on the order received page (after user checks out).', 'fusion-builder' ),
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
|
|
];
|
|
|
|
$params[0]['choices'] = array_merge( $params[0]['choices'], $woo_options );
|
|
|
|
return $params;
|
|
}
|
|
|
|
/**
|
|
* Adds Event Calendar Options.
|
|
*
|
|
* @since 3.3
|
|
* @param array $params The existing params.
|
|
* @return array.
|
|
*/
|
|
public static function maybe_add_ec_options( $params ) {
|
|
if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
return $params;
|
|
}
|
|
|
|
$ec_options = [
|
|
[
|
|
'id' => 'event_status',
|
|
'title' => esc_html__( 'Event Status', 'fusion-builder' ),
|
|
'type' => 'select',
|
|
'options' => [
|
|
'started' => esc_html__( 'Started', 'fusion-builder' ),
|
|
'ended' => esc_html__( 'Ended', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
],
|
|
],
|
|
];
|
|
|
|
$params[0]['choices'] = array_merge( $params[0]['choices'], $ec_options );
|
|
|
|
return $params;
|
|
}
|
|
|
|
/**
|
|
* Adds ACF Options.
|
|
*
|
|
* @since 3.5
|
|
* @param array $params The existing params.
|
|
* @return array.
|
|
*/
|
|
public static function maybe_add_acf_options( $params ) {
|
|
if ( ! class_exists( 'ACF' ) ) {
|
|
return $params;
|
|
}
|
|
|
|
$options = [
|
|
[
|
|
'id' => 'acf_field',
|
|
'title' => esc_html__( 'ACF Field', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'acf_repeater_count',
|
|
'title' => esc_html__( 'ACF Repeater Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'acf_repeater_single_value',
|
|
'title' => esc_html__( 'ACF Repeater Single Value', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Field', 'fusion-builder' ),
|
|
'placeholder' => 'field[1][name]',
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'acf_repeater_sub_field',
|
|
'title' => esc_html__( 'ACF Repeater Sub Field', 'fusion-builder' ),
|
|
'description' => esc_html__( 'Enter repeater sub field name. This option only works on post cards within the ACF repeater loop.', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Sub Field name', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Sub Field name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
'contains' => esc_attr__( 'Contains', 'fusion-builder' ),
|
|
],
|
|
],
|
|
[
|
|
'id' => 'acf_relationship_count',
|
|
'title' => esc_html__( 'ACF Relationship Count', 'fusion-builder' ),
|
|
'type' => 'text',
|
|
'additionals' => [
|
|
'type' => 'text',
|
|
'title' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
'placeholder' => esc_html__( 'Field Name', 'fusion-builder' ),
|
|
],
|
|
'comparisons' => [
|
|
'equal' => esc_attr__( 'Equal To', 'fusion-builder' ),
|
|
'not-equal' => esc_attr__( 'Not Equal To', 'fusion-builder' ),
|
|
'greater-than' => esc_attr__( 'Greater Than', 'fusion-builder' ),
|
|
'less-than' => esc_attr__( 'Less Than', 'fusion-builder' ),
|
|
],
|
|
],
|
|
];
|
|
|
|
$params[0]['choices'] = array_merge( $params[0]['choices'], $options );
|
|
|
|
return $params;
|
|
}
|
|
|
|
/**
|
|
* Checks if element should render or not.
|
|
*
|
|
* @since 3.3
|
|
* @param array $atts The attributes.
|
|
* @return bool
|
|
*/
|
|
public static function should_render( $atts ) {
|
|
$logics = ( isset( $atts['render_logics'] ) && '' !== $atts['render_logics'] ) ? json_decode( base64_decode( $atts['render_logics'] ) ) : [];
|
|
$checks = [];
|
|
|
|
if ( empty( $logics ) ) {
|
|
return true;
|
|
}
|
|
|
|
foreach ( $logics as $logic ) {
|
|
$check = [];
|
|
$operator = isset( $logic->operator ) ? $logic->operator : '';
|
|
$comparison = isset( $logic->comparison ) ? $logic->comparison : '';
|
|
$field_name = isset( $logic->field ) && ! is_null( $logic->field ) ? $logic->field : '';
|
|
|
|
$desired_value = isset( $logic->value ) ? $logic->value : '';
|
|
$additionals = isset( $logic->additionals ) ? $logic->additionals : '';
|
|
$current_value = self::get_value( $field_name, $desired_value, $additionals );
|
|
|
|
if ( ! $field_name || ! $comparison ) {
|
|
continue;
|
|
}
|
|
|
|
array_push( $check, $operator );
|
|
array_push( $check, '' !== $current_value ? self::is_match( $current_value, $desired_value, $comparison, $field_name ) : false );
|
|
array_push( $checks, $check );
|
|
|
|
fusion_library()->conditional_loading[] = [
|
|
'operator' => $operator,
|
|
'comparison' => $comparison,
|
|
'field_name' => $field_name,
|
|
'desired_value' => $desired_value,
|
|
'additionals' => $additionals,
|
|
'current_value' => $current_value,
|
|
];
|
|
}
|
|
|
|
if ( count( $checks ) ) {
|
|
return self::match_conditions( $checks );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets value.
|
|
*
|
|
* @since 3.3
|
|
* @param string $name The item name.
|
|
* @param string $value The desired name.
|
|
* @param string $additionals The additional data.
|
|
* @return mixed.
|
|
*/
|
|
public static function get_value( $name, $value, $additionals ) {
|
|
$woo_options = [ 'cart_status', 'sale_status', 'stock_quantity' ];
|
|
$event_options = [ 'event_status' ];
|
|
$acf_options = [ 'acf_field' ];
|
|
$custom_conditions = FusionBuilder()->get_custom_conditions();
|
|
|
|
if ( isset( $custom_conditions[ $name ]['callback'] ) ) {
|
|
return call_user_func_array( $custom_conditions[ $name ]['callback'], [ $value, $additionals ] );
|
|
}
|
|
|
|
if ( in_array( $name, $woo_options, true ) && ! class_exists( 'WooCommerce' ) || in_array( $name, $event_options, true ) && ! class_exists( 'Tribe__Events__Main' ) || in_array( $name, $acf_options, true ) && ! class_exists( 'ACF' ) ) {
|
|
return '';
|
|
}
|
|
|
|
switch ( $name ) {
|
|
|
|
case 'user_state':
|
|
return is_user_logged_in() ? 'logged_in' : 'logged_out';
|
|
|
|
case 'cart_status':
|
|
if ( 'in' === $value ) {
|
|
$is_in_cart = false;
|
|
$product_id = get_the_ID();
|
|
$parent_id = wp_get_post_parent_id( $product_id );
|
|
$product_id = $parent_id > 0 ? $parent_id : $product_id;
|
|
|
|
if ( is_object( WC()->cart ) ) {
|
|
foreach ( WC()->cart->get_cart() as $cart_item ) {
|
|
if ( $cart_item['product_id'] === $product_id ) {
|
|
$is_in_cart = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $is_in_cart ? 'in' : null;
|
|
} else {
|
|
return is_object( WC()->cart ) && 0 === WC()->cart->get_cart_contents_count() ? 'empty' : null;
|
|
}
|
|
|
|
case 'sale_status':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return '';
|
|
}
|
|
|
|
if ( 'started' === $value ) {
|
|
return $product->is_on_sale() ? 'started' : null;
|
|
} else {
|
|
return ! $product->is_on_sale() ? 'ended' : null;
|
|
}
|
|
|
|
case 'stock_quantity':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
|
|
return $product->get_stock_quantity();
|
|
|
|
case 'stock_status':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
|
|
return $product->is_in_stock() ? 'in' : 'out';
|
|
|
|
case 'purchased_product':
|
|
$product = isset( $additionals ) && ! empty( $additionals ) ? wc_get_product( $additionals ) : wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product || ! is_user_logged_in() ) {
|
|
return 0;
|
|
}
|
|
|
|
return wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ? 'purchased' : 'not_purchased';
|
|
|
|
case 'product_type':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
|
|
return $product->get_type();
|
|
|
|
case 'product_category':
|
|
return has_term( $value, 'product_cat' ) ? $value : null;
|
|
case 'product_tag':
|
|
return has_term( $value, 'product_tag' ) ? $value : null;
|
|
case 'related_products_count':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
$related_products = wc_get_related_products( get_the_ID(), intval( $value ) + 1 );
|
|
return count( $related_products );
|
|
case 'up_sells_products_count':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
return count( $product->get_upsell_ids() );
|
|
case 'cross_sells_products_count':
|
|
if ( is_cart() && is_object( WC()->cart ) ) {
|
|
return count( WC()->cart->get_cross_sells() );
|
|
}
|
|
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
return count( $product->get_cross_sell_ids() );
|
|
case 'product_variations':
|
|
$product = wc_get_product( get_the_ID() );
|
|
|
|
if ( false === $product ) {
|
|
return 0;
|
|
}
|
|
if ( ! $product->is_type( 'variable' ) ) {
|
|
return 0;
|
|
}
|
|
|
|
$atts = $product->get_variation_attributes();
|
|
return ! empty( $product->get_attributes() ) && is_array( $atts ) && array_key_exists( 'pa_' . strtolower( $value ), $atts ) ? $value : null;
|
|
|
|
case 'published_date':
|
|
$format = ! empty( $additionals ) ? $additionals : 'U';
|
|
return get_the_time( $format );
|
|
case 'modified_date':
|
|
$format = ! empty( $additionals ) ? $additionals : 'U';
|
|
return get_the_modified_date( $format );
|
|
case 'post_category':
|
|
return has_term( $value, 'category' ) ? $value : null;
|
|
case 'post_tag':
|
|
return has_term( $value, 'post_tag' ) ? $value : null;
|
|
case 'post_count':
|
|
$count = is_archive() || is_search() ? get_queried_object()->count : null;
|
|
return $count;
|
|
case 'term_count':
|
|
if ( is_archive() || is_tax() ) {
|
|
return count(
|
|
get_terms(
|
|
[
|
|
'taxonomy' => get_queried_object()->taxonomy,
|
|
'child_of' => get_queried_object()->term_id,
|
|
]
|
|
)
|
|
);
|
|
} else {
|
|
return null;
|
|
}
|
|
case 'is_term':
|
|
$queried_object = get_queried_object();
|
|
if ( ( is_archive() || is_tax() ) && isset( $queried_object->term_id ) ) {
|
|
return $queried_object->term_id;
|
|
} else {
|
|
return 0;
|
|
}
|
|
case 'featured_images_count':
|
|
return function_exists( 'avada_number_of_featured_images' ) ? avada_number_of_featured_images( true ) : 0;
|
|
case 'comments_status':
|
|
return comments_open() ? 'open' : 'closed';
|
|
case 'comments_count':
|
|
return intval( get_comments_number() );
|
|
case 'event_status':
|
|
$id = get_the_ID();
|
|
|
|
if ( ! tribe_is_event( $id ) ) {
|
|
return '';
|
|
}
|
|
|
|
$event = tribe_events_get_event( $id );
|
|
$end_date = tribe_get_end_date( $event, true, 'U' );
|
|
$start_date = tribe_get_start_date( $event, true, 'U' );
|
|
|
|
if ( 'started' === $value ) {
|
|
return time() < $end_date ? 'started' : null;
|
|
} else {
|
|
return time() > $end_date ? 'ended' : null;
|
|
}
|
|
|
|
case 'device_type':
|
|
if ( fusion_library()->device_detection->is_mobile() && 'mobile_tablet' !== $value ) {
|
|
return 'mobile';
|
|
} elseif ( fusion_library()->device_detection->is_tablet() && 'mobile_tablet' !== $value ) {
|
|
return 'tablet';
|
|
} elseif ( ! wp_is_mobile() ) {
|
|
return 'desktop';
|
|
} elseif ( wp_is_mobile() ) {
|
|
return 'mobile_tablet';
|
|
}
|
|
return '';
|
|
|
|
case 'user_agent':
|
|
return isset( $_SERVER['HTTP_USER_AGENT'] ) ? wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) : null; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
|
|
case 'referrer':
|
|
return wp_get_referer();
|
|
|
|
case 'user_role':
|
|
$user = wp_get_current_user();
|
|
return 0 !== $user->ID ? $user->roles : [];
|
|
|
|
case 'get_var':
|
|
if ( ! isset( $_GET[ $additionals ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
|
return null;
|
|
}
|
|
if ( is_array( $_GET[ $additionals ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
|
return array_map( 'sanitize_text_field', $_GET[ $additionals ] ); // phpcs:ignore WordPress.Security
|
|
}
|
|
|
|
return sanitize_text_field( wp_unslash( $_GET[ $additionals ] ) ); // phpcs:ignore WordPress.Security.NonceVerification
|
|
|
|
case 'session_var':
|
|
if ( ! isset( $_SESSION[ $additionals ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
|
return null;
|
|
}
|
|
if ( is_array( $_SESSION[ $additionals ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
|
return array_map( 'sanitize_text_field', $_SESSION[ $additionals ] ); // phpcs:ignore WordPress.Security
|
|
}
|
|
|
|
return sanitize_text_field( wp_unslash( $_SESSION[ $additionals ] ) ); // phpcs:ignore WordPress.Security.NonceVerification
|
|
case 'custom_field':
|
|
$post_meta = get_post_meta( get_the_ID(), $additionals, true );
|
|
return ! empty( $post_meta ) ? $post_meta : null;
|
|
|
|
case 'acf_field':
|
|
$acf_field = ! is_archive() ? get_field( $additionals ) : get_field( $additionals, get_queried_object() );
|
|
$field_object = get_field_object( $additionals );
|
|
|
|
if ( isset( $field_object['type'] ) && 'true_false' === $field_object['type'] ) {
|
|
if ( true === $acf_field ) {
|
|
$acf_field = 'true';
|
|
} else if ( false === $acf_field ) {
|
|
$acf_field = 'false';
|
|
}
|
|
} else if ( empty( $acf_field ) ) {
|
|
$acf_field = null;
|
|
}
|
|
|
|
return $acf_field;
|
|
|
|
case 'acf_repeater_count':
|
|
$count = 0;
|
|
if ( class_exists( 'ACF' ) && $additionals && have_rows( $additionals ) ) {
|
|
$count = count( get_field( $additionals ) );
|
|
}
|
|
return $count;
|
|
|
|
case 'acf_repeater_single_value':
|
|
if ( ! $additionals ) {
|
|
return '';
|
|
}
|
|
preg_match( '/.+?(?=\[)/', $additionals, $field );
|
|
$field = $field[0];
|
|
|
|
preg_match_all( '/\[(.*?)\]/', $additionals, $keys );
|
|
|
|
$keys = $keys[1];
|
|
$index = isset( $keys[0] ) ? $keys[0] : '';
|
|
$key = isset( $keys[1] ) ? $keys[1] : '';
|
|
|
|
$value = Fusion_Dynamic_Data_Callbacks::acf_get_repeater_single_field(
|
|
[
|
|
'field' => $field,
|
|
'index' => $index,
|
|
'key' => $key,
|
|
]
|
|
);
|
|
|
|
return $value;
|
|
|
|
case 'acf_repeater_sub_field':
|
|
if ( ! $additionals ) {
|
|
return '';
|
|
}
|
|
|
|
$value = Fusion_Dynamic_Data_Callbacks::acf_get_repeater_sub_field( [ 'sub_field' => $additionals ] );
|
|
|
|
return $value;
|
|
case 'acf_relationship_count':
|
|
$count = 0;
|
|
if ( class_exists( 'ACF' ) && $additionals && have_rows( $additionals ) ) {
|
|
$count = count( get_field( $additionals, false, false ) );
|
|
}
|
|
return $count;
|
|
case 'heading_number':
|
|
return awb_get_approx_nr_of_headings( (int) get_the_ID() );
|
|
|
|
case 'order_received_status':
|
|
global $wp;
|
|
|
|
if ( is_object( $wp ) && property_exists( $wp, 'query_vars' ) && isset( $wp->query_vars['order-received'] ) ) {
|
|
$wc_order = wc_get_order( apply_filters( 'woocommerce_thankyou_order_id', absint( $wp->query_vars['order-received'] ) ) );
|
|
} else {
|
|
return '';
|
|
}
|
|
return $wc_order->get_status();
|
|
|
|
case 'order_received_total_value':
|
|
global $wp;
|
|
|
|
if ( is_object( $wp ) && property_exists( $wp, 'query_vars' ) && isset( $wp->query_vars['order-received'] ) ) {
|
|
$wc_order = wc_get_order( apply_filters( 'woocommerce_thankyou_order_id', absint( $wp->query_vars['order-received'] ) ) );
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
return $wc_order->get_total();
|
|
|
|
case 'order_received_downloads':
|
|
global $wp;
|
|
|
|
if ( is_object( $wp ) && property_exists( $wp, 'query_vars' ) && isset( $wp->query_vars['order-received'] ) ) {
|
|
$wc_order = wc_get_order( apply_filters( 'woocommerce_thankyou_order_id', absint( $wp->query_vars['order-received'] ) ) );
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
if ( $wc_order->has_downloadable_item() && $wc_order->is_download_permitted() ) {
|
|
return count( $wc_order->get_downloadable_items() );
|
|
}
|
|
|
|
return false;
|
|
|
|
case 'post_term':
|
|
global $post;
|
|
$taxonomy_ids = [];
|
|
|
|
if ( ! $post ) {
|
|
return $taxonomy_ids;
|
|
}
|
|
|
|
$post_taxonomies = get_object_taxonomies( $post, 'objects' );
|
|
|
|
if ( ! is_array( $post_taxonomies ) ) {
|
|
return $taxonomy_ids;
|
|
}
|
|
|
|
foreach ( $post_taxonomies as $taxonomy ) {
|
|
$terms = get_the_terms( $post, $taxonomy->name );
|
|
if ( ! is_array( $terms ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $terms as $term ) {
|
|
array_push( $taxonomy_ids, $term->term_id );
|
|
}
|
|
}
|
|
|
|
return $taxonomy_ids;
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Matches current and desired values.
|
|
*
|
|
* @since 3.3
|
|
* @param mixed $current_value The current value.
|
|
* @param string $desired_value The desired value.
|
|
* @param string $comparison The desired comparison.
|
|
* @param string $field_name The field name.
|
|
* @return bool
|
|
*/
|
|
public static function is_match( $current_value, $desired_value, $comparison, $field_name ) {
|
|
|
|
$current_value = self::format_string( $current_value, $field_name );
|
|
$desired_value = self::format_string( $desired_value, $field_name );
|
|
|
|
switch ( $comparison ) {
|
|
case 'equal':
|
|
return is_array( $current_value ) ? in_array( $desired_value, $current_value ) : $current_value === $desired_value; // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
|
|
|
|
case 'not-equal':
|
|
return is_array( $current_value ) ? ! in_array( $desired_value, $current_value ) : $current_value !== $desired_value; // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
|
|
|
|
case 'greater-than':
|
|
return floatval( $current_value ) > floatval( $desired_value );
|
|
|
|
case 'less-than':
|
|
return floatval( $current_value ) < floatval( $desired_value );
|
|
|
|
case 'contains':
|
|
return false !== strpos( $current_value, $desired_value );
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Format variables to be lowercase strings.
|
|
*
|
|
* @static
|
|
* @since 3.11.3
|
|
* @access public
|
|
* @param mixed $value The current value.
|
|
* @param string $field_name The field name.
|
|
* @return mixed The formatted value.
|
|
*/
|
|
public static function format_string( $value, $field_name = '' ) {
|
|
if ( 'published_date' === $field_name || 'modified_date' === $field_name ) {
|
|
$value = strtotime( $value );
|
|
} else if ( is_array( $value ) ) {
|
|
$value = array_map( [ 'Fusion_Builder_Conditional_Render_Helper', 'format_string' ], $value );
|
|
} elseif ( is_null( $value ) || is_bool( $value ) || is_numeric( $value ) || is_string( $value ) ) {
|
|
$value = strtolower( (string) $value );
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* Matches conditions.
|
|
*
|
|
* @since 3.3
|
|
* @param array $checks An array of all the conditions.
|
|
* @return bool.
|
|
*/
|
|
public static function match_conditions( $checks ) {
|
|
$is_match = null;
|
|
$encoded = wp_json_encode( $checks );
|
|
|
|
// If all conditions are of OR type.
|
|
if ( false === strpos( $encoded, 'and' ) ) {
|
|
foreach ( $checks as $check ) {
|
|
$is_match = null === $is_match ? $check[1] : $is_match;
|
|
$is_match = $is_match || $check[1];
|
|
}
|
|
return $is_match;
|
|
}
|
|
|
|
// If all conditions are of AND type.
|
|
if ( false === strpos( $encoded, 'or' ) ) {
|
|
foreach ( $checks as $check ) {
|
|
$is_match = null === $is_match ? $check[1] : $is_match;
|
|
$is_match = $is_match && $check[1];
|
|
}
|
|
return $is_match;
|
|
}
|
|
|
|
return self::match_mixed_conditions( $checks );
|
|
}
|
|
|
|
/**
|
|
* Matches mixed conditions.
|
|
*
|
|
* @since 3.3
|
|
* @param array $checks An array of all the conditions.
|
|
* @return bool.
|
|
*/
|
|
public static function match_mixed_conditions( $checks ) {
|
|
$collected_conditions = [];
|
|
$current_operation = '';
|
|
$size = count( $checks );
|
|
$j = 0;
|
|
$k = 0;
|
|
|
|
// Combine conditions based on comparison operator change.
|
|
for ( $i = 0; $i < $size; $i++ ) {
|
|
|
|
if ( '' === $current_operation || $current_operation === $checks[ $i ][0] ) {
|
|
$collected_conditions[ $j ][ $k ] = $checks[ $i ][1];
|
|
$k++;
|
|
$collected_conditions[ $j ][ $k ] = $checks[ $i ][0];
|
|
$k++;
|
|
$current_operation = $checks[ $i ][0];
|
|
} else {
|
|
$collected_conditions[ $j ][ $k ] = $checks[ $i ][1];
|
|
$k++;
|
|
$collected_conditions[ $j ][ $k ] = $checks[ $i ][0];
|
|
$j++;
|
|
$k = 0;
|
|
$current_operation = '';
|
|
}
|
|
}
|
|
|
|
// Process conditions.
|
|
$final_conditions = [];
|
|
$main_operator = '';
|
|
$temp_result = '';
|
|
$inner_operator = '';
|
|
$operand_first = '';
|
|
$operand_second = '';
|
|
|
|
foreach ( $collected_conditions as $condition ) {
|
|
$size = count( $condition );
|
|
if ( $size < 3 ) {
|
|
$final_conditions[] = $condition[0];
|
|
$final_conditions[] = $condition[1];
|
|
continue;
|
|
}
|
|
|
|
for ( $i = 0; $i < $size - 1; $i++ ) {
|
|
|
|
if ( '' === $temp_result ) {
|
|
$operand_first = $condition[ $i ];
|
|
$operand_second = $condition[ $i + 2 ];
|
|
$inner_operator = $condition[ $i + 1 ];
|
|
$i = $i + 2;
|
|
|
|
$temp_result = 'or' === $inner_operator ? ( $operand_first || $operand_second ) : ( $operand_first && $operand_second );
|
|
} else {
|
|
$operand_first = $temp_result;
|
|
$operand_second = $condition[ $i + 1 ];
|
|
$inner_operator = $condition[ $i ];
|
|
|
|
$temp_result = 'or' === $inner_operator ? ( $operand_first || $operand_second ) : ( $operand_first && $operand_second );
|
|
$i++;
|
|
}
|
|
|
|
if ( true !== $temp_result ) {
|
|
$temp_result = false;
|
|
}
|
|
}
|
|
$main_operator = $condition;
|
|
|
|
$final_conditions[] = $temp_result;
|
|
$final_conditions[] = $main_operator[ $size - 1 ];
|
|
$temp_result = '';
|
|
}
|
|
|
|
// Final comparisons.
|
|
$temp_result = '';
|
|
$inner_operator = '';
|
|
$operand_first = '';
|
|
$operand_second = '';
|
|
$size = count( $final_conditions );
|
|
|
|
if ( 3 > $size ) {
|
|
return $final_conditions[0];
|
|
}
|
|
|
|
for ( $i = 0; $i < $size - 1; $i++ ) {
|
|
if ( '' === $temp_result ) {
|
|
$operand_first = $final_conditions[ $i ];
|
|
$operand_second = $final_conditions[ $i + 2 ];
|
|
$inner_operator = $final_conditions[ $i + 1 ];
|
|
$i = $i + 2;
|
|
|
|
$temp_result = 'or' === $inner_operator ? ( $operand_first || $operand_second ) : ( $operand_first && $operand_second );
|
|
} else {
|
|
$operand_first = $temp_result;
|
|
$operand_second = $final_conditions[ $i + 1 ];
|
|
$inner_operator = $final_conditions[ $i ];
|
|
|
|
$temp_result = 'or' === $inner_operator ? ( $operand_first || $operand_second ) : ( $operand_first && $operand_second );
|
|
$i++;
|
|
}
|
|
|
|
if ( true !== $temp_result ) {
|
|
$temp_result = false;
|
|
}
|
|
}
|
|
|
|
return $temp_result;
|
|
}
|
|
}
|