/** * * Checks if a certain entry is valid according to the View search filters (specially the Adv Filters) * * @see GFFormsModel::is_value_match() * * @since 1.7.4 * * @param array $entry Gravity Forms Entry object * @return bool|array Returns 'false' if entry is not valid according to the view search filters (Adv Filter) */ public static function check_entry_display($entry) { if (!$entry || is_wp_error($entry)) { do_action('gravityview_log_debug', __METHOD__ . ' Entry was not found.', $entry); return false; } if (empty($entry['form_id'])) { do_action('gravityview_log_debug', '[apply_filters_to_entry] Entry is empty! Entry:', $entry); return false; } $criteria = self::calculate_get_entries_criteria(); if (empty($criteria['search_criteria']) || !is_array($criteria['search_criteria'])) { do_action('gravityview_log_debug', '[apply_filters_to_entry] Entry approved! No search criteria found:', $criteria); return $entry; } $search_criteria = $criteria['search_criteria']; unset($criteria); // check entry status if (array_key_exists('status', $search_criteria) && $search_criteria['status'] != $entry['status']) { do_action('gravityview_log_debug', sprintf('[apply_filters_to_entry] Entry status - %s - is not valid according to filter:', $entry['status']), $search_criteria); return false; } // check entry date // @todo: Does it make sense to apply the Date create filters to the single entry? // field_filters if (empty($search_criteria['field_filters']) || !is_array($search_criteria['field_filters'])) { do_action('gravityview_log_debug', '[apply_filters_to_entry] Entry approved! No field filters criteria found:', $search_criteria); return $entry; } $filters = $search_criteria['field_filters']; unset($search_criteria); $mode = array_key_exists('mode', $filters) ? strtolower($filters['mode']) : 'all'; unset($filters['mode']); $form = self::get_form($entry['form_id']); foreach ($filters as $filter) { if (!isset($filter['key'])) { continue; } $k = $filter['key']; if ('created_by' === $k) { $field_value = $entry['created_by']; $field = null; } else { $field = self::get_field($form, $k); $field_value = GFFormsModel::get_lead_field_value($entry, $field); } $operator = isset($filter['operator']) ? strtolower($filter['operator']) : 'is'; $is_value_match = GFFormsModel::is_value_match($field_value, $filter['value'], $operator, $field); // verify if we are already free to go! if (!$is_value_match && 'all' === $mode) { do_action('gravityview_log_debug', '[apply_filters_to_entry] Entry cannot be displayed. Failed one criteria for ALL mode', $filter); return false; } elseif ($is_value_match && 'any' === $mode) { return $entry; } } // at this point, if in ALL mode, then entry is approved - all conditions were met. // Or, for ANY mode, means none of the conditions were satisfied, so entry is not approved if ('all' === $mode) { return $entry; } else { do_action('gravityview_log_debug', '[apply_filters_to_entry] Entry cannot be displayed. Failed all the criteria for ANY mode', $filters); return false; } }
public static function evaluate_conditional_logic($logic, $form, $lead) { if (!$logic || !is_array($logic["rules"])) { return true; } $match_count = 0; if (is_array($logic["rules"])) { foreach ($logic["rules"] as $rule) { $source_field = GFFormsModel::get_field($form, $rule["fieldId"]); $field_value = empty($lead) ? GFFormsModel::get_field_value($source_field, array()) : GFFormsModel::get_lead_field_value($lead, $source_field); $is_value_match = GFFormsModel::is_value_match($field_value, $rule["value"], $rule["operator"], $source_field); if ($is_value_match) { $match_count++; } } } $do_action = $logic["logicType"] == "all" && $match_count == sizeof($logic["rules"]) || $logic["logicType"] == "any" && $match_count > 0; return $do_action; }
/** * Evaluates a routing rule. * * @param $routing_rule * * @return bool Is the routing rule a match? */ public function evaluate_routing_rule($routing_rule) { gravity_flow()->log_debug(__METHOD__ . '(): rule:' . print_r($routing_rule, true)); $entry = $this->get_entry(); $form_id = $this->get_form_id(); $entry_meta_keys = array_keys(GFFormsModel::get_entry_meta($form_id)); $form = GFAPI::get_form($form_id); if (in_array($routing_rule['fieldId'], $entry_meta_keys)) { $is_value_match = GFFormsModel::is_value_match(rgar($entry, $routing_rule['fieldId']), $routing_rule['value'], $routing_rule['operator'], null, $routing_rule, $form); } else { $source_field = GFFormsModel::get_field($form, $routing_rule['fieldId']); $field_value = empty($entry) ? GFFormsModel::get_field_value($source_field, array()) : GFFormsModel::get_lead_field_value($entry, $source_field); $is_value_match = GFFormsModel::is_value_match($field_value, $routing_rule['value'], $routing_rule['operator'], $source_field, $routing_rule, $form); } gravity_flow()->log_debug(__METHOD__ . '(): is_match:' . print_r($is_value_match, true)); return $is_value_match; }
public static function evaluate_conditional_logic($logic, $form, $lead) { if (!$logic || !is_array(rgar($logic, 'rules'))) { return true; } $entry_meta_keys = array_keys(GFFormsModel::get_entry_meta($form['id'])); $match_count = 0; if (is_array($logic['rules'])) { foreach ($logic['rules'] as $rule) { if (in_array($rule['fieldId'], $entry_meta_keys)) { $is_value_match = GFFormsModel::is_value_match(rgar($lead, $rule['fieldId']), $rule['value'], $rule['operator'], $rule, $form); } else { $source_field = GFFormsModel::get_field($form, $rule['fieldId']); $field_value = empty($lead) ? GFFormsModel::get_field_value($source_field, array()) : GFFormsModel::get_lead_field_value($lead, $source_field); $is_value_match = GFFormsModel::is_value_match($field_value, $rule['value'], $rule['operator'], $source_field, $rule, $form); } if ($is_value_match) { $match_count++; } } } $do_action = $logic['logicType'] == 'all' && $match_count == sizeof($logic['rules']) || $logic['logicType'] == 'any' && $match_count > 0; return $do_action; }
public static function evaluate_conditional_logic($logic, $form, $lead) { if(!$logic || !is_array(rgar($logic,"rules"))) return true; $entry_meta_keys = array_keys(GFFormsModel::get_entry_meta($form["id"])); $match_count = 0; if(is_array($logic["rules"])){ foreach($logic["rules"] as $rule) { if (in_array($rule["fieldId"], $entry_meta_keys)){ $is_value_match = GFFormsModel::is_value_match(rgar($lead,$rule["fieldId"]), $rule["value"], $rule["operator"]);; } else { $source_field = GFFormsModel::get_field($form, $rule["fieldId"]); $field_value = empty($lead) ? GFFormsModel::get_field_value($source_field, array()) : GFFormsModel::get_lead_field_value($lead, $source_field); $is_value_match = GFFormsModel::is_value_match($field_value, $rule["value"], $rule["operator"], $source_field); } if($is_value_match) $match_count++; } } $do_action = ($logic["logicType"] == "all" && $match_count == sizeof($logic["rules"]) ) || ($logic["logicType"] == "any" && $match_count > 0); return $do_action; }