diff --git a/admin/javascript/LeftAndMain.js b/admin/javascript/LeftAndMain.js index 7ae70881c..c63787bd0 100644 --- a/admin/javascript/LeftAndMain.js +++ b/admin/javascript/LeftAndMain.js @@ -188,7 +188,7 @@ jQuery.noConflict(); } // Show message (but ignore aborted requests) - if(xhr.status !== 0 && msg && $.inArray(msg, ignoredMessages)) { + if(xhr.status !== 0 && msg && $.inArray(msg, ignoredMessages) === -1) { // Decode into UTF-8, HTTP headers don't allow multibyte statusMessage(decodeURIComponent(msg), msgType); } @@ -261,7 +261,7 @@ jQuery.noConflict(); fromWindow: { onstatechange: function(e){ - this.handleStateChange(e); + this.handleStateChange(e); } }, @@ -365,7 +365,7 @@ jQuery.noConflict(); /** * Confirm whether the current user can navigate away from this page - * + * * @param {array} selectors Optional list of selectors * @returns {boolean} True if the navigation can proceed */ @@ -521,7 +521,7 @@ jQuery.noConflict(); * Last html5 history state */ LastState: null, - + /** * Flag to pause handleStateChange */ @@ -553,7 +553,7 @@ jQuery.noConflict(); if(this.getPauseState()) { return; } - + // Don't allow parallel loading to avoid edge cases if(this.getStateChangeXHR()) this.getStateChangeXHR().abort(); @@ -576,12 +576,12 @@ jQuery.noConflict(); if(h.emulated.pushState) { return; } - + var lastState = this.getLastState(); - + // Suppress panel loading while resetting state this.setPauseState(true); - + // Restore best last state if(lastState) { h.pushState(lastState.id, lastState.title, lastState.url); @@ -589,7 +589,7 @@ jQuery.noConflict(); h.back(); } this.setPauseState(false); - + // Abort loading of this panel return; } diff --git a/model/Versioned.php b/model/Versioned.php index d342896ed..0b4e720cf 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -1478,10 +1478,13 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { */ public function isLatestVersion() { $version = self::get_latest_version($this->owner->class, $this->owner->ID); - + if($version) { return ($version->Version == $this->owner->Version); } + return false; + } + /** * Return the equivalent of a DataList::create() call, querying the latest * version of each page stored in the (class)_versions tables. diff --git a/security/Security.php b/security/Security.php index 54e1ffe45..e48ed5db2 100644 --- a/security/Security.php +++ b/security/Security.php @@ -275,9 +275,12 @@ class Security extends Controller implements TemplateGlobalProvider { $form = $me->LoginForm(); $form->sessionMessage($message, 'warning'); Session::set('MemberLoginForm.force_message',1); - $formText = $me->login(); + $loginResponse = $me->login(); + if($loginResponse instanceof SS_HTTPResponse) { + return $loginResponse; + } - $response->setBody($formText); + $response->setBody((string)$loginResponse); $controller->extend('permissionDenied', $member); @@ -502,7 +505,7 @@ class Security extends Controller implements TemplateGlobalProvider { * For multiple authenticators, Security_MultiAuthenticatorLogin is used. * See getTemplatesFor and getIncludeTemplate for how to override template logic * - * @return string Returns the "login" page as HTML code. + * @return string|SS_HTTPResponse Returns the "login" page as HTML code. */ public function login() { // Check pre-login process diff --git a/tests/core/manifest/fixtures/configmanifest/mysite/_config/empty.yml b/tests/core/manifest/fixtures/configmanifest/mysite/_config/empty.yml new file mode 100644 index 000000000..e69de29bb diff --git a/tests/core/manifest/fixtures/configmanifest/mysite/_config/namedempty.yml b/tests/core/manifest/fixtures/configmanifest/mysite/_config/namedempty.yml new file mode 100644 index 000000000..7ce2d4818 --- /dev/null +++ b/tests/core/manifest/fixtures/configmanifest/mysite/_config/namedempty.yml @@ -0,0 +1,3 @@ +--- +Name: emptyconfig +---