function entity_reference_field_instance_settings_form

Implements hook_field_instance_settings_form().

File

drupal/core/modules/entity_reference/entity_reference.module, line 206
Provides a field that can reference other entities.

Code

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;
}