Skip to content

Commit 1b3c29d

Browse files
committed
Merge branch '5.x' into 6.x
2 parents 8cef4a4 + 5dda35e commit 1b3c29d

11 files changed

Lines changed: 77 additions & 9 deletions

File tree

src/Fieldtypes/Entries.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Statamic\Facades\User;
2020
use Statamic\Http\Resources\CP\Entries\EntriesFieldtypeEntries;
2121
use Statamic\Http\Resources\CP\Entries\EntriesFieldtypeEntry as EntryResource;
22+
use Statamic\Query\OrderBy;
2223
use Statamic\Query\OrderedQueryBuilder;
2324
use Statamic\Query\Scopes\Filter;
2425
use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters;
@@ -232,7 +233,7 @@ protected function getFirstCollectionFromRequest($request)
232233

233234
public function getSortColumn($request)
234235
{
235-
$column = $request->sort ?? 'title';
236+
$column = OrderBy::column($request->sort, 'title');
236237

237238
if (! $request->sort && ! $request->search && count($this->getConfiguredCollections()) < 2) {
238239
$column = $this->getFirstCollectionFromRequest($request)->sortField();

src/Fieldtypes/Relationship.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Statamic\CP\Column;
99
use Statamic\Facades\Scope;
1010
use Statamic\Fields\Fieldtype;
11+
use Statamic\Query\OrderBy;
1112

1213
abstract class Relationship extends Fieldtype
1314
{
@@ -312,7 +313,7 @@ public function filterExcludedItems($items, $exclusions)
312313

313314
public function getSortColumn($request)
314315
{
315-
return $request->get('sort');
316+
return OrderBy::column($request->get('sort'));
316317
}
317318

318319
public function getSortDirection($request)

src/Fieldtypes/Terms.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Statamic\Facades\User;
2222
use Statamic\GraphQL\Types\TermInterface;
2323
use Statamic\Http\Resources\CP\Taxonomies\TermsFieldtypeTerms as TermsResource;
24+
use Statamic\Query\OrderBy;
2425
use Statamic\Query\OrderedQueryBuilder;
2526
use Statamic\Query\Scopes\Filter;
2627
use Statamic\Query\Scopes\Filters\Fields\Terms as TermsFilter;
@@ -336,7 +337,7 @@ protected function getFirstTaxonomyFromRequest($request)
336337

337338
public function getSortColumn($request)
338339
{
339-
$column = $request->get('sort');
340+
$column = OrderBy::column($request->get('sort'));
340341

341342
if (! $column && ! $request->search) {
342343
$column = 'title'; // todo: get from taxonomy or config

src/Http/Controllers/API/ApiController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Statamic\Facades\Scope;
99
use Statamic\Facades\Site;
1010
use Statamic\Http\Controllers\Controller;
11+
use Statamic\Query\OrderBy;
1112
use Statamic\Support\Arr;
1213
use Statamic\Support\Str;
1314
use Statamic\Tags\Concerns\QueriesConditions;
@@ -246,7 +247,9 @@ protected function sort($query)
246247
$order = 'desc';
247248
}
248249

249-
$query->orderBy($sort, $order);
250+
if ($sort = OrderBy::column($sort)) {
251+
$query->orderBy($sort, $order);
252+
}
250253
});
251254

252255
return $this;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Statamic\Http\Requests\FilteredRequest;
1919
use Statamic\Http\Resources\CP\Entries\Entries;
2020
use Statamic\Http\Resources\CP\Entries\Entry as EntryResource;
21+
use Statamic\Query\OrderBy;
2122
use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters;
2223
use Statamic\Support\Arr;
2324
use Statamic\Support\Str;
@@ -40,7 +41,7 @@ public function index(FilteredRequest $request, $collection)
4041
'blueprints' => $collection->entryBlueprints()->map->handle(),
4142
]);
4243

43-
$sortField = request('sort');
44+
$sortField = OrderBy::column(request('sort'));
4445
$sortDirection = request('order', 'asc');
4546

4647
if (! $sortField && ! request('search')) {

src/Http/Controllers/CP/Forms/FormSubmissionsController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Statamic\Http\Controllers\CP\CpController;
88
use Statamic\Http\Requests\FilteredRequest;
99
use Statamic\Http\Resources\CP\Submissions\Submissions;
10+
use Statamic\Query\OrderBy;
1011
use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters;
1112

1213
class FormSubmissionsController extends CpController
@@ -27,7 +28,7 @@ public function index(FilteredRequest $request, $form)
2728
'form' => $form->handle(),
2829
]);
2930

30-
$sortField = request('sort', 'date');
31+
$sortField = OrderBy::column(request('sort'), 'date');
3132
$sortDirection = request('order', $sortField === 'date' ? 'desc' : 'asc');
3233

3334
if ($sortField) {

src/Http/Controllers/CP/Taxonomies/TermsController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Statamic\Http\Requests\FilteredRequest;
1414
use Statamic\Http\Resources\CP\Taxonomies\Term as TermResource;
1515
use Statamic\Http\Resources\CP\Taxonomies\Terms;
16+
use Statamic\Query\OrderBy;
1617
use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters;
1718
use Statamic\Rules\Slug;
1819
use Statamic\Rules\UniqueTermValue;
@@ -33,7 +34,7 @@ public function index(FilteredRequest $request, $taxonomy)
3334
'blueprints' => $taxonomy->termBlueprints()->map->handle(),
3435
]);
3536

36-
$sortField = request('sort');
37+
$sortField = OrderBy::column(request('sort'));
3738
$sortDirection = request('order', 'asc');
3839

3940
if (! $sortField && ! request('search')) {

src/Http/Controllers/CP/Users/UsersController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Statamic\Http\Requests\FilteredRequest;
1919
use Statamic\Http\Resources\CP\Users\Users;
2020
use Statamic\Notifications\ActivateAccount;
21+
use Statamic\Query\OrderBy;
2122
use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters;
2223
use Statamic\Rules\UniqueUserValue;
2324
use Statamic\Search\Result;
@@ -80,7 +81,7 @@ protected function json($request)
8081
'blueprints' => ['user'],
8182
]);
8283

83-
$sortField = request('sort');
84+
$sortField = OrderBy::column(request('sort'));
8485
$sortDirection = request('order', 'asc');
8586

8687
if (! $sortField && ! request('search')) {

src/Query/OrderBy.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ public function __construct(string $sort, string $direction)
2222
$this->direction = $direction;
2323
}
2424

25+
public static function column(?string $value, ?string $default = null): ?string
26+
{
27+
if ($value && preg_match('/^[\w]+((\->|[.])[\w]+)*$/', $value)) {
28+
return $value;
29+
}
30+
31+
return $default;
32+
}
33+
2534
/**
2635
* Instantiate order by object.
2736
*

src/Tags/Concerns/QueriesOrderBys.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ protected function parseOrderBys()
3232

3333
return collect(explode('|', $piped ?? ''))->filter()->map(function ($orderBy) {
3434
return OrderBy::parse($orderBy);
35-
});
35+
})->filter(fn ($orderBy) => OrderBy::column($orderBy->sort));
3636
}
3737

3838
protected function preParsedOrderBys()

0 commit comments

Comments
 (0)