Skip to content
Snippets Groups Projects
Select Git revision
  • 88deb535d23db9b7969de07824fc0b31c981182d
  • main default protected
  • devel
  • 1.1.0
  • 1.0.4
  • 1.0.3
  • 1.0.2
  • 1.0.1
  • 1.0.0
9 results

WpdbMigrator.php

Blame
  • WpdbMigrator.php 3.46 KiB
    <?php
    declare(strict_types=1);
    
    namespace WPDesk\Migrations;
    
    use Psr\Log\LoggerInterface;
    use WPDesk\Migrations\Finder\GlobFinder;
    use WPDesk\Migrations\Version\AlphabeticalComparator;
    use WPDesk\Migrations\Version\Comparator;
    use WPDesk\Migrations\Version\Version;
    use WPDesk\Migrations\Version\WpdbMigrationFactory;
    
    class WpdbMigrator implements Migrator {
    
    	/** @var \wpdb */
    	private $wpdb;
    
    	/** @var MigrationsRepository */
    	private $migrations_repository;
    
    	/** @var Comparator */
    	private $comparator;
    
    	/** @var LoggerInterface */
    	private $logger;
    
    	/** @var string */
    	private $option_name;
    
    	/** @param string[] $migration_directories */
    	public static function from_directories( array $migration_directories, string $option_name ): self {
    		global $wpdb;
    		$logger = new WpdbLogger( $option_name . '_log' );
    
    		return new self(
    			$wpdb,
    			$option_name,
    			new FilesystemMigrationsRepository(
    				$migration_directories,
    				new GlobFinder(),
    				new WpdbMigrationFactory(
    					$wpdb,
    					$logger
    				),
    				new AlphabeticalComparator()
    			),
    			new AlphabeticalComparator(),
    			$logger
    		);
    	}
    
    	/** @param class-string<AbstractMigration>[] $migration_class_names */
    	public static function from_classes( array $migration_class_names, string $option_name ): self {
    		global $wpdb;
    		$logger = new WpdbLogger( $option_name . '_log' );
    
    		return new self(
    			$wpdb,
    			$option_name,
    			new ArrayMigrationsRepository(
    				$migration_class_names,
    				new WpdbMigrationFactory(
    					$wpdb,
    					$logger
    				),
    				new AlphabeticalComparator()
    			),
    			new AlphabeticalComparator(),
    			$logger
    		);