Cron.php in Commerce Core 8.2
File
modules/cart/src/Cron.php
View source
<?php
namespace Drupal\commerce_cart;
use Drupal\commerce\Interval;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Queue\QueueFactory;
class Cron implements CronInterface {
protected $orderStorage;
protected $orderTypeStorage;
protected $queue;
public function __construct(EntityTypeManagerInterface $entity_type_manager, QueueFactory $queue_factory) {
$this->orderStorage = $entity_type_manager
->getStorage('commerce_order');
$this->orderTypeStorage = $entity_type_manager
->getStorage('commerce_order_type');
$this->queue = $queue_factory
->get('commerce_cart_expiration');
}
public function run() {
$order_types = $this->orderTypeStorage
->loadMultiple();
foreach ($order_types as $order_type) {
$cart_expiration = $order_type
->getThirdPartySetting('commerce_cart', 'cart_expiration');
if (empty($cart_expiration)) {
continue;
}
$interval = new Interval($cart_expiration['number'], $cart_expiration['unit']);
$all_order_ids = $this
->getOrderIds($order_type
->id(), $interval);
foreach (array_chunk($all_order_ids, 50) as $order_ids) {
$this->queue
->createItem($order_ids);
}
}
}
protected function getOrderIds($order_type_id, Interval $interval) {
$current_date = new DrupalDateTime('now');
$expiration_date = $interval
->subtract($current_date);
$ids = $this->orderStorage
->getQuery()
->condition('type', $order_type_id)
->condition('changed', $expiration_date
->getTimestamp(), '<=')
->condition('cart', TRUE)
->range(0, 250)
->accessCheck(FALSE)
->addTag('commerce_cart_expiration')
->execute();
return $ids;
}
}
Classes
Name |
Description |
Cron |
Default cron implementation. |