diff --git a/code/CMSMenu.php b/code/CMSMenu.php index b1be43881..50a8882f3 100644 --- a/code/CMSMenu.php +++ b/code/CMSMenu.php @@ -264,7 +264,7 @@ public static function get_viewable_menu_items($member = null) $controllerObj = singleton($menuItem->controller); if (Controller::has_curr()) { // Necessary for canView() to have request data available, - // e.g. to check permissions against LeftAndMain->currentPage() + // e.g. to check permissions against LeftAndMain->currentRecord() $controllerObj->setRequest(Controller::curr()->getRequest()); if (!$controllerObj->canView($member)) { continue; diff --git a/code/CMSProfileController.php b/code/CMSProfileController.php index 8ef85ae74..56f1c5ffd 100644 --- a/code/CMSProfileController.php +++ b/code/CMSProfileController.php @@ -28,7 +28,7 @@ protected function init() { parent::init(); if (!$this->getResponse()->isRedirect()) { - $this->setCurrentPageID(Security::getCurrentUser()->ID); + $this->setCurrentRecordID(Security::getCurrentUser()->ID); } } diff --git a/code/LeftAndMain.php b/code/LeftAndMain.php index 1e6f29b65..142519733 100644 --- a/code/LeftAndMain.php +++ b/code/LeftAndMain.php @@ -119,6 +119,7 @@ class LeftAndMain extends FormSchemaController implements PermissionProvider * Current pageID for this request * * @var null + * @deprecated 2.4.0 Will be renamed to recordID. */ protected $pageID = null; @@ -583,7 +584,7 @@ public static function menu_icon_class_for_class($class) public function show(HTTPRequest $request): HTTPResponse { if ($request->param('ID')) { - $this->setCurrentPageID($request->param('ID')); + $this->setCurrentRecordID($request->param('ID')); } return $this->getResponseNegotiator()->respond($request); } @@ -866,7 +867,7 @@ public function save(array $data, Form $form): HTTPResponse $form->saveInto($record, true); $record->write(); $this->extend('onAfterSave', $record); - $this->setCurrentPageID($record->ID); + $this->setCurrentRecordID($record->ID); $message = _t(__CLASS__ . '.SAVEDUP', 'Saved.'); if ($this->getSchemaRequested()) { @@ -957,7 +958,7 @@ public function EditForm($request = null) public function getEditForm($id = null, $fields = null) { if (!$id) { - $id = $this->currentPageID(); + $id = $this->currentRecordID(); } // Check record exists @@ -1186,7 +1187,7 @@ public function BatchActionsForm() public function printable() { - $form = $this->getEditForm($this->currentPageID()); + $form = $this->getEditForm($this->currentRecordID()); if (!$form) { return false; } @@ -1209,7 +1210,7 @@ public function printable() public function getSilverStripeNavigator(?DataObject $record = null) { if (!$record) { - $record = $this->currentPage(); + $record = $this->currentRecord(); } if ($record && (($record instanceof CMSPreviewable) || $record->has_extension(CMSPreviewable::class))) { $navigator = new SilverStripeNavigator($record); @@ -1227,30 +1228,45 @@ public function getSilverStripeNavigator(?DataObject $record = null) * - Session value namespaced by classname, e.g. "CMSMain.currentPage" * * @return int + * @deprecated 5.4.0 use currentRecordID() instead. */ public function currentPageID() + { + Deprecation::notice('5.4.0', 'use currentRecordID() instead.'); + return $this->currentRecordID(); + } + + /** + * Identifier for the currently shown record, + * in most cases a database ID. Inspects the following + * sources (in this order): + * - GET/POST parameter named 'ID' + * - URL parameter named 'ID' + * - Session value namespaced by classname, e.g. "CMSMain.currentPage" + */ + public function currentRecordID(): ?int { if ($this->pageID) { return $this->pageID; } if ($this->getRequest()->requestVar('ID') && is_numeric($this->getRequest()->requestVar('ID'))) { - return $this->getRequest()->requestVar('ID'); + return (int) $this->getRequest()->requestVar('ID'); } if ($this->getRequest()->requestVar('CMSMainCurrentPageID') && is_numeric($this->getRequest()->requestVar('CMSMainCurrentPageID'))) { // see GridFieldDetailForm::ItemEditForm - return $this->getRequest()->requestVar('CMSMainCurrentPageID'); + return (int) $this->getRequest()->requestVar('CMSMainCurrentPageID'); } if (isset($this->urlParams['ID']) && is_numeric($this->urlParams['ID'])) { - return $this->urlParams['ID']; + return (int) $this->urlParams['ID']; } if (is_numeric($this->getRequest()->param('ID'))) { - return $this->getRequest()->param('ID'); + return (int) $this->getRequest()->param('ID'); } - /** @deprecated */ + // Using session for this is deprecated - see https://github.com/silverstripe/silverstripe-admin/pull/19 $session = $this->getRequest()->getSession(); return $session->get($this->sessionNamespace() . ".currentPage") ?: null; } @@ -1262,12 +1278,23 @@ public function currentPageID() * as a URL parameter will overrule this value. * * @param int $id + * @deprecated 5.4.0 use setCurrentRecordID() instead. */ public function setCurrentPageID($id) { - $this->pageID = $id; + Deprecation::notice('5.4.0', 'use setCurrentRecordID() instead.'); $id = (int)$id; - /** @deprecated */ + $this->setCurrentRecordID($id); + } + + /** + * Sets the ID for the current record which can be retrieved later through {@link currentRecordID()}. + * Keep in mind that setting an ID through GET/POST or as a URL parameter will overrule this value. + */ + public function setCurrentRecordID(?int $id): void + { + $this->pageID = $id; + // Setting session for this is deprecated - see https://github.com/silverstripe/silverstripe-admin/pull/19 $this->getRequest()->getSession()->set($this->sessionNamespace() . ".currentPage", $id); } @@ -1276,22 +1303,43 @@ public function setCurrentPageID($id) * to get the currently selected record. * * @return DataObject + * @deprecated 5.4.0 use currentRecord() instead. */ public function currentPage() { - return $this->getRecord($this->currentPageID()); + Deprecation::notice('5.4.0', 'use currentRecord() instead.'); + return $this->currentRecord(); + } + + /** + * Uses {@link getRecord()} and {@link currentRecordID()} + * to get the currently selected record. + */ + public function currentRecord(): ?DataObject + { + return $this->getRecord($this->currentRecordID()); } /** * Compares a given record to the currently selected one (if any). * Used for marking the current tree node. * - * @param DataObject $record * @return bool + * @deprecated 5.4.0 use isCurrentRecord() instead. */ public function isCurrentPage(DataObject $record) { - return ($record->ID == $this->currentPageID()); + Deprecation::notice('5.4.0', 'use isCurrentRecord() instead.'); + return $this->isCurrentRecord($record); + } + + /** + * Compares a given record to the currently selected one (if any). + * Used for marking the current tree node. + */ + public function isCurrentRecord(DataObject $record): bool + { + return ($record->ID == $this->currentRecordID()); } /** @@ -1350,7 +1398,7 @@ public function CMSVersionNumber() */ public function SwitchView() { - $page = $this->currentPage(); + $page = $this->currentRecord(); if (!$page) { return null; } diff --git a/code/LeftAndMain_SearchFilter.php b/code/LeftAndMain_SearchFilter.php index 1e96f54a6..87fbac695 100644 --- a/code/LeftAndMain_SearchFilter.php +++ b/code/LeftAndMain_SearchFilter.php @@ -32,6 +32,7 @@ public function getNumChildrenMethod(); * * @param DataObject $page * @return bool + * @deprecated 5.4.0 will be renamed to isRecordIncluded(). */ public function isPageIncluded($page); @@ -40,6 +41,7 @@ public function isPageIncluded($page); * * @param DataObject $page * @return array|string + * @deprecated 5.4.0 will be renamed to getRecordClasses(). */ public function getPageClasses($page); }