// eg pay later membership, membership update cron CRM-3984
if (empty($params['is_override']) && empty($params['skipStatusCal'])) {
- // @todo - we should be able to count on dates being correctly formatted by they time they hit the BAO.
- // Maybe do some tests & throw some deprecation warnings if they aren't?
- $params['start_date'] = trim($params['start_date']) ? date('Ymd', strtotime(trim($params['start_date']))) : 'null';
- $params['end_date'] = trim($params['end_date']) ? date('Ymd', strtotime(trim($params['end_date']))) : 'null';
- $params['join_date'] = trim($params['join_date']) ? date('Ymd', strtotime(trim($params['join_date']))) : 'null';
+ $fieldsToLoad = [];
+ foreach (['start_date', 'end_date', 'join_date'] as $dateField) {
+ if (!empty($params[$dateField]) && $params[$dateField] !== 'null' && strpos($params[$dateField], date('Ymd', strtotime(trim($params[$dateField])))) !== 0) {
+ $params[$dateField] = date('Ymd', strtotime(trim($params[$dateField])));
+ // @todo enable this once core is using the api.
+ // CRM_Core_Error::deprecatedWarning('Relying on the BAO to clean up dates is deprecated. Call membership create via the api');
+ }
+ if (!empty($params['id']) && empty($params[$dateField])) {
+ $fieldsToLoad[] = $dateField;
+ }
+ }
+ if (!empty($fieldsToLoad)) {
+ $membership = civicrm_api3('Membership', 'getsingle', ['id' => $params['id'], 'return' => $fieldsToLoad]);
+ foreach ($fieldsToLoad as $fieldToLoad) {
+ $params[$fieldToLoad] = $membership[$fieldToLoad];
+ }
+ }
+ $params['start_date'] = $params['start_date'] ?: 'null';
+ $params['end_date'] = $params['end_date'] ?: 'null';
+ $params['join_date'] = $params['join_date'] ?: 'null';
//fix for CRM-3570, during import exclude the statuses those having is_admin = 1
$excludeIsAdmin = $params['exclude_is_admin'] ?? FALSE;
$params['skipLineItem'] = TRUE;
// Record contribution for this membership and create a MembershipPayment
+ // @todo deprecate this.
if (!empty($params['contribution_status_id']) && empty($params['relate_contribution_id'])) {
$memInfo = array_merge($params, ['membership_id' => $membership->id]);
$params['contribution'] = self::recordMembershipContribution($memInfo);
}
// Add/update MembershipPayment record for this membership if it is a related contribution
+ // @todo remove this - called from one remaining place in CRM_Member_Form_Membership
if (!empty($params['relate_contribution_id'])) {
$membershipPaymentParams = [
'membership_id' => $membership->id,
* @throws \CiviCRM_API3_Exception
*/
public static function recordMembershipContribution(&$params) {
- $membershipId = $params['membership_id'];
$contributionParams = [];
$config = CRM_Core_Config::singleton();
$contributionParams['currency'] = $config->defaultCurrency;
]);
if (empty($membershipPayment['count'])) {
civicrm_api3('MembershipPayment', 'create', [
- 'membership_id' => $membershipId,
+ 'membership_id' => $params['membership_id'],
'contribution_id' => $contribution->id,
]);
}