diff --git a/src/Forms/GridField/GridFieldDetailForm_ItemRequest.php b/src/Forms/GridField/GridFieldDetailForm_ItemRequest.php index 9db76aac04e..f0631dadb11 100644 --- a/src/Forms/GridField/GridFieldDetailForm_ItemRequest.php +++ b/src/Forms/GridField/GridFieldDetailForm_ItemRequest.php @@ -7,6 +7,7 @@ use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\HTTPResponse; use SilverStripe\Control\RequestHandler; +use SilverStripe\Core\Convert; use SilverStripe\Forms\CompositeField; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\Form; @@ -14,6 +15,7 @@ use SilverStripe\Forms\HiddenField; use SilverStripe\Forms\LiteralField; use SilverStripe\ORM\ArrayList; +use SilverStripe\ORM\DataList; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\ORM\HasManyList; @@ -564,27 +566,19 @@ public function getEditLink($id) private function getAdjacentRecordID($offset) { $gridField = $this->getGridField(); + /** @var DataList $list */ $list = $gridField->getManipulatedList(); - $state = $gridField->getState(false); - $gridStateStr = $this->getStateManager()->getStateFromRequest($this->gridField, $this->getRequest()); - if (!empty($gridStateStr)) { - $state->setValue($gridStateStr); - } - $data = $state->getData(); - $paginator = $data->getData('GridFieldPaginator'); - if (!$paginator) { - return false; - } - - $currentPage = $paginator->getData('currentPage'); - $itemsPerPage = $paginator->getData('itemsPerPage'); - $limit = $itemsPerPage + 2; - $limitOffset = max(0, $itemsPerPage * ($currentPage-1) -1); - - $map = $list->limit($limit, $limitOffset)->column('ID'); + if ($offset > 0) { + $list = $list->where(["ID >= ?" => $this->record->ID]) + ->sort(['ID' => 'ASC']); + } else { + $list = $list->where(["ID <= ?" => $this->record->ID]) + ->sort(['ID' => 'DESC']); + } + $map = $list->limit(abs($offset)+1)->column('ID'); $index = array_search($this->record->ID, $map); - return isset($map[$index+$offset]) ? $map[$index+$offset] : false; + return isset($map[abs($offset)]) ? $map[abs($offset)] : false; } /**