function _fillCiviCRMData in Webform CiviCRM Integration 8.5
Fill civicrm data to the submission object.
Parameters
array $data:
object $webformSubmission:
2 calls to _fillCiviCRMData()
- webform_civicrm_tokens in ./
webform_civicrm.module - Implements hook_tokens().
- webform_civicrm_webform_submission_load in ./
webform_civicrm.module - Implements hook_entity_load() Display labels for civicrm option element.
File
- ./
webform_civicrm.module, line 168 - Webform CiviCRM Integration Module: Links webform submissions to contacts in a CiviCRM database. @author Coleman Watts
Code
function _fillCiviCRMData($data, $webformSubmission) {
if (!empty($data['civicrm'])) {
return $data;
}
$utils = \Drupal::service('webform_civicrm.utils');
$webform = $webformSubmission
->getWebform();
foreach ($data as $key => $val) {
$element = $webform
->getElement($key);
if (!empty($val) && $element['#type'] == 'civicrm_options') {
if (!empty($element['#webform_multiple'])) {
foreach ($val as $k => $v) {
if (isset($element['#options'][$v])) {
$data[$key][$k] = $element['#options'][$v];
}
}
}
elseif (isset($element['#options'][$val])) {
$data[$key] = $element['#options'][$val];
}
}
}
$contacts = [];
$query = \Drupal::database()
->select('webform_civicrm_submissions', 'wcs')
->fields('wcs', [
'contact_id',
'civicrm_data',
])
->condition('sid', $webformSubmission
->id(), '=');
$results = $query
->execute();
while ($content = $results
->fetchAssoc()) {
$civicrm_data = unserialize($content['civicrm_data']) + [
'contact' => [],
];
if ($content['contact_id']) {
foreach (explode('-', trim($content['contact_id'], '-')) as $c => $cid) {
$civicrm_data['contact'][$c + 1]['id'] = $cid;
$civicrm_data['contact'][$c + 1]['display_name'] = '';
if ($c == 0 && $cid) {
$contacts[$cid] = '';
}
}
}
$data['civicrm'] = $civicrm_data;
}
if ($contacts) {
// Retrieve contact names and add to submission objects
$contacts = $utils
->wf_crm_apivalues('contact', 'get', [
'id' => [
'IN' => array_keys($contacts),
],
], 'display_name') + $contacts;
if (!empty($data['civicrm']['contact'][1]['id'])) {
$data['civicrm']['contact'][1]['display_name'] = $contacts[$data['civicrm']['contact'][1]['id']];
}
}
return $data;
}