diff --git a/composer.json b/composer.json index bf85282..fa53c46 100644 --- a/composer.json +++ b/composer.json @@ -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", diff --git a/src/bundle/Migration/InstallSchemaMigration.php b/src/bundle/Migration/InstallSchemaMigration.php new file mode 100644 index 0000000..41bf034 --- /dev/null +++ b/src/bundle/Migration/InstallSchemaMigration.php @@ -0,0 +1,50 @@ +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'); + } + } +} diff --git a/src/bundle/Migration/sql/install-schema-mysql.sql b/src/bundle/Migration/sql/install-schema-mysql.sql new file mode 100644 index 0000000..b3c45a8 --- /dev/null +++ b/src/bundle/Migration/sql/install-schema-mysql.sql @@ -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; diff --git a/src/bundle/Migration/sql/install-schema-postgresql.sql b/src/bundle/Migration/sql/install-schema-postgresql.sql new file mode 100644 index 0000000..9424b74 --- /dev/null +++ b/src/bundle/Migration/sql/install-schema-postgresql.sql @@ -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)); +-- 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)); +-- 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; diff --git a/src/bundle/Migration/sql/install-schema-sqlite.sql b/src/bundle/Migration/sql/install-schema-sqlite.sql new file mode 100644 index 0000000..591ec3e --- /dev/null +++ b/src/bundle/Migration/sql/install-schema-sqlite.sql @@ -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); diff --git a/src/bundle/Resources/config/services/installer.yaml b/src/bundle/Resources/config/services/installer.yaml index f67941d..fd15d75 100644 --- a/src/bundle/Resources/config/services/installer.yaml +++ b/src/bundle/Resources/config/services/installer.yaml @@ -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 }