You are here

function _image_field_caption_widget_process in Image Field Caption 8

Custom callback function for the #process of an image field type.

1 string reference to '_image_field_caption_widget_process'
image_field_caption_field_widget_form_alter in ./image_field_caption.module
Implements hook_field_widget_form_alter().

File

./image_field_caption.module, line 47
Provides a caption textarea for image fields.

Code

function _image_field_caption_widget_process($element, &$form_state, $form) {

  // Get the entity.
  $entity = $form_state
    ->getFormObject()
    ->getEntity();

  // Get the fields definitions.
  $field_definitions = $entity
    ->getFieldDefinitions();

  // Get the current field definition.
  if (!empty($field_definitions[$element['#field_name']])) {
    $field_definition = $field_definitions[$element['#field_name']];
  }
  elseif (!empty($field_definitions[$element['#field_parents'][0]])) {
    $field_definition = $field_definitions[$element['#field_parents'][0]];
  }
  else {
    $field_definition = NULL;
  }

  // Get the current field values (form state).
  $field_values = $form_state
    ->getValues();

  // If the field has parents (ex: paragraphs) then get the nested values.
  if (!empty($element['#field_parents'])) {
    $field_values = NestedArray::getValue($field_values, $element['#field_parents']);
  }
  $field_value = isset($field_values[$element['#field_name']][$element['#delta']]['image_field_caption']) ? $field_values[$element['#field_name']][$element['#delta']]['image_field_caption'] : [];

  // Add the additional caption fields.
  $element['image_field_caption'] = [
    '#title' => t('Caption'),
    '#type' => 'text_format',
    '#value' => !empty($field_value['value']) ? $field_value['value'] : (!empty($element['#value']['caption']) ? $element['#value']['caption'] : []),
    '#default_value' => !empty($element['#value']['caption']) ? $element['#value']['caption'] : (!empty($element['#value']['image_field_caption']) ? $element['#value']['image_field_caption']['value'] : ''),
    '#access' => (bool) $element['#value']['fids'],
    '#format' => !empty($field_value['format']) ? $field_value['format'] : (!empty($element['#value']['caption_format']) ? $element['#value']['caption_format'] : 'plain_text'),
    '#required' => $element['#alt_field_required'],
    '#element_validate' => $element['#alt_field_required'] ? [
      '_image_field_caption_validate_required',
    ] : [],
  ];
  return $element;
}