/**
* takes an associative array and creates a membership object
*
- * @param array $params (reference ) an assoc array of name/value pairs
- * @param array $ids the array that holds all the db ids
- * @param boolean $callFromAPI Is this function called from API?
+ * @param array $params (reference ) an assoc array of name/value pairs
+ * @param array $ids the array that holds all the db ids
+ * @param bool $skipRedirect
+ * @param string $activityType
+ *
+ * @throws CRM_Core_Exception
+ * @internal param bool $callFromAPI Is this function called from API?
*
* @return object CRM_Member_BAO_Membership object
* @access public
// CRM_Contact_BAO_Relationship::relatedMemberships()
if (isset($params['owner_membership_id'])) {
unset($params['max_related']);
- } else {
+ }
+ else {
// if membership allows related, default max_related to value in membership_type
if (!array_key_exists('max_related', $params) && !empty($params['membership_type_id'])) {
$membershipType = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($params['membership_type_id']);
* full featured over a period of time. This is the inverse function of
* create. It also stores all the retrieved values in the default array
*
- * @param array $params (reference ) an assoc array of name/value pairs
+ * @param array $params (reference ) an assoc array of name/value pairs
* @param array $defaults (reference ) an assoc array to hold the name / value pairs
* in a hierarchical manner
- * @param array $ids (reference) the array that holds all the db ids
+ *
+ * @internal param array $ids (reference) the array that holds all the db ids
*
* @return object CRM_Member_BAO_Membership object
* @access public
}
$index = !empty($memBlockDetails['is_separate_payment']) ? 2 : 1;
-
+ $createdMemberships = array();
+ $membership = NULL;
if (empty($errors[$index])) {
if (isset($membershipParams['onbehalf']) && !empty($membershipParams['onbehalf']['member_campaign_id'])) {
$form->_params['campaign_id'] = $membershipParams['onbehalf']['member_campaign_id'];
}
+ //!!B
if (is_array($membershipTypeID)) {
$typesTerms = CRM_Utils_Array::value('types_terms', $membershipParams, array());
- $createdMemberships = array();
-
foreach ($membershipTypeID as $memType) {
$numTerms = CRM_Utils_Array::value($memType, $typesTerms, 1);
$membership = self::renewMembership($contactID, $memType,
}
}
else {
- $membership = self::renewMembership($contactID, $membershipTypeID,
+ $membership = $createdMemberships[$membershipTypeID] = self::renewMembership($contactID, $membershipTypeID,
$isTest, $form, NULL,
CRM_Utils_Array::value('cms_contactID', $membershipParams),
$customFieldsFormatted, CRM_Utils_Array::value('types_terms', $membershipParams, 1)
$message = ts('Payment Processor Error message') . ': ' . implode('<br/>', $message);
throw new CRM_Core_Exception($message);
}
+ $form->_params['createdMembershipIDs'] = array();
- // CRM-7851
- CRM_Core_BAO_CustomValueTable::postProcess($form->_params,
- CRM_Core_DAO::$_nullArray,
- 'civicrm_membership',
- $membership->id,
- 'Membership'
- );
+ // CRM-7851 - Moved after processing Payment Errors
+ foreach ($createdMemberships as $createdMembership) {
+ CRM_Core_BAO_CustomValueTable::postProcess(
+ $form->_params,
+ CRM_Core_DAO::$_nullArray,
+ 'civicrm_membership',
+ $createdMembership->id,
+ 'Membership'
+ );
+ $form->_params['createdMembershipIDs'][] = $createdMembership->id;
+ }
$form->_params['membershipID'] = $membership->id;
if ($form->_contributeMode == 'notify') {
* function to create memberships for related contacts
* takes into account the maximum related memberships
*
- * @param array $params array of key - value pairs
- * @param object $membership membership object
+ * @param array $params array of key - value pairs
+ * @param $dao
+ *
+ * @internal param object $membership membership object
*
* @return null|relatedMembership array of memberships if created
* @static
if (($params['status_id'] == $deceasedStatusId) || ($params['status_id'] == $expiredStatusId)) {
// related membership is not active so does not count towards maximum
CRM_Member_BAO_Membership::create($params, $relMemIds);
- } else {
+ }
+ else {
// related membership already exists, so this is just an update
if (isset($params['id'])) {
if ($available > 0) {