You are here

public function LicenseExpireNotify::process in Commerce License 8.2

Processes the given job.

Parameters

\Drupal\advancedqueue\Job $job: The job.

Return value

\Drupal\advancedqueue\JobResult The job result.

Overrides JobTypeInterface::process

File

src/Plugin/AdvancedQueue/JobType/LicenseExpireNotify.php, line 93

Class

LicenseExpireNotify
Provides the job type to send an email notification of license expiry.

Namespace

Drupal\commerce_license\Plugin\AdvancedQueue\JobType

Code

public function process(Job $job) {
  $license_id = $job
    ->getPayload()['license_id'];
  $license_storage = $this->entityTypeManager
    ->getStorage('commerce_license');

  /** @var \Drupal\commerce_license\Entity\License $license */
  $license = $license_storage
    ->load($license_id);
  if (!$license) {
    return JobResult::failure('License not found.');
  }
  $owner = $license
    ->getOwner();
  if ($owner
    ->isAnonymous()) {
    return JobResult::failure('License owner not found.');
  }
  $to = $owner
    ->getEmail();

  // TODO: get the email address from the store that sold the product --
  // for which we'd a method on the license entity that queries for the
  // order item that refers to it.
  // this is quick temporary hack.
  $from = \Drupal::config('system.site')
    ->get('mail');
  $params = [
    'headers' => [
      'Content-Type' => 'text/html; charset=UTF-8;',
      'Content-Transfer-Encoding' => '8Bit',
    ],
    'from' => $from,
    'subject' => $this
      ->t('Your purchase of @license-label has now expired', [
      '@license-label' => $license
        ->label(),
    ]),
    'license' => $license,
  ];
  $build = [
    '#theme' => 'commerce_license_expire',
    '#license_entity' => $license,
  ];

  // Allow for the purchased entity to have been deleted.
  if ($purchased_entity = $license
    ->getPurchasedEntity()) {
    $build += [
      '#purchased_entity' => $purchased_entity,
      '#purchased_entity_url' => $purchased_entity
        ->toUrl()
        ->setAbsolute(),
    ];
  }
  $params['body'] = $this->renderer
    ->executeInRenderContext(new RenderContext(), function () use ($build) {
    return $this->renderer
      ->render($build);
  });
  $langcode = $owner
    ->getPreferredLangcode();
  $message = $this->pluginManagerMail
    ->mail('commerce_license', 'license_expire', $to, $langcode, $params);
  if ($message['result']) {
    return JobResult::success();
  }
  else {
    return JobResult::failure('Unable to send expiry notification mail.');
  }
}