''])] private string $filename = ''; public function __construct( /** * The stored object associated with this version. */ #[ORM\ManyToOne(targetEntity: StoredObject::class, inversedBy: 'versions')] #[ORM\JoinColumn(name: 'stored_object_id', nullable: false)] private StoredObject $storedObject, /** * The incremental version. */ #[ORM\Column(name: 'version', type: \Doctrine\DBAL\Types\Types::INTEGER, options: ['default' => 0])] private int $version = 0, /** * vector for encryption. * * @var int[] */ #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, name: 'iv')] private array $iv = [], /** * Key infos for document encryption. * * @var array */ #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, name: 'key')] private array $keyInfos = [], /** * type of the document. */ #[ORM\Column(type: \Doctrine\DBAL\Types\Types::TEXT, name: 'type', options: ['default' => ''])] private string $type = '', ?string $filename = null, ) { $this->filename = $filename ?? self::generateFilename($this); } public static function generateFilename(StoredObjectVersion $storedObjectVersion): string { try { $suffix = base_convert(bin2hex(random_bytes(8)), 16, 36); } catch (RandomException) { $suffix = uniqid(more_entropy: true); } return $storedObjectVersion->getStoredObject()->getPrefix().'/'.$suffix; } public function getFilename(): string { return $this->filename; } public function getId(): ?int { return $this->id; } public function getIv(): array { return $this->iv; } public function getKeyInfos(): array { return $this->keyInfos; } public function getStoredObject(): StoredObject { return $this->storedObject; } public function getType(): string { return $this->type; } public function getVersion(): int { return $this->version; } }