namespace ImageOptimization\Classes\Migration;
use ImageOptimization\Classes\Async_Operation\{
Exceptions\Async_Operation_Exception,
use ImageOptimization\Classes\Logger;
use ImageOptimization\Classes\Migration\Handlers\{
Fix_Avif_With_Zero_Dimensions,
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
class Migration_Manager {
public static function get_migrations(): array {
Fix_Optimized_Size_Keys::class,
Fix_Avif_With_Zero_Dimensions::class,
* @return \class-string|null
public static function get_migration( $migration_name ): ?string {
foreach ( self::get_migrations() as $migration ) {
if ( $migration::get_name() === $migration_name ) {
public static function init() {
$migrations_passed = ( new Migration_Meta() )->get_migrations_passed();
foreach ( self::get_migrations() as $migration ) {
if ( in_array( $migration::get_name(), $migrations_passed, true ) ) {
Async_Operation_Hook::DB_MIGRATION,
[ 'name' => $migration::get_name() ],
Async_Operation_Queue::MIGRATION,
} catch ( Async_Operation_Exception $aoe ) {
$name = $migration::get_name();
"Error while running migration `$name`: " . $aoe->getMessage()