| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | -include_once dirname( __FILE__ ) . '/database-status.php'; | |
| 4 | -include_once dirname( __FILE__ ) . '/database-upgrader.php'; | |
| 3 | +require_once __DIR__ . '/database-status.php'; | |
| 4 | +require_once __DIR__ . '/database-upgrader.php'; | |
| 5 | 5 | |
| 6 | 6 | class Red_Database { |
| 7 | 7 | /** |
| 8 | 8 | * Get all upgrades for a database version |
| @@ -9,9 +9,9 @@ | ||
| 9 | 9 | * |
| 10 | 10 | * @return array Array of versions from self::get_upgrades() |
| 11 | 11 | */ |
| 12 | 12 | public function get_upgrades_for_version( $current_version, $current_stage ) { |
| 13 | - if ( $current_version === '' ) { | |
| 13 | + if ( empty( $current_version ) ) { | |
| 14 | 14 | return [ |
| 15 | 15 | [ |
| 16 | 16 | 'version' => REDIRECTION_DB_VERSION, |
| 17 | 17 | 'file' => 'latest.php', |
| @@ -27,9 +27,9 @@ | ||
| 27 | 27 | if ( ! $found ) { |
| 28 | 28 | $upgrader = Red_Database_Upgrader::get( $upgrade ); |
| 29 | 29 | |
| 30 | 30 | $stage_present = in_array( $current_stage, array_keys( $upgrader->get_stages() ), true ); |
| 31 | - $same_version = $current_stage === false && version_compare( $upgrade['version'], $current_version, 'g' ); | |
| 31 | + $same_version = $current_stage === false && version_compare( $upgrade['version'], $current_version, 'gt' ); | |
| 32 | 32 | |
| 33 | 33 | if ( $stage_present || $same_version ) { |
| 34 | 34 | $found = true; |
| 35 | 35 | } |
| @@ -75,17 +75,23 @@ | ||
| 75 | 75 | } |
| 76 | 76 | } |
| 77 | 77 | |
| 78 | 78 | public static function apply_to_sites( $callback ) { |
| 79 | - if ( is_network_admin() ) { | |
| 80 | - array_map( function( $site ) use ( $callback ) { | |
| 81 | - switch_to_blog( $site->blog_id ); | |
| 79 | + if ( is_multisite() && ( is_network_admin() || defined( 'WP_CLI' ) && WP_CLI ) ) { | |
| 80 | + $total = get_sites( [ 'count' => true ] ); | |
| 81 | + $per_page = 100; | |
| 82 | 82 | |
| 83 | - $callback(); | |
| 83 | + // Paginate through all sites and apply the callback | |
| 84 | + for ( $offset = 0; $offset < $total; $offset += $per_page ) { | |
| 85 | + array_map( function( $site ) use ( $callback ) { | |
| 86 | + switch_to_blog( $site->blog_id ); | |
| 84 | 87 | |
| 85 | - restore_current_blog(); | |
| 86 | - }, get_sites() ); | |
| 88 | + $callback(); | |
| 87 | 89 | |
| 90 | + restore_current_blog(); | |
| 91 | + }, get_sites( [ 'number' => $per_page, 'offset' => $offset ] ) ); | |
| 92 | + } | |
| 93 | + | |
| 88 | 94 | return; |
| 89 | 95 | } |
| 90 | 96 | |
| 91 | 97 | $callback(); |
| @@ -147,8 +153,18 @@ | ||
| 147 | 153 | [ |
| 148 | 154 | 'version' => '4.0', |
| 149 | 155 | 'file' => '400.php', |
| 150 | 156 | 'class' => 'Red_Database_400', |
| 157 | + ], | |
| 158 | + [ | |
| 159 | + 'version' => '4.1', | |
| 160 | + 'file' => '410.php', | |
| 161 | + 'class' => 'Red_Database_410', | |
| 162 | + ], | |
| 163 | + [ | |
| 164 | + 'version' => '4.2', | |
| 165 | + 'file' => '420.php', | |
| 166 | + 'class' => 'Red_Database_420', | |
| 151 | 167 | ], |
| 152 | 168 | ]; |
| 153 | 169 | } |
| 154 | 170 | } |