public function renderJson() { $options = XenForo_Application::get('options'); $maxid = Dark_TaigaChat_Helper_Global::processMessagesForView($this->_params, $this); $template = $this->createTemplateObject($this->_templateName, $this->_params); $template->setParams($this->_params); if (!empty($this->_params['taigachat']['publichtml'])) { $template->setLanguageId(XenForo_Phrase::getLanguageId()); $template->setStyleId($options->defaultStyleId); } $rendered = $template->render(); $rendered = preg_replace('/\\s+<\\/(.*?)>\\s+</si', ' </$1> <', $rendered); $rendered = preg_replace('/\\s+<(.*?)([ >])/si', ' <$1$2', $rendered); $params = array("templateHtml" => $rendered, "reverse" => $options->dark_taigachat_direction, "lastrefresh" => $maxid, "motd" => $this->_params['taigachat']['motd'], "numInChat" => $this->_params['taigachat']['numInChat']); if (!empty($this->_params['taigachat']['publichtml'])) { $params += array("_visitor_conversationsUnread" => "IGNORE", "_visitor_alertsUnread" => "IGNORE"); } //$rendered = str_replace(array("\r", "\n", "\t"), "", $rendered); $derp = XenForo_ViewRenderer_Json::jsonEncodeForOutput($params, empty($this->_params['taigachat']['publichtml'])); if (empty($this->_params['taigachat']['publichtml'])) { $extraHeaders = XenForo_Application::gzipContentIfSupported($derp); foreach ($extraHeaders as $extraHeader) { header("{$extraHeader['0']}: {$extraHeader['1']}", $extraHeader[2]); } } return $derp; }
public function renderJson() { $options = XenForo_Application::get('options'); $maxUpdate = Dark_TaigaChat_Helper_Global::processMessagesForView($this->_params, $this); $messages = $this->_params['taigachat']['messages']; if ($options->dark_taigachat_reverse) { $messages = array_reverse($messages); } $twelveHour = false; $template = $this->createTemplateObject("dark_taigachat_robots"); if (!empty($this->_params['taigachat']['publichtml'])) { /** @var XenForo_Model_Language */ $languageModel = XenForo_Model::create('XenForo_Model_Language'); $language = $languageModel->getLanguageById(XenForo_Phrase::getLanguageId()); if ($language['time_format'] == 'g:i A') { $twelveHour = true; } $template->setLanguageId(XenForo_Phrase::getLanguageId()); $template->setStyleId($options->defaultStyleId); } $robots = $template->render(); $outputMessages = array(); $previous = null; $template = $this->createTemplateObject("dark_taigachat_message", $this->_params); if (!empty($this->_params['taigachat']['publichtml'])) { $template->setLanguageId(XenForo_Phrase::getLanguageId()); $template->setStyleId($options->defaultStyleId); } foreach ($messages as &$message) { $template->setParam("message", $message); $rendered = $template->render(); $rendered = preg_replace('/\\s+<\\/(.*?)>\\s+</si', ' </$1> <', $rendered); $rendered = preg_replace('/\\s+<(.*?)([ >])/si', ' <$1$2', $rendered); $outputMessages[] = array("id" => $message['id'], "previous" => empty($previous) ? 0 : $previous['id'], "last_update" => $message['last_update'], "html" => $rendered); $previous = $message; } $template = $this->createTemplateObject("dark_taigachat_online_users", $this->_params); if (!empty($this->_params['taigachat']['publichtml'])) { $template->setLanguageId(XenForo_Phrase::getLanguageId()); $template->setStyleId($options->defaultStyleId); } $outputOnlineUsers = $template->render(); $params = array("robots" => $robots, "messages" => $outputMessages, "messageIds" => $this->_params['taigachat']['messageIds'], "onlineUsers" => $outputOnlineUsers, "reverse" => $options->dark_taigachat_direction, "lastrefresh" => $maxUpdate, "motd" => $this->_params['taigachat']['motd'], "numInChat" => $this->_params['taigachat']['numInChat'], "twelveHour" => $twelveHour); if (!empty($this->_params['taigachat']['publichtml'])) { $params += array("_visitor_conversationsUnread" => "IGNORE", "_visitor_alertsUnread" => "IGNORE"); } $jsonOutput = XenForo_ViewRenderer_Json::jsonEncodeForOutput($params, empty($this->_params['taigachat']['publichtml'])); if (empty($this->_params['taigachat']['publichtml'])) { $extraHeaders = XenForo_Application::gzipContentIfSupported($jsonOutput); foreach ($extraHeaders as $extraHeader) { header("{$extraHeader['0']}: {$extraHeader['1']}", $extraHeader[2]); } } return $jsonOutput; }
public function renderJson() { $options = XenForo_Application::get('options'); $formatter = XenForo_BbCode_Formatter_Base::create('Dark_TaigaChat_BbCode_Formatter_Tenori', array('view' => $this)); switch ($options->dark_taigachat_bbcode) { case 'Full': $formatter->displayableTags = true; break; case 'Basic': default: $formatter->displayableTags = array('img', 'url', 'email', 'b', 'u', 'i', 's', 'color'); break; case 'None': $formatter->displayableTags = array('url', 'email'); break; } $formatter->getTagsAgain(); $parser = new XenForo_BbCode_Parser($formatter); if ($options->dark_taigachat_imagemode == 'Link') { foreach ($this->_params['taigachat']['messages'] as &$message) { $message['message'] = str_ireplace(array("[img]", "[/img]"), array("[url]", "[/url]"), $message['message']); } } $maxid = $this->_params['taigachat']['lastrefresh']; foreach ($this->_params['taigachat']['messages'] as &$message) { if ($options->dark_taigachat_bbcode == 'Full') { $message['message'] = XenForo_Helper_String::autoLinkBbCode($message['message']); } else { // We don't want to parse youtube etc. urls if [media] is disabled $autoLinkParser = new XenForo_BbCode_Parser(XenForo_BbCode_Formatter_Base::create('Dark_TaigaChat_BbCode_Formatter_BbCode_AutoLink', false)); $message['message'] = $autoLinkParser->render($message['message']); } if ($message['id'] > $maxid) { $maxid = $message['id']; } } XenForo_ViewPublic_Helper_Message::bbCodeWrapMessages($this->_params['taigachat']['messages'], $parser); if ($options->dark_taigachat_direction) { $this->_params['taigachat']['messages'] = array_reverse($this->_params['taigachat']['messages']); } $template = $this->createTemplateObject($this->_templateName, $this->_params); $template->setParams($this->_params); $rendered = $template->render(); $rendered = preg_replace('/\\s+<\\/(.*?)>\\s+</si', ' </$1> <', $rendered); $rendered = preg_replace('/\\s+<(.*?)([ >])/si', ' <$1$2', $rendered); //$rendered = str_replace(array("\r", "\n", "\t"), "", $rendered); $derp = XenForo_ViewRenderer_Json::jsonEncodeForOutput(array("templateHtml" => $rendered, "reverse" => $options->dark_taigachat_direction, "lastrefresh" => $maxid)); $extraHeaders = XenForo_Application::gzipContentIfSupported($derp); foreach ($extraHeaders as $extraHeader) { header("{$extraHeader['0']}: {$extraHeader['1']}", $extraHeader[2]); } return $derp; }
/** * Runs the request, handling from routing straight through to response output. * Primary method to be used by the external API. * * @return string|null Returns a string if {@link $_sendResponse} is false */ public function run() { ob_start(); XenForo_Application::set('fc', $this); $this->setup(); $this->setRequestPaths(); $showDebugOutput = $this->showDebugOutput(); $this->_dependencies->preLoadData(); XenForo_CodeEvent::fire('front_controller_pre_route', array($this)); $routeMatch = $this->route(); XenForo_CodeEvent::fire('front_controller_pre_dispatch', array($this, &$routeMatch)); $controllerResponse = $this->dispatch($routeMatch); if (!$controllerResponse) { XenForo_Error::noControllerResponse($routeMatch, $this->_request); exit; } $viewRenderer = $this->_getViewRenderer($routeMatch->getResponseType()); if (!$viewRenderer) { // note: should only happen if there's an error getting the default renderer, which should never happen :) XenForo_Error::noViewRenderer($this->_request); exit; } $containerParams = array('majorSection' => $routeMatch->getMajorSection(), 'minorSection' => $routeMatch->getMinorSection()); XenForo_CodeEvent::fire('front_controller_pre_view', array($this, &$controllerResponse, &$viewRenderer, &$containerParams)); $content = $this->renderView($controllerResponse, $viewRenderer, $containerParams); if ($showDebugOutput) { $content = $this->renderDebugOutput($content); } $bufferedContents = ob_get_contents(); ob_end_clean(); if ($bufferedContents !== '' && is_string($content)) { if (preg_match('#<body[^>]*>#sU', $content, $match)) { $content = str_replace($match[0], $match[0] . $bufferedContents, $content); } else { $content = $bufferedContents . $content; } } XenForo_CodeEvent::fire('front_controller_post_view', array($this, &$content)); if ($this->_sendResponse) { $headers = $this->_response->getHeaders(); $isText = false; foreach ($headers as $header) { if ($header['name'] == 'Content-Type') { if (strpos($header['value'], 'text/') === 0) { $isText = true; } break; } } if ($isText && is_string($content) && $content) { $extraHeaders = XenForo_Application::gzipContentIfSupported($content); foreach ($extraHeaders as $extraHeader) { $this->_response->setHeader($extraHeader[0], $extraHeader[1], $extraHeader[2]); } } if (is_string($content) && $content && !ob_get_level() && XenForo_Application::get('config')->enableContentLength) { if ($this->_response->getHttpResponseCode() >= 400 && strpos($this->_request->getServer('HTTP_USER_AGENT', ''), 'IEMobile') !== false) { // Windows mobile bug - 400+ errors cause the standard browser error // to be output if a content length is sent. ...Err, what? } else { $this->_response->setHeader('Content-Length', strlen($content), true); } } $this->_response->sendHeaders(); if ($content instanceof XenForo_FileOutput) { $content->output(); } else { echo $content; } } else { return $content; } }
/** * Runs the request, handling from routing straight through to response output. * Primary method to be used by the external API. * * @return string|null Returns a string if {@link $_sendResponse} is false */ public function run($innerContent = "", $newParams = array()) { ob_start(); $this->setup(); $this->setRequestPaths(); $showDebugOutput = $this->showDebugOutput(); $this->_dependencies->preLoadData(); XenForo_CodeEvent::fire('front_controller_pre_route', array($this)); $routeMatch = $this->route(); XenForo_CodeEvent::fire('front_controller_pre_dispatch', array($this, &$routeMatch)); $controllerResponse = $this->dispatch($routeMatch); if (!$controllerResponse) { XenForo_Error::noControllerResponse($routeMatch, $this->_request); exit; } $viewRenderer = $this->_getViewRenderer($routeMatch->getResponseType()); if (!$viewRenderer) { // note: should only happen if there's an error getting the default renderer, which should never happen :) XenForo_Error::noViewRenderer($this->_request); exit; } $containerParams = array('majorSection' => $routeMatch->getMajorSection(), 'minorSection' => $routeMatch->getMinorSection()); XenForo_CodeEvent::fire('front_controller_pre_view', array($this, &$controllerResponse, &$viewRenderer, &$containerParams)); $content = $this->renderView($controllerResponse, $viewRenderer, $containerParams, $innerContent, $newParams); if ($showDebugOutput) { $content = $this->renderDebugOutput($content); } $bufferedContents = ob_get_contents(); ob_end_clean(); if ($bufferedContents !== '') { $content = $bufferedContents . $content; } XenForo_CodeEvent::fire('front_controller_post_view', array($this, &$content)); if ($this->_sendResponse) { $headers = $this->_response->getHeaders(); $isText = false; foreach ($headers as $header) { if ($header['name'] == 'Content-Type') { if (strpos($header['value'], 'text/') === 0) { $isText = true; } break; } } if ($isText && is_string($content) && $content) { $extraHeaders = XenForo_Application::gzipContentIfSupported($content); foreach ($extraHeaders as $extraHeader) { $this->_response->setHeader($extraHeader[0], $extraHeader[1], $extraHeader[2]); } } if (is_string($content) && $content && !ob_get_level() && XenForo_Application::get('config')->enableContentLength) { $this->_response->setHeader('Content-Length', strlen($content), true); } $this->_response->sendHeaders(); if ($content instanceof XenForo_FileOutput) { $content->output(); } else { //$uncompressed = gzuncompress($content); //echo $uncompressed; echo $content; } } else { return $content; } }
/** * Intercept a request for a link redirect * * @param string|bool $error If non-false, an error that occurred when validating the request */ protected function _outputLinkRedirect($error) { if ($error === 'invalid_url') { header('Content-Type: text/html; utf-8', true, 500); die('Invalid URL'); } if (empty(XenForo_Application::getOptions()->imageLinkProxy['links'])) { $error = 'disabled'; } if (!$error) { /* @var $proxyModel XenForo_Model_LinkProxy */ $proxyModel = XenForo_Model::create('XenForo_Model_LinkProxy'); $proxyModel->logVisit($this->_url); header('Location: ' . $this->_url, true, 302); exit; } $request = new Zend_Controller_Request_Http(); XenForo_Session::startPublicSession($request); $this->_dependencies->preRenderView(); if (!preg_match('#^https?://#i', $this->_url)) { throw new Exception('Unsafe proxy URL: ' . $this->_url); } $printable = urldecode($this->_url); if (!preg_match('/./u', $printable)) { $printable = $this->_url; } $renderer = new XenForo_ViewRenderer_HtmlPublic($this->_dependencies, $this->_response, $request); $contents = $renderer->createTemplateObject('link_redirect', array('url' => $this->_url, 'printable' => $printable, 'parts' => parse_url($this->_url))); $containerParams = $this->_dependencies->getEffectiveContainerParams(array(), $request); $output = $renderer->renderContainer($contents, $containerParams); $extraHeaders = XenForo_Application::gzipContentIfSupported($output); foreach ($extraHeaders as $extraHeader) { $this->_response->setHeader($extraHeader[0], $extraHeader[1], $extraHeader[2]); } $this->_response->setHeader('X-Proxy-Error', $error); $this->_response->sendHeaders(); echo $output; }
/** * Outputs the specified CSS. Also outputs the necessary HTTP headers. * * @param string $css */ public function displayCss($css) { header('Content-type: text/css; charset=utf-8'); header('Expires: Wed, 01 Jan 2020 00:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->_styleModifiedDate) . ' GMT'); header('Cache-Control: public'); $extraHeaders = XenForo_Application::gzipContentIfSupported($css); foreach ($extraHeaders as $extraHeader) { header("{$extraHeader['0']}: {$extraHeader['1']}", $extraHeader[2]); } if (is_string($css) && $css && !ob_get_level() && XenForo_Application::get('config')->enableContentLength) { header('Content-Length: ' . strlen($css)); } echo $css; }