From 170afbaa739d504dccf1dfa4cf1cc06741949561 Mon Sep 17 00:00:00 2001 From: Tony Air Date: Mon, 11 Mar 2024 17:39:27 +0200 Subject: [PATCH] FIX: Json response --- src/Ajax/Ex/AjaxControllerEx.php | 38 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/Ajax/Ex/AjaxControllerEx.php b/src/Ajax/Ex/AjaxControllerEx.php index 9bdf465..0d427dd 100755 --- a/src/Ajax/Ex/AjaxControllerEx.php +++ b/src/Ajax/Ex/AjaxControllerEx.php @@ -78,7 +78,7 @@ class AjaxControllerEx extends Extension //$form->addExtraClass('ajax-form'); - if ($form->get_protector()) { + if (Director::isLive() && $form->get_protector()) { $form->enableSpamProtection(); } @@ -113,7 +113,7 @@ class AjaxControllerEx extends Extension ) ); - if ($form->get_protector()) { + if (Director::isLive() && $form->get_protector()) { $form->enableSpamProtection(); } @@ -186,6 +186,12 @@ class AjaxControllerEx extends Extension return SSViewer::create($tpl); } + private static function isJson($str) + { + $json = json_decode($str); + return $json && $str != $json; + } + public function prepareAjaxResponse($response) { $ctrl = $this->owner; @@ -201,16 +207,22 @@ class AjaxControllerEx extends Extension $ctrl->config()->get('ajax_resources') ); - $response->setBody(json_encode([ - 'ID' => $record->ID, - 'Title' => $record->Title, - 'Link' => $ctrl->Link(), - 'CSSClass' => $ctrl->CSSClass(), - 'Resources' => $resources, - 'RequestLink' => $url, - 'MainContent' => $ctrl->customise([ - 'Layout' => DBHTMLText::create()->setValue($response->getBody()), - ])->renderWith('Includes/MainContent')->RAW(), - ])); + $body = $response->getBody(); + + if (!self::isJson($body)) { + $body = json_encode([ + 'ID' => $record->ID, + 'Title' => $record->Title, + 'Link' => $ctrl->Link(), + 'CSSClass' => $ctrl->CSSClass(), + 'Resources' => $resources, + 'RequestLink' => $url, + 'MainContent' => $ctrl->customise([ + 'Layout' => DBHTMLText::create()->setValue($response->getBody()), + ])->renderWith('Includes/MainContent')->RAW(), + ]); + } + + $response->setBody($body); } }