From b0414278f8a55b35bfe19ca1426f55cf7f1ed51e Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 15 Sep 2023 08:22:09 -0400 Subject: [PATCH] Update PagesEditor to throw descriptive exception when attempting to save a NullPage. This is to fix what were previously ambiguous error messages. --- wire/core/NullPage.php | 8 ++++++++ wire/core/PagesEditor.php | 12 ++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/wire/core/NullPage.php b/wire/core/NullPage.php index 2ad7af44..7d4dd9e0 100644 --- a/wire/core/NullPage.php +++ b/wire/core/NullPage.php @@ -97,6 +97,14 @@ class NullPage extends Page implements WireNull { */ public function isHidden() { return true; } + /** + * #pw-internal + * + * @return bool + * + */ + public function isNew() { return false; } + /** * #pw-internal * diff --git a/wire/core/PagesEditor.php b/wire/core/PagesEditor.php index f53c0919..937edfc2 100644 --- a/wire/core/PagesEditor.php +++ b/wire/core/PagesEditor.php @@ -447,9 +447,9 @@ class PagesEditor extends Wire { $language = null; // if language support active, switch to default language so that saved fields and hooks don't need to be aware of language - if($languages && $page->id != $user->id) { - $language = $user->language && $user->language->id ? $user->language : null; - if($language) $user->language = $languages->getDefault(); + if($languages && $page->id != $user->id && "$user->language") { + $language = $user->language; + $user->setLanguage($languages->getDefault()); } $reason = ''; @@ -457,8 +457,8 @@ class PagesEditor extends Wire { if($isNew) $this->pages->setupNew($page); if(!$this->isSaveable($page, $reason, '', $options)) { - if($language) $user->language = $language; - throw new WireException("Can’t save page {$page->id}: {$page->path}: $reason"); + if($language) $user->setLanguage($language); + throw new WireException(rtrim("Can’t save page (id=$page->id): $page->path", ": ") . ": $reason"); } if($page->hasStatus(Page::statusUnpublished) && $page->template->noUnpublish) { @@ -476,7 +476,7 @@ class PagesEditor extends Wire { if($options['adjustName']) $this->pages->names()->checkNameConflicts($page); if(!$this->savePageQuery($page, $options)) return false; $result = $this->savePageFinish($page, $isNew, $options); - if($language) $user->language = $language; // restore language + if($language) $user->setLanguage($language); // restore language return $result; }