Skip to content

Commit

Permalink
ImageType is more flexible
Browse files Browse the repository at this point in the history
  • Loading branch information
MartkCz committed Aug 12, 2022
1 parent 84cb52c commit 48413a5
Showing 1 changed file with 29 additions and 15 deletions.
44 changes: 29 additions & 15 deletions src/Bridge/Doctrine/ImageType.php
Expand Up @@ -5,6 +5,7 @@
use Contributte\Imagist\Database\DatabaseConverter;
use Contributte\Imagist\Database\DatabaseConverterInterface;
use Contributte\Imagist\Entity\ImageInterface;
use Contributte\Imagist\Entity\PersistentImage;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\ConversionException;
Expand All @@ -15,15 +16,17 @@
class ImageType extends StringType
{

private const TYPE = 'image';
private const DB_TYPE = 'db_image';

private DatabaseConverterInterface $databaseConverter;

/** @var class-string<PersistentImage> */
private string $className = PersistentImage::class;

private string $name = 'image';

public function getDatabaseConverter(): DatabaseConverterInterface
{
if (!isset($this->databaseConverter)) {
$this->databaseConverter = new DatabaseConverter();
$this->databaseConverter = new DatabaseConverter(true, $this->className);
}

return $this->databaseConverter;
Expand Down Expand Up @@ -64,9 +67,9 @@ public function convertToPHPValue($value, AbstractPlatform $platform) // phpcs:i
/**
* @inheritDoc
*/
public function getName()
public function getName(): string
{
return 'image';
return $this->name;
}

/**
Expand All @@ -78,26 +81,37 @@ public function requiresSQLCommentHint(AbstractPlatform $platform): bool
return true;
}

public static function register(Connection $connection): void
/**
* @param class-string<PersistentImage> $className
*/
public static function register(Connection $connection, string $name = 'image', string $dbName = 'db_image', string $className = PersistentImage::class): void
{
if (!$connection->getDatabasePlatform()->hasDoctrineTypeMappingFor(self::DB_TYPE)) {
self::registerType();
if (!$connection->getDatabasePlatform()->hasDoctrineTypeMappingFor($dbName)) {
self::registerType($name, $className);

$connection->getDatabasePlatform()->registerDoctrineTypeMapping(self::DB_TYPE, self::TYPE);
$connection->getDatabasePlatform()->registerDoctrineTypeMapping($dbName, $name);
}
}

public static function registerType(): void
/**
* @param class-string<PersistentImage> $className
*/
public static function registerType(string $name = 'image', string $className = PersistentImage::class): void
{
if (Type::hasType(self::TYPE)) {
$class = Type::getTypesMap()[self::TYPE];
if (Type::hasType($name)) {
$class = Type::getTypesMap()[$name];

if ($class !== static::class) {
throw new LogicException(
sprintf('Doctrine type %s is already registered for class %s', self::TYPE, $class)
sprintf('Doctrine type %s is already registered for class %s', $name, $class)
);
}
} else {
Type::addType(self::TYPE, static::class);
$self = new self();
$self->name = $name;
$self->className = $className;

self::getTypeRegistry()->register($name, $self);
}
}

Expand Down

0 comments on commit 48413a5

Please sign in to comment.