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

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

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