mautic / app /bundles /LeadBundle /Field /SchemaDefinition.php
chrisbryan17's picture
Upload folder using huggingface_hub
d2897cd verified
<?php
declare(strict_types=1);
namespace Mautic\LeadBundle\Field;
use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder;
class SchemaDefinition
{
/**
* Max length of VARCHAR fields.
* Fields: charLengthLimit.
*/
public const MAX_VARCHAR_LENGTH = 191;
/**
* Get the MySQL database type based on the field type
* Use a static function so that it's accessible from DoctrineSubscriber
* without causing a circular service injection error.
*/
public static function getSchemaDefinition(string $alias, string $type, bool $isUnique = false, int $length = null): array
{
$options = ['notnull' => false];
// Unique is always a string in order to control index length
if ($isUnique) {
return [
'name' => $alias,
'type' => 'string',
'options' => $options,
];
}
switch ($type) {
case 'datetime':
case 'date':
case 'time':
case 'boolean':
$schemaType = $type;
break;
case 'number':
$schemaType = 'float';
break;
case 'timezone':
case 'locale':
case 'country':
case 'email':
case 'lookup':
case 'select':
case 'region':
case 'tel':
case 'url':
$schemaType = 'string';
$options['length'] = $length;
break;
case 'text':
$schemaType = (str_contains($alias, 'description')) ? 'text' : 'string';
$options['length'] = $length;
break;
case 'multiselect':
$schemaType = 'text';
$options['length'] = 65535;
break;
case 'html':
default:
$schemaType = 'text';
}
if ('string' === $schemaType && empty($options['length'])) {
$options['length'] = self::MAX_VARCHAR_LENGTH;
}
return [
'name' => $alias,
'type' => $schemaType,
'options' => $options,
];
}
/**
* @param mixed[] $schemaDefinition
*/
public static function getFieldCharLengthLimit(array $schemaDefinition): ?int
{
$length = $schemaDefinition['options']['length'] ?? null;
$type = $schemaDefinition['type'] ?? null;
return match ($type) {
'string' => $length ?? ClassMetadataBuilder::MAX_VARCHAR_INDEXED_LENGTH,
'text' => $length,
default => null,
};
}
/**
* Get the MySQL database type based on the field type.
*/
public function getSchemaDefinitionNonStatic(string $alias, string $type, bool $isUnique = false, int $length = null): array
{
return self::getSchemaDefinition($alias, $type, $isUnique, $length);
}
}