CRM-20311 - Membership cancelation via contribution doesn't create membership status...
authorStan Dragnev <stan@dragnev.ca>
Tue, 21 Mar 2017 18:29:34 +0000 (14:29 -0400)
committerStan Dragnev <stan@dragnev.ca>
Tue, 21 Mar 2017 18:29:34 +0000 (14:29 -0400)
Proposed fix adds the activity bit of code to the deprecated function in CRM_Contribute_BAO_Contribution. Long term fix will probably depend on what happens with this function in the future.

CRM/Contribute/BAO/Contribution.php

index cda0ca55b0f81466711a054aec807b46b6bd9ddd..ef9d2f761da1ad54552affa1f7e49cf045aea216 100644 (file)
@@ -1722,8 +1722,24 @@ LEFT JOIN  civicrm_contribution contribution ON ( componentPayment.contribution_
       if (is_array($memberships)) {
         foreach ($memberships as $membership) {
           if ($membership) {
-            $membership->status_id = array_search('Cancelled', $membershipStatuses);
+            $newStatus = array_search('Cancelled', $membershipStatuses);
+
+            // Create activity
+            $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
+            $activityParam = array(
+              'subject' => "Status changed from {$allStatus[$membership->status_id]} to {$allStatus[$newStatus]}",
+              'source_contact_id' => CRM_Core_Session::singleton()->get('userID'),
+              'target_contact_id' => $membership->contact_id,
+              'source_record_id' => $membership->id,
+              'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Membership Status'),
+              'status_id' => 2,
+              'priority_id' => 2,
+              'activity_date_time' => date('Y-m-d H:i:s'),
+            );
+
+            $membership->status_id = $newStatus;
             $membership->save();
+            civicrm_api3('activity', 'create', $activityParam);
 
             $updateResult['updatedComponents']['CiviMember'] = $membership->status_id;
             if ($processContributionObject) {