From a4555e1271fdd4a4ae405718e082f928f512c0d1 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Mon, 18 Oct 2021 08:16:26 -0400 Subject: [PATCH] Fix issue where LanguageSupportPageNames::pageNotAvailableInLanguage wasn't working properly when redirect options selected --- wire/core/PagesRequest.php | 2 +- .../LanguageSupportPageNames.module | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/wire/core/PagesRequest.php b/wire/core/PagesRequest.php index de777f8d..4a17d967 100644 --- a/wire/core/PagesRequest.php +++ b/wire/core/PagesRequest.php @@ -367,7 +367,7 @@ class PagesRequest extends Wire { } // check for redirect - if($this->responseCode >= 300 && $this->responseCode < 400) { + if(empty($this->redirectUrl) && $this->responseCode >= 300 && $this->responseCode < 400) { // 301 permRedirect, 302 tempRedirect, 307 or 308 $this->setRedirectPath($info['redirect'], $info['response']); } diff --git a/wire/modules/LanguageSupport/LanguageSupportPageNames.module b/wire/modules/LanguageSupport/LanguageSupportPageNames.module index 145b92fb..0b0c26a5 100644 --- a/wire/modules/LanguageSupport/LanguageSupportPageNames.module +++ b/wire/modules/LanguageSupport/LanguageSupportPageNames.module @@ -178,7 +178,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM $language = $this->wire()->user->language; $pages = $this->wire()->pages; $page = $this->wire()->page; - $process = $page->process; + $process = $page ? $page->process : null; $pageNumUrlPrefix = $this->get("pageNumUrlPrefix$language"); if($process && $page->template->name === 'admin' && in_array('WirePageEditor', wireClassImplements($process))) { @@ -461,16 +461,29 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM if($page->editable()) return true; if($page->id == $this->wire()->config->http404PageID) return true; $redirect404 = (int) $this->redirect404; - if(!$redirect404 || $redirect404 === 404) return false; + if(!$redirect404 || $redirect404 === 404 || $language->isDefault()) return false; $default = $this->wire()->languages->getDefault(); if(!$page->viewable($default)) return false; if($redirect404 === 200) return true; - $url = $page->localUrl($default); - if($redirect404 === 301) return array(301, $url); - if($redirect404 === 302) return array(302, $url); + $url = $this->getPageUrl($page, $default); + if($redirect404 === 302 || $redirect404 === 301) return array($redirect404, $url); return false; } + /** + * Given a page and language, return the URL to the page in that language + * + * @param Page $page + * @param Language $language + * @return string + * @since 3.0.187 + * + */ + public function getPageUrl(Page $page, Language $language) { + $path = $this->getPagePath($page, $language); + return $this->wire()->config->urls->root . ltrim($path, '/'); + } + /** * Given a page and language, return the path to the page in that language *