protected function has_feed($form_id, $meets_conditional_logic = null)
 {
     $feeds = $this->get_feeds($form_id);
     if (!$feeds) {
         return false;
     }
     if ($meets_conditional_logic) {
         $form = GFFormsModel::get_form_meta($form_id);
         $entry = GFFormsModel::create_lead($form);
         foreach ($feeds as $feed) {
             if ($this->is_feed_condition_met($feed, $form, $entry)) {
                 return true;
             }
         }
         //no active feed found, return false
         return false;
     }
     //does not require that feed meets conditional logic. return true since there are feeds
     return true;
 }
Exemple #2
0
 public static function update_confirmation($form, $lead = null, $event = '')
 {
     if (!is_array(rgar($form, 'confirmations'))) {
         return $form;
     }
     if (!empty($event)) {
         $confirmations = wp_filter_object_list($form['confirmations'], array('event' => $event));
     } else {
         $confirmations = $form['confirmations'];
     }
     // if there is only one confirmation, don't bother with the conditional logic, just return it
     // this is here mostly to avoid the semi-costly GFFormsModel::create_lead() function unless we really need it
     if (is_array($form['confirmations']) && count($confirmations) <= 1) {
         $form['confirmation'] = reset($confirmations);
         return $form;
     }
     if (empty($lead)) {
         $lead = GFFormsModel::create_lead($form);
     }
     foreach ($confirmations as $confirmation) {
         if (rgar($confirmation, 'event') != $event) {
             continue;
         }
         if (rgar($confirmation, 'isDefault')) {
             continue;
         }
         if (isset($confirmation['isActive']) && !$confirmation['isActive']) {
             continue;
         }
         $logic = rgar($confirmation, 'conditionalLogic');
         if (GFCommon::evaluate_conditional_logic($logic, $form, $lead)) {
             $form['confirmation'] = $confirmation;
             return $form;
         }
     }
     $filtered_list = wp_filter_object_list($form['confirmations'], array('isDefault' => true));
     $form['confirmation'] = reset($filtered_list);
     return $form;
 }
 public function validation($validation_result)
 {
     if (!$validation_result['is_valid'] || !GFFormDisplay::is_last_page($validation_result['form'])) {
         return $validation_result;
     }
     $form = $validation_result['form'];
     $entry = GFFormsModel::create_lead($form);
     $feed = $this->get_payment_feed($entry, $form);
     if (!$feed) {
         return $validation_result;
     }
     $submission_data = $this->get_submission_data($feed, $form, $entry);
     //Do not process payment if payment amount is 0
     if (floatval($submission_data['payment_amount']) <= 0) {
         $this->log_debug(__METHOD__ . '(): Payment amount is $0.00 or less. Not sending to payment gateway.');
         return $validation_result;
     }
     $this->is_payment_gateway = true;
     $this->current_feed = $this->_single_submission_feed = $feed;
     $this->current_submission_data = $submission_data;
     $performed_authorization = false;
     $is_subscription = $feed['meta']['transactionType'] == 'subscription';
     if ($this->payment_method_is_overridden('authorize') && !$is_subscription) {
         //Running an authorization only transaction if function is implemented and this is a single payment
         $this->authorization = $this->authorize($feed, $submission_data, $form, $entry);
         $performed_authorization = true;
     } elseif ($this->payment_method_is_overridden('subscribe') && $is_subscription) {
         $subscription = $this->subscribe($feed, $submission_data, $form, $entry);
         $this->authorization['is_authorized'] = $subscription['is_success'];
         $this->authorization['error_message'] = rgar($subscription, 'error_message');
         $this->authorization['subscription'] = $subscription;
         $performed_authorization = true;
     }
     if ($performed_authorization) {
         $this->log_debug(__METHOD__ . "(): Authorization result for form #{$form['id']} submission => " . print_r($this->authorization, 1));
     }
     if ($performed_authorization && !$this->authorization['is_authorized']) {
         $validation_result = $this->get_validation_result($validation_result, $this->authorization);
         //Setting up current page to point to the credit card page since that will be the highlighted field
         GFFormDisplay::set_current_page($validation_result['form']['id'], $validation_result['credit_card_page']);
     }
     return $validation_result;
 }
Exemple #4
0
 /**
  * Retrieves $lead object from class if it has already been created; otherwise creates a new $lead object.
  */
 public static function create_lead($form)
 {
     if (empty(self::$lead)) {
         self::$lead = GFFormsModel::create_lead($form);
         self::clear_field_value_cache($form);
     }
     return self::$lead;
 }
 public function has_feed($form_id, $meets_conditional_logic = null)
 {
     $feeds = $this->get_feeds($form_id);
     if (!$feeds) {
         return false;
     }
     $has_active_feed = false;
     if ($meets_conditional_logic) {
         $form = GFFormsModel::get_form_meta($form_id);
         $entry = GFFormsModel::create_lead($form);
     }
     foreach ($feeds as $feed) {
         if (!$has_active_feed && $feed['is_active']) {
             $has_active_feed = true;
         }
         if ($meets_conditional_logic && $feed['is_active'] && $this->is_feed_condition_met($feed, $form, $entry)) {
             return true;
         }
     }
     return $meets_conditional_logic ? false : $has_active_feed;
 }
