hasVersionedQuery($link)) { return; } // Skip if current mode matches default mode // See LeftAndMain::init() for example of this being overridden. $readingMode = $this->getReadingmode(); if ($readingMode === Versioned::get_default_reading_mode()) { return; } // Determine if query args are supported for the current mode $queryargs = VersionedReadingMode::toQueryString($readingMode); if (!$queryargs) { return; } // Decorate $link = Controller::join_links( $link, '?' . http_build_query($queryargs) ); } /** * Check if link contains versioned queryargs * * @param string $link * @return bool */ protected function hasVersionedQuery($link) { // Find querystrings $parts = explode('?', $link, 2); if (count($parts) < 2) { return false; } // Parse args $readingMode = VersionedReadingMode::fromQueryString($parts[1]); return !empty($readingMode); } /** * Get reading mode for the record / controller being decorated * * @return string */ protected function getReadingmode() { $default = Versioned::get_reading_mode(); // Non dataobjects use global mode if (! $this->owner instanceof DataObject) { return $default; } // Respect source query params (so records selected from live will have live urls) $queryParams = $this->owner->getSourceQueryParams(); return VersionedReadingMode::fromDataQueryParams($queryParams) // Fall back to default otherwise ?: $default; } }