$params['membership_id'] = $membership->id;
if (isset($ids['membership'])) {
$ids['contribution'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipPayment',
- $ids['membership'],
+ $membership->id,
'contribution_id',
'membership_id'
);
return NULL;
}
- /**
- * Build Membership Block in Contribution Pages.
- *
- * @param CRM_Core_Form $form
- * Form object.
- * @param int $pageID
- * Unused?.
- * @param int $cid
- * Contact checked for having a current membership for a particular membership.
- * @param bool $formItems
- * @param int $selectedMembershipTypeID
- * Selected membership id.
- * @param bool $thankPage
- * Thank you page.
- * @param null $isTest
- *
- * @return bool
- * Is this a separate membership payment
- */
- public static function buildMembershipBlock(
- &$form,
- $pageID,
- $cid,
- $formItems = FALSE,
- $selectedMembershipTypeID = NULL,
- $thankPage = FALSE,
- $isTest = NULL
- ) {
-
- $separateMembershipPayment = FALSE;
- if ($form->_membershipBlock) {
- $form->_currentMemberships = array();
-
- $membershipBlock = $form->_membershipBlock;
- $membershipTypeIds = $membershipTypes = $radio = array();
- $membershipPriceset = (!empty($form->_priceSetId) && $form->_useForMember) ? TRUE : FALSE;
-
- $allowAutoRenewMembership = $autoRenewOption = FALSE;
- $autoRenewMembershipTypeOptions = array();
-
- $paymentProcessor = CRM_Core_PseudoConstant::paymentProcessor(FALSE, FALSE, 'is_recur = 1');
-
- $separateMembershipPayment = CRM_Utils_Array::value('is_separate_payment', $membershipBlock);
-
- if ($membershipPriceset) {
- foreach ($form->_priceSet['fields'] as $pField) {
- if (empty($pField['options'])) {
- continue;
- }
- foreach ($pField['options'] as $opId => $opValues) {
- if (empty($opValues['membership_type_id'])) {
- continue;
- }
- $membershipTypeIds[$opValues['membership_type_id']] = $opValues['membership_type_id'];
- }
- }
- }
- elseif (!empty($membershipBlock['membership_types'])) {
- $membershipTypeIds = explode(',', $membershipBlock['membership_types']);
- }
-
- if (!empty($membershipTypeIds)) {
- //set status message if wrong membershipType is included in membershipBlock
- if (isset($form->_mid) && !$membershipPriceset) {
- $membershipTypeID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
- $form->_mid,
- 'membership_type_id'
- );
- if (!in_array($membershipTypeID, $membershipTypeIds)) {
- CRM_Core_Session::setStatus(ts("Oops. The membership you're trying to renew appears to be invalid. Contact your site administrator if you need assistance. If you continue, you will be issued a new membership."), ts('Invalid Membership'), 'error');
- }
- }
-
- $membershipTypeValues = self::buildMembershipTypeValues($form, $membershipTypeIds);
- $form->_membershipTypeValues = $membershipTypeValues;
- $endDate = NULL;
- foreach ($membershipTypeIds as $value) {
- $memType = $membershipTypeValues[$value];
- if ($selectedMembershipTypeID != NULL) {
- if ($memType['id'] == $selectedMembershipTypeID) {
- $form->assign('minimum_fee',
- CRM_Utils_Array::value('minimum_fee', $memType)
- );
- $form->assign('membership_name', $memType['name']);
- if (!$thankPage && $cid) {
- $membership = new CRM_Member_DAO_Membership();
- $membership->contact_id = $cid;
- $membership->membership_type_id = $memType['id'];
- if ($membership->find(TRUE)) {
- $form->assign('renewal_mode', TRUE);
- $memType['current_membership'] = $membership->end_date;
- $form->_currentMemberships[$membership->membership_type_id] = $membership->membership_type_id;
- }
- }
- $membershipTypes[] = $memType;
- }
- }
- elseif ($memType['is_active']) {
- $javascriptMethod = NULL;
- $allowAutoRenewOpt = 1;
- if (is_array($form->_paymentProcessors)) {
- foreach ($form->_paymentProcessors as $id => $val) {
- if (!$val['is_recur']) {
- $allowAutoRenewOpt = 0;
- continue;
- }
- }
- }
-
- $javascriptMethod = array('onclick' => "return showHideAutoRenew( this.value );");
- $autoRenewMembershipTypeOptions["autoRenewMembershipType_{$value}"] = (int) $allowAutoRenewOpt * CRM_Utils_Array::value($value, CRM_Utils_Array::value('auto_renew', $form->_membershipBlock));;
-
- if ($allowAutoRenewOpt) {
- $allowAutoRenewMembership = TRUE;
- }
-
- //add membership type.
- $radio[$memType['id']] = $form->createElement('radio', NULL, NULL, NULL,
- $memType['id'], $javascriptMethod
- );
- if ($cid) {
- $membership = new CRM_Member_DAO_Membership();
- $membership->contact_id = $cid;
- $membership->membership_type_id = $memType['id'];
-
- //show current membership, skip pending and cancelled membership records,
- //because we take first membership record id for renewal
- $membership->whereAdd('status_id != 5 AND status_id !=6');
-
- if (!is_null($isTest)) {
- $membership->is_test = $isTest;
- }
-
- //CRM-4297
- $membership->orderBy('end_date DESC');
-
- if ($membership->find(TRUE)) {
- if (!$membership->end_date) {
- unset($radio[$memType['id']]);
- $form->assign('islifetime', TRUE);
- continue;
- }
- $form->assign('renewal_mode', TRUE);
- $form->_currentMemberships[$membership->membership_type_id] = $membership->membership_type_id;
- $memType['current_membership'] = $membership->end_date;
- if (!$endDate) {
- $endDate = $memType['current_membership'];
- $form->_defaultMemTypeId = $memType['id'];
- }
- if ($memType['current_membership'] < $endDate) {
- $endDate = $memType['current_membership'];
- $form->_defaultMemTypeId = $memType['id'];
- }
- }
- }
- $membershipTypes[] = $memType;
- }
- }
- }
-
- $form->assign('showRadio', $formItems);
- if ($formItems) {
- if (!$membershipPriceset) {
- if (!$membershipBlock['is_required']) {
- $form->assign('showRadioNoThanks', TRUE);
- $radio[''] = $form->createElement('radio', NULL, NULL, NULL, 'no_thanks', NULL);
- $form->addGroup($radio, 'selectMembership', NULL);
- }
- elseif ($membershipBlock['is_required'] && count($radio) == 1) {
- $temp = array_keys($radio);
- $form->add('hidden', 'selectMembership', $temp[0], array('id' => 'selectMembership'));
- $form->assign('singleMembership', TRUE);
- $form->assign('showRadio', FALSE);
- }
- else {
- $form->addGroup($radio, 'selectMembership', NULL);
- }
-
- $form->addRule('selectMembership', ts('Please select one of the memberships.'), 'required');
- }
- else {
- $autoRenewOption = CRM_Price_BAO_PriceSet::checkAutoRenewForPriceSet($form->_priceSetId);
- $form->assign('autoRenewOption', $autoRenewOption);
- }
-
- if (!$form->_values['is_pay_later'] && is_array($form->_paymentProcessors) && ($allowAutoRenewMembership || $autoRenewOption)) {
- $form->addElement('checkbox', 'auto_renew', ts('Please renew my membership automatically.'));
- }
-
- }
-
- $form->assign('membershipBlock', $membershipBlock);
- $form->assign('membershipTypes', $membershipTypes);
- $form->assign('allowAutoRenewMembership', $allowAutoRenewMembership);
- $form->assign('autoRenewMembershipTypeOptions', json_encode($autoRenewMembershipTypeOptions));
-
- //give preference to user submitted auto_renew value.
- $takeUserSubmittedAutoRenew = (!empty($_POST) || $form->isSubmitted()) ? TRUE : FALSE;
- $form->assign('takeUserSubmittedAutoRenew', $takeUserSubmittedAutoRenew);
- }
-
- return $separateMembershipPayment;
- }
-
/**
* Return Membership Block info in Contribution Pages.
*
* @return array|bool
*/
public static function getContactMembership($contactID, $memType, $isTest, $membershipId = NULL, $onlySameParentOrg = FALSE) {
+ //check for owner membership id, if it exists update that membership instead: CRM-15992
+ if ($membershipId) {
+ $ownerMemberId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
+ $membershipId,
+ 'owner_membership_id', 'id'
+ );
+ if ($ownerMemberId) {
+ $membershipId = $ownerMemberId;
+ $contactID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
+ $membershipId,
+ 'contact_id', 'id'
+ );
+ }
+ }
+
$dao = new CRM_Member_DAO_Membership();
if ($membershipId) {
$dao->id = $membershipId;
$membership['status_id'],
'is_current_member', 'id'
);
+ $ownerMemberId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
+ $membership['id'],
+ 'owner_membership_id', 'id'
+ );
+ if ($ownerMemberId) {
+ $membership['id'] = $membership['membership_id'] = $ownerMemberId;
+ $membership['membership_contact_id'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
+ $membership['id'],
+ 'contact_id', 'id'
+ );
+ }
return $membership;
}
/**
* Get all exportable fields.
*
- * @retun array return array of all exportable fields
+ * @return array return array of all exportable fields
*/
public static function &exportableFields() {
$expFieldMembership = CRM_Member_DAO_Membership::export();
*
* @param bool $isProcessSeparateMembershipTransaction
*
- * @param int $defaultContributionTypeID
+ * @param int $financialTypeID
* @param array $membershipLineItems
* Line items specific to membership payment that is separate to contribution.
* @param bool $isPayLater
+ * @param bool $isPending
*
* @throws \CRM_Core_Exception
*/
public static function postProcessMembership(
$membershipParams, $contactID, &$form, $premiumParams,
$customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID,
- $isProcessSeparateMembershipTransaction, $defaultContributionTypeID, $membershipLineItems, $isPayLater) {
+ $isProcessSeparateMembershipTransaction, $financialTypeID, $membershipLineItems, $isPayLater, $isPending) {
$result = $membershipContribution = NULL;
$isTest = CRM_Utils_Array::value('is_test', $membershipParams, FALSE);
- $errors = $createdMemberships = array();
-
- //@todo move this into the calling function & pass in the correct financialTypeID
- if (isset($paymentParams['financial_type'])) {
- $financialTypeID = $paymentParams['financial_type'];
- }
- else {
- $financialTypeID = $defaultContributionTypeID;
- }
-
- if (CRM_Utils_Array::value('membership_source', $form->_params)) {
- $membershipParams['contribution_source'] = $form->_params['membership_source'];
- }
+ $errors = $createdMemberships = $paymentResult = array();
if ($isPaidMembership) {
- $result = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form, $membershipParams,
+ if ($isProcessSeparateMembershipTransaction) {
+ // If we have 2 transactions only one can use the invoice id.
+ $membershipParams['invoiceID'] .= '-2';
+ }
+
+ $paymentResult = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form, $membershipParams,
$premiumParams, $contactID,
$financialTypeID,
'membership',
$isPayLater
);
if (is_a($result[1], 'CRM_Core_Error')) {
- $errors[1] = CRM_Core_Error::getMessages($result[1]);
+ $errors[1] = CRM_Core_Error::getMessages($paymentResult[1]);
+ }
+
+ if (is_a($paymentResult, 'CRM_Core_Error')) {
+ $errors[1] = CRM_Core_Error::getMessages($paymentResult);
}
- elseif (!empty($result[1])) {
+ elseif (!empty($paymentResult['contribution'])) {
+ //note that this will be over-written if we are using a separate membership transaction. Otherwise there is only one
+ $membershipContribution = $paymentResult['contribution'];
// Save the contribution ID so that I can be used in email receipts
// For example, if you need to generate a tax receipt for the donation only.
- $form->_values['contribution_other_id'] = $result[1]->id;
- //note that this will be over-written if we are using a separate membership transaction. Otherwise there is only one
- $membershipContribution = $result[1];
+ $form->_values['contribution_other_id'] = $membershipContribution->id;
}
}
if ($isProcessSeparateMembershipTransaction) {
try {
- $lineItems = $form->_lineItem = $membershipLineItems;
+ $form->_lineItem = $membershipLineItems;
if (empty($form->_params['auto_renew']) && !empty($membershipParams['is_recur'])) {
unset($membershipParams['is_recur']);
}
$typesTerms = CRM_Utils_Array::value('types_terms', $membershipParams, array());
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);
+ if (!empty($membershipContribution)) {
+ $pendingStatus = CRM_Core_OptionGroup::getValue('contribution_status', 'Pending', 'name');
+ $pending = ($membershipContribution->contribution_status_id == $pendingStatus) ? TRUE : FALSE;
+ }
+ else {
+ $pending = $isPending;
+ }
+ $contributionRecurID = isset($form->_params['contributionRecurID']) ? $form->_params['contributionRecurID'] : NULL;
+
+ $membershipSource = NULL;
+ if (!empty($form->_params['membership_source'])) {
+ $membershipSource = $form->_params['membership_source'];
+ }
+ elseif (isset($form->_values['title']) && !empty($form->_values['title'])) {
+ $membershipSource = ts('Online Contribution:') . ' ' . $form->_values['title'];
+ }
+ $isPayLater = NULL;
+ if (isset($form->_params)) {
+ $isPayLater = CRM_Utils_Array::value('is_pay_later', $form->_params);
+ }
+ $campaignId = NULL;
+ if (isset($form->_values) && is_array($form->_values) && !empty($form->_values)) {
+ $campaignId = CRM_Utils_Array::value('campaign_id', $form->_params);
+ if (!array_key_exists('campaign_id', $form->_params)) {
+ $campaignId = CRM_Utils_Array::value('campaign_id', $form->_values);
+ }
+ }
+
+ list($membership, $renewalMode, $dates) = self::renewMembership(
+ $contactID, $memType, $isTest,
+ date('YmdHis'), CRM_Utils_Array::value('cms_contactID', $membershipParams),
+ $customFieldsFormatted,
+ $numTerms, $membershipID, $pending,
+ $contributionRecurID, $membershipSource, $isPayLater, $campaignId
+ );
+ $form->set('renewal_mode', $renewalMode);
+ if (!empty($dates)) {
+ $form->assign('mem_start_date',
+ CRM_Utils_Date::customFormat($dates['start_date'], '%Y%m%d')
+ );
+ $form->assign('mem_end_date',
+ CRM_Utils_Date::customFormat($dates['end_date'], '%Y%m%d')
+ );
+ }
+
+ if (!empty($membershipContribution)) {
+ // update recurring id for membership record
+ self::updateRecurMembership($membership, $membershipContribution);
+ self::linkMembershipPayment($membership, $membershipContribution);
+ }
}
if ($form->_priceSetId && !empty($form->_useForMember) && !empty($form->_lineItem)) {
foreach ($form->_lineItem[$form->_priceSetId] as & $priceFieldOp) {
$form->_values['contribution_id'] = $membershipContributionID;
}
- // Do not send an email if Recurring transaction is done via Direct Mode
- // Email will we sent when the IPN is received.
- if (!empty($form->_params['is_recur']) && $form->_contributeMode == 'direct') {
- if (!empty($membershipContribution->trxn_id)) {
+ if ($form->_contributeMode == 'direct') {
+ if (CRM_Utils_Array::value('payment_status_id', $paymentResult) == 1) {
+ // Refer to CRM-16737. Payment processors 'should' return payment_status_id
+ // to denote the outcome of the transaction.
try {
civicrm_api3('contribution', 'completetransaction', array(
- 'id' => $membershipContribution->id,
- 'trxn_id' => $membershipContribution->trxn_id,
+ 'id' => $paymentResult['contribution']->id,
+ 'trxn_id' => $paymentResult['contribution']->trxn_id,
+ 'is_transactional' => FALSE,
));
}
catch (CiviCRM_API3_Exception $e) {
CRM_Core_Error::debug_log_message('contribution ' . $membershipContribution->id . ' not completed with trxn_id ' . $membershipContribution->trxn_id . ' and message ' . $e->getMessage());
}
}
+ // Do not send an email if Recurring transaction is done via Direct Mode
+ // Email will we sent when the IPN is received.
return;
}
CRM_Core_DAO::executeQuery($sql, $params);
}
- /**
- * A wrapper for renewing memberships from a form.
- *
- * @deprecated
- * - including the form in the membership processing adds complexity
- * as the forms are being forced to pretend similarity
- * Try to call the renewMembership directly
- * @todo - this form method needs to have the interaction with the form layer removed from it
- * as a BAO function. Note that the api now supports membership renewals & it is not clear this function does anything
- * not done by the membership.create api (with a lot less unit tests)
- *
- * This method will renew / create the membership depending on
- * whether the given contact has a membership or not. And will add
- * the modified dates for membership and in the log table.
- *
- * @param int $contactID
- * Id of the contact.
- * @param int $membershipTypeID
- * Id of the new membership type.
- * @param bool $is_test
- * If this is test contribution or live contribution.
- * @param CRM_Core_Form $form
- * Form object.
- * @param null $changeToday
- * @param int $modifiedID
- * Individual contact id in case of On Behalf signup (CRM-4027 ).
- * @param null $customFieldsFormatted
- * @param int $numRenewTerms
- * How many membership terms are being added to end date (default is 1).
- * @param int $membershipID
- * Membership ID, this should always be passed in & optionality should be removed.
- *
- * @param bool $isPending
- * Is the transaction pending. We are working towards this ALWAYS being true and completion being done
- * in the complete transaction function, called by all types of payment processor (removing assumptions
- * about what they do & always doing a pending + a complete at the appropriate time).
- *
- * @return CRM_Member_BAO_Membership|CRM_Core_Error
- */
- public static function renewMembershipFormWrapper(
- $contactID,
- $membershipTypeID,
- $is_test,
- &$form,
- $changeToday,
- $modifiedID,
- $customFieldsFormatted,
- $numRenewTerms,
- $membershipID,
- $isPending
- ) {
- $statusFormat = '%Y-%m-%d';
- $format = '%Y%m%d';
- $ids = array();
- //@todo would be better to make $membershipID a compulsory function param & make form layer responsible for extracting it
- if (!$membershipID && isset($form->_membershipId)) {
- $membershipID = $form->_membershipId;
- }
-
- //get all active statuses of membership.
- $allStatus = CRM_Member_PseudoConstant::membershipStatus();
-
- $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID);
-
- // check is it pending. - CRM-4555
- list($contributionRecurID, $changeToday, $membershipSource, $isPayLater, $campaignId) = self::extractFormValues($form, $changeToday);
- list($membership, $renewalMode, $dates) = self::renewMembership($contactID, $membershipTypeID, $is_test,
- $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $isPending, $allStatus,
- $membershipTypeDetails, $contributionRecurID, $format, $membershipSource, $ids, $statusFormat, $isPayLater, $campaignId);
- $form->set('renewal_mode', $renewalMode);
- if (!empty($dates)) {
- $form->assign('mem_start_date',
- CRM_Utils_Date::customFormat($dates['start_date'], $format)
- );
- $form->assign('mem_end_date',
- CRM_Utils_Date::customFormat($dates['end_date'], $format)
- );
- }
- return $membership;
-
- }
-
/**
* Method to fix membership status of stale membership.
*
* @param CRM_Core_DAO $dao
* Membership object.
*
- * @return null|array
- * array of memberships if created
+ * @param bool $reset
+ *
+ * @return array|null
+ * Membership details, if created.
+ *
+ * @throws \CRM_Core_Exception
*/
public static function createRelatedMemberships(&$params, &$dao, $reset = FALSE) {
static $relatedContactIds = array();
}
/**
+ * Build an array of available membership types.
+ *
* @param CRM_Core_Form $form
* @param int $membershipTypeID
+ * @param bool $activeOnly
+ * Do we only want active ones?
+ * (probably this should default to TRUE but as a newly added parameter we are leaving default b
+ * behaviour unchanged).
*
* @return array
*/
- public static function &buildMembershipTypeValues(&$form, $membershipTypeID = NULL) {
+ public static function buildMembershipTypeValues(&$form, $membershipTypeID = NULL, $activeOnly = FALSE) {
$whereClause = " WHERE domain_id = " . CRM_Core_Config::domainID();
+ if ($activeOnly) {
+ $whereClause .= " AND is_active = 1 ";
+ }
if (is_array($membershipTypeID)) {
$allIDs = implode(',', $membershipTypeID);
$whereClause .= " AND id IN ( $allIDs )";
'relationship_type_id',
'relationship_direction',
'max_related',
+ 'duration_unit',
+ 'duration_interval',
);
while ($dao->fetch()) {
public static function processSecondaryFinancialTransaction($contactID, &$form, $tempParams, $isTest, $lineItems, $minimumFee, $financialTypeID) {
$financialType = new CRM_Financial_DAO_FinancialType();
$financialType->id = $financialTypeID;
- if (!$financialType->find(TRUE)) {
- CRM_Core_Error::fatal(ts("Could not find a system table"));
- }
+ $financialType->find(TRUE);
$tempParams['amount'] = $minimumFee;
$tempParams['invoiceID'] = md5(uniqid(rand(), TRUE));
));
}
- /**
- * @param array $membershipParams
- * @param int $contactID
- * @param $customFieldsFormatted
- * @param int $membershipID
- * @param $memType
- * @param bool $isTest
- * @param int $numTerms
- * @param $membershipContribution
- * @param CRM_Core_Form $form
- *
- * @return array
- */
- public static function createOrRenewMembership($membershipParams, $contactID, $customFieldsFormatted, $membershipID, $memType, $isTest, $numTerms, $membershipContribution, &$form) {
- $membership = self::renewMembershipFormWrapper($contactID, $memType,
- $isTest, $form, NULL,
- CRM_Utils_Array::value('cms_contactID', $membershipParams),
- $customFieldsFormatted, $numTerms,
- $membershipID,
- self::extractPendingFormValue($form, $memType)
- );
-
- if (!empty($membershipContribution)) {
- // update recurring id for membership record
- self::updateRecurMembership($membership, $membershipContribution);
-
- self::linkMembershipPayment($membership, $membershipContribution);
- }
- return $membership;
- }
-
/**
* Turn array of errors into message string.
*
return ts('Payment Processor Error message') . ': ' . implode('<br/>', $message);
}
- /**
- * Determine if the form has a pending status.
- *
- * This is an interim refactoring step. This information should be extracted at the form layer.
- *
- * @deprecated
- *
- * @param CRM_Core_Form $form
- * @param int $membershipID
- *
- * @return bool
- */
- public static function extractPendingFormValue($form, $membershipID) {
- $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipID);
- $pending = FALSE;
- //@todo this is a BAO function & should not inspect the form - the form should do this
- // & pass required params to the BAO
- if (CRM_Utils_Array::value('minimum_fee', $membershipTypeDetails) > 0.0) {
- if (((isset($form->_contributeMode) && $form->_contributeMode == 'notify') || !empty($form->_params['is_pay_later'])
- ) &&
- (($form->_values['is_monetary'] && $form->_amount > 0.0) ||
- CRM_Utils_Array::value('record_contribution', $form->_params)
- )
- ) {
- $pending = TRUE;
- }
- }
- return $pending;
- }
-
- /**
- * Extract relevant values from the form so we can separate form logic from BAO logcis.
- *
- * @param CRM_Core_Form $form
- * @param $changeToday
- *
- * @return array
- */
- public static function extractFormValues($form, $changeToday) {
- $contributionRecurID = isset($form->_params['contributionRecurID']) ? $form->_params['contributionRecurID'] : NULL;
-
- //we renew expired membership, CRM-6277
- if (!$changeToday) {
- if ($form->get('renewalDate')) {
- $changeToday = $form->get('renewalDate');
- }
- elseif (get_class($form) == 'CRM_Contribute_Form_Contribution_Confirm') {
- $changeToday = date('YmdHis');
- }
- }
-
- $membershipSource = NULL;
- if (!empty($form->_params['membership_source'])) {
- $membershipSource = $form->_params['membership_source'];
- }
- elseif (isset($form->_values['title']) && !empty($form->_values['title'])) {
- $membershipSource = ts('Online Contribution:') . ' ' . $form->_values['title'];
- }
- $isPayLater = NULL;
- if (isset($form->_params)) {
- $isPayLater = CRM_Utils_Array::value('is_pay_later', $form->_params);
- }
- $campaignId = NULL;
- if (isset($form->_values) && is_array($form->_values) && !empty($form->_values)) {
- $campaignId = CRM_Utils_Array::value('campaign_id', $form->_params);
- if (!array_key_exists('campaign_id', $form->_params)) {
- $campaignId = CRM_Utils_Array::value('campaign_id', $form->_values);
- }
- }
- return array($contributionRecurID, $changeToday, $membershipSource, $isPayLater, $campaignId);
- }
-
/**
* @param int $contactID
* @param int $membershipTypeID
* @param $numRenewTerms
* @param int $membershipID
* @param $pending
- * @param $allStatus
- * @param array $membershipTypeDetails
* @param int $contributionRecurID
- * @param $format
* @param $membershipSource
- * @param $ids
- * @param $statusFormat
* @param $isPayLater
* @param int $campaignId
*
* @throws CRM_Core_Exception
* @return array
*/
- public static function renewMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $allStatus, $membershipTypeDetails, $contributionRecurID, $format, $membershipSource, $ids, $statusFormat, $isPayLater, $campaignId) {
+ public static function renewMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $campaignId) {
$renewalMode = $updateStatusId = FALSE;
+ $allStatus = CRM_Member_PseudoConstant::membershipStatus();
+ $format = '%Y%m%d';
+ $statusFormat = '%Y-%m-%d';
+ $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID);
$dates = array();
// CRM-7297 - allow membership type to be be changed during renewal so long as the parent org of new membershipType
// is the same as the parent org of an existing membership of the contact
else {
$logParams['modified_id'] = $membership->contact_id;
}
- CRM_Member_BAO_MembershipLog::add($logParams, CRM_Core_DAO::$_nullArray);
+ CRM_Member_BAO_MembershipLog::add($logParams);
if (!empty($contributionRecurID)) {
CRM_Core_DAO::setFieldValue('CRM_Member_DAO_Membership', $membership->id,
* @param CRM_Core_Form $qf
* @param array $membershipType
* Array with membership type and organization.
- * @param int $priceSetId
*
+ * @return int $priceSetId
*/
- public static function createLineItems(&$qf, $membershipType, &$priceSetId) {
+ public static function createLineItems(&$qf, $membershipType) {
$qf->_priceSetId = $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_membership_type_amount', 'id', 'name');
- if ($priceSetId) {
- $qf->_priceSet = $priceSets = current(CRM_Price_BAO_PriceSet::getSetDetail($priceSetId));
- }
+ $qf->_priceSet = $priceSets = current(CRM_Price_BAO_PriceSet::getSetDetail($priceSetId));
+
+ // The name of the price field corresponds to the membership_type organization contact.
$editedFieldParams = array(
'price_set_id' => $priceSetId,
'name' => $membershipType[0],
$fieldID = key($qf->_priceSet['fields']);
$qf->_params['price_' . $fieldID] = CRM_Utils_Array::value('id', $editedResults);
+ return $priceSetId;
}
/**