Exemple #6
0
 public static function update_confirmation($form, $lead = null)
 {
     if (!is_array(rgar($form, "confirmations"))) {
         return $form;
     }
     // if there is only one confirmation, don't bother with the conditional logic, just return it
     // this is here mostly to avoid the semi-costly GFFormsModel::create_lead() function unless we really need it
     if (is_array($form["confirmations"]) && count($form['confirmations']) <= 1) {
         $form['confirmation'] = reset($form['confirmations']);
         return $form;
     }
     if (empty($lead)) {
         $lead = GFFormsModel::create_lead($form);
     }
     foreach ($form['confirmations'] as $confirmation) {
         if ($confirmation['isDefault']) {
             continue;
         }
         $logic = rgar($confirmation, "conditionalLogic");
         if (GFCommon::evaluate_conditional_logic($logic, $form, $lead)) {
             $form['confirmation'] = $confirmation;
             return $form;
         }
     }
     $form['confirmation'] = reset(wp_filter_object_list($form['confirmations'], array('isDefault' => true)));
     return $form;
 }
 public function validation($validation_result)
 {
     if (!GFFormDisplay::is_last_page($validation_result['form'])) {
         return $validation_result;
     }
     $has_authorize = $this->payment_method_is_overridden('authorize');
     $has_subscribe = $this->payment_method_is_overridden('subscribe');
     if (!$has_authorize && !$has_subscribe) {
         return $validation_result;
     }
     //Getting submission data
     $form = $validation_result["form"];
     $entry = GFFormsModel::create_lead($form);
     $feed = $this->get_payment_feed($entry, $form);
     if (!$feed) {
         return $validation_result;
     }
     $do_authorization = $has_authorize && $feed["meta"]["transactionType"] == "product";
     $do_subscription = $has_subscribe && $feed["meta"]["transactionType"] == "subscription";
     if (!$do_authorization && !$do_subscription) {
         return $validation_result;
     }
     $submission_data = $this->get_submission_data($feed, $form, $entry);
     //Running an authorization only transaction if function is implemented and this is a single payment
     if ($do_authorization) {
         $this->authorization = $this->authorize($feed, $submission_data, $form, $entry);
     } else {
         if ($do_subscription) {
             $subscription = $this->subscribe($feed, $submission_data, $form, $entry);
             $this->authorization["is_authorized"] = $subscription["is_success"];
             $this->authorization["error_message"] = rgar($subscription, "error_message");
             $this->authorization["subscription"] = $subscription;
         }
     }
     $this->authorization["feed"] = $feed;
     $this->authorization["submission_data"] = $submission_data;
     if (!$this->authorization["is_authorized"]) {
         $validation_result = $this->get_validation_result($validation_result, $this->authorization);
         //Setting up current page to point to the credit card page since that will be the highlighted field
         GFFormDisplay::set_current_page($validation_result["form"]["id"], $validation_result["credit_card_page"]);
     }
     return $validation_result;
 }
 public function hasPayment($validation_result)
 {
     $form = $validation_result['form'];
     $entry = GFFormsModel::create_lead($form);
     $feed = $this->get_payment_feed($entry, $form);
     if (!$feed) {
         return false;
     }
     $submission_data = $this->get_submission_data($feed, $form, $entry);
     //Do not process payment if payment amount is 0 or less
     return floatval($submission_data['payment_amount']) > 0;
 }
 /**
  * Retrieves $entry object from class if it has already been created; otherwise creates a new $entry object.
  */
 public static function create_lead($form)
 {
     if (empty(self::$entry)) {
         if (isset($_GET['gf_token'])) {
             $incomplete_submission_info = GFFormsModel::get_incomplete_submission_values($_GET['gf_token']);
             if ($incomplete_submission_info['form_id'] == $form['id']) {
                 $submission_details_json = $incomplete_submission_info['submission'];
                 $submission_details = json_decode($submission_details_json, true);
                 $entry = $submission_details['partial_entry'];
             }
         }
         self::$entry = isset($entry) ? $entry : GFFormsModel::create_lead($form);
         self::clear_field_value_cache($form);
         foreach ($form['fields'] as $field) {
             $input_type = GFFormsModel::get_input_type($field);
             switch ($input_type) {
                 case 'signature':
                     if (empty(self::$entry[$field['id']])) {
                         self::$entry[$field['id']] = rgpost("input_{$form['id']}_{$field['id']}_signature_filename");
                     }
                     break;
             }
         }
     }
     return self::$entry;
 }