commit
95625a93a8
@ -0,0 +1,106 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema; |
||||||
|
use Doctrine\DBAL\Connection; |
||||||
|
use Psr\Log\LoggerInterface; |
||||||
|
|
||||||
|
/** |
||||||
|
* Priority migrations are database changes that *need* to happen before anything else |
||||||
|
* because the related Entities in the code used for the migration already use |
||||||
|
* the new structure (entities cannot be changed on the fly). |
||||||
|
* An instance of this class is called at the beginning of any migration process. |
||||||
|
*/ |
||||||
|
class PriorityMigrationHelper |
||||||
|
{ |
||||||
|
private Connection $connection; |
||||||
|
private LoggerInterface $logger; |
||||||
|
|
||||||
|
/** |
||||||
|
* Constructor |
||||||
|
*/ |
||||||
|
public function __construct(Connection $connection, LoggerInterface $logger) |
||||||
|
{ |
||||||
|
$this->connection = $connection; |
||||||
|
$this->logger = $logger; |
||||||
|
} |
||||||
|
|
||||||
|
public function executeUp(Schema $schema): void |
||||||
|
{ |
||||||
|
$this->logger->info('Executing PriorityMigrationHelper up method.'); |
||||||
|
$this->renameSettingsTableUp(); |
||||||
|
$this->addDurationFields($schema); |
||||||
|
} |
||||||
|
|
||||||
|
public function executeDown(Schema $schema): void |
||||||
|
{ |
||||||
|
$this->logger->info('Executing PriorityMigrationHelper down method.'); |
||||||
|
$this->renameSettingsTableDown(); |
||||||
|
$this->removeDurationFields($schema); |
||||||
|
} |
||||||
|
|
||||||
|
private function addDurationFields(Schema $schema): void |
||||||
|
{ |
||||||
|
$tables = [ |
||||||
|
'course', |
||||||
|
'c_survey', |
||||||
|
'c_quiz', |
||||||
|
'c_quiz_question', |
||||||
|
'c_lp', |
||||||
|
'c_lp_item', |
||||||
|
'c_student_publication', |
||||||
|
'c_attendance_calendar' |
||||||
|
]; |
||||||
|
|
||||||
|
foreach ($tables as $tableName) { |
||||||
|
$table = $schema->getTable($tableName); |
||||||
|
if (!$table->hasColumn('duration')) { |
||||||
|
$this->connection->executeQuery("ALTER TABLE $tableName ADD duration INT DEFAULT NULL"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private function removeDurationFields(Schema $schema): void |
||||||
|
{ |
||||||
|
$tables = [ |
||||||
|
'course', |
||||||
|
'c_survey', |
||||||
|
'c_quiz', |
||||||
|
'c_quiz_question', |
||||||
|
'c_lp', |
||||||
|
'c_lp_item', |
||||||
|
'c_student_publication', |
||||||
|
'c_attendance_calendar' |
||||||
|
]; |
||||||
|
|
||||||
|
foreach ($tables as $tableName) { |
||||||
|
$table = $schema->getTable($tableName); |
||||||
|
if ($table->hasColumn('duration')) { |
||||||
|
$this->connection->executeQuery("ALTER TABLE $tableName DROP COLUMN duration"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private function renameSettingsTableUp(): void |
||||||
|
{ |
||||||
|
$schemaManager = $this->connection->createSchemaManager(); |
||||||
|
|
||||||
|
if ($schemaManager->tablesExist(['settings_current']) && !$schemaManager->tablesExist(['settings'])) { |
||||||
|
$this->connection->executeQuery('RENAME TABLE settings_current TO settings'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private function renameSettingsTableDown(): void |
||||||
|
{ |
||||||
|
$schemaManager = $this->connection->createSchemaManager(); |
||||||
|
|
||||||
|
if ($schemaManager->tablesExist(['settings']) && !$schemaManager->tablesExist(['settings_current'])) { |
||||||
|
$this->connection->executeQuery('RENAME TABLE settings TO settings_current'); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -1,23 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/* For licensing terms, see /license.txt */ |
|
||||||
|
|
||||||
declare(strict_types=1); |
|
||||||
|
|
||||||
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
|
||||||
|
|
||||||
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; |
|
||||||
use Doctrine\DBAL\Schema\Schema; |
|
||||||
|
|
||||||
class Version20170523100000 extends AbstractMigrationChamilo |
|
||||||
{ |
|
||||||
public function up(Schema $schema): void |
|
||||||
{ |
|
||||||
$this->addSql('RENAME TABLE settings_current TO settings'); |
|
||||||
} |
|
||||||
|
|
||||||
public function down(Schema $schema): void |
|
||||||
{ |
|
||||||
$this->addSql('RENAME TABLE settings TO settings_current'); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,42 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
declare(strict_types=1); |
|
||||||
|
|
||||||
/* For licensing terms, see /license.txt */ |
|
||||||
|
|
||||||
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
|
||||||
|
|
||||||
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; |
|
||||||
use Doctrine\DBAL\Schema\Schema; |
|
||||||
|
|
||||||
final class Version20240704120400 extends AbstractMigrationChamilo |
|
||||||
{ |
|
||||||
public function getDescription(): string |
|
||||||
{ |
|
||||||
return 'Add duration field to multiple tables'; |
|
||||||
} |
|
||||||
|
|
||||||
public function up(Schema $schema): void |
|
||||||
{ |
|
||||||
$this->addSql('ALTER TABLE course ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_survey ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_quiz ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_quiz_question ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_lp ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_lp_item ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_student_publication ADD duration INT DEFAULT NULL'); |
|
||||||
$this->addSql('ALTER TABLE c_attendance_calendar ADD duration INT DEFAULT NULL'); |
|
||||||
} |
|
||||||
|
|
||||||
public function down(Schema $schema): void |
|
||||||
{ |
|
||||||
$this->addSql('ALTER TABLE course DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_survey DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_quiz DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_quiz_question DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_lp DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_lp_item DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_student_publication DROP duration'); |
|
||||||
$this->addSql('ALTER TABLE c_attendance_calendar DROP duration'); |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue