Ejemplo n.º 1
0
 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);
         }
     }
 }
Ejemplo n.º 2
0
 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'];
     }
 }
Ejemplo n.º 3
0
 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);
     }
 }
Ejemplo n.º 4
0
 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');
             }
         }
     }
 }
Ejemplo n.º 5
0
 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) {
     }
 }
Ejemplo n.º 6
0
 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) {
     }
 }
Ejemplo n.º 7
0
 /**
  * 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'];
     }
 }
Ejemplo n.º 8
0
 /**
  * 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;
 }
Ejemplo n.º 9
0
 /**
  * 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');
 }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 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;
 }