getTrace() as $frame ) { if ( isset( $frame['class'] ) && $frame['class'] === LocalisationCache::class ) { return false; } } return true; } /** * Get a message from i18n * * @param string $key Message name * @param string $fallback Default message if the message cache can't be * called by the exception * @param mixed ...$params To pass to wfMessage() * @return string Message with arguments replaced */ public function msg( $key, $fallback, ...$params ) { // NOTE: Keep logic in sync with MWExceptionRenderer::msg. $res = false; if ( $this->useMessageCache() ) { try { $res = wfMessage( $key, ...$params )->text(); } catch ( Exception $e ) { } } if ( $res === false ) { // Fallback to static message text and generic sitename. // Avoid live config as this must work before Setup/MediaWikiServices finish. $res = wfMsgReplaceArgs( $fallback, $params ); $res = strtr( $res, [ '{{SITENAME}}' => 'MediaWiki', ] ); } return $res; } /** * Output a report about the exception and takes care of formatting. * It will be either HTML or plain text based on isCommandLine(). * * @stable to override */ public function report() { // May be overridden by subclasses to replace the whole error page MWExceptionRenderer::output( $this, MWExceptionRenderer::AS_PRETTY ); } /** * @internal */ final public function hasOverriddenHandler(): bool { return MWDebug::detectDeprecatedOverride( $this, __CLASS__, 'report' ); } /** * Check whether we are in command line mode or not to report the exception * in the correct format. * * @return bool */ public static function isCommandLine() { return MW_ENTRY_POINT === 'cli'; } }