Skip to content

Commit 6f7b790

Browse files
committed
Move filtering to the controller
1 parent 3fade8b commit 6f7b790

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

src/Http/Controllers/CP/Collections/CollectionTreeController.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\Request;
66
use Illuminate\Validation\ValidationException;
77
use Statamic\Contracts\Entries\Collection;
8+
use Statamic\Contracts\Entries\Entry as EntryContract;
89
use Statamic\Facades\Entry;
910
use Statamic\Facades\Site;
1011
use Statamic\Facades\User;
@@ -24,6 +25,18 @@ public function index(Request $request, Collection $collection)
2425
'site' => $site,
2526
]);
2627

28+
if (User::current()->cant('view-other-authors-entries', [EntryContract::class, $collection])) {
29+
$entriesFromOtherAuthors = collect($pages)
30+
->map(fn ($page) => Entry::find($page['entry']))
31+
->filter(fn ($entry) => $entry->blueprint()->hasField('author'))
32+
->filter(fn ($entry) => ! $entry->authors()->contains(User::current()->id()))
33+
->map->id();
34+
35+
$pages = collect($pages)
36+
->filter(fn ($page) => ! $entriesFromOtherAuthors->contains($page['entry']))
37+
->values()->all();
38+
}
39+
2740
return ['pages' => $pages];
2841
}
2942

src/Structures/CollectionStructure.php

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

33
namespace Statamic\Structures;
44

5-
use Statamic\Contracts\Entries\Entry;
65
use Statamic\Contracts\Structures\CollectionTree;
76
use Statamic\Contracts\Structures\CollectionTreeRepository;
87
use Statamic\Facades\Blink;
98
use Statamic\Facades\Collection;
10-
use Statamic\Facades\User;
119

1210
class CollectionStructure extends Structure
1311
{
@@ -76,16 +74,6 @@ public function validateTree(array $tree, string $locale): array
7674

7775
$thisCollectionsEntries = $this->collection()->queryEntries()
7876
->where('site', $locale)
79-
->when(User::current()->cant('view-other-authors-entries', [Entry::class, $this->collection()]), function ($query) {
80-
$blueprintsWithoutAuthor = $this->collection()->entryBlueprints()
81-
->filter(fn ($blueprint) => ! $blueprint->hasField('author'))
82-
->map->handle()->all();
83-
84-
$query->where(fn ($query) => $query
85-
->whereIn('blueprint', $blueprintsWithoutAuthor)
86-
->orWhere('author', User::current()->id())
87-
);
88-
})
8977
->pluck('id');
9078

9179
$otherCollectionEntries = $entryIds->diff($thisCollectionsEntries);

0 commit comments

Comments
 (0)