mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-09 03:52:15 +09:00
Add RawDisplayHandler and fix RSS/Atom not producing the correct headers
This commit is contained in:
parent
35203b684d
commit
a405b91e42
5 changed files with 49 additions and 4 deletions
|
|
@ -1021,10 +1021,14 @@ class Context
|
||||||
* @param string $method Response method. [HTML|XMLRPC|JSON]
|
* @param string $method Response method. [HTML|XMLRPC|JSON]
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function setResponseMethod($method = 'HTML')
|
public static function setResponseMethod($method = 'HTML', $content_type = null)
|
||||||
{
|
{
|
||||||
$methods = array('HTML' => 1, 'XMLRPC' => 1, 'JSON' => 1, 'JS_CALLBACK' => 1);
|
$methods = array('HTML' => 1, 'XMLRPC' => 1, 'JSON' => 1, 'JS_CALLBACK' => 1, 'RAW' => 1);
|
||||||
self::$_instance->response_method = isset($methods[$method]) ? $method : 'HTML';
|
self::$_instance->response_method = isset($methods[$method]) ? $method : 'HTML';
|
||||||
|
if ($content_type)
|
||||||
|
{
|
||||||
|
self::$_instance->response_content_type = $content_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1040,7 +1044,7 @@ class Context
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = self::getRequestMethod();
|
$method = self::getRequestMethod();
|
||||||
$methods = array('HTML' => 1, 'XMLRPC' => 1, 'JSON' => 1, 'JS_CALLBACK' => 1);
|
$methods = array('HTML' => 1, 'XMLRPC' => 1, 'JSON' => 1, 'JS_CALLBACK' => 1, 'RAW' => 1);
|
||||||
|
|
||||||
return isset($methods[$method]) ? $method : 'HTML';
|
return isset($methods[$method]) ? $method : 'HTML';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,10 @@ class DisplayHandler extends Handler
|
||||||
$this->gz_enabled = FALSE;
|
$this->gz_enabled = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elseif(Context::getResponseMethod() == 'RAW')
|
||||||
|
{
|
||||||
|
$handler = new RawDisplayHandler();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$handler = new HTMLDisplayHandler();
|
$handler = new HTMLDisplayHandler();
|
||||||
|
|
@ -114,6 +118,10 @@ class DisplayHandler extends Handler
|
||||||
{
|
{
|
||||||
self::_printXMLHeader();
|
self::_printXMLHeader();
|
||||||
}
|
}
|
||||||
|
elseif(Context::getResponseMethod() == 'RAW' && $content_type = Context::get('response_content_type'))
|
||||||
|
{
|
||||||
|
self::_printCustomContentTypeHeader($content_type);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self::_printHTMLHeader();
|
self::_printHTMLHeader();
|
||||||
|
|
@ -329,6 +337,18 @@ class DisplayHandler extends Handler
|
||||||
{
|
{
|
||||||
header("Content-Type: application/json; charset=UTF-8");
|
header("Content-Type: application/json; charset=UTF-8");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* print a custom Content-Type header.
|
||||||
|
*
|
||||||
|
* @param string $content_type
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function _printCustomContentTypeHeader($content_type)
|
||||||
|
{
|
||||||
|
$charset = (strpos($content_type, 'text/') === 0) ? '; charset=UTF-8' : '';
|
||||||
|
header('Content-Type: ' . $content_type . $charset);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* print a HTTP HEADER for HTML, which is encoded in UTF-8
|
* print a HTTP HEADER for HTML, which is encoded in UTF-8
|
||||||
|
|
|
||||||
20
classes/display/RawDisplayHandler.php
Normal file
20
classes/display/RawDisplayHandler.php
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class RawDisplayHandler
|
||||||
|
{
|
||||||
|
function toDoc($oModule)
|
||||||
|
{
|
||||||
|
$tpl_path = $oModule->getTemplatePath();
|
||||||
|
$tpl_file = $oModule->getTemplateFile();
|
||||||
|
if ($tpl_path && $tpl_file)
|
||||||
|
{
|
||||||
|
$oTemplate = TemplateHandler::getInstance();
|
||||||
|
$output = $oTemplate->compile($tpl_path, $tpl_file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$output = '';
|
||||||
|
}
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -53,6 +53,7 @@ $GLOBALS['RX_AUTOLOAD_FILE_MAP'] = array_change_key_case(array(
|
||||||
'HTMLDisplayHandler' => 'classes/display/HTMLDisplayHandler.php',
|
'HTMLDisplayHandler' => 'classes/display/HTMLDisplayHandler.php',
|
||||||
'JSCallbackDisplayHandler' => 'classes/display/JSCallbackDisplayHandler.php',
|
'JSCallbackDisplayHandler' => 'classes/display/JSCallbackDisplayHandler.php',
|
||||||
'JSONDisplayHandler' => 'classes/display/JSONDisplayHandler.php',
|
'JSONDisplayHandler' => 'classes/display/JSONDisplayHandler.php',
|
||||||
|
'RawDisplayHandler' => 'classes/display/RawDisplayHandler.php',
|
||||||
'VirtualXMLDisplayHandler' => 'classes/display/VirtualXMLDisplayHandler.php',
|
'VirtualXMLDisplayHandler' => 'classes/display/VirtualXMLDisplayHandler.php',
|
||||||
'XMLDisplayHandler' => 'classes/display/XMLDisplayHandler.php',
|
'XMLDisplayHandler' => 'classes/display/XMLDisplayHandler.php',
|
||||||
'EditorHandler' => 'classes/editor/EditorHandler.class.php',
|
'EditorHandler' => 'classes/editor/EditorHandler.class.php',
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,7 @@ class rssView extends rss
|
||||||
Context::set('info', $info);
|
Context::set('info', $info);
|
||||||
|
|
||||||
// Set XML Output
|
// Set XML Output
|
||||||
Context::setResponseMethod('XMLRPC');
|
Context::setResponseMethod('RAW', 'text/xml');
|
||||||
$this->setTemplatePath($this->module_path . 'tpl/format');
|
$this->setTemplatePath($this->module_path . 'tpl/format');
|
||||||
$this->setTemplateFile($template);
|
$this->setTemplateFile($template);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue