public function actionErrorServer() { $upgradePending = false; try { $db = XenForo_Application::getDb(); if ($db->isConnected()) { $dbVersionId = $db->fetchOne("SELECT option_value FROM xf_option WHERE option_id = 'currentVersionId'"); if ($dbVersionId && $dbVersionId != XenForo_Application::$versionId) { $upgradePending = true; } } } catch (Exception $e) { } if (XenForo_Application::debugMode()) { $showDetails = true; } else { if (XenForo_Visitor::hasInstance() && XenForo_Visitor::getInstance()->is_admin) { $showDetails = true; } else { $showDetails = false; } } if ($upgradePending && !$showDetails) { return $this->responseMessage(new XenForo_Phrase('board_currently_being_upgraded')); } else { if ($showDetails) { $view = $this->responseView('XenForo_ViewPublic_Error_ServerError', 'error_server_error', array('exception' => $this->_request->getParam('_exception'))); $view->responseCode = 500; return $view; } else { return $this->responseError(new XenForo_Phrase('server_error_occurred'), 500); } } }
public function __construct($options = array()) { self::configure($this, $options); $class = XenForo_Application::resolveDynamicClass('XenForo_BbCode_Formatter_Base', 'bb_code'); $this->_otherFormatters = new $class(); self::configure($this->_otherFormatters, $options); $this->_tags = $this->getTags(); $this->preLoadData(); if (XenForo_Visitor::hasInstance()) { $visitor = XenForo_Visitor::getInstance(); if (!empty($visitor['ignoredUsers'])) { $this->_ignoredUsers = $visitor['ignoredUsers']; } $language = $visitor->getLanguage(); $this->_textDirection = $language['text_direction']; } }
public function actionErrorServer() { if (XenForo_Application::debugMode()) { $showDetails = true; } else { if (XenForo_Visitor::hasInstance() && XenForo_Visitor::getInstance()->is_admin) { $showDetails = true; } else { $showDetails = false; } } if ($showDetails) { $view = $this->responseView('XenForo_ViewPublic_Error_ServerError', 'error_server_error', array('exception' => $this->_request->getParam('_exception'))); $view->responseCode = 500; return $view; } else { return $this->responseError(new XenForo_Phrase('server_error_occurred'), 500); } }
public static function unexpectedException(Exception $e) { @header('Content-Type: text/html; charset=utf-8', true, 500); $upgradePending = false; try { $db = XenForo_Application::getDb(); if ($db->isConnected()) { $dbVersionId = $db->fetchOne("SELECT option_value FROM xf_option WHERE option_id = 'currentVersionId'"); if ($dbVersionId && $dbVersionId != XenForo_Application::$versionId) { $upgradePending = true; } } } catch (Exception $e) { } if (XenForo_Application::debugMode()) { $showTrace = true; } else { if (XenForo_Visitor::hasInstance()) { $showTrace = XenForo_Visitor::getInstance()->is_admin; } else { $showTrace = false; } } if ($upgradePending) { echo self::_getPhrasedTextIfPossible('The board is currently being upgraded. Please check back later.', 'board_currently_being_upgraded'); } else { if (!empty($showTrace)) { echo self::getExceptionTrace($e); } else { if ($e instanceof Zend_Db_Exception) { $message = $e->getMessage(); echo self::_getPhrasedTextIfPossible('An unexpected database error occurred. Please try again later.', 'unexpected_database_error_occurred'); echo "\n<!-- " . htmlspecialchars($message) . " -->"; } else { echo self::_getPhrasedTextIfPossible('An unexpected error occurred. Please try again later.', 'unexpected_error_occurred'); } } } }
public static function logException(Exception $e, $rollbackTransactions = true) { try { $db = XenForo_Application::get('db'); if ($db->getConnection()) { $rootDir = XenForo_Application::getInstance()->getRootDir(); $file = $e->getFile(); if (strpos($file, $rootDir) === 0) { $file = substr($file, strlen($rootDir)); if (strlen($file) && ($file[0] == '/' || $file[0] == '\\')) { $file = substr($file, 1); } } $requestPaths = XenForo_Application::get('requestPaths'); $request = array('url' => $requestPaths['fullUri'], '_GET' => $_GET, '_POST' => $_POST); if ($rollbackTransactions) { XenForo_Db::rollbackAll($db); } $db->insert('xf_error_log', array('exception_date' => XenForo_Application::$time, 'user_id' => XenForo_Visitor::hasInstance() ? XenForo_Visitor::getUserId() : null, 'ip_address' => XenForo_Model::create('XenForo_Model_Login')->convertIpToLong(), 'exception_type' => get_class($e), 'message' => $e->getMessage(), 'filename' => $file, 'line' => $e->getLine(), 'trace_string' => $e->getTraceAsString(), 'request_state' => serialize($request))); } } catch (Exception $e) { } }
public static function logException($e, $rollbackTransactions = true, $messagePrefix = '') { $isValidArg = $e instanceof Exception || $e instanceof Throwable; if (!$isValidArg) { throw new Exception("logException requires an Exception or a Throwable"); } try { $db = XenForo_Application::getDb(); if ($db->getConnection()) { if ($rollbackTransactions) { @XenForo_Db::rollbackAll($db); } $dbVersionId = @$db->fetchOne("SELECT option_value FROM xf_option WHERE option_id = 'currentVersionId'"); if ($dbVersionId && $dbVersionId != XenForo_Application::$versionId) { // do not log errors when an upgrade is pending return; } if (!file_exists(XenForo_Helper_File::getInternalDataPath() . '/install-lock.php')) { // install hasn't finished yet, don't write return; } $rootDir = XenForo_Application::getInstance()->getRootDir(); $file = $e->getFile(); if (strpos($file, $rootDir) === 0) { $file = substr($file, strlen($rootDir)); if (strlen($file) && ($file[0] == '/' || $file[0] == '\\')) { $file = substr($file, 1); } } $requestPaths = XenForo_Application::get('requestPaths'); $request = array('url' => $requestPaths['fullUri'], '_GET' => $_GET, '_POST' => $_POST); // don't log passwords foreach ($request['_POST'] as $key => &$value) { if (strpos($key, 'password') !== false || $key == '_xfToken') { $value = '********'; } } $db->insert('xf_error_log', array('exception_date' => XenForo_Application::$time, 'user_id' => XenForo_Visitor::hasInstance() ? XenForo_Visitor::getUserId() : null, 'ip_address' => XenForo_Helper_Ip::getBinaryIp(), 'exception_type' => get_class($e), 'message' => $messagePrefix . $e->getMessage(), 'filename' => $file, 'line' => $e->getLine(), 'trace_string' => $e->getTraceAsString(), 'request_state' => serialize($request))); } } catch (Exception $e) { } }
/** * Constructor. */ public function __construct() { $this->_tags = $this->getTags(); $this->preLoadData(); if (XenForo_Visitor::hasInstance()) { $visitor = XenForo_Visitor::getInstance(); if (!empty($visitor['ignoredUsers'])) { $this->_ignoredUsers = $visitor['ignoredUsers']; } $language = $visitor->getLanguage(); $this->_textDirection = $language['text_direction']; } }
/** * Prepares a user record for display. Note that this may be called on incomplete guest records. * * @param array $user User info * * @return array Prepared user info */ public function prepareUser(array $user) { if (empty($user['user_group_id'])) { $user['display_style_group_id'] = self::$defaultGuestGroupId; } $user['customFields'] = !empty($user['custom_fields']) ? @unserialize($user['custom_fields']) : array(); $user['externalAuth'] = !empty($user['external_auth']) ? @unserialize($user['external_auth']) : array(); // "trusted" user check - used to determine if no follow is enabled $user['isTrusted'] = !empty($user['user_id']) && (!empty($user['is_admin']) || !empty($user['is_moderator'])); if (XenForo_Visitor::hasInstance()) { $user['isIgnored'] = XenForo_Visitor::getInstance()->isIgnoring($user['user_id']); } return $user; }
/** * Performs any pre-view rendering setup, such as getting style information and * ensuring the correct data is registered. * * @param XenForo_ControllerResponse_Abstract|null $controllerResponse */ public function preRenderView(XenForo_ControllerResponse_Abstract $controllerResponse = null) { // note this intentionally doesn't call the abstract version if (XenForo_Application::isRegistered('session')) { $this->_defaultTemplateParams['session'] = XenForo_Application::get('session')->getAll(); } if (XenForo_Visitor::hasInstance()) { $this->_defaultTemplateParams['visitor'] = XenForo_Visitor::getInstance()->toArray(); } $this->_defaultTemplateParams['requestPaths'] = XenForo_Application::get('requestPaths'); }
protected static function _doClean($filterName, array $filterOptions, $data, $defaultData) { switch ($filterName) { case self::STRING: $data = is_scalar($data) ? strval($data) : $defaultData; if (strlen($data) && !preg_match('/./u', $data)) { $data = $defaultData; } $data = self::cleanString($data); if (empty($filterOptions['noTrim'])) { $data = trim($data); } break; case self::NUM: $data = strval($data) + 0; break; case self::UNUM: $data = strval($data) + 0; $data = $data < 0 ? $defaultData : $data; break; case self::INT: $data = intval($data); break; case self::UINT: $data = ($data = intval($data)) < 0 ? $defaultData : $data; break; case self::FLOAT: $data = floatval($data); break; case self::BOOLEAN: if ($data === 'n' || $data === 'no' || $data === 'N') { $data = false; } else { $data = (bool) $data; } break; case self::BINARY: $data = strval($data); break; case self::ARRAY_SIMPLE: if (!is_array($data)) { $data = $defaultData; } $data = self::cleanStringArray($data); break; case self::JSON_ARRAY: if (is_string($data)) { $data = json_decode($data, true); } if (!is_array($data)) { $data = $defaultData; } $data = self::cleanStringArray($data); break; case self::DATE_TIME: if (!$data) { $data = 0; } else { if (is_string($data)) { $data = trim($data); if ($data === strval(intval($data))) { // data looks like an int, treat as timestamp $data = intval($data); } else { if (isset($filterOptions['timeZone'])) { $tz = $filterOptions['timeZone']; } else { $tz = XenForo_Visitor::hasInstance() ? XenForo_Locale::getDefaultTimeZone() : null; } try { $date = new DateTime($data, $tz); if (!empty($filterOptions['dayEnd'])) { $date->setTime(23, 59, 59); } $data = $date->format('U'); } catch (Exception $e) { $data = 0; } } } } if (!is_int($data)) { $data = intval($data); } break; default: if ($filterName instanceof Zend_Validate_Interface) { if ($filterName->isValid($data) === false) { $data = $defaultData; } } else { throw new XenForo_Exception("Unknown input type in " . __CLASS__ . "::" . __METHOD__); } } return $data; }
protected function _getStyleLanguageChangerParams(Zend_Controller_Request_Http $request) { $params = array(); $canChangeStyleLanguage = $request->isGet() && empty($this->_viewStateChanges['styleId']); if ($request->isGet()) { if (!empty($this->_viewStateChanges['styleId'])) { $params['canChangeStyle'] = false; } else { $styles = XenForo_Application::isRegistered('styles') ? XenForo_Application::get('styles') : array(); if (count($styles) <= 1) { $params['canChangeStyle'] = false; } else { if (XenForo_Visitor::hasInstance() && XenForo_Visitor::getInstance()->is_admin) { $params['canChangeStyle'] = count($styles) > 1; } else { $changable = 0; $params['canChangeStyle'] = false; foreach ($styles as $style) { if ($style['user_selectable']) { $changable++; if ($changable > 1) { $params['canChangeStyle'] = true; break; } } } } } } $languages = XenForo_Application::isRegistered('languages') ? XenForo_Application::get('languages') : array(); $params['canChangeLanguage'] = count($languages) > 1; } else { $params['canChangeStyle'] = false; $params['canChangeLanguage'] = false; } return $params; }