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();
}
}
}