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.
File
- src/
AdminForm.php, line 1515 - Webform CiviCRM module's admin form.
Class
- AdminForm
- @file Webform CiviCRM module's admin form.
Namespace
Drupal\webform_civicrmCode
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;
}