From fcee2600f18e453b43de58d592488c20bd54c77d Mon Sep 17 00:00:00 2001 From: devjin Date: Thu, 18 Oct 2012 07:55:57 +0000 Subject: [PATCH] issue 2596 add a js callback method. git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11774 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 7 +++++-- classes/display/DisplayHandler.class.php | 7 ++++++- classes/display/JSCallbackDisplayHandler.php | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 classes/display/JSCallbackDisplayHandler.php diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 8369beb66..8d7a53b9a 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -794,7 +794,7 @@ class Context { function setResponseMethod($method='HTML') { is_a($this,'Context')?$self=&$this:$self=&Context::getInstance(); - $methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1); + $methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1, 'JS_CALLBACK' => 1); $self->response_method = isset($methods[$method]) ? $method : 'HTML'; } @@ -809,7 +809,7 @@ class Context { if($self->response_method) return $self->response_method; $method = $self->getRequestMethod(); - $methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1); + $methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1, 'JS_CALLBACK' => 1); return isset($methods[$method]) ? $method : 'HTML'; } @@ -823,9 +823,12 @@ class Context { function setRequestMethod($type='') { is_a($this,'Context')?$self=&$this:$self=&Context::getInstance(); + $xe_js_callback = isset($_GET['xe_js_callback']) ? $_GET['xe_js_callback'] : $_POST['xe_js_callback']; + ($type && $self->request_method=$type) or (strpos($_SERVER['CONTENT_TYPE'],'json') && $self->request_method='JSON') or ($GLOBALS['HTTP_RAW_POST_DATA'] && $self->request_method='XMLRPC') or + ($xe_js_callback && $self->request_method='JS_CALLBACK') or ($self->request_method = $_SERVER['REQUEST_METHOD']); } diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index c1145e1d0..ea3c389b4 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -43,6 +43,11 @@ require_once("./classes/display/JSONDisplayHandler.php"); $handler = new JSONDisplayHandler(); } + else if(Context::getRequestMethod() == 'JS_CALLBACK') + { + require_once("./classes/display/JSCallbackDisplayHandler.php"); + $handler = new JSCallbackDisplayHandler(); + } else { require_once("./classes/display/HTMLDisplayHandler.php"); $handler = new HTMLDisplayHandler(); @@ -65,7 +70,7 @@ if($httpStatusCode && $httpStatusCode != 200) $this->_printHttpStatusCode($httpStatusCode); else { - if(Context::getResponseMethod() == 'JSON') $this->_printJSONHeader(); + if(Context::getResponseMethod() == 'JSON' || Context::getResponseMethod() == 'JS_CALLBACK') $this->_printJSONHeader(); else if(Context::getResponseMethod() != 'HTML') $this->_printXMLHeader(); else $this->_printHTMLHeader(); } diff --git a/classes/display/JSCallbackDisplayHandler.php b/classes/display/JSCallbackDisplayHandler.php new file mode 100644 index 000000000..c07fe2c41 --- /dev/null +++ b/classes/display/JSCallbackDisplayHandler.php @@ -0,0 +1,18 @@ +getVariables(); + $variables['error'] = $oModule->getError(); + $variables['message'] = $oModule->getMessage(); + $json = str_replace(array("\r\n","\n","\t"),array('\n','\n','\t'),json_encode2($variables)); + $output = sprintf('', Context::get('xe_js_callback'), $json); + return $output; + } +}