Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/ |
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/migrations.php |
<?php class Brizy_Admin_Migrations { const BRIZY_MIGRATIONS = 'brizy_migrations'; /** * @var Brizy_Admin_Migrations_GlobalStorage */ private $globalStorage; /** * @var Brizy_Admin_Migrations_MigrationInterface[] */ private $existinMigrations; /** * Brizy_Admin_Migrations constructor. */ public function __construct() { $this->existinMigrations = array(); $this->globalStorage = new Brizy_Admin_Migrations_GlobalStorage(); } /** * @param $version */ public function runMigrations( $version ) { $migrations = $this->getExistingMigrations(); $latestExecutedMigration = $this->getLatestRunMigration(); $latestExecutedVersion = $latestExecutedMigration->getVersion(); $latestMigrationVersion = end( $migrations ); $version_compare = version_compare( $version, $latestExecutedVersion ); if ( $version_compare === 1 && $latestMigrationVersion->getVersion() != $latestExecutedMigration->getVersion() ) { $this->upgradeTo( $version ); } } /** * @return Brizy_Admin_Migrations_MigrationInterface[] */ private function getExistingMigrations() { if ( count( $this->existinMigrations ) ) { return $this->existinMigrations; } $migrations = array( new Brizy_Admin_Migrations_BlockPostTitleMigration, new Brizy_Admin_Migrations_CleanInvalidBlocksMigration, new Brizy_Admin_Migrations_CleanLogsMigration, new Brizy_Admin_Migrations_FormSerializationMigration, new Brizy_Admin_Migrations_GlobalBlocksToCustomPostMigration, new Brizy_Admin_Migrations_GlobalVersionsMigration, new Brizy_Admin_Migrations_GlobalsToDataMigration, new Brizy_Admin_Migrations_NullMigration, new Brizy_Admin_Migrations_ProjectToCustomPostMigration, new Brizy_Admin_Migrations_RulesMigration, new Brizy_Admin_Migrations_ShortcodesMobileOneMigration, new Brizy_Admin_Migrations_FixGlobalsToDataMigration, new Brizy_Admin_Migrations_ScreenshotMigration, ); usort( $migrations, function ( $a, $b ) { return version_compare( $a->getVersion(), $b->getVersion() ); } ); $migrations = array_filter( $migrations, function ( $migration ) { return in_array( version_compare( $migration->getVersion(), BRIZY_VERSION ), array( - 1, 0 ) ); } ); return $this->existinMigrations = $migrations; } /** * @return Brizy_Admin_Migrations_MigrationInterface|mixed */ private function getLatestRunMigration() { $latest = $this->globalStorage->latestMigration(); if ( ! $latest instanceof Brizy_Admin_Migrations_MigrationInterface ) { $latest = new Brizy_Admin_Migrations_NullMigration(); } return $latest; } /** * @param string $version */ private function upgradeTo( $version ) { global $wpdb; wp_raise_memory_limit( 'image' ); Brizy_Logger::instance()->debug( 'Starting migration process: [upgrading]' ); /** * @var Brizy_Admin_Migrations_MigrationInterface */ $latestExecutedVersion = BRIZY_VERSION; $latestExecutedMigration = $this->getLatestRunMigration(); if ( $latestExecutedMigration ) { $latestExecutedVersion = $latestExecutedMigration->getVersion(); } Brizy_Logger::instance()->debug( "Upgrading to version [{$version}] from version: [{$latestExecutedVersion}]: ", array( $version ) ); /** * @var Brizy_Admin_Migrations_MigrationInterface[] */ $migrationsToRun = $this->getExistingMigrations(); if ( $latestExecutedMigration ) { $migrationsToRun = array_filter( $migrationsToRun, function ( $migration ) use ( $latestExecutedMigration, $version ) { $version_compare1 = version_compare( $latestExecutedMigration->getVersion(), $migration->getVersion() ); $version_compare2 = version_compare( $migration->getVersion(), $version ); return $version_compare1 == - 1 && ( $version_compare2 == - 1 || $version_compare2 == 0 ); } ); } $migrations = array(); foreach ( $migrationsToRun as $m ) { $migrations[ $m->getVersion() ][] = $m; } foreach ( $migrations as $v => $m ) { //prioritise migrations usort( $migrations[ $v ], function ( $a, $b ) { $p1 = $a->getPriority(); $p2 = $b->getPriority(); if ( $p1 == $p2 ) { return 0; } return ( $p1 < $p2 ) ? - 1 : 1; } ); } // run migrations foreach ( $migrations as $versionMigrations ) { try { $wpdb->query( 'START TRANSACTION ' ); foreach ( $versionMigrations as $migration ) { $migrationClass = get_class( $migration ); $migration->execute(); Brizy_Logger::instance()->debug( 'Run migration: ' . $migrationClass, array( $migrationClass ) ); $this->globalStorage->addMigration( $migration )->save(); Brizy_Editor_Project::cleanClassCache(); Brizy_Editor_Post::cleanClassCache(); Brizy_Editor_Block::cleanClassCache(); } $wpdb->query( 'COMMIT' ); } catch ( Exception $e ) { $wpdb->query( 'ROLLBACK' ); Brizy_Logger::instance()->critical( 'Migration process ERROR', [ $migrationClass, $e->getTraceAsString() ] ); break; } } Brizy_Logger::instance()->debug( 'Migration process successful' ); } }