contacts_events-8.x-1.x-dev/modules/teams/src/TeamEmailService.php

modules/teams/src/TeamEmailService.php
<?php

namespace Drupal\contacts_events_teams;

use Drupal\contacts_events\Entity\TicketInterface;
use Drupal\contacts_events_teams\Entity\Team;
use Drupal\contacts_events_teams\Entity\TeamInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Mail\MailManagerInterface;
use Drupal\Core\Utility\Token;

/**
 * Sends team emails.
 *
 * @package Drupal\contacts_events_teams
 */
class TeamEmailService {

  /**
   * The teams email config.
   *
   * @var \Drupal\Core\Config\ImmutableConfig
   */
  protected $config;

  /**
   * The token service.
   *
   * @var \Drupal\Core\Utility\Token
   */
  protected $token;

  /**
   * The mail plugin manager.
   *
   * @var \Drupal\Core\Mail\MailManagerInterface
   */
  protected $mailManager;

  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected $languageManager;

  /**
   * TeamEmailSubscriber constructor.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   Config factory.
   * @param \Drupal\Core\Utility\Token $token
   *   Token replacement service.
   * @param \Drupal\Core\Mail\MailManagerInterface $mail_manager
   *   Mail manager.
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   Language manager.
   */
  public function __construct(ConfigFactoryInterface $config_factory, Token $token, MailManagerInterface $mail_manager, LanguageManagerInterface $language_manager) {
    $this->config = $config_factory->get('contacts_events_teams.emails');
    $this->token = $token;
    $this->mailManager = $mail_manager;
    $this->languageManager = $language_manager;
  }

  /**
   * Sends an email to the team applicant.
   *
   * @param string $email_key
   *   ID of the email.
   * @param \Drupal\contacts_events\Entity\TicketInterface $ticket
   *   The ticket.
   * @param \Drupal\contacts_events_teams\Entity\Team $team
   *   The team.
   */
  public function sendToApplicant($email_key, TicketInterface $ticket, Team $team) {
    // Check if emails are disabled for this team.
    if ($team->get('disable_automatic_emails')->value) {
      return;
    }

    // If we are sending the application request and we already have a team,
    // see if the selected team email is enabled.
    if ($email_key == 'application_request' && $team && $this->applicationTeamEmailEnabled($team)) {
      $email_key = 'application_request_team';
    }

    // Get the email config from the team if overridden or from the defaults.
    // Emails with key 'application_request' cannot have a team specific email.
    if ($email_key != 'application_request' && $this->teamSpecificOverride($team)) {
      $email_config = [
        'enabled' => $team->get($email_key . '_enabled')->value,
        'skip_booking_manager' => FALSE,
        'subject' => $team->get($email_key . '_subject')->value,
        'body' => [
          'value' => $team->get($email_key . '_body')->value,
          'format' => $team->get($email_key . '_body')->format,
        ],
      ];

      // Not every email key has a booking manager field so check if it exists
      // before checking the value.
      if ($team->hasField($email_key . '_b_man')) {
        $email_config['skip_booking_manager'] = $team->get($email_key . '_b_man')->value;
      }
    }
    else {
      $email_config = $this->config->get("emails.{$email_key}");
    }

    $order_item = $ticket->getOrderItem();

    // If we haven't got an enabled email, return now.
    if (empty($email_config['enabled'])) {
      return;
    }

    // If the ticket holder is the booking manager, we may want to skip sending
    // to the booking manager.
    if (!empty($email_config['skip_booking_manager'])) {
      $order = $order_item->getOrder();
      if ($order->getCustomerId() == $ticket->get('contact')->target_id) {
        return;
      }
    }

    // Build our token data.
    $token_data = [
      'contacts_ticket' => $ticket,
      'c_events_team' => $team,
      'contacts_event' => $ticket->getEvent(),
    ];

    // Get our parts of the email.
    $to = "{$ticket->getName('plain')} <{$ticket->get('email')->value}>";
    $params['subject'] = $this->token->replace($email_config['subject'], $token_data);
    $params['body'] = $this->token->replace($email_config['body']['value'], $token_data);
    $params['body_format'] = $this->token->replace($email_config['body']['format'], $token_data);
    $params['from'] = $this->config->get('from');

    /** @var \Drupal\user\UserInterface $user */
    $user = $ticket->get('contact')->entity;
    if ($user) {
      $langcode = $user->getPreferredLangcode();
    }
    else {
      $langcode = $this->languageManager->getDefaultLanguage()->getId();
    }

    $this->mailManager->mail('contacts_events_teams', $email_key, $to, $langcode, $params);
  }

  /**
   * Check whether a Team has email overrides enabled.
   *
   * @param \Drupal\contacts_events_teams\Entity\TeamInterface $team
   *   The team to check for overrides.
   *
   * @return bool
   *   TRUE if the team has email overrides enabled. FALSE otherwise.
   */
  protected function teamSpecificOverride(TeamInterface $team): bool {
    return (bool) $team->get('team_email_override')->value;
  }

  /**
   * Check if the team specific application email is enabled for this team.
   *
   * @param \Drupal\contacts_events_teams\Entity\TeamInterface $team
   *   The team to check the settings for.
   *
   * @return bool
   *   TRUE if the team email is enabled, FALSE otherwise.
   */
  protected function applicationTeamEmailEnabled(TeamInterface $team): bool {
    if ($this->teamSpecificOverride($team)) {
      return (bool) $team->get('application_request_team_enabled')->value;
    }

    // Otherwise use the default setting.
    return (bool) $this->config->get('emails.application_request_team.enabled');
  }

}

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

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