You are here

private function wf_crm_admin_form::addItem in Webform CiviCRM Integration 7.4

Same name and namespace in other branches
  1. 7.5 includes/wf_crm_admin_form.inc \wf_crm_admin_form::addItem()

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 wf_crm_admin_form::addItem()
wf_crm_admin_form::buildActivityTab in includes/wf_crm_admin_form.inc
Activity settings
wf_crm_admin_form::buildCaseTab in includes/wf_crm_admin_form.inc
Case settings FIXME: This is exactly the same code as buildGrantTab. More utilities and less boilerplate needed.
wf_crm_admin_form::buildContactTab in includes/wf_crm_admin_form.inc
Build fields for a contact
wf_crm_admin_form::buildContributionTab in includes/wf_crm_admin_form.inc
Contribution settings
wf_crm_admin_form::buildGrantTab in includes/wf_crm_admin_form.inc
Grant settings FIXME: This is nearly the same code as buildCaseTab. More utilities and less boilerplate needed.

... See full list

File

includes/wf_crm_admin_form.inc, line 1288
Webform CiviCRM module's admin form.

Class

wf_crm_admin_form
@file Webform CiviCRM module's admin form.

Code

private function addItem($fid, $field) {
  list(, $c, $ent, $n, $table, $name) = explode('_', $fid, 6);
  $item = array(
    // 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 = array();

    // Placeholder empty option - used by javascript when displaying multiselect as single
    if (!empty($field['extra']['multiple']) && empty($field['extra']['required'])) {
      $options += array(
        '' => '- ' . 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 += array(
        'create_civicrm_webform_element' => t('- User Select -'),
      );
    }
    $options += wf_crm_field_options($field, 'config_form', $this->data);
    $item += array(
      '#type' => 'select',
      '#options' => $options,
      '#multiple' => !empty($field['extra']['multiple']),
      '#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];
    }
    elseif (!empty($this->data[$ent][$c][$table][$n]) && empty($this->data[$ent][$c][$table][$n][$name]) && $item['#default_value'] == 0) {
      $item['#default_value'] = NULL;
    }
    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 += array(
      '#type' => 'checkbox',
      '#return_value' => 'create_civicrm_webform_element',
      '#default_value' => !empty($this->settings[$fid]),
    );
  }

  // Add help
  $topic = $table . '_' . $name;
  if (method_exists('wf_crm_admin_help', $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', t('Multiple Select Options'));
  }
  return $item;
}