Merge pull request #22832 from jmcclelland/ufexport
[civicrm-core.git] / ext / contributioncancelactions / contributioncancelactions.php
index 61966d72a0bce3497976acfdbddf7b6616e37f98..26fea163413380231987cd1cf8c4600a328025e1 100644 (file)
@@ -12,44 +12,27 @@ use Civi\Api4\Participant;
  *
  * This enacts the following
  * - find and cancel any related pending memberships
- * - (not yet implemented) find and cancel any related pending participant records
- * - (not yet implemented) find any related pledge payment records. Remove the contribution id.
+ * - (not yet implemented) find and cancel any related pending participant
+ * records
+ * - (not yet implemented) find any related pledge payment records. Remove the
+ * contribution id.
  *
  * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_post
+ *
+ * @throws \CiviCRM_API3_Exception
+ * @throws \API_Exception
  */
 function contributioncancelactions_civicrm_post($op, $objectName, $objectId, $objectRef) {
   if ($op === 'edit' && $objectName === 'Contribution') {
-    if ('Cancelled' === CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $objectRef->contribution_status_id)) {
+    if (in_array(CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $objectRef->contribution_status_id),
+      ['Cancelled', 'Failed']
+    )) {
       contributioncancelactions_cancel_related_pending_memberships((int) $objectId);
       contributioncancelactions_cancel_related_pending_participant_records((int) $objectId);
-      contributioncancelactions_update_related_pledge((int) $objectId, (int) $objectRef->contribution_status_id);
     }
   }
 }
 
-/**
- * Update any related pledge when a contribution is cancelled.
- *
- * This updates the status of the pledge and amount paid.
- *
- * The functionality should probably be give more thought in that it currently
- * does not un-assign the contribution id from the pledge payment. However,
- * at time of writing the goal is to move rather than fix functionality.
- *
- * @param int $contributionID
- * @param int $contributionStatusID
- *
- * @throws CiviCRM_API3_Exception
- */
-function contributioncancelactions_update_related_pledge(int $contributionID, int $contributionStatusID) {
-  $pledgePayments = civicrm_api3('PledgePayment', 'get', ['contribution_id' => $contributionID])['values'];
-  if (!empty($pledgePayments)) {
-    $pledgePaymentIDS = array_keys($pledgePayments);
-    $pledgePayment = reset($pledgePayments);
-    CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgePayment['pledge_id'], $pledgePaymentIDS, $contributionStatusID);
-  }
-}
-
 /**
  * Find and cancel any pending participant records.
  *
@@ -97,6 +80,6 @@ function contributioncancelactions_cancel_related_pending_memberships($contribut
     return;
   }
   foreach ($connectedMemberships as $membershipID) {
-    civicrm_api3('Membership', 'create', ['status_id' => 'Cancelled', 'id' => $membershipID, 'is_override' => 1]);
+    civicrm_api3('Membership', 'create', ['status_id' => 'Cancelled', 'id' => $membershipID, 'is_override' => 1, 'status_override_end_date' => 'null']);
   }
 }