You are here

LinkImageFieldWidget.php in Link Image Field 8

File

lib/Drupal/linkimagefield/Plugin/Field/FieldWidget/LinkImageFieldWidget.php
View source
<?php

namespace Drupal\linkimagefield\Plugin\Field\FieldWidget;

use Drupal\image\Plugin\Field\FieldWidget\ImageWidget;
use Drupal\Core\Field\FieldItemListInterface;

/**
 * Plugin implementation of the 'linkimagefield' widget.
 *
 * @FieldWidget(
 *   id = "linkimagefield_widget",
 *   label = @Translation("Link Image"),
 *   field_types = {
 *     "linkimagefield"
 *   }
 * )
 */
class LinkImageFieldWidget extends ImageWidget {

  /**
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, array &$form_state) {
    $element = parent::formElement($items, $delta, $element, $form, $form_state);
    $element['#process'][] = array(
      get_class($this),
      'process',
    );

    // Allow to use settings in process function.
    $settings = $this
      ->getFieldSettings();
    $element['#url'] = $settings['url_settings']['url'];
    $element['#rel_field'] = $settings['url_settings']['rel_field'];
    $element['#class_field'] = $settings['url_settings']['class_field'];
    $element['#custom_target'] = $settings['url_settings']['custom_target'];
    $element['#target'] = $settings['url_settings']['target'];
    $element['#longdesc_field'] = $settings['longdesc_field'];
    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public static function process($element, &$form_state, $form) {
    $element = parent::process($element, $form_state, $form);
    $item = $element['#value'];
    $item['fids'] = $element['fids']['#value'];
    $element['url'] = array(
      '#title' => t('Link URL'),
      '#type' => 'textfield',
      '#default_value' => isset($item['url']) ? $item['url'] : $element['#url'],
      '#description' => t('This URL will be loaded when the image is clicked'),
      '#weight' => -4,
      '#access' => (bool) $item['fids'],
    );
    $element['rel'] = array(
      '#title' => t('Link Rel'),
      '#type' => 'textfield',
      '#default_value' => isset($item['rel']) ? $item['rel'] : '',
      '#description' => t('Add rel attributes for bots, lightbox galleries, etc...'),
      '#maxlength' => \Drupal::config('linkimagefield.basic')
        ->get('image_longdesc_length'),
      '#weight' => -4,
      '#access' => (bool) $item['fids'] && $element['#rel_field'],
    );
    $element['class'] = array(
      '#title' => t('Link Class'),
      '#type' => 'textfield',
      '#default_value' => isset($item['class']) ? $item['class'] : '',
      '#description' => t('Add classes for theming, colorboxes, etc...'),
      '#maxlength' => \Drupal::config('linkimagefield.basic')
        ->get('image_longdesc_length'),
      '#weight' => -4,
      '#access' => (bool) $item['fids'] && $element['#class_field'],
    );
    $custom_target = $element['#custom_target'];
    $options = array(
      'default' => t('Use Default') . ' (' . $element['#target'] . ')',
    ) + _linkimagefield_widget_url_target_options();
    $element['target'] = array(
      '#title' => t('Link Target'),
      '#type' => $custom_target ? 'select' : 'value',
      '#options' => $custom_target ? $options : NULL,
      '#default_value' => $custom_target && isset($item['target']) ? $item['target'] : $element['#target'],
      '#description' => t('Window/Frame Target for the URL'),
      '#weight' => -4,
      '#access' => (bool) $item['fids'] && $custom_target,
    );
    $element['longdesc'] = array(
      '#title' => t('Image Longdesc'),
      '#type' => 'textfield',
      '#default_value' => isset($item['longdesc']) ? $item['longdesc'] : '',
      '#description' => t('The longdesc is used to provide a link to a long description of the image.'),
      '#maxlength' => \Drupal::config('linkimagefield.basic')
        ->get('image_longdesc_length'),
      '#weight' => -1,
      '#access' => (bool) $item['fids'] && $element['#longdesc_field'],
    );
    return $element;
  }

}

Classes

Namesort descending Description
LinkImageFieldWidget Plugin implementation of the 'linkimagefield' widget.