Skip to content

Commit

Permalink
dev/core#792 Fix Contributions not recording if selected membership i…
Browse files Browse the repository at this point in the history
…s none when using a membership priceset
  • Loading branch information
mattwire committed Aug 21, 2019
1 parent ac179e8 commit c6f840f
Showing 1 changed file with 49 additions and 23 deletions.
72 changes: 49 additions & 23 deletions CRM/Contribute/Form/Contribution/Confirm.php
Original file line number Diff line number Diff line change
Expand Up @@ -2269,11 +2269,7 @@ protected function processFormSubmission($contactID) {
$this->_useForMember = $this->get('useForMember');

// store the fact that this is a membership and membership type is selected
if ((!empty($membershipParams['selectMembership']) &&
$membershipParams['selectMembership'] != 'no_thanks'
) ||
$this->_useForMember
) {
if ($this->isMembershipSelected($membershipParams)) {
if (!$this->_useForMember) {
$this->assign('membership_assign', TRUE);
$this->set('membershipTypeID', $this->_params['selectMembership']);
Expand Down Expand Up @@ -2338,6 +2334,53 @@ protected function processFormSubmission($contactID) {
}
}

/**
* Return True/False if we have a membership selected on the contribution page
* @param array $membershipParams
*
* @return bool
*/
private function isMembershipSelected($membershipParams) {
$priceFieldIds = $this->get('memberPriceFieldIDS');
if ((!empty($membershipParams['selectMembership']) && $membershipParams['selectMembership'] != 'no_thanks')
&& empty($priceFieldIds)) {
return TRUE;
}
else {
$membershipParams = $this->getMembershipParamsFromPriceSet($membershipParams);
}
return !empty($membershipParams['selectMembership']);
}

/**
* Extract the selected memberships from a priceSet
*
* @param array $membershipParams
*
* @return array
*/
private function getMembershipParamsFromPriceSet($membershipParams) {
$priceFieldIds = $this->get('memberPriceFieldIDS');
if (empty($priceFieldIds)) {
return $membershipParams;
}
$membershipParams['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $priceFieldIds['id'], 'financial_type_id');
unset($priceFieldIds['id']);
$membershipTypeIds = [];
$membershipTypeTerms = [];
foreach ($priceFieldIds as $priceFieldId) {
$membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldId, 'membership_type_id');
if ($membershipTypeId) {
$membershipTypeIds[] = $membershipTypeId;
$term = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldId, 'membership_num_terms') ?: 1;
$membershipTypeTerms[$membershipTypeId] = ($term > 1) ? $term : 1;
}
}
$membershipParams['selectMembership'] = $membershipTypeIds;
$membershipParams['types_terms'] = $membershipTypeTerms;
return $membershipParams;
}

/**
* Membership processing section.
*
Expand Down Expand Up @@ -2387,24 +2430,7 @@ protected function doMembershipProcessing($contactID, $membershipParams, $premiu
$fieldTypes = ['Contact', 'Organization', 'Membership'];
}

$priceFieldIds = $this->get('memberPriceFieldIDS');

if (!empty($priceFieldIds)) {
$membershipParams['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $priceFieldIds['id'], 'financial_type_id');
unset($priceFieldIds['id']);
$membershipTypeIds = [];
$membershipTypeTerms = [];
foreach ($priceFieldIds as $priceFieldId) {
$membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldId, 'membership_type_id');
if ($membershipTypeId) {
$membershipTypeIds[] = $membershipTypeId;
$term = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $priceFieldId, 'membership_num_terms') ?: 1;
$membershipTypeTerms[$membershipTypeId] = ($term > 1) ? $term : 1;
}
}
$membershipParams['selectMembership'] = $membershipTypeIds;
$membershipParams['types_terms'] = $membershipTypeTerms;
}
$membershipParams = $this->getMembershipParamsFromPriceSet($membershipParams);
if (!empty($membershipParams['selectMembership'])) {
// CRM-12233
$membershipLineItems = $formLineItems;
Expand Down

0 comments on commit c6f840f

Please sign in to comment.