Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/controllers/ElementsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ public function actionEdit(?ElementInterface $element, ?int $elementId = null):
[$docTitle, $title] = $this->_editElementTitles($element);
$enabledForSite = $element->getEnabledForSite();
$hasRoute = $element->getRoute() !== null;
$redirectUrl = $this->request->getValidatedQueryParam('returnUrl') ?? ElementHelper::postEditUrl($element);
$redirectUrl = $this->request->getValidatedQueryParam('returnUrl') ?? UrlHelper::cpReferralUrl() ?? ElementHelper::postEditUrl($element);

// Site statuses
if ($canEditMultipleSites) {
Expand Down
12 changes: 10 additions & 2 deletions src/helpers/UrlHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -584,8 +584,7 @@ public static function cpReferralUrl(): ?string
{
$referrer = Craft::$app->getRequest()->getReferrer();

// Make sure it didn't refer itself
if ($referrer === Craft::$app->getRequest()->getFullUri()) {
if ($referrer === null) {
return null;
}

Expand All @@ -594,6 +593,15 @@ public static function cpReferralUrl(): ?string
return null;
}

// to ensure we're comparing uris strip base cp url and query string from the referrer first
$referrerFullUri = ltrim(str_replace(self::baseCpUrl(), '', $referrer), '/');
$referrerFullUri = substr($referrerFullUri, 0, strpos($referrerFullUri, '?') ?: null);

// Make sure it didn't refer itself
if ($referrerFullUri === Craft::$app->getRequest()->getFullUri()) {
return null;
}

return $referrer;
}

Expand Down
Loading