entity_embed_link-2.0.0/entity_embed_link.module

entity_embed_link.module
<?php

/**
 * @file
 * A module that allows embedded entities to link to arbitrary URLs.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\Component\Utility\Html;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\UrlHelper;

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function entity_embed_link_form_entity_embed_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (isset($form['attributes']['data-entity-embed-display-settings'])) {
    $entity_element = $form_state->get('entity_element');
    $media_entity = \Drupal::service('entity.repository')
      ->loadEntityByUuid($entity_element['data-entity-type'], $entity_element['data-entity-uuid']);
    // Add link settings only if media is an image.
    if (
      $media_entity &&
      isset($media_entity->bundle) &&
      isset($media_entity->bundle->getValue()[0]['target_id']) &&
      $media_entity->bundle->getValue()[0]['target_id'] !== 'image'
    ) {
      return;
    }

    if (isset($entity_element['data-entity-embed-display-settings']) && !is_array($entity_element['data-entity-embed-display-settings'])) {
      $entity_element['data-entity-embed-display-settings'] = Json::decode($entity_element['data-entity-embed-display-settings']);
    }
    if (isset($form['attributes']['data-entity-embed-display-settings']['image_link'])) {
      $form['attributes']['data-entity-embed-display-settings']['image_link']['#type'] = 'hidden';
      $form['attributes']['data-entity-embed-display-settings']['image_link']['#value'] = '';
    }

    // The title field was introduced by the entity_browser module already.
    if (empty($form['attributes']['data-entity-embed-display-settings']['title'])) {
      $form['attributes']['data-entity-embed-display-settings']['link_title'] = [
        '#title'         => t('Title'),
        '#description'   => t('The title is used as a tool tip when the user hovers the mouse over the image.'),
        '#type'          => 'textfield',
        '#default_value' => $entity_element['data-entity-embed-display-settings']['link_title'] ?? '',
      ];
    }

    $form['attributes']['data-entity-embed-display-settings']['link_url'] = [
      '#title'         => t('Link to'),
      '#description'   => t('The URL you would like this item to link to.  Leave blank for none.'),
      '#type'          => 'textfield',
      '#default_value' => isset($entity_element['data-entity-embed-display-settings']['link_url']) ? Html::decodeEntities($entity_element['data-entity-embed-display-settings']['link_url']) : '',
    ];

    // Open in new window.
    $form['attributes']['data-entity-embed-display-settings']['target'] = [
      '#title'         => t('Open in new window'),
      '#description'   => t('Allow the link to open up in a new window/tab.'),
      '#type'          => 'checkbox',
      '#default_value' => $entity_element['data-entity-embed-display-settings']['target'] ?? '',
    ];
  }
}

/**
 * Implements hook_theme_registry_alter().
 */
function entity_embed_link_theme_registry_alter(&$theme_registry) {
  $theme_registry['entity_embed_container']['path'] = \Drupal::service('extension.list.module')->getPath('entity_embed_link') . '/templates';
}

/**
 * Implements hook_preprocess_HOOK().
 */
function entity_embed_link_preprocess_entity_embed_container(&$variables) {
  $variables['url'] = isset($variables['element']['#context']['data-entity-embed-display-settings']['link_url']) ? UrlHelper::filterBadProtocol($variables['element']['#context']['data-entity-embed-display-settings']['link_url']) : '';
  $link_title = $variables['element']['#context']['data-entity-embed-display-settings']['link_title'] ?? '';
  if (!empty($link_title)) {
    $variables['title'] = $link_title;
  }
  $variables['target'] = $variables['element']['#context']['data-entity-embed-display-settings']['target'] ?? '';
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc