CRM-16804 fix - Contribution updated via api wrongfully deletes PCP soft contribution
authormonishdeb <monish.deb@webaccessglobal.com>
Tue, 7 Jul 2015 07:07:12 +0000 (12:37 +0530)
committermonishdeb <monish.deb@webaccessglobal.com>
Tue, 7 Jul 2015 07:07:12 +0000 (12:37 +0530)
https://issues.civicrm.org/jira/browse/CRM-16804

CRM/Contribute/BAO/Contribution.php
CRM/Contribute/Form/Contribution.php

index a4ab84a2a4f1a1f9bfd89c8f5ad63834a32d8b3d..d46fb266a89240dbf42fdc0ab5c5a1da86e379d5 100644 (file)
@@ -370,12 +370,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
     // Handle soft credit and / or link to personal campaign page
     $softIDs = CRM_Contribute_BAO_ContributionSoft::getSoftCreditIds($contribution->id);
 
-    //Delete PCP against this contribution and create new on submitted PCP information
     $pcpId = CRM_Contribute_BAO_ContributionSoft::getSoftCreditIds($contribution->id, TRUE);
-    if ($pcpId) {
-      $deleteParams = array('id' => $pcpId);
-      CRM_Contribute_BAO_ContributionSoft::del($deleteParams);
-    }
+
     if ($pcp = CRM_Utils_Array::value('pcp', $params)) {
       $softParams = array();
       $softParams['contribution_id'] = $contribution->id;
@@ -395,6 +391,11 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
         CRM_Contribute_Form_Contribution_Confirm::pcpNotifyOwner($contribution, $contributionSoft);
       }
     }
+    //Delete PCP against this contribution and create new on submitted PCP information
+    elseif (array_key_exists('pcp', $params) && $pcpId) {
+      $deleteParams = array('id' => $pcpId);
+      CRM_Contribute_BAO_ContributionSoft::del($deleteParams);
+    }
     if (isset($params['soft_credit'])) {
       $softParams = $params['soft_credit'];
 
index cc2376f24adb65e4a2e528772fe7b0c36af2a7c6..d37164e03d902c3c8f64f3103610cdc6b8bdf2d7 100644 (file)
@@ -1202,9 +1202,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
         $params[$f] = CRM_Utils_Array::value($f, $formValues);
       }
 
-      if (!empty($pcp)) {
-        $params['pcp'] = $pcp;
-      }
+      $params['pcp'] = !empty($pcp) ? $pcp : NULL;
       if (!empty($softParams)) {
         $params['soft_credit'] = $softParams;
         $params['soft_credit_ids'] = $softIDs;