You are here

function uc_cart_cron in Ubercart 8.4

Same name and namespace in other branches
  1. 5 uc_cart/uc_cart.module \uc_cart_cron()
  2. 6.2 uc_cart/uc_cart.module \uc_cart_cron()
  3. 7.3 uc_cart/uc_cart.module \uc_cart_cron()

Implements hook_cron().

File

uc_cart/uc_cart.module, line 22
Handles all things concerning Ubercart's shopping cart.

Code

function uc_cart_cron() {
  $cart_manager = \Drupal::service('uc_cart.manager');
  $cart_config = \Drupal::config('uc_cart.settings');
  $connection = \Drupal::database();

  // Empty anonymous carts.
  $time = strtotime($cart_config
    ->get('anon_duration') . ' ' . $cart_config
    ->get('anon_unit') . ' ago');
  $result = $connection
    ->query('SELECT DISTINCT cart_id FROM {uc_cart_products} WHERE changed <= :changed', [
    ':changed' => $time,
  ]);
  foreach ($result as $row) {
    if (strlen($row->cart_id) >= 22) {
      $cart_manager
        ->emptyCart($row->cart_id);
    }
  }

  // Empty authenticated carts.
  $time = strtotime($cart_config
    ->get('auth_duration') . ' ' . $cart_config
    ->get('auth_unit') . ' ago');
  $result = $connection
    ->query('SELECT DISTINCT cart_id FROM {uc_cart_products} WHERE changed <= :changed', [
    ':changed' => $time,
  ]);
  foreach ($result as $row) {
    if (strlen($row->cart_id) < 22) {
      $cart_manager
        ->emptyCart($row->cart_id);
    }
  }

  // Update status of abandoned orders.
  $result = $connection
    ->query('SELECT order_id FROM {uc_orders} WHERE order_status = :status AND changed < :time', [
    ':status' => 'in_checkout',
    ':time' => \Drupal::time()
      ->getRequestTime() - CartInterface::ORDER_TIMEOUT,
  ])
    ->fetchCol();
  foreach ($result as $order_id) {
    Order::load($order_id)
      ->setStatusId('abandoned')
      ->save();
  }
}