<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.4 |
+ | CiviCRM version 4.5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
/**
* 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
$excludeIsAdmin = TRUE;
}
- $calcStatus = $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($start_date, $end_date, $join_date,
- 'today', $excludeIsAdmin
+ $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($start_date, $end_date, $join_date,
+ 'today', $excludeIsAdmin, CRM_Utils_Array::value('membership_type_id', $params), $params
);
if (empty($calcStatus)) {
// Redirect the form in case of error
// 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
$invoiceID = md5(uniqid(rand(), TRUE));
$tempParams['invoiceID'] = $invoiceID;
- //we don't allow recurring membership.CRM-3781.
- if (!empty($tempParams['is_recur'])) {
- $tempParams['is_recur'] = 0;
- }
$result = NULL;
if ($form->_values['is_monetary'] && !$form->_params['is_pay_later'] && $minimumFee > 0.0) {
$payment = CRM_Core_Payment::singleton($form->_mode, $form->_paymentProcessor, $form);
if ($form->_contributeMode == 'express') {
- $result = &$payment->doExpressCheckout($tempParams);
+ $result = $payment->doExpressCheckout($tempParams);
}
else {
- $result = &$payment->doDirectPayment($tempParams);
+ $result = $payment->doDirectPayment($tempParams);
}
}
}
$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,
$customFieldsFormatted, CRM_Utils_Array::value($memType, $typesTerms, 1)
);
+ // update recurring id for membership record
+ self::updateRecurMembership($membership, $contribution[$index]);
+
$createdMemberships[$memType] = $membership;
if (isset($contribution[$index])) {
//insert payment record
}
}
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)
);
+
+ // update recurring id for membership record
+ self::updateRecurMembership($membership, $contribution[$index]);
+
if (isset($contribution[$index])) {
//insert payment record
$dao = new CRM_Member_DAO_MembershipPayment();
}
}
$message = ts('Payment Processor Error message') . ': ' . implode('<br/>', $message);
- // Redirect the form in case of error
- // @todo this redirect in the BAO layer is really bad & should be moved to the form layer
- // however since we have no idea how (if) this is triggered we can't safely move / remove it
- $errorParams = array(
- 'legacy_redirect_path' => 'civicrm/contribute/transact',
- 'legacy_redirect_query' => "_qf_Main_display=true&qfKey={$form->_params['qfKey']}",
+ throw new CRM_Core_Exception($message);
+ }
+ $form->_params['createdMembershipIDs'] = array();
+
+ // 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'
);
- throw new CRM_Core_Exception($message, 0, $errorParams);
+ $form->_params['createdMembershipIDs'][] = $createdMembership->id;
}
- // CRM-7851
- CRM_Core_BAO_CustomValueTable::postProcess($form->_params,
- CRM_Core_DAO::$_nullArray,
- 'civicrm_membership',
- $membership->id,
- 'Membership'
- );
-
$form->_params['membershipID'] = $membership->id;
if ($form->_contributeMode == 'notify') {
if ($form->_values['is_monetary'] && $form->_amount > 0.0 && !$form->_params['is_pay_later']) {
);
}
+ /**
+ * Function for updating a membership record's contribution_recur_id
+ *
+ * @param object CRM_Member_BAO_Membership $membership
+ * @param object CRM_Contribute_BAO_Contribution $contribution
+ *
+ * @return void
+ * @static
+ * @access public
+ */
+ static public function updateRecurMembership(CRM_Member_BAO_Membership &$membership,
+ CRM_Contribute_BAO_Contribution &$contribution) {
+
+ if (empty($contribution->contribution_recur_id)) {
+ return;
+ }
+
+ $params = array(
+ 1 => array($contribution->contribution_recur_id, 'Integer'),
+ 2 => array($membership->id, 'Integer'),
+ );
+
+ $sql = "UPDATE civicrm_membership SET contribution_recur_id = %1 WHERE id = %2";
+ CRM_Core_DAO::executeQuery($sql, $params);
+ }
+
/**
* @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
CRM_Utils_Date::customFormat($dates['join_date'],
$statusFormat
),
- 'today', TRUE
+ 'today',
+ TRUE,
+ $membershipTypeID,
+ $memParams
);
$updateStatusId = CRM_Utils_Array::value('id', $status);
}
CRM_Utils_Array::value('end_date', $currentMembership),
CRM_Utils_Array::value('join_date', $currentMembership),
$today,
- TRUE
+ TRUE,
+ $currentMembership['membership_type_id'],
+ $currentMembership
);
if (empty($status) ||
* 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) {