You are here

function webform_civicrm_webform_submission_load in Webform CiviCRM Integration 7.5

Same name and namespace in other branches
  1. 8.5 webform_civicrm.module \webform_civicrm_webform_submission_load()
  2. 6.2 webform_civicrm.module \webform_civicrm_webform_submission_load()
  3. 6 webform_civicrm.module \webform_civicrm_webform_submission_load()
  4. 7 webform_civicrm.module \webform_civicrm_webform_submission_load()
  5. 7.2 webform_civicrm.module \webform_civicrm_webform_submission_load()
  6. 7.3 webform_civicrm.module \webform_civicrm_webform_submission_load()
  7. 7.4 webform_civicrm.module \webform_civicrm_webform_submission_load()

Implements hook_webform_submission_load(). Add CiviCRM contact info to submission objects.

1 call to webform_civicrm_webform_submission_load()
wf_crm_webform_postprocess::setUpdateParam in includes/wf_crm_webform_postprocess.inc
If this is an update op, set param for drupal_write_record()

File

./webform_civicrm.module, line 294
Webform CiviCRM Integration Module: Links webform submissions to contacts in a CiviCRM database. @author Coleman Watts

Code

function webform_civicrm_webform_submission_load(&$submissions) {
  if (empty($submissions)) {
    return;
  }
  $db = db_query('SELECT * FROM {webform_civicrm_submissions} WHERE sid IN (' . implode(',', array_keys($submissions)) . ')');
  $contacts = [];
  foreach ($db as $row) {
    $data = unserialize($row->civicrm_data) + [
      'contact' => [],
    ];
    if ($row->contact_id) {
      foreach (explode('-', trim($row->contact_id, '-')) as $c => $cid) {
        $data['contact'][$c + 1]['id'] = $cid;
        $data['contact'][$c + 1]['display_name'] = '';
        if ($c == 0 && $cid) {
          $contacts[$cid] = '';
        }
      }
    }
    $submissions[$row->sid]->civicrm = $data;
  }
  if ($contacts) {

    // Retrieve contact names and add to submission objects
    civicrm_initialize();
    module_load_include('inc', 'webform_civicrm', 'includes/utils');
    $contacts = wf_crm_apivalues('contact', 'get', [
      'id' => [
        'IN' => array_keys($contacts),
      ],
    ], 'display_name') + $contacts;
    foreach ($submissions as &$s) {
      if (!empty($s->civicrm['contact'][1]['id'])) {
        $s->civicrm['contact'][1]['display_name'] = $contacts[$s->civicrm['contact'][1]['id']];
      }
    }
  }
}