vendor/shopware/core/Checkout/Cart/CartException.php line 49

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Cart;
  3. use Shopware\Core\Checkout\Cart\Error\ErrorCollection;
  4. use Shopware\Core\Checkout\Cart\Exception\CartTokenNotFoundException;
  5. use Shopware\Core\Checkout\Cart\Exception\CustomerNotLoggedInException;
  6. use Shopware\Core\Checkout\Cart\Exception\InvalidCartException;
  7. use Shopware\Core\Framework\Feature;
  8. use Shopware\Core\Framework\HttpException;
  9. use Symfony\Component\HttpFoundation\Response;
  10. class CartException extends HttpException
  11. {
  12.     public const DESERIALIZE_FAILED_CODE 'CHECKOUT__CART_DESERIALIZE_FAILED';
  13.     public const TOKEN_NOT_FOUND_CODE 'CHECKOUT__CART_TOKEN_NOT_FOUND';
  14.     public const CUSTOMER_NOT_LOGGED_IN_CODE 'CHECKOUT__CUSTOMER_NOT_LOGGED_IN';
  15.     public const INSUFFICIENT_PERMISSION_CODE 'CHECKOUT__INSUFFICIENT_PERMISSION';
  16.     public const CART_INVALID_CODE 'CHECKOUT__CART_INVALID';
  17.     public const CART_INVALID_LINE_ITEM_PAYLOAD_CODE 'CHECKOUT__CART_INVALID_LINE_ITEM_PAYLOAD';
  18.     public const CART_INVALID_LINE_ITEM_QUANTITY_CODE 'CHECKOUT__CART_INVALID_LINE_ITEM_QUANTITY';
  19.     public const CART_LINE_ITEM_NOT_FOUND_CODE 'CHECKOUT__CART_LINE_ITEM_NOT_FOUND';
  20.     public const CART_LINE_ITEM_NOT_REMOVABLE_CODE 'CHECKOUT__CART_LINE_ITEM_NOT_REMOVABLE';
  21.     public const CART_LINE_ITEM_NOT_STACKABLE_CODE 'CHECKOUT__CART_LINE_ITEM_NOT_STACKABLE';
  22.     public const CART_LINE_ITEM_TYPE_NOT_SUPPORTED_CODE 'CHECKOUT__CART_LINE_ITEM_TYPE_NOT_SUPPORTED';
  23.     public const CART_MISSING_LINE_ITEM_PRICE_CODE 'CHECKOUT__CART_MISSING_LINE_ITEM_PRICE';
  24.     public const CART_INVALID_PRICE_DEFINITION_CODE 'CHECKOUT__CART_MISSING_PRICE_DEFINITION';
  25.     public const CART_MIXED_LINE_ITEM_TYPE_CODE 'CHECKOUT__CART_MIXED_LINE_ITEM_TYPE';
  26.     public const CART_PAYLOAD_KEY_NOT_FOUND_CODE 'CHECKOUT__CART_PAYLOAD_KEY_NOT_FOUND';
  27.     public static function deserializeFailed(): self
  28.     {
  29.         return new self(
  30.             Response::HTTP_BAD_REQUEST,
  31.             self::DESERIALIZE_FAILED_CODE,
  32.             'Failed to deserialize cart.'
  33.         );
  34.     }
  35.     public static function tokenNotFound(string $token): self
  36.     {
  37.         return new CartTokenNotFoundException($token);
  38. //        @deprecated tag:v6.5.0 - Remove above line and use line below instead
  39. //        return new CartTokenNotFoundException(Response::HTTP_NOT_FOUND, self::TOKEN_NOT_FOUND_CODE, 'Cart with token {{ token }} not found.', ['token' => $token]);
  40.     }
  41.     public static function customerNotLoggedIn(): self
  42.     {
  43.         return new CustomerNotLoggedInException();
  44. //        @deprecated tag:v6.5.0 - Remove above line and use line below instead
  45. //        return new CustomerNotLoggedInException(
  46. //            Response::HTTP_FORBIDDEN,
  47. //            self::CUSTOMER_NOT_LOGGED_IN_CODE,
  48. //            'Customer is not logged in.'
  49. //        );
  50.     }
  51.     public static function insufficientPermission(): self
  52.     {
  53.         return new self(
  54.             Response::HTTP_FORBIDDEN,
  55.             self::INSUFFICIENT_PERMISSION_CODE,
  56.             'Insufficient permission.'
  57.         );
  58.     }
  59.     /**
  60.      * @return CartException|InvalidCartException
  61.      */
  62.     public static function invalidCart(ErrorCollection $errors)
  63.     {
  64.         if (!Feature::isActive('v6.5.0.0')) {
  65.             return new InvalidCartException($errors);
  66.         }
  67.         $message = [];
  68.         foreach ($errors as $error) {
  69.             $message[] = $error->getId() . ': ' $error->getMessage();
  70.         }
  71.         return new InvalidCartException(
  72.             Response::HTTP_INTERNAL_SERVER_ERROR,
  73.             self::CART_INVALID_CODE,
  74.             'The cart is invalid, got {{ errorCount }} error(s): {{ errors }}',
  75.             ['errorCount' => $errors->count(), 'errors' => implode(\PHP_EOL$message)]
  76.         );
  77.     }
  78.     public static function invalidChildQuantity(int $childQuantityint $parentQuantity): self
  79.     {
  80.         return new self(
  81.             Response::HTTP_BAD_REQUEST,
  82.             self::CART_INVALID_LINE_ITEM_QUANTITY_CODE,
  83.             'The quantity of a child "{{ childQuantity }}" must be a multiple of the parent quantity "{{ parentQuantity }}"',
  84.             ['childQuantity' => $childQuantity'parentQuantity' => $parentQuantity]
  85.         );
  86.     }
  87.     public static function invalidPayload(string $keystring $id): CartException
  88.     {
  89.         return new self(
  90.             Response::HTTP_BAD_REQUEST,
  91.             self::CART_INVALID_LINE_ITEM_PAYLOAD_CODE,
  92.             'Unable to save payload with key `{{ key }}` on line item `{{ id }}`. Only scalar data types are allowed.',
  93.             ['key' => $key'id' => $id]
  94.         );
  95.     }
  96.     public static function invalidQuantity(int $quantity): self
  97.     {
  98.         return new self(
  99.             Response::HTTP_BAD_REQUEST,
  100.             self::CART_INVALID_LINE_ITEM_QUANTITY_CODE,
  101.             'The quantity must be a positive integer. Given: "{{ quantity }}"',
  102.             ['quantity' => $quantity]
  103.         );
  104.     }
  105.     public static function lineItemNotFound(string $id): self
  106.     {
  107.         return new self(
  108.             Response::HTTP_NOT_FOUND,
  109.             self::CART_LINE_ITEM_NOT_FOUND_CODE,
  110.             'Line item with identifier {{ id }} not found.',
  111.             ['id' => $id]
  112.         );
  113.     }
  114.     public static function lineItemNotRemovable(string $id): self
  115.     {
  116.         return new self(
  117.             Response::HTTP_BAD_REQUEST,
  118.             self::CART_LINE_ITEM_NOT_REMOVABLE_CODE,
  119.             'Line item with identifier {{ id }} is not removable.',
  120.             ['id' => $id]
  121.         );
  122.     }
  123.     public static function lineItemNotStackable(string $id): self
  124.     {
  125.         return new self(
  126.             Response::HTTP_BAD_REQUEST,
  127.             self::CART_LINE_ITEM_NOT_STACKABLE_CODE,
  128.             'Line item with identifier "{{ id }}" is not stackable and the quantity cannot be changed.',
  129.             ['id' => $id]
  130.         );
  131.     }
  132.     public static function lineItemTypeNotSupported(string $type): self
  133.     {
  134.         return new self(
  135.             Response::HTTP_BAD_REQUEST,
  136.             self::CART_LINE_ITEM_TYPE_NOT_SUPPORTED_CODE,
  137.             'Line item type "{{ type }}" is not supported.',
  138.             ['type' => $type]
  139.         );
  140.     }
  141.     public static function missingLineItemPrice(string $id): self
  142.     {
  143.         return new self(
  144.             Response::HTTP_BAD_REQUEST,
  145.             self::CART_MISSING_LINE_ITEM_PRICE_CODE,
  146.             'Line item with identifier {{ id }} has no price.',
  147.             ['id' => $id]
  148.         );
  149.     }
  150.     public static function invalidPriceDefinition(): self
  151.     {
  152.         return new self(
  153.             Response::HTTP_CONFLICT,
  154.             self::CART_INVALID_PRICE_DEFINITION_CODE,
  155.             'Provided price definition is invalid.'
  156.         );
  157.     }
  158.     public static function mixedLineItemType(string $idstring $type): self
  159.     {
  160.         return new self(
  161.             Response::HTTP_CONFLICT,
  162.             self::CART_MIXED_LINE_ITEM_TYPE_CODE,
  163.             'Line item with id {{ id }} already exists with different type {{ type }}.',
  164.             ['id' => $id'type' => $type]
  165.         );
  166.     }
  167.     public static function payloadKeyNotFound(string $keystring $lineItemId): self
  168.     {
  169.         return new self(
  170.             Response::HTTP_BAD_REQUEST,
  171.             self::CART_PAYLOAD_KEY_NOT_FOUND_CODE,
  172.             'Payload key "{{ key }}" in line item "{{ id }}" not found.',
  173.             ['key' => $key'id' => $lineItemId]
  174.         );
  175.     }
  176. }