X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMember%2FBAO%2FMembership.php;h=bc4b216bdaee5d068c9ef4e720dc8bd454d37c88;hb=7c85dc65cf5d49b62ce1c1a36af2df1d945969d3;hp=c570b0e0c19f2d10e0503bd196cf35c7d5c9830e;hpb=900c802223e5e6169ba2cf782e75447281876bd8;p=civicrm-core.git diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index c570b0e0c1..bc4b216bda 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -311,7 +311,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { $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' ); @@ -727,210 +727,6 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty 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. * @@ -986,6 +782,21 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty * @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; @@ -1040,6 +851,17 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty $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; } @@ -1301,33 +1123,22 @@ AND civicrm_membership.is_test = %2"; * * @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 = $paymentResult = 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']; - } - if ($isPaidMembership) { if ($isProcessSeparateMembershipTransaction) { // If we have 2 transactions only one can use the invoice id. @@ -1386,7 +1197,56 @@ AND civicrm_membership.is_test = %2"; $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) { @@ -1448,7 +1308,9 @@ AND civicrm_membership.is_test = %2"; } if ($form->_contributeMode == 'direct') { - if (CRM_Utils_Array::value('contribution_status_id', $paymentResult) == 1) { + 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' => $paymentResult['contribution']->id, @@ -1462,6 +1324,8 @@ AND civicrm_membership.is_test = %2"; 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; } @@ -1494,88 +1358,6 @@ AND civicrm_membership.is_test = %2"; 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. * @@ -1962,14 +1744,23 @@ WHERE civicrm_membership.contact_id = civicrm_contact.id } /** + * 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 )"; @@ -2000,6 +1791,8 @@ FROM civicrm_membership_type 'relationship_type_id', 'relationship_direction', 'max_related', + 'duration_unit', + 'duration_interval', ); while ($dao->fetch()) { @@ -2223,9 +2016,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND 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)); @@ -2302,41 +2093,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND )); } - /** - * @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) { - if (!empty($membershipContribution)) { - $pendingStatus = CRM_Core_OptionGroup::getValue('contribution_status', 'Pending', 'name'); - $pending = ($membershipContribution->contribution_status_id == $pendingStatus) ? TRUE : FALSE; - } - $membership = self::renewMembershipFormWrapper($contactID, $memType, - $isTest, $form, NULL, - CRM_Utils_Array::value('cms_contactID', $membershipParams), - $customFieldsFormatted, $numTerms, - $membershipID, - self::extractPendingFormValue($form, $memType, $pending) - ); - - 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. * @@ -2353,77 +2109,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND return ts('Payment Processor Error message') . ': ' . implode('
', $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, $pending = FALSE) { - $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipID); - //@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 @@ -2434,21 +2119,20 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND * @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 @@ -2502,7 +2186,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND 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, @@ -3030,14 +2714,14 @@ WHERE civicrm_membership.is_test = 0"; * @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], @@ -3064,6 +2748,7 @@ WHERE civicrm_membership.is_test = 0"; $fieldID = key($qf->_priceSet['fields']); $qf->_params['price_' . $fieldID] = CRM_Utils_Array::value('id', $editedResults); + return $priceSetId; } /**