You are here

public function LicenseExpire::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/LicenseExpire.php, line 63

Class

LicenseExpire
Provides the job type for expiring licenses.

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.');
  }
  if ($license
    ->getState()
    ->getId() != 'active') {
    return JobResult::failure('License is no longer active.');
  }
  try {

    // Set the license to expired. The plugin will take care of revoking it.
    $license->state = 'expired';
    $license
      ->save();
  } catch (Exception $exception) {
    return $result = JobResult::failure($exception
      ->getMessage());
  }

  // If the license was successfully expired, create and queue a job to send
  // a notification.
  // Use a different queue so a) they can be processed differently, and b)
  // so if the expiry queue is very full, it doesn't delay notifications.
  // We send the email from here rather than in the License entity, as if
  // something else chooses to expire a license (e.g. Commerce Recurring), it
  // may want to be in control of the messages it sends.
  $queue_storage = $this->entityTypeManager
    ->getStorage('advancedqueue_queue');

  /** @var \Drupal\advancedqueue\Entity\QueueInterface $queue */
  $queue = $queue_storage
    ->load('commerce_license_notify');
  $expire_notification_job = Job::create('commerce_license_expire_notify', [
    'license_id' => $license_id,
  ]);
  $queue
    ->enqueueJob($expire_notification_job);
  return JobResult::success();
}