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'] ?? '';
}
