Esempio n. 1
0
 /**
  *
  * 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;
     }
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 /**
  * 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;
 }
Esempio n. 5
0
    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;
    }