Skip to content
Snippets Groups Projects
Select Git revision
  • dc9c8a85e8d2615cbc575e8caae9297f57e31868
  • master default protected
  • bugfix/wordpress-review
  • fix/duplicate
  • bugfix/get_current_screen_fail
  • feature/dismiss-nonce
  • replace-dodgy-path
  • bugfix/notice-not-show
  • devel
  • 3.3.0
  • 3.2.5
  • 3.2.4
  • 3.2.3
  • 3.2.2
  • 3.2.1
  • 3.2.0
  • 3.2.0-beta7
  • 3.2.0-beta6
  • 3.2.0-beta5
  • 3.2.0-beta4
  • 3.2.0-beta3
  • 3.2.0-beta2
  • 3.2.0-beta1
  • 3.1.4
  • 3.1.4-beta1
  • 3.1.3
  • 3.1.1
  • 3.1
  • 3.0
29 results

notice.js

Blame
  • GlobFinder.php 1.35 KiB
    <?php
    declare(strict_types=1);
    
    namespace WPDesk\Migrations\Finder;
    
    use WPDesk\Migrations\AbstractMigration;
    
    final class GlobFinder implements MigrationFinder {
    
    	public function find_migrations( string $directory ): array {
    		$dir = realpath( $directory );
    
    		$files = glob( rtrim( $dir, '/' ) . '/Version*.php' );
    		if ( $files === false ) {
    			$files = [];
    		}
    
    		return $this->load_migrations( $files );
    	}
    
    	/**
    	 * @param string[] $files
    	 *
    	 * @return class-string<AbstractMigration>[]
    	 * @throws \ReflectionException
    	 */
    	private function load_migrations( array $files ): array {
    		$included_files = [];
    		foreach ( $files as $file ) {
    			require_once $file;
    			$real_file = realpath( $file );
    			if ( ! $real_file ) {
    				continue;
    			}
    			$included_files[] = $real_file;
    		}
    
    		$classes  = $this->load_migration_classes( $included_files );
    		$versions = [];
    		foreach ( $classes as $class ) {
    			$versions[] = $class->getName();
    		}
    
    		return $versions;
    	}
    
    	/**
    	 * @param string[] $included_files
    	 * @return \ReflectionClass[]
    	 * @throws \ReflectionException
    	 */
    	private function load_migration_classes( array $included_files ): array {
    		$classes = [];
    		foreach ( get_declared_classes() as $class ) {
    			$r = new \ReflectionClass( $class );
    
    			if ( in_array( $r->getFileName(), $included_files, true ) ) {
    				$classes[] = $r;
    			}
    		}
    		return $classes;
    	}
    }