private function WebformCivicrmPostProcess::processActivities in Webform CiviCRM Integration 8.5
Save activity data
1 call to WebformCivicrmPostProcess::processActivities()
- WebformCivicrmPostProcess::postSave in src/
WebformCivicrmPostProcess.php - Process webform submission after it is has been saved. Called by the following hooks:
File
- src/
WebformCivicrmPostProcess.php, line 1477 - Front-end form validation and post-processing.
Class
Namespace
Drupal\webform_civicrmCode
private function processActivities() {
$utils = \Drupal::service('webform_civicrm.utils');
$activities = wf_crm_aval($this->data, 'activity', []);
foreach ($activities as $n => $data) {
if (is_array($data)) {
$params = $data['activity'][1];
// Create mode
if (empty($this->ent['activity'][$n]['id'])) {
// Skip if no activity type
if (empty($params['activity_type_id'])) {
continue;
}
// Automatic status based on whether activity_date_time is in the future
if (empty($params['status_id'])) {
$params['status_id'] = strtotime(wf_crm_aval($params, 'activity_date_time', 'now')) > time() ? 'Scheduled' : 'Completed';
}
// Automatic source_contact_id - default to current user or contact 1
if (empty($data['activity'][1]['source_contact_id'])) {
if (\Drupal::currentUser()
->isAuthenticated()) {
$params['source_contact_id'] = $utils
->wf_crm_user_cid();
}
elseif (!empty($this->ent['contact'][1]['id'])) {
$params['source_contact_id'] = $this->ent['contact'][1]['id'];
}
}
// Format details as html
$this
->formatSubmissionDetails($params, $n);
}
else {
$params['id'] = $this->ent['activity'][$n]['id'];
// Update details when user has selected he wants to update the details
if (!empty($data['details']['update_existing'])) {
// Format details as html
$this
->formatSubmissionDetails($params, $n);
}
}
// Allow "automatic" values to pass-thru if empty
foreach ($params as $field => $value) {
if ((isset($this->all_fields["activity_{$field}"]['empty_option']) || isset($this->all_fields["activity_{$field}"]['exposed_empty_option'])) && !$value) {
unset($params[$field]);
}
}
// Handle survey data
if (!empty($params['survey_id'])) {
$params['source_record_id'] = $params['survey_id'];
// Set default subject
if (empty($params['id']) && empty($params['subject'])) {
$survey = $utils
->wf_civicrm_api('survey', 'getsingle', [
'id' => $params['survey_id'],
'return' => 'title',
]);
$params['subject'] = wf_crm_aval($survey, 'title', '');
}
}
// File on case
if (!empty($data['case_type_id'])) {
// Webform case
if ($data['case_type_id'][0] === '#') {
$case_num = substr($data['case_type_id'], 1);
if (!empty($this->ent['case'][$case_num]['id'])) {
$params['case_id'] = $this->ent['case'][$case_num]['id'];
}
}
else {
$case_contact = $this->ent['contact'][$data['case_contact_id']]['id'];
if ($case_contact) {
// Proceed only if this activity is not already filed on a case
if (empty($params['id']) || !$utils
->wf_crm_apivalues('case', 'get', [
'activity_id' => $params['id'],
])) {
$case = $this
->findCaseForContact($case_contact, [
'status_id' => $data['case_status_id'],
'case_type_id' => $data['case_type_id'],
]);
if ($case) {
$params['case_id'] = $case['id'];
}
}
}
}
}
$activity = $utils
->wf_civicrm_api('activity', 'create', $params);
// Final processing if save was successful
if (!empty($activity['id'])) {
// handle activity tags
$this
->handleEntityTags('activity', $activity['id'], $n, $params);
// Store id
$this->ent['activity'][$n]['id'] = $activity['id'];
// Save attachments
if (isset($data['activityupload'])) {
$this
->processAttachments('activity', $n, $activity['id'], empty($params['id']));
}
if (!empty($params['assignee_contact_id'])) {
if ($utils
->wf_crm_get_civi_setting('activity_assignee_notification')) {
// Send email to assignees. TODO: Move to CiviCRM API?
$assignees = $utils
->wf_crm_apivalues('contact', 'get', [
'id' => [
'IN' => (array) $params['assignee_contact_id'],
],
]);
$mail = [];
foreach ($assignees as $assignee) {
if (!empty($assignee['email'])) {
$mail[$assignee['email']] = $assignee;
}
}
if ($mail) {
// Include attachments while sending a copy of activity.
$attachments = \CRM_Core_BAO_File::getEntityFile('civicrm_activity', $activity['id']);
\CRM_Case_BAO_Case::sendActivityCopy(NULL, $activity['id'], $mail, $attachments, NULL);
}
}
}
}
}
}
}