commerce-8.x-2.8/modules/cart/src/CartSession.php
modules/cart/src/CartSession.php
<?php
namespace Drupal\commerce_cart;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
/**
* Default implementation of the cart session.
*/
class CartSession implements CartSessionInterface {
/**
* The session.
*
* @var \Symfony\Component\HttpFoundation\Session\SessionInterface
*/
protected $session;
/**
* Constructs a new CartSession object.
*
* @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session
* The session.
*/
public function __construct(SessionInterface $session) {
$this->session = $session;
}
/**
* {@inheritdoc}
*/
public function getCartIds($type = self::ACTIVE) {
$key = $this->getSessionKey($type);
return $this->session->get($key, []);
}
/**
* {@inheritdoc}
*/
public function addCartId($cart_id, $type = self::ACTIVE) {
$key = $this->getSessionKey($type);
$ids = $this->session->get($key, []);
$ids[] = $cart_id;
$this->session->set($key, array_unique($ids));
}
/**
* {@inheritdoc}
*/
public function hasCartId($cart_id, $type = self::ACTIVE) {
$key = $this->getSessionKey($type);
$ids = $this->session->get($key, []);
return in_array($cart_id, $ids);
}
/**
* {@inheritdoc}
*/
public function deleteCartId($cart_id, $type = self::ACTIVE) {
$key = $this->getSessionKey($type);
$ids = $this->session->get($key, []);
$ids = array_diff($ids, [$cart_id]);
if (!empty($ids)) {
$this->session->set($key, $ids);
}
else {
// Remove the empty list to allow the system to clean up empty sessions.
$this->session->remove($key);
}
}
/**
* Gets the session key for the given cart session type.
*
* @param string $type
* The cart session type.
*
* @return string
* The session key.
*
* @throws \InvalidArgumentException
* Thrown when the given $type is unknown.
*/
protected function getSessionKey($type) {
$keys = [
self::ACTIVE => 'commerce_cart_orders',
self::COMPLETED => 'commerce_cart_completed_orders',
];
if (!isset($keys[$type])) {
throw new \InvalidArgumentException(sprintf('Unknown cart session type "$s".', $type));
}
return $keys[$type];
}
}
