You are here

private function WebformCivicrmPostProcess::processSharedAddresses in Webform CiviCRM Integration 8.5

Process shared addresses

1 call to WebformCivicrmPostProcess::processSharedAddresses()
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 1337
Front-end form validation and post-processing.

Class

WebformCivicrmPostProcess

Namespace

Drupal\webform_civicrm

Code

private function processSharedAddresses() {
  $utils = \Drupal::service('webform_civicrm.utils');
  foreach ($this->shared_address as $cid => $shared) {
    foreach ($shared as $i => $addr) {
      if (!empty($this->ent['contact'][$addr['mc']]['id'])) {
        $masters = $utils
          ->wf_civicrm_api('address', 'get', [
          'contact_id' => $this->ent['contact'][$addr['mc']]['id'],
          'options' => [
            'sort' => 'is_primary DESC',
          ],
        ]);
        if (!empty($masters['values'])) {
          $masters = array_values($masters['values']);

          // Pick the address with the same location type; default to primary.
          $params = $masters[0];
          foreach ($masters as $m) {
            if ($m['location_type_id'] == $addr['loc']) {
              $params = $m;
              break;
            }
          }
          $params['master_id'] = $params['id'];
          $params['id'] = $addr['id'];
          $params['contact_id'] = $cid;
          $params['is_primary'] = $addr['pri'];
          $utils
            ->wf_civicrm_api('address', 'create', $params);
        }
      }
    }
  }
}