From d25e42241bb96dbd5eeb4c89d10363d1eb0a2b46 Mon Sep 17 00:00:00 2001 From: Dave Greenberg Date: Wed, 3 Sep 2014 13:32:57 -0700 Subject: [PATCH] CRM-15207 - cherry-pick code changes to fix the Membership separate payment bug. The modifications to CiviUnitTestCase.php are causing test failures and need to be reworked. ---------------------------------------- * CRM-15207: https://issues.civicrm.org/jira/browse/CRM-15207 --- CRM/Contribute/Form/Contribution/Confirm.php | 22 +++++++++++++------- CRM/Member/BAO/Membership.php | 17 +++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 0dad270c7a..b832c04f5c 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -1698,10 +1698,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ public function processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems) { try { - $membershipTypeID = (array) $membershipParams['selectMembership']; - - $membershipTypes = CRM_Member_BAO_Membership::buildMembershipTypeValues($this); - + $membershipTypeIDs = (array) $membershipParams['selectMembership']; + $membershipTypes = CRM_Member_BAO_Membership::buildMembershipTypeValues($this, $membershipTypeIDs); $membershipType = empty($membershipTypes) ? array() : reset($membershipTypes); $this->assign('membership_name', CRM_Utils_Array::value('name', $membershipType)); @@ -1723,7 +1721,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } CRM_Member_BAO_Membership::postProcessMembership($membershipParams, $contactID, - $this, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeID, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $contributionTypeId, + $this, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeIDs, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $contributionTypeId, $membershipLineItems ); $this->assign('membership_assign', TRUE); @@ -1833,13 +1831,15 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $paramsProcessedForForm = $form->_params = self::getFormParams($params['id'], $params); $form->_amount = $params['amount']; - $priceSetID = $form->_params['priceSetId'] = $paramsProcessedForForm['price_set_id']; $priceFields = CRM_Price_BAO_PriceSet::getSetDetail($priceSetID); $priceSetFields = reset($priceFields); $form->_values['fee'] = $priceSetFields['fields']; $form->_priceSetId = $priceSetID; $form->setFormAmountFields($priceSetID); + if (!empty($params['payment_processor'])) { + $form->_paymentProcessor = civicrm_api3('payment_processor', 'getsingle', array('id' => $params['payment_processor'])); + } $priceFields = $priceFields[$priceSetID]['fields']; CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution'); $form->_lineItem = array($priceSetID => $lineItems); @@ -1856,7 +1856,15 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ static function getFormParams($id, array $params) { if(!isset($params['is_pay_later'])) { - $params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array('id' => $id, 'return' => 'is_pay_later')); + if (!empty($params['payment_processor'])) { + $params['is_pay_later'] = 0; + } + else { + $params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array( + 'id' => $id, + 'return' => 'is_pay_later' + )); + } } if(empty($params['price_set_id'])) { $params['price_set_id'] = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $params['id']); diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index d900d6f28e..65ce8c2882 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -1247,10 +1247,10 @@ AND civicrm_membership.is_test = %2"; * * @param array $membershipDetails * - * @param array $membershipTypeID + * @param array $membershipTypeIDs * * @param bool $isPaidMembership - * @param integer $membershipID + * @param array $membershipID * * @param $isProcessSeparateMembershipTransaction * @@ -1262,7 +1262,7 @@ AND civicrm_membership.is_test = %2"; * @access public */ public static function postProcessMembership($membershipParams, $contactID, &$form, $premiumParams, - $customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeID, $isPaidMembership, $membershipID, + $customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID, $isProcessSeparateMembershipTransaction, $defaultContributionTypeID, $membershipLineItems) { $result = $membershipContribution = NULL; $isTest = CRM_Utils_Array::value('is_test', $membershipParams, FALSE); @@ -1307,9 +1307,9 @@ AND civicrm_membership.is_test = %2"; $form->_params['campaign_id'] = $membershipParams['onbehalf']['member_campaign_id']; } //@todo it should no longer be possible for it to get to this point & membership to not be an array - if (is_array($membershipTypeID)) { + if (is_array($membershipTypeIDs)) { $typesTerms = CRM_Utils_Array::value('types_terms', $membershipParams, array()); - foreach ($membershipTypeID as $memType) { + foreach ($membershipTypeIDs as $memType) { $numTerms = CRM_Utils_Array::value($memType, $typesTerms, 1); $createdMemberships[$memType] = self::createOrRenewMembership($membershipParams, $contactID, $customFieldsFormatted, $membershipID, $memType, $isTest, $numTerms, $membershipContribution, $form); } @@ -2088,11 +2088,16 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND * * @param $contactID * @param CRM_Contribute_Form_Contribution_Confirm $form - * @param $membershipDetails * @param $tempParams * @param $isTest * + * @param $lineItems + * @param $minimumFee + * @param $financialTypeID + * * @throws CRM_Core_Exception + * @throws Exception + * @internal param $membershipDetails * @return CRM_Contribute_BAO_Contribution */ public static function processSecondaryFinancialTransaction($contactID, &$form, $tempParams, $isTest, $lineItems, $minimumFee, $financialTypeID) { -- 2.25.1