From d9c0f7d055ef9f3d7f5a3bda164aa024eeb7afe6 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 15 Feb 2023 17:03:14 +0200 Subject: [PATCH] uuid generator --- .../Core/Utils/Id/DefaultRecordIdGenerator.php | 12 +++++++++++- application/Espo/Core/Utils/Util.php | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php b/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php index ad90e50731..7358c785c3 100644 --- a/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php +++ b/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php @@ -29,6 +29,7 @@ namespace Espo\Core\Utils\Id; +use Espo\Core\Utils\Metadata; use Espo\Core\Utils\Util; /** @@ -36,8 +37,17 @@ use Espo\Core\Utils\Util; */ class DefaultRecordIdGenerator implements RecordIdGenerator { + private bool $isUuid; + + public function __construct(Metadata $metadata) + { + $this->isUuid = $metadata->get(['app', 'recordId', 'dbType']) === 'uuid'; + } + public function generate(): string { - return Util::generateId(); + return $this->isUuid ? + Util::generateUuid4() : + Util::generateId(); } } diff --git a/application/Espo/Core/Utils/Util.php b/application/Espo/Core/Utils/Util.php index fb87b1d286..8524cb5821 100644 --- a/application/Espo/Core/Utils/Util.php +++ b/application/Espo/Core/Utils/Util.php @@ -630,6 +630,21 @@ class Util return true; } + /** + * Generate a UUID v4. + */ + public static function generateUuid4(): string + { + try { + $hex = bin2hex(random_bytes(16)); + } + catch (\Exception $e) { + throw new \RuntimeException("Could not generate UUID."); + } + + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split($hex, 4)); + } + /** * Generate a 17-character hex ID. */