|
5 | 5 | namespace CraftCms\Cms\Database\Commands; |
6 | 6 |
|
7 | 7 | use CraftCms\Cms\Console\CraftCommand; |
| 8 | +use CraftCms\Cms\Database\Events\RegisterMigrators; |
8 | 9 | use CraftCms\Cms\Database\Migrator; |
9 | 10 | use CraftCms\Cms\Plugin\Plugins; |
10 | 11 | use CraftCms\Cms\Support\Str; |
|
14 | 15 | use Illuminate\Contracts\Console\Isolatable; |
15 | 16 | use Illuminate\Foundation\Console\DownCommand; |
16 | 17 | use Illuminate\Foundation\Console\UpCommand; |
| 18 | +use Illuminate\Support\Facades\Event; |
17 | 19 | use Laravel\Prompts\Concerns\Colors; |
18 | 20 | use Laravel\Prompts\Themes\Default\Concerns\DrawsBoxes; |
19 | 21 | use Throwable; |
@@ -121,10 +123,11 @@ function () use (&$migrationsByTrack, &$plugins) { |
121 | 123 | foreach ($migrationsByTrack as $track => $migrations) { |
122 | 124 | $n = count($migrations); |
123 | 125 |
|
124 | | - $which = match ($track) { |
125 | | - 'craft' => 'Craft', |
126 | | - 'content' => 'content', |
127 | | - default => $plugins[substr((string) $track, 7)]->name, |
| 126 | + $which = match (true) { |
| 127 | + $track === 'craft' => 'Craft', |
| 128 | + $track === 'content' => 'content', |
| 129 | + str_starts_with((string) $track, 'plugin') => $plugins[substr((string) $track, 7)]->name, |
| 130 | + default => $track, |
128 | 131 | }; |
129 | 132 |
|
130 | 133 | $this->box( |
@@ -196,6 +199,28 @@ private function gatherMigrationsByTrack(array &$migrationsByTrack, array &$plug |
196 | 199 | $migrationsByTrack['content'] = $contentMigrations; |
197 | 200 | } |
198 | 201 | } |
| 202 | + |
| 203 | + if (Event::hasListeners(RegisterMigrators::class)) { |
| 204 | + Event::dispatch($event = new RegisterMigrators([])); |
| 205 | + |
| 206 | + foreach ($event->migrators as $migrator) { |
| 207 | + if (! $migrator instanceof Migrator) { |
| 208 | + $this->components->warn($migrator::class.' is not an instance of '.Migrator::class); |
| 209 | + |
| 210 | + continue; |
| 211 | + } |
| 212 | + |
| 213 | + if (! $track = $migrator->getTrack()) { |
| 214 | + $this->components->warn('A migrator was registered without a track.'); |
| 215 | + |
| 216 | + continue; |
| 217 | + } |
| 218 | + |
| 219 | + if (! empty($migrations = $migrator->getPendingMigrations())) { |
| 220 | + $migrationsByTrack[$track] = $migrations; |
| 221 | + } |
| 222 | + } |
| 223 | + } |
199 | 224 | } |
200 | 225 |
|
201 | 226 | /** |
|
0 commit comments