From a49143563f16f33da96e2e0c644b48e38415dde9 Mon Sep 17 00:00:00 2001 From: el-schneider Date: Mon, 30 Mar 2026 12:42:04 +0200 Subject: [PATCH 1/2] feat: filter creatable blueprints by config --- src/Fieldtypes/Entries.php | 6 +++ .../Fieldtypes/RelationshipFieldtypeTest.php | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/Fieldtypes/Entries.php b/src/Fieldtypes/Entries.php index c2196dcf480..c977ecfec49 100644 --- a/src/Fieldtypes/Entries.php +++ b/src/Fieldtypes/Entries.php @@ -330,6 +330,12 @@ protected function getCreatables() $blueprints = $collection->entryBlueprints(); + if ($createBlueprints = $this->config('create_blueprints')) { + $blueprints = $blueprints->filter( + fn ($blueprint) => in_array($blueprint->handle(), $createBlueprints) + ); + } + return $blueprints ->reject->hidden() ->map(function ($blueprint) use ($collection, $collections, $blueprints) { diff --git a/tests/Feature/Fieldtypes/RelationshipFieldtypeTest.php b/tests/Feature/Fieldtypes/RelationshipFieldtypeTest.php index 3bb3c04d1a4..2c46520a1cd 100644 --- a/tests/Feature/Fieldtypes/RelationshipFieldtypeTest.php +++ b/tests/Feature/Fieldtypes/RelationshipFieldtypeTest.php @@ -2,12 +2,16 @@ namespace Tests\Feature\Fieldtypes; +use Facades\Statamic\Fields\BlueprintRepository; use PHPUnit\Framework\Attributes\Test; +use Statamic\Facades\Blueprint; use Statamic\Facades\Collection; use Statamic\Facades\Entry; use Statamic\Facades\Taxonomy; use Statamic\Facades\Term; use Statamic\Facades\User; +use Statamic\Fields\Field; +use Statamic\Fieldtypes\Entries; use Statamic\Query\Scopes\Scope; use Tests\FakesRoles; use Tests\PreventSavingStacheItemsToDisk; @@ -187,6 +191,41 @@ public function it_forbids_access_to_terms_when_the_user_cannot_view_any_of_the_ ->getJson("/cp/fieldtypes/relationship?config={$config}") ->assertForbidden(); } + + #[Test] + public function it_filters_creatable_blueprints_using_create_blueprints_config() + { + $article = Blueprint::makeFromFields([])->setHandle('article')->setNamespace('collections.test'); + $page = Blueprint::makeFromFields([])->setHandle('page')->setNamespace('collections.test'); + + BlueprintRepository::partialMock(); + BlueprintRepository::shouldReceive('in')->with('collections/test')->andReturn(collect([ + 'article' => $article, + 'page' => $page, + ])); + + $this->setTestRoles(['test' => ['access cp', 'view test entries', 'create test entries']]); + $user = User::make()->assignRole('test')->save(); + + $this->actingAs($user); + + $fieldtype = $this->entriesFieldtype([ + 'collections' => ['test'], + 'create_blueprints' => ['article'], + ]); + + $creatables = $fieldtype->preload()['creatables']; + + $this->assertCount(1, $creatables); + $this->assertStringContainsString('blueprint=article', $creatables[0]['url']); + } + + private function entriesFieldtype($config = []) + { + $field = new Field('test', array_merge(['type' => 'entries'], $config)); + + return (new Entries)->setField($field); + } } class StartsWithC extends Scope From f3051f23c732ceeca40425dae36d21eec16dadaf Mon Sep 17 00:00:00 2001 From: el-schneider Date: Mon, 30 Mar 2026 12:53:31 +0200 Subject: [PATCH 2/2] retrigger CI after base branch change