Implements hook_field_instance_settings_form().
function entity_reference_field_instance_settings_form($field, $instance, $form_state) {
$field = isset($form_state['entity_reference']['field']) ? $form_state['entity_reference']['field'] : $field;
$instance = isset($form_state['entity_reference']['instance']) ? $form_state['entity_reference']['instance'] : $instance;
$settings = $instance['settings'];
$settings += array(
'handler' => 'default',
);
// Get all selection plugins for this entity type.
$selection_plugins = Drupal::service('plugin.manager.entity_reference.selection')
->getSelectionGroups($field['settings']['target_type']);
$handler_groups = array_keys($selection_plugins);
$handlers = Drupal::service('plugin.manager.entity_reference.selection')
->getDefinitions();
$handlers_options = array();
foreach ($handlers as $plugin_id => $plugin) {
// We only display base plugins (e.g. 'base', 'views', ..) and not entity
// type specific plugins (e.g. 'base_node', 'base_user', ...).
if (in_array($plugin_id, $handler_groups)) {
$handlers_options[$plugin_id] = check_plain($plugin['label']);
}
}
$form = array(
'#type' => 'container',
'#attached' => array(
'css' => array(
drupal_get_path('module', 'entity_reference') . '/css/entity_reference.admin.css',
),
),
'#process' => array(
'_entity_reference_field_instance_settings_ajax_process',
),
'#element_validate' => array(
'_entity_reference_field_instance_settings_validate',
),
'#field' => $field,
'#instance' => $instance,
);
$form['handler'] = array(
'#type' => 'details',
'#title' => t('Reference type'),
'#tree' => TRUE,
'#process' => array(
'_entity_reference_form_process_merge_parent',
),
);
$form['handler']['handler'] = array(
'#type' => 'select',
'#title' => t('Reference method'),
'#options' => $handlers_options,
'#default_value' => $settings['handler'],
'#required' => TRUE,
'#ajax' => TRUE,
'#limit_validation_errors' => array(),
);
$form['handler']['handler_submit'] = array(
'#type' => 'submit',
'#value' => t('Change handler'),
'#limit_validation_errors' => array(),
'#attributes' => array(
'class' => array(
'js-hide',
),
),
'#submit' => array(
'entity_reference_settings_ajax_submit',
),
);
$form['handler']['handler_settings'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'entity_reference-settings',
),
),
);
$handler = entity_reference_get_selection_handler($field, $instance);
$form['handler']['handler_settings'] += $handler
->settingsForm($field, $instance);
return $form;
}