Merge branch '4.7.21-rc' into master
[civicrm-core.git] / CRM / Member / BAO / Membership.php
index 07716ced1026c1cdd5b7f702511ff2814ac6cef3..6d206aa137b10365629e19600d18df5dc846214a 100644 (file)
@@ -189,7 +189,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
         );
         // 1. Update Schedule Membership Signup/Renwal activity to completed on successful payment of pending membership
         // 2. OR Create renewal activity scheduled if its membership renewal will be paid later
-        if (!empty($activityParams['id']) || $activityType == 'Membership Renewal') {
+        if (!empty($params['membership_activity_status']) && (!empty($activityParams['id']) || $activityType == 'Membership Renewal')) {
           CRM_Activity_BAO_Activity::addActivity($membership, $activityType, $targetContactID, $activityParams);
           break;
         }
@@ -1170,6 +1170,7 @@ AND civicrm_membership.is_test = %2";
     $currentMembership['today_date'] = $today;
 
     if ($status['id'] !== $currentMembership['status_id']) {
+      $oldStatus = $currentMembership['status_id'];
       $memberDAO = new CRM_Member_DAO_Membership();
       $memberDAO->id = $currentMembership['id'];
       $memberDAO->find(TRUE);
@@ -1216,6 +1217,19 @@ AND civicrm_membership.is_test = %2";
       else {
         $logParams['modified_id'] = $currentMembership['contact_id'];
       }
+
+      //Create activity for status change.
+      $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
+      CRM_Activity_BAO_Activity::addActivity($memberDAO,
+        'Change Membership Status',
+        NULL,
+        array(
+          'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$status['id']]}",
+          'source_contact_id' => $logParams['modified_id'],
+          'priority_id' => 'Normal',
+        )
+      );
+
       CRM_Member_BAO_MembershipLog::add($logParams, CRM_Core_DAO::$_nullArray);
     }
   }
@@ -1946,6 +1960,7 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
         if (!empty($currentMembership['id'])) {
           $ids['membership'] = $currentMembership['id'];
         }
+        $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed';
       }
       //CRM-4555
       if ($pending) {
@@ -2121,14 +2136,24 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    *
    * @param int $membershipId
    *   Membership id.
+   * @all bool
+   *   if more than one payment associated with membership id need to be returned.
    *
    * @return int
    *   contribution id
    */
-  public static function getMembershipContributionId($membershipId) {
+  public static function getMembershipContributionId($membershipId, $all = FALSE) {
 
     $membershipPayment = new CRM_Member_DAO_MembershipPayment();
     $membershipPayment->membership_id = $membershipId;
+    if ($all && $membershipPayment->find()) {
+      $contributionIds = array();
+      while ($membershipPayment->fetch()) {
+        $contributionIds[] = $membershipPayment->contribution_id;
+      }
+      return $contributionIds;
+    }
+
     if ($membershipPayment->find(TRUE)) {
       return $membershipPayment->contribution_id;
     }