You are here

function inline_entity_form_entity_form in Inline Entity Form 7

Wraps and returns the entity form provided by the passed-in controller.

Parameters

$controller: The inline entity form controller.

$entity_form: The form array that will receive the entity form.

$form_state: The form state of the parent form.

Return value

The form array containing the embedded entity form.

1 call to inline_entity_form_entity_form()
inline_entity_form_field_widget_form in ./inline_entity_form.module
Implements hook_field_widget_form().

File

./inline_entity_form.module, line 859
Provides a widget for inline management (creation, modification, removal) of referenced entities. The primary use case is the parent -> children one (for example, order -> line items), where the child entities are never managed outside the…

Code

function inline_entity_form_entity_form($controller, $entity_form, &$form_state) {
  $labels = $controller
    ->labels();

  // Build a deta suffix that's appended to button #name keys for uniqueness.
  $delta = $entity_form['#ief_id'];
  if ($entity_form['#op'] == 'edit') {
    $delta .= '-' . $entity_form['#ief_row_delta'];
    $save_label = t('Update @type_singular', array(
      '@type_singular' => $labels['singular'],
    ));
  }
  elseif ($entity_form['#op'] == 'add') {

    // Create a new entity that will be passed to the form.
    $form_settings = $form_state['inline_entity_form'][$entity_form['#ief_id']]['form settings'];
    $entity_form['#entity'] = inline_entity_form_create_entity($entity_form['#entity_type'], $form_settings['bundle'], $entity_form['#parent_language']);
    $entity_form['#title'] = t('Add new @type_singular', array(
      '@type_singular' => $labels['singular'],
    ));
    $save_label = t('Create @type_singular', array(
      '@type_singular' => $labels['singular'],
    ));
  }
  elseif ($entity_form['#op'] == 'clone') {

    // Clone the entity.
    $form_settings = $form_state['inline_entity_form'][$entity_form['#ief_id']]['form settings'];
    $entity = $form_state['inline_entity_form'][$entity_form['#ief_id']]['entities'][$form_settings['source']]['entity'];
    $entity_form['#entity'] = $controller
      ->createClone($entity);
    $entity_form['#title'] = t('Clone @type_singular', array(
      '@type_singular' => $labels['singular'],
    ));
    $save_label = t('Clone @type_singular', array(
      '@type_singular' => $labels['singular'],
    ));
  }

  // Retrieve the form provided by the controller.
  $entity_form = $controller
    ->entityForm($entity_form, $form_state);

  // Add the actions
  $entity_form['actions'] = array(
    '#type' => 'container',
    '#weight' => 100,
  );
  $entity_form['actions']['ief_' . $entity_form['#op'] . '_save'] = array(
    '#type' => 'submit',
    '#value' => $save_label,
    '#name' => 'ief-' . $entity_form['#op'] . '-submit-' . $delta,
    '#limit_validation_errors' => array(
      $entity_form['#parents'],
    ),
    '#attributes' => array(
      'class' => array(
        'ief-entity-submit',
      ),
    ),
    '#ajax' => array(
      'callback' => 'inline_entity_form_get_element',
      'wrapper' => 'inline-entity-form-' . $entity_form['#ief_id'],
    ),
  );
  $entity_form['actions']['ief_' . $entity_form['#op'] . '_cancel'] = array(
    '#type' => 'submit',
    '#value' => t('Cancel'),
    '#name' => 'ief-' . $entity_form['#op'] . '-cancel-' . $delta,
    '#limit_validation_errors' => array(),
    '#ajax' => array(
      'callback' => 'inline_entity_form_get_element',
      'wrapper' => 'inline-entity-form-' . $entity_form['#ief_id'],
    ),
  );

  // Add the appropriate submit handlers and their related data.
  if (in_array($entity_form['#op'], array(
    'add',
    'clone',
  ))) {
    $entity_form['actions']['ief_' . $entity_form['#op'] . '_save']['#submit'] = array(
      'inline_entity_form_trigger_submit',
      'inline_entity_form_close_child_forms',
      'inline_entity_form_close_form',
    );
    $entity_form['actions']['ief_' . $entity_form['#op'] . '_cancel']['#submit'] = array(
      'inline_entity_form_close_child_forms',
      'inline_entity_form_close_form',
      'inline_entity_form_cleanup_form_state',
    );
  }
  else {
    $entity_form['actions']['ief_edit_save']['#ief_row_delta'] = $entity_form['#ief_row_delta'];
    $entity_form['actions']['ief_edit_cancel']['#ief_row_delta'] = $entity_form['#ief_row_delta'];
    $entity_form['actions']['ief_edit_save']['#submit'] = array(
      'inline_entity_form_trigger_submit',
      'inline_entity_form_close_child_forms',
      'inline_entity_form_close_row_form',
    );
    $entity_form['actions']['ief_edit_cancel']['#submit'] = array(
      'inline_entity_form_close_child_forms',
      'inline_entity_form_close_row_form',
      'inline_entity_form_cleanup_row_form_state',
    );
  }
  $entity_form['#element_validate'][] = 'inline_entity_form_entity_form_validate';
  $entity_form['#ief_element_submit'][] = 'inline_entity_form_entity_form_submit';

  // Add the pre_render callback that powers the #fieldset form element key,
  // which moves the element to the specified fieldset without modifying its
  // position in $form_state['values'].
  $entity_form['#pre_render'][] = 'inline_entity_form_pre_render_add_fieldset_markup';

  // Allow other modules to alter the form.
  drupal_alter('inline_entity_form_entity_form', $entity_form, $form_state);
  return $entity_form;
}