diff --git a/src/Hooks/CP/EntriesIndexQuery.php b/src/Hooks/CP/EntriesIndexQuery.php new file mode 100644 index 0000000000..dd724a508a --- /dev/null +++ b/src/Hooks/CP/EntriesIndexQuery.php @@ -0,0 +1,25 @@ +runHooksWith('query', [ + 'query' => $this->query, + 'collection' => $this->collection, + ]); + + return $payload->query->paginate($perPage); + } +} diff --git a/src/Hooks/Payload.php b/src/Hooks/Payload.php new file mode 100644 index 0000000000..84091ebe8d --- /dev/null +++ b/src/Hooks/Payload.php @@ -0,0 +1,21 @@ +payload[$key] ?? null; + } + + public function __set($key, $value) + { + $this->payload[$key] = $value; + } +} diff --git a/src/Http/Controllers/CP/Collections/EntriesController.php b/src/Http/Controllers/CP/Collections/EntriesController.php index 4ed54a58ea..e23d0b8038 100644 --- a/src/Http/Controllers/CP/Collections/EntriesController.php +++ b/src/Http/Controllers/CP/Collections/EntriesController.php @@ -13,6 +13,7 @@ use Statamic\Facades\Site; use Statamic\Facades\Stache; use Statamic\Facades\User; +use Statamic\Hooks\CP\EntriesIndexQuery; use Statamic\Http\Controllers\CP\CpController; use Statamic\Http\Requests\FilteredRequest; use Statamic\Http\Resources\CP\Entries\Entries; @@ -49,7 +50,7 @@ public function index(FilteredRequest $request, $collection) $query->orderBy($sortField, $sortDirection); } - $entries = $query->paginate(request('perPage')); + $entries = (new EntriesIndexQuery($query, $collection))->paginate(request('perPage')); if (request('search') && $collection->hasSearchIndex()) { $entries->setCollection($entries->getCollection()->map->getSearchable()); diff --git a/src/Support/Traits/Hookable.php b/src/Support/Traits/Hookable.php index aab94ffecd..f65927438d 100644 --- a/src/Support/Traits/Hookable.php +++ b/src/Support/Traits/Hookable.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Pipeline\Pipeline; +use Statamic\Hooks\Payload; trait Hookable { @@ -46,4 +47,9 @@ protected function runHooks(string $name, $payload = null) ->through($closures->all()) ->thenReturn(); } + + protected function runHooksWith(string $name, array $payload) + { + return $this->runHooks($name, new Payload($payload)); + } }