Merge pull request #17995 from colemanw/updateHook
[civicrm-core.git] / CRM / Contribute / BAO / ContributionRecur.php
index 1b03e98f0abc406cdbbb237166b61dd54ab47dc5..63d7799768d38a08042dd551330d69ca35be5fdd 100644 (file)
@@ -424,8 +424,7 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
       'id' => $id,
     ]);
     // First look for new-style template contribution with is_template=1
-    $templateContributions = \Civi\Api4\Contribution::get()
-      ->setCheckPermissions(FALSE)
+    $templateContributions = \Civi\Api4\Contribution::get(FALSE)
       ->addWhere('contribution_recur_id', '=', $id)
       ->addWhere('is_template', '=', 1)
       ->addWhere('is_test', '=', $is_test)
@@ -434,8 +433,7 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
       ->execute();
     if (!$templateContributions->count()) {
       // Fall back to old style template contributions
-      $templateContributions = \Civi\Api4\Contribution::get()
-        ->setCheckPermissions(FALSE)
+      $templateContributions = \Civi\Api4\Contribution::get(FALSE)
         ->addWhere('contribution_recur_id', '=', $id)
         ->addWhere('is_test', '=', $is_test)
         ->addOrderBy('id', 'DESC')
@@ -444,8 +442,15 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
     }
     if ($templateContributions->count()) {
       $templateContribution = $templateContributions->first();
-      $result = array_merge($templateContribution, $overrides);
       $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($templateContribution['id']);
+      // We only permit the financial type to be overridden for single line items.
+      // Otherwise we need to figure out a whole lot of extra complexity.
+      // It's not UI-possible to alter financial_type_id for recurring contributions
+      // with more than one line item.
+      if (count($lineItems) > 1 && isset($overrides['financial_type_id'])) {
+        unset($overrides['financial_type_id']);
+      }
+      $result = array_merge($templateContribution, $overrides);
       $result['line_item'] = self::reformatLineItemsForRepeatContribution($result['total_amount'], $result['financial_type_id'], $lineItems, (array) $templateContribution);
       return $result;
     }
@@ -547,6 +552,8 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
   /**
    * Copy custom data of the initial contribution into its recurring contributions.
    *
+   * @deprecated
+   *
    * @param int $recurId
    * @param int $targetContributionId
    */