* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ declare(strict_types=1); namespace PrestaShop\PrestaShop\Core\Domain\Product\ValueObject; use PrestaShop\PrestaShop\Core\Domain\Product\Exception\ProductConstraintException; /** * Holds product condition value */ class ProductCondition { public const NEW = 'new'; public const USED = 'used'; public const REFURBISHED = 'refurbished'; /** * A list of available values */ public const AVAILABLE_CONDITIONS = [ self::NEW, self::USED, self::REFURBISHED, ]; /** * @var string */ private $value; /** * @param string $value */ public function __construct(string $value) { $this->assertValueIsAllowed($value); $this->value = $value; } /** * @return string */ public function getValue(): string { return $this->value; } /** * @param string $value * * @throws ProductConstraintException */ private function assertValueIsAllowed(string $value): void { if (!in_array($value, self::AVAILABLE_CONDITIONS, true)) { throw new ProductConstraintException( sprintf( 'Invalid product condition "%s". Allowed conditions are: "%s"', $value, implode(',', self::AVAILABLE_CONDITIONS) ), ProductConstraintException::INVALID_CONDITION ); } } }