You are here

private function AdminForm::addItem in Webform CiviCRM Integration 8.5

Build a field item for the admin form

Parameters

string $fid: civicrm field id

array $field: Webform field info

Return value

array FAPI form item array for the admin form

7 calls to AdminForm::addItem()
AdminForm::buildActivityTab in src/AdminForm.php
Activity settings
AdminForm::buildCaseTab in src/AdminForm.php
Case settings FIXME: This is exactly the same code as buildGrantTab. More utilities and less boilerplate needed.
AdminForm::buildContactTab in src/AdminForm.php
Build fields for a contact
AdminForm::buildContributionTab in src/AdminForm.php
Contribution settings
AdminForm::buildGrantTab in src/AdminForm.php
Grant settings FIXME: This is nearly the same code as buildCaseTab. More utilities and less boilerplate needed.

... See full list

File

src/AdminForm.php, line 1515
Webform CiviCRM module's admin form.

Class

AdminForm
@file Webform CiviCRM module's admin form.

Namespace

Drupal\webform_civicrm

Code

private function addItem($fid, $field) {
  $utils = \Drupal::service('webform_civicrm.utils');
  list(, $c, $ent, $n, $table, $name) = explode('_', $fid, 6);
  $item = [
    // We don't need numbers on the admin form since they are already grouped in fieldsets
    '#title' => str_replace('#', '', $field['name']),
    '#attributes' => wf_crm_aval($field, 'attributes'),
  ];

  // Create dropdown list
  if (!empty($field['expose_list'])) {
    $field['form_key'] = $fid;

    // Retrieve option list
    $options = [];

    // Placeholder empty option - used by javascript when displaying multiselect as single
    if (!empty($field['extra']['multiple']) && empty($field['extra']['required'])) {
      $options += [
        '' => '- ' . t('None') . ' -',
      ];
    }

    // This prevents the multi-select js from adding an illegal empty option
    if (!empty($field['extra']['required'])) {
      $item['#attributes']['class'][] = 'required';
    }
    if ($field['type'] != 'hidden') {
      $options += [
        'create_civicrm_webform_element' => t('- User Select -'),
      ];
    }
    $options += $utils
      ->wf_crm_field_options($field, 'config_form', $this->data);
    $item += [
      '#type' => 'select',
      '#options' => $options,
      '#multiple' => !empty($field['extra']['multiple']),
      '#civicrm_live_options' => !empty($field['civicrm_live_options']),
      '#default_value' => !empty($field['empty_option']) ? 0 : NULL,
    ];
    if (isset($field['empty_option'])) {
      $item['#empty_option'] = '- ' . $field['empty_option'] . ' -';
      $item['#empty_value'] = 0;
    }
    if (isset($field['data_type'])) {
      $item['#attributes']['data-type'] = $field['data_type'];
    }

    // Five ways to get default value...
    // 1: From current form state
    if (isset($this->settings[$fid]) && $field['type'] != 'hidden') {
      $item['#default_value'] = $this->settings[$fid];
    }
    elseif (isset($this->data[$ent][$c][$table][$n][$name])) {
      $item['#default_value'] = $this->data[$ent][$c][$table][$n][$name];
    }
    elseif (isset($field['value_callback'])) {
      $method = 'get_default_' . $table . '_' . $name;
      $item['#default_value'] = self::$method($fid, $options);
    }
    elseif (isset($field['value'])) {
      $item['#default_value'] = $field['value'];
    }
    elseif (empty($field['extra']['multiple']) && !isset($field['empty_option'])) {
      $options = array_keys($options);
      $item['#default_value'] = $options[1];
    }
    if (!empty($field['extra']['multiple'])) {
      $item['#default_value'] = (array) $item['#default_value'];
      if (isset($this->settings[$fid]) && !is_array($this->settings[$fid]) && isset($this->data[$ent][$c][$table][$n][$name])) {
        $item['#default_value'] += (array) $this->data[$ent][$c][$table][$n][$name];
      }
    }
  }
  else {
    $item += [
      '#type' => 'checkbox',
      '#return_value' => 'create_civicrm_webform_element',
      '#default_value' => !empty($this->settings[$fid]),
    ];
  }

  // Add help
  $topic = $table . '_' . $name;
  $adminHelp = \Drupal::service('webform_civicrm.admin_help');
  if (method_exists($adminHelp, $topic)) {
    $this
      ->help($item, $topic);
  }
  elseif (!empty($field['has_help'])) {
    $this
      ->help($item, $name);
  }
  elseif (wf_crm_aval($field, 'data_type') == 'ContactReference') {
    $this
      ->help($item, 'contact_reference');
  }
  elseif (!empty($field['expose_list']) && !empty($field['extra']['multiple'])) {
    $this
      ->help($item, 'multiselect_options');
  }
  return $item;
}