From 35ebe65001f2f450d27c52eb9fa54ba52015e0fb Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 15 Jan 2024 07:07:41 +0000 Subject: [PATCH 1/8] Fix asset import bug --- src/Assets/Asset.php | 26 +++++++++++++++++++------- src/Commands/ImportAssets.php | 15 ++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/Assets/Asset.php b/src/Assets/Asset.php index 6412cf82..f93b8405 100644 --- a/src/Assets/Asset.php +++ b/src/Assets/Asset.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Cache; use Statamic\Assets\Asset as FileAsset; use Statamic\Assets\AssetUploader as Uploader; +use Statamic\Contracts\Assets\Asset as AssetContract; use Statamic\Facades\Blink; use Statamic\Facades\Path; use Statamic\Support\Arr; @@ -115,15 +116,26 @@ public function writeMeta($meta) { $meta['data'] = Arr::removeNullValues($meta['data']); + self::makeModelFromContract($this, $meta); + + Blink::put('eloquent-asset-meta-exists-'.$this->id(), true); + } + + public static function makeModelFromContract(AssetContract $source, $meta = []) + { + if (! $meta) { + $meta = $source->meta(); + } + $model = app('statamic.eloquent.assets.model')::firstOrNew([ - 'container' => $this->containerHandle(), - 'folder' => $this->folder(), - 'basename' => $this->basename(), + 'container' => $source->containerHandle(), + 'folder' => $source->folder(), + 'basename' => $source->basename(), ])->fill([ 'meta' => $meta, - 'filename' => $this->filename(), - 'extension' => $this->extension(), - 'path' => $this->path(), + 'filename' => $source->filename(), + 'extension' => $source->extension(), + 'path' => $source->path(), ]); // Set initial timestamps. @@ -134,7 +146,7 @@ public function writeMeta($meta) $model->save(); - Blink::put('eloquent-asset-meta-exists-'.$this->id(), true); + return $model; } public function metaPath() diff --git a/src/Commands/ImportAssets.php b/src/Commands/ImportAssets.php index 95d60701..17163347 100644 --- a/src/Commands/ImportAssets.php +++ b/src/Commands/ImportAssets.php @@ -4,17 +4,17 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Facade; +use Statamic\Assets\AssetContainerContents; use Statamic\Assets\AssetRepository; use Statamic\Console\RunsInPlease; -use Statamic\Contracts\Assets\Asset as AssetContract; +use Statamic\Contracts\Assets\Asset; use Statamic\Contracts\Assets\AssetContainer as AssetContainerContract; use Statamic\Contracts\Assets\AssetContainerRepository as AssetContainerRepositoryContract; use Statamic\Contracts\Assets\AssetRepository as AssetRepositoryContract; -use Statamic\Eloquent\Assets\Asset; +use Statamic\Eloquent\Assets\Asset as EloquentAsset; use Statamic\Eloquent\Assets\AssetContainer; use Statamic\Facades\Asset as AssetFacade; use Statamic\Facades\AssetContainer as AssetContainerFacade; -use Statamic\Facades\YAML; use Statamic\Stache\Repositories\AssetContainerRepository; use Statamic\Statamic; @@ -61,6 +61,10 @@ private function useDefaultRepositories() app()->bind(AssetContainerContract::class, AssetContainer::class); app()->bind(AssetContract::class, Asset::class); + + app()->bind(AssetContainerContents::class, function ($app) { + return new AssetContainerContents(); + }); } private function importAssetContainers() @@ -89,10 +93,7 @@ private function importAssets() $assets = AssetFacade::all(); $this->withProgressBar($assets, function ($asset) { - if ($contents = $asset->disk()->get($path = $asset->metaPath())) { - $metadata = YAML::file($path)->parse($contents); - $asset->writeMeta($metadata); - } + EloquentAsset::makeModelFromContract($asset); }); $this->newLine(); From f15f803f7a278837dce903cc00267765506353db Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 15 Jan 2024 21:00:59 +0000 Subject: [PATCH 2/8] Drop status on entries --- .../migrations/create_entries_table.php.stub | 1 - ...ate_entries_table_with_string_ids.php.stub | 1 - .../updates/drop_status_on_entries.php.stub | 21 +++++++++++++++++++ src/Entries/Entry.php | 1 - src/Entries/EntryQueryBuilder.php | 2 +- src/ServiceProvider.php | 1 + .../DropForeignKeysOnEntriesAndForms.php | 13 ++++-------- 7 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 database/migrations/updates/drop_status_on_entries.php.stub diff --git a/database/migrations/create_entries_table.php.stub b/database/migrations/create_entries_table.php.stub index f216a4a8..ac4faf97 100644 --- a/database/migrations/create_entries_table.php.stub +++ b/database/migrations/create_entries_table.php.stub @@ -12,7 +12,6 @@ return new class extends Migration { $table->string('site')->index(); $table->unsignedBigInteger('origin_id')->nullable()->index(); $table->boolean('published')->default(true); - $table->string('status'); $table->string('slug')->nullable(); $table->string('uri')->nullable()->index(); $table->string('date')->nullable(); diff --git a/database/migrations/create_entries_table_with_string_ids.php.stub b/database/migrations/create_entries_table_with_string_ids.php.stub index c738a43f..50da3fa6 100644 --- a/database/migrations/create_entries_table_with_string_ids.php.stub +++ b/database/migrations/create_entries_table_with_string_ids.php.stub @@ -12,7 +12,6 @@ return new class extends Migration { $table->string('site')->index(); $table->uuid('origin_id')->nullable()->index(); $table->boolean('published')->default(true); - $table->string('status'); $table->string('slug')->nullable(); $table->string('uri')->nullable()->index(); $table->string('date')->nullable(); diff --git a/database/migrations/updates/drop_status_on_entries.php.stub b/database/migrations/updates/drop_status_on_entries.php.stub new file mode 100644 index 00000000..d3d74d72 --- /dev/null +++ b/database/migrations/updates/drop_status_on_entries.php.stub @@ -0,0 +1,21 @@ +prefix('entries'), function (Blueprint $table) { + $table->dropColumn('status'); + }); + } + + public function down() + { + Schema::table($this->prefix('entries'), function (Blueprint $table) { + $table->string('status'); + }); + } +}; diff --git a/src/Entries/Entry.php b/src/Entries/Entry.php index 497e1002..9a5e3420 100644 --- a/src/Entries/Entry.php +++ b/src/Entries/Entry.php @@ -103,7 +103,6 @@ public static function makeModelFromContract(EntryContract $source) 'blueprint' => $source->blueprint ?? $source->blueprint()->handle(), 'data' => $data->except(EntryQueryBuilder::COLUMNS), 'published' => $source->published(), - 'status' => $source->status(), 'updated_at' => $source->lastModified(), 'order' => $source->order(), ]; diff --git a/src/Entries/EntryQueryBuilder.php b/src/Entries/EntryQueryBuilder.php index 4c32fb32..d2edf759 100644 --- a/src/Entries/EntryQueryBuilder.php +++ b/src/Entries/EntryQueryBuilder.php @@ -17,7 +17,7 @@ class EntryQueryBuilder extends EloquentQueryBuilder implements QueryBuilder private $selectedQueryColumns; const COLUMNS = [ - 'id', 'site', 'origin_id', 'published', 'status', 'slug', 'uri', + 'id', 'site', 'origin_id', 'published', 'slug', 'uri', 'date', 'collection', 'created_at', 'updated_at', 'order', 'blueprint', ]; diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 92885542..618d612d 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -52,6 +52,7 @@ class ServiceProvider extends AddonServiceProvider \Statamic\Eloquent\Updates\ChangeDefaultBlueprint::class, \Statamic\Eloquent\Updates\DropForeignKeysOnEntriesAndForms::class, \Statamic\Eloquent\Updates\SplitGlobalsFromVariables::class, + \Statamic\Eloquent\Updates\DropStatusOnEntries::class, ]; protected $listen = [ diff --git a/src/Updates/DropForeignKeysOnEntriesAndForms.php b/src/Updates/DropForeignKeysOnEntriesAndForms.php index b4a3b48d..a3c178a9 100644 --- a/src/Updates/DropForeignKeysOnEntriesAndForms.php +++ b/src/Updates/DropForeignKeysOnEntriesAndForms.php @@ -4,22 +4,17 @@ use Statamic\UpdateScripts\UpdateScript; -class DropForeignKeysOnEntriesAndForms extends UpdateScript +class DropStatusOnEntries extends UpdateScript { public function shouldUpdate($newVersion, $oldVersion) { - return $this->isUpdatingTo('2.3.0'); + return $this->isUpdatingTo('4.0.0'); } public function update() { - $source = __DIR__.'/../../database/migrations/updates/drop_foreign_keys_on_entries.php.stub'; - $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_foreign_keys_on_entries.php'); - - $this->files->copy($source, $dest); - - $source = __DIR__.'/../../database/migrations/updates/drop_foreign_keys_on_forms.php.stub'; - $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_foreign_keys_on_forms.php'); + $source = __DIR__.'/../../database/migrations/updates/drop_status_on_entries.php.stub'; + $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_status_on_entries.php'); $this->files->copy($source, $dest); From a3593921ae29d31e2be9da3bf89d23bc8aa3ba5a Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 15 Jan 2024 21:01:24 +0000 Subject: [PATCH 3/8] Revert "Fix asset import bug" This reverts commit 35ebe65001f2f450d27c52eb9fa54ba52015e0fb. --- src/Assets/Asset.php | 26 +++++++------------------- src/Commands/ImportAssets.php | 15 +++++++-------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/Assets/Asset.php b/src/Assets/Asset.php index f93b8405..6412cf82 100644 --- a/src/Assets/Asset.php +++ b/src/Assets/Asset.php @@ -6,7 +6,6 @@ use Illuminate\Support\Facades\Cache; use Statamic\Assets\Asset as FileAsset; use Statamic\Assets\AssetUploader as Uploader; -use Statamic\Contracts\Assets\Asset as AssetContract; use Statamic\Facades\Blink; use Statamic\Facades\Path; use Statamic\Support\Arr; @@ -116,26 +115,15 @@ public function writeMeta($meta) { $meta['data'] = Arr::removeNullValues($meta['data']); - self::makeModelFromContract($this, $meta); - - Blink::put('eloquent-asset-meta-exists-'.$this->id(), true); - } - - public static function makeModelFromContract(AssetContract $source, $meta = []) - { - if (! $meta) { - $meta = $source->meta(); - } - $model = app('statamic.eloquent.assets.model')::firstOrNew([ - 'container' => $source->containerHandle(), - 'folder' => $source->folder(), - 'basename' => $source->basename(), + 'container' => $this->containerHandle(), + 'folder' => $this->folder(), + 'basename' => $this->basename(), ])->fill([ 'meta' => $meta, - 'filename' => $source->filename(), - 'extension' => $source->extension(), - 'path' => $source->path(), + 'filename' => $this->filename(), + 'extension' => $this->extension(), + 'path' => $this->path(), ]); // Set initial timestamps. @@ -146,7 +134,7 @@ public static function makeModelFromContract(AssetContract $source, $meta = []) $model->save(); - return $model; + Blink::put('eloquent-asset-meta-exists-'.$this->id(), true); } public function metaPath() diff --git a/src/Commands/ImportAssets.php b/src/Commands/ImportAssets.php index 17163347..95d60701 100644 --- a/src/Commands/ImportAssets.php +++ b/src/Commands/ImportAssets.php @@ -4,17 +4,17 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Facade; -use Statamic\Assets\AssetContainerContents; use Statamic\Assets\AssetRepository; use Statamic\Console\RunsInPlease; -use Statamic\Contracts\Assets\Asset; +use Statamic\Contracts\Assets\Asset as AssetContract; use Statamic\Contracts\Assets\AssetContainer as AssetContainerContract; use Statamic\Contracts\Assets\AssetContainerRepository as AssetContainerRepositoryContract; use Statamic\Contracts\Assets\AssetRepository as AssetRepositoryContract; -use Statamic\Eloquent\Assets\Asset as EloquentAsset; +use Statamic\Eloquent\Assets\Asset; use Statamic\Eloquent\Assets\AssetContainer; use Statamic\Facades\Asset as AssetFacade; use Statamic\Facades\AssetContainer as AssetContainerFacade; +use Statamic\Facades\YAML; use Statamic\Stache\Repositories\AssetContainerRepository; use Statamic\Statamic; @@ -61,10 +61,6 @@ private function useDefaultRepositories() app()->bind(AssetContainerContract::class, AssetContainer::class); app()->bind(AssetContract::class, Asset::class); - - app()->bind(AssetContainerContents::class, function ($app) { - return new AssetContainerContents(); - }); } private function importAssetContainers() @@ -93,7 +89,10 @@ private function importAssets() $assets = AssetFacade::all(); $this->withProgressBar($assets, function ($asset) { - EloquentAsset::makeModelFromContract($asset); + if ($contents = $asset->disk()->get($path = $asset->metaPath())) { + $metadata = YAML::file($path)->parse($contents); + $asset->writeMeta($metadata); + } }); $this->newLine(); From 0a42243ce8828ae82e350908080f8b4fe61eb2f3 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 15 Jan 2024 21:09:54 +0000 Subject: [PATCH 4/8] Fix test --- tests/Entries/EntryTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Entries/EntryTest.php b/tests/Entries/EntryTest.php index 0c4cc0e2..7073b92a 100644 --- a/tests/Entries/EntryTest.php +++ b/tests/Entries/EntryTest.php @@ -47,7 +47,6 @@ public function it_saves_to_entry_model() 'collection' => 'blog', 'blueprint' => 'blog', 'published' => false, - 'status' => 'draft', 'origin_id' => null, 'order' => null, ]); From 0891a20d25cd74973e8ebedcdb585a48aff02d82 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Thu, 18 Jan 2024 08:26:18 +0000 Subject: [PATCH 5/8] StyleCI --- src/Entries/Entry.php | 18 +++++++++--------- src/ServiceProvider.php | 20 ++++++++++---------- tests/Entries/EntryTest.php | 14 +++++++------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/Entries/Entry.php b/src/Entries/Entry.php index 9a5e3420..28cb0a03 100644 --- a/src/Entries/Entry.php +++ b/src/Entries/Entry.php @@ -94,17 +94,17 @@ public static function makeModelFromContract(EntryContract $source) } $attributes = [ - 'origin_id' => $origin?->id(), - 'site' => $source->locale(), - 'slug' => $source->slug(), - 'uri' => $source->uri(), - 'date' => $date, + 'origin_id' => $origin?->id(), + 'site' => $source->locale(), + 'slug' => $source->slug(), + 'uri' => $source->uri(), + 'date' => $date, 'collection' => $source->collectionHandle(), - 'blueprint' => $source->blueprint ?? $source->blueprint()->handle(), - 'data' => $data->except(EntryQueryBuilder::COLUMNS), - 'published' => $source->published(), + 'blueprint' => $source->blueprint ?? $source->blueprint()->handle(), + 'data' => $data->except(EntryQueryBuilder::COLUMNS), + 'published' => $source->published(), 'updated_at' => $source->lastModified(), - 'order' => $source->order(), + 'order' => $source->order(), ]; if ($id = $source->id()) { diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 618d612d..a0b4f385 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -76,20 +76,20 @@ public function boot() $this->publishes([$config => config_path('statamic/eloquent-driver.php')], 'statamic-eloquent-config'); $this->publishes([ - __DIR__.'/../database/migrations/create_taxonomies_table.php.stub' => $this->migrationsPath('create_taxonomies_table.php'), - __DIR__.'/../database/migrations/create_terms_table.php.stub' => $this->migrationsPath('create_terms_table.php'), - __DIR__.'/../database/migrations/create_globals_table.php.stub' => $this->migrationsPath('create_globals_table.php'), + __DIR__.'/../database/migrations/create_taxonomies_table.php.stub' => $this->migrationsPath('create_taxonomies_table.php'), + __DIR__.'/../database/migrations/create_terms_table.php.stub' => $this->migrationsPath('create_terms_table.php'), + __DIR__.'/../database/migrations/create_globals_table.php.stub' => $this->migrationsPath('create_globals_table.php'), __DIR__.'/../database/migrations/create_global_variables_table.php.stub' => $this->migrationsPath('create_global_variables_table.php'), - __DIR__.'/../database/migrations/create_navigations_table.php.stub' => $this->migrationsPath('create_navigations_table.php'), + __DIR__.'/../database/migrations/create_navigations_table.php.stub' => $this->migrationsPath('create_navigations_table.php'), __DIR__.'/../database/migrations/create_navigation_trees_table.php.stub' => $this->migrationsPath('create_navigation_trees_table.php'), - __DIR__.'/../database/migrations/create_collections_table.php.stub' => $this->migrationsPath('create_collections_table.php'), - __DIR__.'/../database/migrations/create_blueprints_table.php.stub' => $this->migrationsPath('create_blueprints_table.php'), - __DIR__.'/../database/migrations/create_fieldsets_table.php.stub' => $this->migrationsPath('create_fieldsets_table.php'), - __DIR__.'/../database/migrations/create_forms_table.php.stub' => $this->migrationsPath('create_forms_table.php'), + __DIR__.'/../database/migrations/create_collections_table.php.stub' => $this->migrationsPath('create_collections_table.php'), + __DIR__.'/../database/migrations/create_blueprints_table.php.stub' => $this->migrationsPath('create_blueprints_table.php'), + __DIR__.'/../database/migrations/create_fieldsets_table.php.stub' => $this->migrationsPath('create_fieldsets_table.php'), + __DIR__.'/../database/migrations/create_forms_table.php.stub' => $this->migrationsPath('create_forms_table.php'), __DIR__.'/../database/migrations/create_form_submissions_table.php.stub' => $this->migrationsPath('create_form_submissions_table.php'), __DIR__.'/../database/migrations/create_asset_containers_table.php.stub' => $this->migrationsPath('create_asset_containers_table.php'), - __DIR__.'/../database/migrations/create_asset_table.php.stub' => $this->migrationsPath('create_asset_table.php'), - __DIR__.'/../database/migrations/create_revisions_table.php.stub' => $this->migrationsPath('create_revisions_table.php'), + __DIR__.'/../database/migrations/create_asset_table.php.stub' => $this->migrationsPath('create_asset_table.php'), + __DIR__.'/../database/migrations/create_revisions_table.php.stub' => $this->migrationsPath('create_revisions_table.php'), ], 'migrations'); $this->publishes([ diff --git a/tests/Entries/EntryTest.php b/tests/Entries/EntryTest.php index 7073b92a..30453d22 100644 --- a/tests/Entries/EntryTest.php +++ b/tests/Entries/EntryTest.php @@ -41,14 +41,14 @@ public function it_saves_to_entry_model() 'data' => [ 'foo' => 'bar', ], - 'site' => 'en', - 'uri' => '/blog/the-slug', - 'date' => null, + 'site' => 'en', + 'uri' => '/blog/the-slug', + 'date' => null, 'collection' => 'blog', - 'blueprint' => 'blog', - 'published' => false, - 'origin_id' => null, - 'order' => null, + 'blueprint' => 'blog', + 'published' => false, + 'origin_id' => null, + 'order' => null, ]); $collection = Collection::make('blog')->title('blog')->routes([ From 23796dca758260ecb0d1fb659b706f1bc9c9622d Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Thu, 11 Apr 2024 22:04:16 +0100 Subject: [PATCH 6/8] Revert --- src/Updates/DropForeignKeysOnEntriesAndForms.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Updates/DropForeignKeysOnEntriesAndForms.php b/src/Updates/DropForeignKeysOnEntriesAndForms.php index a3c178a9..b4a3b48d 100644 --- a/src/Updates/DropForeignKeysOnEntriesAndForms.php +++ b/src/Updates/DropForeignKeysOnEntriesAndForms.php @@ -4,17 +4,22 @@ use Statamic\UpdateScripts\UpdateScript; -class DropStatusOnEntries extends UpdateScript +class DropForeignKeysOnEntriesAndForms extends UpdateScript { public function shouldUpdate($newVersion, $oldVersion) { - return $this->isUpdatingTo('4.0.0'); + return $this->isUpdatingTo('2.3.0'); } public function update() { - $source = __DIR__.'/../../database/migrations/updates/drop_status_on_entries.php.stub'; - $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_status_on_entries.php'); + $source = __DIR__.'/../../database/migrations/updates/drop_foreign_keys_on_entries.php.stub'; + $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_foreign_keys_on_entries.php'); + + $this->files->copy($source, $dest); + + $source = __DIR__.'/../../database/migrations/updates/drop_foreign_keys_on_forms.php.stub'; + $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_foreign_keys_on_forms.php'); $this->files->copy($source, $dest); From 3fc6a343b48622d7fce5492ba5b231cb1478d9ed Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Thu, 11 Apr 2024 22:04:28 +0100 Subject: [PATCH 7/8] Proper update script --- src/Updates/DropStatusOnEntries.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/Updates/DropStatusOnEntries.php diff --git a/src/Updates/DropStatusOnEntries.php b/src/Updates/DropStatusOnEntries.php new file mode 100644 index 00000000..a3c178a9 --- /dev/null +++ b/src/Updates/DropStatusOnEntries.php @@ -0,0 +1,24 @@ +isUpdatingTo('4.0.0'); + } + + public function update() + { + $source = __DIR__.'/../../database/migrations/updates/drop_status_on_entries.php.stub'; + $dest = database_path('migrations/'.date('Y_m_d_His').'_drop_status_on_entries.php'); + + $this->files->copy($source, $dest); + + $this->console()->info('Migrations created'); + $this->console()->comment('Remember to run `php artisan migrate` to apply it to your database.'); + } +} From 852d5329daccca21bd99c26e1c8c67f8904a2956 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Fri, 12 Apr 2024 06:36:47 +0100 Subject: [PATCH 8/8] Make status nullable in down migration --- database/migrations/updates/drop_status_on_entries.php.stub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/updates/drop_status_on_entries.php.stub b/database/migrations/updates/drop_status_on_entries.php.stub index d3d74d72..2681363d 100644 --- a/database/migrations/updates/drop_status_on_entries.php.stub +++ b/database/migrations/updates/drop_status_on_entries.php.stub @@ -15,7 +15,7 @@ return new class extends Migration { public function down() { Schema::table($this->prefix('entries'), function (Blueprint $table) { - $table->string('status'); + $table->string('status')->nullable(); }); } };