Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"php": "^7.4 || ^8.0",
"ibexa/core": "~4.6.0@dev",
"ibexa/content-forms": "~4.6.0@dev",
"ibexa/doctrine-migrations": "dev-feat/doctrine-migrations",
"ibexa/notifications": "~4.6.0@dev",
"jms/translation-bundle": "^1.5",
"symfony/dependency-injection": "^5.0",
Expand Down
50 changes: 50 additions & 0 deletions src/bundle/Migration/InstallSchemaMigration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);

namespace Ibexa\Bundle\User\Migration;

use DateTimeImmutable;
use Doctrine\DBAL\Schema\Schema;
use Ibexa\Contracts\DoctrineMigrations\Migrations\AbstractSqlMigration;
use Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationInterface;
use Ibexa\DoctrineMigrations\Migration\SqlPlatform;

final class InstallSchemaMigration extends AbstractSqlMigration implements IbexaMigrationInterface
{
public function getDescription(): string
{
return 'Creates the ibexa/user database schema';
}

public static function getTargetVersion(): string
{
return '4.6.0';
}

public static function getCreationDate(): DateTimeImmutable
{
return new DateTimeImmutable('2026-07-20 00:00:00');
}

public function up(Schema $schema): void
{
$this->abortIfUnsupportedPlatform(SqlPlatform::MYSQL, SqlPlatform::POSTGRESQL, SqlPlatform::SQLITE);

if ($schema->hasTable('ibexa_user_invitations')) {
return;
}

if ($this->isMySQL()) {
$this->addSqlFile(__DIR__ . '/sql/install-schema-mysql.sql');
} elseif ($this->isPostgreSQL()) {
$this->addSqlFile(__DIR__ . '/sql/install-schema-postgresql.sql');
} elseif ($this->isSqlite()) {
$this->addSqlFile(__DIR__ . '/sql/install-schema-sqlite.sql');
}
}
}
5 changes: 5 additions & 0 deletions src/bundle/Migration/sql/install-schema-mysql.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE TABLE ibexa_user_invitations (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(255) NOT NULL, site_access_name VARCHAR(255) NOT NULL, hash VARCHAR(255) NOT NULL, creation_date INT NOT NULL, used TINYINT(1) DEFAULT '0' NOT NULL, INDEX ibexa_user_invitations_email_idx (email), INDEX ibexa_user_invitations_hash_idx (hash), UNIQUE INDEX ibexa_user_invitations_email_uindex (email(191)), UNIQUE INDEX ibexa_user_invitations_hash_uindex (hash(191)), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB;
-- ibexa:sql-statement-separator
CREATE TABLE ibexa_user_invitations_assignments (id INT AUTO_INCREMENT NOT NULL, invitation_id INT NOT NULL, user_group_id INT DEFAULT NULL, role_id INT DEFAULT NULL, limitation_type VARCHAR(255) DEFAULT NULL, limitation_value VARCHAR(255) DEFAULT NULL, INDEX IDX_DA5A7872A35D7AF0 (invitation_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB;
-- ibexa:sql-statement-separator
ALTER TABLE ibexa_user_invitations_assignments ADD CONSTRAINT ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitations (id) ON UPDATE CASCADE ON DELETE CASCADE;
15 changes: 15 additions & 0 deletions src/bundle/Migration/sql/install-schema-postgresql.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
CREATE TABLE ibexa_user_invitations (id SERIAL NOT NULL, email VARCHAR(255) NOT NULL, site_access_name VARCHAR(255) NOT NULL, hash VARCHAR(255) NOT NULL, creation_date INT NOT NULL, used BOOLEAN DEFAULT 'false' NOT NULL, PRIMARY KEY(id));

Check warning on line 1 in src/bundle/Migration/sql/install-schema-postgresql.sql

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use VARCHAR2 instead of VARCHAR.

See more on https://sonarcloud.io/project/issues?id=ibexa_user&issues=AZ-JUBnj8vBDyLa2xJp5&open=AZ-JUBnj8vBDyLa2xJp5&pullRequest=128

Check warning on line 1 in src/bundle/Migration/sql/install-schema-postgresql.sql

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use VARCHAR2 instead of VARCHAR.

See more on https://sonarcloud.io/project/issues?id=ibexa_user&issues=AZ-JUBnj8vBDyLa2xJp6&open=AZ-JUBnj8vBDyLa2xJp6&pullRequest=128

Check warning on line 1 in src/bundle/Migration/sql/install-schema-postgresql.sql

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use VARCHAR2 instead of VARCHAR.

See more on https://sonarcloud.io/project/issues?id=ibexa_user&issues=AZ-JUBnj8vBDyLa2xJp4&open=AZ-JUBnj8vBDyLa2xJp4&pullRequest=128
-- ibexa:sql-statement-separator
CREATE INDEX ibexa_user_invitations_email_idx ON ibexa_user_invitations (email);
-- ibexa:sql-statement-separator
CREATE INDEX ibexa_user_invitations_hash_idx ON ibexa_user_invitations (hash);
-- ibexa:sql-statement-separator
CREATE UNIQUE INDEX ibexa_user_invitations_email_uindex ON ibexa_user_invitations (email);
-- ibexa:sql-statement-separator
CREATE UNIQUE INDEX ibexa_user_invitations_hash_uindex ON ibexa_user_invitations (hash);
-- ibexa:sql-statement-separator
CREATE TABLE ibexa_user_invitations_assignments (id SERIAL NOT NULL, invitation_id INT NOT NULL, user_group_id INT DEFAULT NULL, role_id INT DEFAULT NULL, limitation_type VARCHAR(255) DEFAULT NULL, limitation_value VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id));

Check warning on line 11 in src/bundle/Migration/sql/install-schema-postgresql.sql

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use VARCHAR2 instead of VARCHAR.

See more on https://sonarcloud.io/project/issues?id=ibexa_user&issues=AZ-JUBnj8vBDyLa2xJp8&open=AZ-JUBnj8vBDyLa2xJp8&pullRequest=128

Check warning on line 11 in src/bundle/Migration/sql/install-schema-postgresql.sql

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use VARCHAR2 instead of VARCHAR.

See more on https://sonarcloud.io/project/issues?id=ibexa_user&issues=AZ-JUBnj8vBDyLa2xJp7&open=AZ-JUBnj8vBDyLa2xJp7&pullRequest=128
-- ibexa:sql-statement-separator
CREATE INDEX IDX_DA5A7872A35D7AF0 ON ibexa_user_invitations_assignments (invitation_id);
-- ibexa:sql-statement-separator
ALTER TABLE ibexa_user_invitations_assignments ADD CONSTRAINT ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitations (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
13 changes: 13 additions & 0 deletions src/bundle/Migration/sql/install-schema-sqlite.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
CREATE TABLE ibexa_user_invitations (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, email VARCHAR(255) NOT NULL, site_access_name VARCHAR(255) NOT NULL, hash VARCHAR(255) NOT NULL, creation_date INTEGER NOT NULL, used BOOLEAN DEFAULT '0' NOT NULL);
-- ibexa:sql-statement-separator
CREATE INDEX ibexa_user_invitations_email_idx ON ibexa_user_invitations (email);
-- ibexa:sql-statement-separator
CREATE INDEX ibexa_user_invitations_hash_idx ON ibexa_user_invitations (hash);
-- ibexa:sql-statement-separator
CREATE UNIQUE INDEX ibexa_user_invitations_email_uindex ON ibexa_user_invitations (email);
-- ibexa:sql-statement-separator
CREATE UNIQUE INDEX ibexa_user_invitations_hash_uindex ON ibexa_user_invitations (hash);
-- ibexa:sql-statement-separator
CREATE TABLE ibexa_user_invitations_assignments (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, invitation_id INTEGER NOT NULL, user_group_id INTEGER DEFAULT NULL, role_id INTEGER DEFAULT NULL, limitation_type VARCHAR(255) DEFAULT NULL, limitation_value VARCHAR(255) DEFAULT NULL, CONSTRAINT ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitations (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE);
-- ibexa:sql-statement-separator
CREATE INDEX IDX_DA5A7872A35D7AF0 ON ibexa_user_invitations_assignments (invitation_id);
8 changes: 8 additions & 0 deletions src/bundle/Resources/config/services/installer.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,11 @@ services:
public: false
arguments:
- '@=service("kernel").locateResource("@IbexaUserBundle/Resources/config/storage/schema.yaml")'

Ibexa\Bundle\User\Migration\InstallSchemaMigration:
autowire: true
public: false
arguments:
$connection: '@ibexa.persistence.connection'
tags:
- { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG }
Loading