![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/IntegrationsBundle/Migration/ |
<?php declare(strict_types=1); namespace Mautic\IntegrationsBundle\Migration; use Doctrine\DBAL\Schema\Schema; use Doctrine\ORM\EntityManager; abstract class AbstractMigration implements MigrationInterface { /** * @var string[] */ private array $queries = []; public function __construct( protected EntityManager $entityManager, protected string $tablePrefix ) { } public function shouldExecute(): bool { return $this->isApplicable($this->entityManager->getConnection()->createSchemaManager()->introspectSchema()); } /** * @throws \Doctrine\DBAL\Exception */ public function execute(): void { $this->up(); if (!$this->queries) { return; } $connection = $this->entityManager->getConnection(); foreach ($this->queries as $sql) { $stmt = $connection->prepare($sql); $stmt->executeStatement(); } } /** * Generate the ALTER TABLE query that adds the foreign key. * * @param string[] $columns * @param string[] $referenceColumns * @param string $suffix usually a 'ON DELETE ...' statement */ protected function generateAlterTableForeignKeyStatement( string $table, array $columns, string $referenceTable, array $referenceColumns, string $suffix = '' ): string { return "ALTER TABLE {$this->concatPrefix($table)} ADD CONSTRAINT {$this->generatePropertyName($table, 'fk', $columns)} FOREIGN KEY ({$this->columnsToString($columns)}) REFERENCES {$this->concatPrefix($referenceTable)} ({$this->columnsToString($referenceColumns)}) {$suffix} "; } /** * @param string[] $columns */ protected function generateIndexStatement(string $table, array $columns): string { return "INDEX {$this->generatePropertyName($table, 'idx', $columns)} ({$this->columnsToString($columns)})"; } /** * @param string[] $columns */ protected function columnsToString(array $columns): string { return implode(',', $columns); } /** * Generate the name for the property. * * This method was copied from AbstractMauticMigration. * * @param string[] $columnNames */ protected function generatePropertyName(string $table, string $type, array $columnNames): string { $columnNames = array_merge([$this->tablePrefix.$table], $columnNames); $hash = implode( '', array_map( fn ($column): string => dechex(crc32($column)), $columnNames ) ); return substr(strtoupper($type.'_'.$hash), 0, 63); } protected function addSql(string $sql): void { $this->queries[] = $sql; } /** * Concatenates table/index prefix to the provided name. */ protected function concatPrefix(string $name): string { return $this->tablePrefix.$name; } /** * Define in the child migration whether the migration should be executed. * Check if the migration is applied in the schema already. */ abstract protected function isApplicable(Schema $schema): bool; /** * Define queries for migration up. */ abstract protected function up(): void; }