You are here

function uc_role_cron in Ubercart 8.4

Implements hook_cron().

File

uc_role/uc_role.module, line 43
Grants roles upon accepted payment of products.

Code

function uc_role_cron() {
  $roles_config = \Drupal::config('uc_role.settings');
  $reminder_granularity = $roles_config
    ->get('reminder_granularity');
  $reminder_qty = $roles_config
    ->get('reminder_length');
  $connection = \Drupal::database();
  $query = $connection
    ->select('uc_roles_expirations', 'e')
    ->fields('e');
  $condition = new Condition('OR');
  $condition
    ->condition('e.expiration', \Drupal::time()
    ->getRequestTime(), '<=');
  if ($reminder_granularity != 'never') {
    $and = new Condition('AND');
    $condition
      ->condition($and
      ->isNull('e.notified')
      ->condition('e.expiration', _uc_role_get_expiration($reminder_qty, $reminder_granularity, \Drupal::time()
      ->getRequestTime()), '<='));
  }
  $query
    ->condition($condition);
  $result = $query
    ->execute();
  foreach ($result as $expiration) {
    $account = User::load($expiration
      ->id());

    // Cleanup if user or role was deleted already.
    if (!$account || !in_array($expiration->rid, array_keys($account->getRoles))) {
      uc_role_delete($expiration, $expiration->rid, TRUE);
    }
    elseif ($expiration->expiration <= \Drupal::time()
      ->getRequestTime()) {

      /* rules_invoke_event('uc_role_notify_revoke', $account, $expiration); */
      $event = new NotifyRevokeEvent($account, $expiration);
      \Drupal::service('event_dispatcher')
        ->dispatch($event::EVENT_NAME, $event);
      uc_role_revoke($account, $expiration->rid);
    }
    elseif ($reminder_granularity != 'never') {

      /* rules_invoke_event('uc_role_notify_reminder', $account, $expiration); */
      $event = new NotifyReminderEvent($account, $expiration);
      \Drupal::service('event_dispatcher')
        ->dispatch($event::EVENT_NAME, $event);
      $connection
        ->update('uc_roles_expirations')
        ->fields([
        'notified' => 1,
      ])
        ->condition('uid', $account
        ->id())
        ->condition('rid', $expiration->rid)
        ->execute();
    }
  }
}