You are here

pet.module in Previewable email templates 8.3

Same filename and directory in other branches
  1. 8.4 pet.module
  2. 8 pet.module
  3. 6 pet.module
  4. 7 pet.module

Previewable Email Template module.

File

pet.module
View source
<?php

/**
 * @file
 * Previewable Email Template module.
 */
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\pet\Utility\PetHelper;

/**
 * Implements hook_hook_info().
 */
function pet_hook_info() {
  $hooks = [
    'pet_substitutions_alter',
  ];
  $info = [
    'group' => 'pet',
  ];
  return array_fill_keys($hooks, $info);
}

/**
 * Implements hook_mail().
 *
 * To customize, e.g. to change the content type to text/html etc,
 * you can use hook_mail_alter() in one of your modules.
 *
 * @see https://api.drupal.org/api/drupal/core%21core.api.php/function/hook_mail/8.3.x
 * @see https://api.drupal.org/api/drupal/core%21core.api.php/function/hook_mail_alter/8.3.x
 */
function pet_mail($key, &$message, $params) {

  /** @var \Drupal\pet\Entity\PetInterface $pet */
  $pet = $params['pet'];
  $context = $params['context'];
  $substitutions = PetHelper::getSubstitutions($context);
  $token = \Drupal::token();
  if ($cc = $pet
    ->getCc()) {
    $message['headers']['Cc'] = $cc;
  }
  if ($bcc = $pet
    ->getBcc()) {
    $message['headers']['Bcc'] = $bcc;
  }

  // Make sure the 'From' header uses the site name in pet's language.
  $language_manager = \Drupal::service('language_manager');
  $langcode = $pet
    ->get('langcode')
    ->getValue()[0]['value'];
  $language = $language_manager
    ->getLanguage($langcode);
  $original_language = $language_manager
    ->getConfigOverrideLanguage();
  $language_manager
    ->setConfigOverrideLanguage($language);
  $site_config = \Drupal::config('system.site');
  $site_mail = $site_config
    ->get('mail');
  $message['headers']['From'] = $site_config
    ->get('name') . ' <' . $site_mail . '>';
  $language_manager
    ->setConfigOverrideLanguage($original_language);

  // Set subject and body.
  $message['subject'] = $token
    ->replace($pet
    ->getSubject(), $substitutions, [
    'clear' => TRUE,
  ]);

  // MimeMail integration.
  if (PetHelper::hasMimeMail()) {
    $message['body'][] = $token
      ->replace($pet
      ->getBodyHtml(), $substitutions, [
      'clear' => TRUE,
    ]);
    $mail_body = trim($pet
      ->getBody());
    if ($mail_body) {
      $message['params']['plaintext'] = $token
        ->replace($mail_body, $substitutions, [
        'clear' => TRUE,
      ]);
    }
    $message['params']['plain'] = $pet
      ->getSendPlain();
  }
  else {
    $message['body'][] = $token
      ->replace($pet
      ->getBody(), $substitutions, [
      'clear' => TRUE,
    ]);
  }
}

/*
 * Helper functions.
 */

/**
 * Token help for template construction form and template use form.
 */
function pet_token_help() {
  if (\Drupal::moduleHandler()
    ->moduleExists('token')) {
    $tokens = [
      '#title' => new TranslatableMarkup('Replacement patterns'),
      '#type' => 'details',
      '#open' => TRUE,
      '#description' => new TranslatableMarkup('Make sure that the tokens you choose are available to your template when previewed. The list below includes the standard Nodes and Users, as well as global tokens.'),
    ];
    $tokens['token_tree'] = [
      '#theme' => 'token_tree_link',
      '#token_types' => [
        'node',
        'user',
      ],
    ];
  }
  else {
    $tokens = [
      '#markup' => '<p>' . new TranslatableMarkup('Enable the <a href="@token" target="_blank">Token module</a> to view the available token browser.', [
        '@token' => '/admin/modules#module-token',
      ]) . '</p>',
    ];
  }
  return $tokens;
}

/**
 * Implements hook_local_tasks_alter().
 */
function pet_local_tasks_alter(&$local_tasks) {

  // Remove additional 'Revisions' tab added by entity module.
  if (isset($local_tasks['entity.revisions_overview:pet'])) {
    unset($local_tasks['entity.revisions_overview:pet']);
  }
}

Functions

Namesort descending Description
pet_hook_info Implements hook_hook_info().
pet_local_tasks_alter Implements hook_local_tasks_alter().
pet_mail Implements hook_mail().
pet_token_help Token help for template construction form and template use form.