contacts_subscriptions-1.x-dev/src/SubscriptionsMail.php

src/SubscriptionsMail.php
<?php

namespace Drupal\contacts_subscriptions;

use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Url;
use Drupal\Core\Utility\Token;

/**
 * Hook_mail implementation for Contacts Subscription.
 */
class SubscriptionsMail {

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * The date formatter.
   *
   * @var \Drupal\Core\Datetime\DateFormatterInterface
   */
  protected DateFormatterInterface $dateFormatter;

  /**
   * The renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected RendererInterface $renderer;

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

  /**
   * The subscription helper service.
   *
   * @var \Drupal\contacts_subscriptions\SubscriptionsHelper
   */
  protected SubscriptionsHelper $subscriptionsHelper;

  /**
   * Constructs a SubscriptionsMail object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   The date formatter.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer.
   * @param \Drupal\Core\Utility\Token $token
   *   The token service.
   * @param \Drupal\contacts_subscriptions\SubscriptionsHelper $subscriptions_helper
   *   The subscriptions helper service.
   */
  public function __construct(
    EntityTypeManagerInterface $entity_type_manager,
    DateFormatterInterface $date_formatter,
    RendererInterface $renderer,
    Token $token,
    SubscriptionsHelper $subscriptions_helper
  ) {
    $this->entityTypeManager = $entity_type_manager;
    $this->dateFormatter = $date_formatter;
    $this->renderer = $renderer;
    $this->token = $token;
    $this->subscriptionsHelper = $subscriptions_helper;
  }

  /**
   * Method description.
   */
  public function paymentSuccess(array &$message, array $params) {
    $message['subject'] = $this->token->replace('Thank you for your membership payment at [site:name]');

    $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;';
    $message['headers']['Content-Transfer-Encoding'] = '8Bit';

    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
    $order = $params['order'];
    $subscription = $this->subscriptionsHelper->getSubscriptionFromOrder($order);

    $body = [
      '#theme' => 'contacts_subscription_mail_payment_success',
      '#order_entity' => $order,
      '#subscription_entity' => $subscription,
      '#subscription' => [],
    ];

    $body['#subscription']['type'] = $subscription->getProduct(FALSE, FALSE)->label();

    if ($date = $subscription->getRenewalDate(FALSE)) {
      $body['#subscription']['renewal_date'] = $this->dateFormatter->format(
        $date->getTimestamp(),
        'medium_date'
      );
    }

    if ($billing_profile = $order->getBillingProfile()) {
      $body['#billing_information'] = $this->entityTypeManager
        ->getViewBuilder('profile')
        ->view($billing_profile);
    }

    /** @var \Drupal\commerce_payment\Entity\PaymentMethodInterface $payment_method */
    $payment_method = $order->get('payment_method')->entity;
    if ($payment_method) {
      $body['#payment_method'] = [
        '#markup' => $payment_method->label(),
      ];
    }

    $message['body'] = [$this->renderer->render($body)];
  }

  /**
   * Method description.
   */
  public function paymentFailure(array &$message, array $params) {
    $message['subject'] = $this->token->replace('Your payment has failed');

    $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;';
    $message['headers']['Content-Transfer-Encoding'] = '8Bit';

    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
    $order = $params['order'];
    $subscription = $this->subscriptionsHelper->getSubscriptionFromOrder($order);

    $body = [
      '#theme' => 'contacts_subscription_mail_payment_failure',
      '#order_entity' => $order,
      '#subscription_entity' => $subscription,
      '#subscription' => [],
    ];

    $body['#subscription']['type'] = $subscription->getProduct(FALSE, FALSE)->label();
    $body['#subscription']['renewal_date'] = $this->dateFormatter->format(
      $order->getCreatedTime(),
      'medium_date'
    );
    $body['#subscription']['expiration_date'] = $this->dateFormatter->format(
      DrupalDateTime::createFromTimestamp($order->getCreatedTime())
        // @todo Pull this from configuration.
        ->add(new \DateInterval('P1M'))->getTimestamp(),
      'medium_date'
    );

    $payment_url = Url::fromRoute(
      'contacts_subscriptions.subscription_payment',
      ['user' => $subscription->getOwnerId()],
    );
    $body['#subscription']['renewal_link'] = Url::fromRoute(
      'user.login',
      [],
      ['query' => ['destination' => $payment_url->toString()]],
    )->setAbsolute(TRUE)->toString();

    if ($billing_profile = $order->getBillingProfile()) {
      $body['#billing_information'] = $this->entityTypeManager
        ->getViewBuilder('profile')
        ->view($billing_profile);
    }

    /** @var \Drupal\commerce_payment\Entity\PaymentMethodInterface $payment_method */
    $payment_method = $order->get('payment_method')->entity;
    if ($payment_method) {
      $body['#payment_method'] = [
        '#markup' => $payment_method->label(),
      ];
    }

    $message['body'] = [$this->renderer->render($body)];
  }

}

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

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