postoffice-1.0.x-dev/extensions/postoffice_image/postoffice_image.module
extensions/postoffice_image/postoffice_image.module
<?php
/**
* @file
* Primary module hooks for Postoffice Image module.
*/
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FormatterInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
/**
* Implements hook_field_formatter_third_party_settings_form().
*/
function postoffice_image_field_formatter_third_party_settings_form(
FormatterInterface $plugin,
FieldDefinitionInterface $field_definition,
$view_mode,
array $form,
FormStateInterface $form_state,
) {
$element = [];
if ($plugin->getPluginId() === 'image') {
$element['adjustment'] = [
'#type' => 'select',
'#title' => t('HTML email adjustment'),
'#options' => [
'embed' => t('Embed images'),
'transform_urls' => t('Absolute URLs'),
],
'#empty_option' => t('No adjustment'),
'#default_value' => $plugin->getThirdPartySetting(
'postoffice_image',
'adjustment'
),
];
}
return $element;
}
/**
* Implements hook_field_formatter_settings_summary_alter().
*/
function postoffice_image_field_formatter_settings_summary_alter(&$summary, $context) {
if ($context['formatter']->getPluginId() === 'image') {
$adjustment = $context['formatter']->getThirdPartySetting(
'postoffice_image',
'adjustment'
);
switch ($adjustment) {
case 'embed':
$summary[] = t('Embed in HTML email');
break;
case 'transform_urls':
$summary[] = t('Absolute URLs in HTML email');
break;
}
}
}
/**
* Implements hook_entity_display_build_alter().
*/
function postoffice_image_entity_display_build_alter(&$build, $context) {
foreach (Element::children($build) as $field_name) {
$element = &$build[$field_name];
if (
!empty($element['#field_type']) && $element['#field_type'] === 'image' &&
!empty($element['#formatter']) && $element['#formatter'] === 'image' &&
!empty($element['#third_party_settings']['postoffice_image']['adjustment'])
) {
foreach (Element::children($element) as $delta) {
$element[$delta]['#postoffice_image_adjustment'] =
$element['#third_party_settings']['postoffice_image']['adjustment'];
}
}
}
}
/**
* Implements hook_theme_registry_alter().
*/
function postoffice_image_theme_registry_alter(&$theme_registry) {
$theme_registry['image_formatter']['variables'] += [
'postoffice_image_adjustment' => '',
];
$theme_registry['image_style']['variables'] += [
'postoffice_image_embed_target_id' => 0,
'postoffice_image_embed_style_name' => '',
'postoffice_image_transform_urls' => FALSE,
];
$theme_registry['image']['variables'] += [
'postoffice_image_embed_target_id' => 0,
'postoffice_image_embed_style_name' => '',
'postoffice_image_transform_urls' => FALSE,
];
}
/**
* Implements hook_preprocess_HOOK() for image_formatter.
*
* @see template_preprocess_image_formatter()
*/
function postoffice_image_preprocess_image_formatter(&$variables) {
switch ($variables['postoffice_image_adjustment']) {
case 'embed':
$variables['image']['#postoffice_image_embed_target_id'] = $variables['item']->target_id;
$variables['image']['#postoffice_image_embed_style_name'] = $variables['image_style'];
break;
case 'transform_urls':
$variables['image']['#postoffice_image_transform_urls'] = TRUE;
break;
}
}
/**
* Implements hook_preprocess_HOOK() for image_style.
*
* @see template_preprocess_image_style()
*/
function postoffice_image_preprocess_image_style(&$variables) {
$variables['image']['#postoffice_image_embed_target_id'] = $variables['postoffice_image_embed_target_id'];
$variables['image']['#postoffice_image_embed_style_name'] = $variables['postoffice_image_embed_style_name'];
$variables['image']['#postoffice_image_transform_urls'] = $variables['postoffice_image_transform_urls'];
}
/**
* Implements hook_preprocess_HOOK() for image.
*
* @see template_preprocess_image()
*/
function postoffice_image_preprocess_image(&$variables) {
if (!empty($variables['postoffice_image_embed_target_id'])) {
$variables['attributes']['data-postoffice-image-embed-target-id'] = $variables['postoffice_image_embed_target_id'];
}
if (!empty($variables['postoffice_image_embed_style_name'])) {
$variables['attributes']['data-postoffice-image-embed-style-name'] = $variables['postoffice_image_embed_style_name'];
}
if (!empty($variables['postoffice_image_transform_urls'])) {
$variables['attributes']['data-postoffice-image-transform-urls'] = $variables['postoffice_image_transform_urls'];
}
}
