From dfa8ce1ad486de1ba593f141240bbd0025848e55 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Thu, 23 Apr 2020 15:51:58 +0300 Subject: [PATCH] Fixed Flex Page parent `header.admin.children_display_order` setting being ignored in Admin [#2881] --- CHANGELOG.md | 3 +- .../Common/Flex/Types/Pages/PageIndex.php | 31 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc6f3655a..687563979 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,11 @@ 1. [](#bugfix) * Fixed flex objects with integer keys not working [#2863](https://github.com/getgrav/grav/issues/2863) * Fixed `Pages::instances()` returning null values when using `Flex Pages` [#2889](https://github.com/getgrav/grav/issues/2889) + * Fixed Flex Page parent `header.admin.children_display_order` setting being ignored in Admin [#2881](https://github.com/getgrav/grav/issues/2881) + * Implemented missing Flex `$pageCollection->batch()` and `$pageCollection->order()` methods * Fixed user avatar creation for new `Flex Users` when using folder storage * Fixed `Trying to access array offset on value of type null` PHP 7.4 error in `Plugin.php` * Fixed Gregwar Image library using `.jpeg` for cached images, rather use `.jpg` - * Implemented missing Flex `$pageCollection->batch()` and `$pageCollection->order()` methods # v1.7.0-rc.8 ## 03/19/2020 diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php b/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php index ad4196f90..29abbe550 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php @@ -16,6 +16,7 @@ use Grav\Common\File\CompiledJsonFile; use Grav\Common\Flex\Traits\FlexGravTrait; use Grav\Common\Flex\Traits\FlexIndexTrait; use Grav\Common\Grav; +use Grav\Common\Page\Header; use Grav\Common\Page\Interfaces\PageCollectionInterface; use Grav\Common\Page\Interfaces\PageInterface; use Grav\Common\Utils; @@ -266,12 +267,20 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface */ public function getLevelListing(array $options): array { + // Undocumented B/C + $order = $options['order'] ?? 'asc'; + if ($order === SORT_ASC) { + $options['order'] = 'asc'; + } elseif ($order === SORT_DESC) { + $options['order'] = 'desc'; + } + $options += [ 'field' => null, 'route' => null, 'leaf_route' => null, 'sortby' => null, - 'order' => SORT_ASC, + 'order' => 'asc', 'lang' => null, 'filters' => [], ]; @@ -395,6 +404,21 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface $children = $page->children()->getIndex(); $selectedChildren = $children->filterBy($filters, true); + /** @var Header $header */ + $header = $page->header(); + + if ($header->get('admin.children_display_order') === 'collection' && ($orderby = $header->get('content.order.by'))) { + // Use custom sorting by page header. + $sortby = $orderby; + $order = $header->get('content.order.dir', $order); + $custom = $header->get('content.order.custom'); + } + + if ($sortby) { + // Sort children. + $selectedChildren = $selectedChildren->order($sortby, $order, $custom ?? null); + } + /** @var PageObject $child */ foreach ($selectedChildren as $child) { $selected = $child->path() === $extra; @@ -485,11 +509,6 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface $msg = 'PLUGIN_ADMIN.PAGE_ROUTE_NOT_FOUND'; } - // Sorting - if ($sortby) { - $response = Utils::sortArrayByKey($response, $sortby, $order); - } - if ($field) { $temp_array = []; foreach ($response as $index => $item) {