Skip to content

Commit a491435

Browse files
committed
feat: filter creatable blueprints by config
1 parent 7e37196 commit a491435

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/Fieldtypes/Entries.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,12 @@ protected function getCreatables()
330330

331331
$blueprints = $collection->entryBlueprints();
332332

333+
if ($createBlueprints = $this->config('create_blueprints')) {
334+
$blueprints = $blueprints->filter(
335+
fn ($blueprint) => in_array($blueprint->handle(), $createBlueprints)
336+
);
337+
}
338+
333339
return $blueprints
334340
->reject->hidden()
335341
->map(function ($blueprint) use ($collection, $collections, $blueprints) {

tests/Feature/Fieldtypes/RelationshipFieldtypeTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
namespace Tests\Feature\Fieldtypes;
44

5+
use Facades\Statamic\Fields\BlueprintRepository;
56
use PHPUnit\Framework\Attributes\Test;
7+
use Statamic\Facades\Blueprint;
68
use Statamic\Facades\Collection;
79
use Statamic\Facades\Entry;
810
use Statamic\Facades\Taxonomy;
911
use Statamic\Facades\Term;
1012
use Statamic\Facades\User;
13+
use Statamic\Fields\Field;
14+
use Statamic\Fieldtypes\Entries;
1115
use Statamic\Query\Scopes\Scope;
1216
use Tests\FakesRoles;
1317
use Tests\PreventSavingStacheItemsToDisk;
@@ -187,6 +191,41 @@ public function it_forbids_access_to_terms_when_the_user_cannot_view_any_of_the_
187191
->getJson("/cp/fieldtypes/relationship?config={$config}")
188192
->assertForbidden();
189193
}
194+
195+
#[Test]
196+
public function it_filters_creatable_blueprints_using_create_blueprints_config()
197+
{
198+
$article = Blueprint::makeFromFields([])->setHandle('article')->setNamespace('collections.test');
199+
$page = Blueprint::makeFromFields([])->setHandle('page')->setNamespace('collections.test');
200+
201+
BlueprintRepository::partialMock();
202+
BlueprintRepository::shouldReceive('in')->with('collections/test')->andReturn(collect([
203+
'article' => $article,
204+
'page' => $page,
205+
]));
206+
207+
$this->setTestRoles(['test' => ['access cp', 'view test entries', 'create test entries']]);
208+
$user = User::make()->assignRole('test')->save();
209+
210+
$this->actingAs($user);
211+
212+
$fieldtype = $this->entriesFieldtype([
213+
'collections' => ['test'],
214+
'create_blueprints' => ['article'],
215+
]);
216+
217+
$creatables = $fieldtype->preload()['creatables'];
218+
219+
$this->assertCount(1, $creatables);
220+
$this->assertStringContainsString('blueprint=article', $creatables[0]['url']);
221+
}
222+
223+
private function entriesFieldtype($config = [])
224+
{
225+
$field = new Field('test', array_merge(['type' => 'entries'], $config));
226+
227+
return (new Entries)->setField($field);
228+
}
190229
}
191230

192231
class StartsWithC extends Scope

0 commit comments

Comments
 (0)