You are here

function webform_civicrm_update_7402 in Webform CiviCRM Integration 7.5

Same name and namespace in other branches
  1. 7.4 webform_civicrm.install \webform_civicrm_update_7402()

Upgrade schema to handle multiple activities and cases

File

./webform_civicrm.install, line 775
Webform CiviCRM module's install, uninstall and upgrade code.

Code

function webform_civicrm_update_7402() {
  civicrm_initialize();
  module_load_include('inc', 'webform', 'includes/webform.components');
  module_load_include('inc', 'webform_civicrm', 'includes/utils');
  $forms = db_query("SELECT * FROM {webform_civicrm_forms}");
  foreach ($forms as $form) {
    $data = $orig = unserialize($form->data);
    if (isset($data['activity'][1]['activity'][1])) {
      $data['activity']['number_of_activity'] = 1;

      // Fix misnamed fields
      foreach ([
        'campaign_id',
        'survey_id',
      ] as $field) {
        if (!empty($data['activity'][1]['activity'][1]['activity_' . $field])) {
          $data['activity'][1]['activity'][1][$field] = $data['activity'][1]['activity'][1]['activity_' . $field];
          unset($data['activity'][1]['activity'][1]['activity_' . $field]);
        }
      }

      // Set "file on case" settings if activity and case are both set
      // Previous behavior was to always file on case
      if (!empty($data['case'][1]['case'][1]['case_type_id'])) {
        $data['activity'][1]['case_type_id'] = $data['case'][1]['case'][1]['case_type_id'];
        $data['activity'][1]['case_status_id'] = (array) wf_crm_aval($data['case'][1]['case'][1], 'status_id');
        $data['activity'][1]['case_contact_id'] = wf_crm_aval($data['case'][1]['case'][1], 'client_id', 1);
      }

      // Create hidden field for activity subject to replace the removed "default subject" setting
      $fid = 'civicrm_1_activity_1_activity_subject';
      if (!db_query("SELECT nid FROM {webform_component} WHERE form_key = '{$fid}' AND nid = {$form->nid}")
        ->fetchField()) {
        $component = [
          'form_key' => $fid,
          'nid' => $form->nid,
          'value' => $data['activity'][1]['activity'][1]['subject'],
          'type' => 'hidden',
        ] + wf_crm_get_field('activity_subject');
        webform_component_defaults($component);
        webform_component_insert($component);
      }
    }
    if (isset($data['case'][1]['case'][1])) {
      $data['case']['number_of_case'] = 1;
    }
    if ($data !== $orig) {
      db_update('webform_civicrm_forms')
        ->fields([
        'data' => serialize($data),
      ])
        ->condition('nid', $form->nid)
        ->execute();
    }
  }
}