private function WebformCivicrmPostProcess::processMemberships in Webform CiviCRM Integration 8.5
Process memberships for a contact Called during webform submission
id
Parameters
int $c:
1 call to WebformCivicrmPostProcess::processMemberships()
- WebformCivicrmPostProcess::preSave in src/
WebformCivicrmPostProcess.php - Process webform submission when it is about to be saved. Called by the following hook:
File
- src/
WebformCivicrmPostProcess.php, line 1236 - Front-end form validation and post-processing.
Class
Namespace
Drupal\webform_civicrmCode
private function processMemberships($c, $cid) {
static $types;
$utils = \Drupal::service('webform_civicrm.utils');
if (!isset($types)) {
$types = $utils
->wf_crm_apivalues('membership_type', 'get');
}
$existing = $this
->findMemberships($cid);
foreach (wf_crm_aval($this->data, "membership:{$c}:membership", []) as $n => $params) {
$membershipStatus = "";
$membershipEndDate = "";
$is_active = FALSE;
if (empty($params['membership_type_id'])) {
continue;
}
if (empty($params['status_id'])) {
$params['status_override_end_date'] = '';
}
// Search for existing membership to renew - must belong to same domain and organization
// But not necessarily the same membership type to allow for upsell
if (!empty($params['num_terms'])) {
$type = $types[$params['membership_type_id']];
foreach ($existing as $mem) {
$existing_type = $types[$mem['membership_type_id']];
if ($type['domain_id'] == $existing_type['domain_id'] && $type['member_of_contact_id'] == $existing_type['member_of_contact_id']) {
$params['id'] = $mem['id'];
// If we have an exact match, look no further
if ($mem['membership_type_id'] == $params['membership_type_id']) {
$is_active = $mem['is_active'];
$membershipStatus = $mem['status'];
$membershipEndDate = $mem['end_date'];
break;
}
}
}
}
if (empty($params['id'])) {
if (isset($this->data['contact'][$c]['contact'][1]['source'])) {
$params['source'] = $this->data['contact'][$c]['contact'][1]['source'];
}
else {
$params['source'] = $this->settings['new_contact_source'];
}
}
// Automatic status
if (empty($params['status_id'])) {
unset($params['status_id']);
// Pending payment status
if ($this->contributionIsIncomplete && $this
->getMembershipTypeField($params['membership_type_id'], 'minimum_fee')) {
if ($is_active == FALSE) {
$params['status_id'] = 'Pending';
}
else {
$params['status_id'] = $membershipStatus;
$params['end_date'] = $membershipEndDate;
}
}
}
else {
$params['is_override'] = 1;
}
$params['contact_id'] = $cid;
// The api won't let us manually set status without this weird param
$params['skipStatusCal'] = !empty($params['status_id']);
if (isset($this->ent['contribution_recur'][1]['id'])) {
$params['contribution_recur_id'] = $this->ent['contribution_recur'][1]['id'];
}
$result = $utils
->wf_civicrm_api('membership', 'create', $params);
if (!empty($result['id'])) {
// Issue #2516924 If existing membership create renewal activity
if (!empty($params['id'])) {
$membership = $result['values'][$result['id']];
$actParams = [
'source_contact_id' => $cid,
'activity_type_id' => 'Membership Renewal',
'target_id' => $cid,
'source_record_id' => $result['id'],
];
$memType = $utils
->wf_civicrm_api('MembershipType', 'getsingle', [
'id' => $membership['membership_type_id'],
]);
$memStatus = $utils
->wf_civicrm_api('MembershipStatus', 'getsingle', [
'id' => $membership['status_id'],
]);
$actParams['subject'] = ts("%1 - Status: %2", [
1 => $memType['name'],
2 => $memStatus['label'],
]);
$utils
->wf_civicrm_api('Activity', 'create', $actParams);
}
foreach ($this->line_items as &$item) {
if ($item['element'] == "civicrm_{$c}_membership_{$n}") {
$item['membership_id'] = $result['id'];
break;
}
}
}
}
}