From 6569bf0fbd11ad32d88ef1c8a5d7e1f9ae86e958 Mon Sep 17 00:00:00 2001
From: Matthew Wire <mjw@mjwconsult.co.uk>
Date: Fri, 10 Sep 2021 16:20:16 +0100
Subject: [PATCH] Remove individual class properties for contributionRecur and
 store contributionRecur as array on class

---
 CRM/Core/Payment/StripeIPN.php       | 16 ++++++----------
 tests/phpunit/CRM/Stripe/IpnTest.php | 22 +++++++++++++---------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/CRM/Core/Payment/StripeIPN.php b/CRM/Core/Payment/StripeIPN.php
index ea3a1aee..d24a4c2e 100644
--- a/CRM/Core/Payment/StripeIPN.php
+++ b/CRM/Core/Payment/StripeIPN.php
@@ -34,11 +34,6 @@ class CRM_Core_Payment_StripeIPN {
   protected $subscription_id = NULL;
   protected $customer_id = NULL;
   protected $charge_id = NULL;
-  protected $previous_plan_id = NULL;
-  protected $plan_amount = NULL;
-  protected $frequency_interval = NULL;
-  protected $frequency_unit = NULL;
-  protected $plan_start = NULL;
 
   /**
    * @var string The stripe Invoice ID (mapped to trxn_id on a contribution for recurring contributions)
@@ -629,8 +624,13 @@ class CRM_Core_Payment_StripeIPN {
 
     // Get the recurring contribution record associated with the Stripe subscription.
     try {
-      $contributionRecur = civicrm_api3('ContributionRecur', 'getsingle', ['trxn_id' => $this->subscription_id]);
+      $contributionRecur = \Civi\Api4\ContributionRecur::get(FALSE)
+        ->addWhere('trxn_id', '=', $this->subscription_id)
+        ->addWhere('is_test', 'IN', [TRUE, FALSE])
+        ->execute()
+        ->first();
       $this->contribution_recur_id = $contributionRecur['id'];
+      $this->contributionRecur = $contributionRecur;
     }
     catch (Exception $e) {
       if ((bool)\Civi::settings()->get('stripe_ipndebug')) {
@@ -639,10 +639,6 @@ class CRM_Core_Payment_StripeIPN {
       }
       return FALSE;
     }
-    $this->plan_amount = $this->retrieve('plan_amount', 'String', FALSE);
-    $this->frequency_interval = $this->retrieve('frequency_interval', 'String', FALSE);
-    $this->frequency_unit = $this->retrieve('frequency_unit', 'String', FALSE);
-    $this->plan_start = $this->retrieve('plan_start', 'String', FALSE);
     return TRUE;
   }
 
diff --git a/tests/phpunit/CRM/Stripe/IpnTest.php b/tests/phpunit/CRM/Stripe/IpnTest.php
index 8844ba96..aec7d459 100644
--- a/tests/phpunit/CRM/Stripe/IpnTest.php
+++ b/tests/phpunit/CRM/Stripe/IpnTest.php
@@ -33,12 +33,16 @@
  * @group headless
  */
 class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
+
   protected $contributionRecurID;
-  protected $installments = 5;
-  protected $frequency_unit = 'month';
-  protected $frequency_interval = 1;
   protected $created_ts;
 
+  protected $contributionRecur = [
+    'frequency_unit' => 'month',
+    'frequency_interval' => 1,
+    'installments' => 5,
+  ];
+
   /**
    * Test creating a recurring contribution and
    * update it after creation. @todo The membership should also be updated.
@@ -657,9 +661,9 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
       'contact_id' => $this->contactID,
       'amount' => $this->total,
       'sequential' => 1,
-      'installments' => $this->installments,
-      'frequency_unit' => $this->frequency_unit,
-      'frequency_interval' => $this->frequency_interval,
+      'installments' => $this->contributionRecur['installments'],
+      'frequency_unit' => $this->contributionRecur['frequency_unit'],
+      'frequency_interval' => $this->contributionRecur['frequency_interval'],
       'contribution_status_id' => 2,
       'payment_processor_id' => $this->paymentProcessorID,
       'is_test' => 1,
@@ -948,9 +952,9 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
       'is_recur'            => 1,
       'contributionRecurID' => $this->contributionRecurID,
       'contributionID'      => $this->contributionID,
-      'frequency_unit'      => $this->frequency_unit,
-      'frequency_interval'  => $this->frequency_interval,
-      'installments'        => $this->installments,
+      'frequency_unit'      => $this->contributionRecur['frequency_unit'],
+      'frequency_interval'  => $this->contributionRecur['frequency_interval'],
+      'installments'        => $this->contributionRecur['installments'],
     ];
 
     $this->doPayment($payment_extra_params);
-- 
GitLab