Esempio n. 1
0
 /**
  * Update lead status of the specified payment
  *
  * @param string $payment
  */
 public function update_status(Pronamic_Pay_Payment $payment, $can_redirect = false)
 {
     $lead_id = $payment->get_source_id();
     $lead = RGFormsModel::get_lead($lead_id);
     if ($lead) {
         $form_id = $lead['form_id'];
         $form = RGFormsModel::get_form($form_id);
         $feed = get_pronamic_gf_pay_feed_by_entry_id($lead_id);
         $data = new Pronamic_WP_Pay_Extensions_GravityForms_PaymentData($form, $lead, $feed);
         if ($feed) {
             $url = null;
             switch ($payment->status) {
                 case Pronamic_WP_Pay_Statuses::CANCELLED:
                     $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::CANCELLED;
                     $url = $data->get_cancel_url();
                     break;
                 case Pronamic_WP_Pay_Statuses::EXPIRED:
                     $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::EXPIRED;
                     $url = $feed->get_url(Pronamic_WP_Pay_Extensions_GravityForms_Links::EXPIRED);
                     break;
                 case Pronamic_WP_Pay_Statuses::FAILURE:
                     $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::FAILED;
                     $url = $data->get_error_url();
                     break;
                 case Pronamic_WP_Pay_Statuses::SUCCESS:
                     if (!Pronamic_WP_Pay_Extensions_GravityForms_Entry::is_payment_approved($lead)) {
                         // Only fullfill order if the payment isn't approved aloready
                         $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::APPROVED;
                         // @see https://github.com/gravityforms/gravityformspaypal/blob/2.3.1/class-gf-paypal.php#L1741-L1742
                         if ($this->addon) {
                             $action = array('id' => $payment->get_transaction_id(), 'type' => 'complete_payment', 'transaction_id' => $payment->get_transaction_id(), 'amount' => $payment->get_amount(), 'entry_id' => $lead['id']);
                             $this->addon->complete_payment($lead, $action);
                         }
                         $this->fulfill_order($lead);
                     }
                     $url = $data->get_success_url();
                     break;
                 case Pronamic_WP_Pay_Statuses::OPEN:
                 default:
                     $url = $data->get_normal_return_url();
                     break;
             }
             Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::update_entry($lead);
             if ($url && $can_redirect) {
                 wp_redirect($url);
                 exit;
             }
         }
     }
 }
 /**
  * Payment redirect URL filter.
  *
  * @since unreleased
  * @param string                  $url
  * @param Pronamic_WP_Pay_Payment $payment
  * @return string
  */
 public function redirect_url($url, $payment)
 {
     $lead_id = $payment->get_source_id();
     $lead = RGFormsModel::get_lead($lead_id);
     if (!$lead) {
         return $url;
     }
     $form_id = $lead['form_id'];
     $form = RGFormsModel::get_form($form_id);
     $feed = get_pronamic_gf_pay_feed_by_entry_id($lead_id);
     if (!$feed) {
         return $url;
     }
     $data = new Pronamic_WP_Pay_Extensions_GravityForms_PaymentData($form, $lead, $feed);
     switch ($payment->status) {
         case Pronamic_WP_Pay_Statuses::CANCELLED:
             $url = $data->get_cancel_url();
             break;
         case Pronamic_WP_Pay_Statuses::EXPIRED:
             $url = $feed->get_url(Pronamic_WP_Pay_Extensions_GravityForms_Links::EXPIRED);
             break;
         case Pronamic_WP_Pay_Statuses::FAILURE:
             $url = $data->get_error_url();
             break;
         case Pronamic_WP_Pay_Statuses::SUCCESS:
             $url = $data->get_success_url();
             break;
         case Pronamic_WP_Pay_Statuses::OPEN:
         default:
             $url = $data->get_normal_return_url();
             break;
     }
     // Process Gravity Forms confirmations if link type is confirmation
     $link = Pronamic_WP_Pay_Extensions_GravityForms_Links::transform_status($payment->status);
     if (isset($feed->links[$link], $feed->links[$link]['type']) && Pronamic_WP_Pay_Extensions_GravityForms_PayFeed::LINK_TYPE_CONFIRMATION === $feed->links[$link]['type']) {
         $confirmation = $this->get_confirmation($lead, $payment->status);
         if (!empty($confirmation)) {
             if (is_array($confirmation) && isset($confirmation['redirect'])) {
                 $url = $confirmation['redirect'];
             } else {
                 $url = add_query_arg(array('pay_confirmation' => $payment->get_id(), '_wpnonce' => wp_create_nonce('gf_confirmation_payment_' . $payment->get_id())), $lead['source_url']);
             }
         }
     }
     return $url;
 }