diff options
Diffstat (limited to 'includes/WikiError.php')
-rw-r--r-- | includes/WikiError.php | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/includes/WikiError.php b/includes/WikiError.php new file mode 100644 index 00000000..1b2c03bf --- /dev/null +++ b/includes/WikiError.php @@ -0,0 +1,125 @@ +<?php +/** + * MediaWiki error classes + * Copyright (C) 2005 Brion Vibber <brion@pobox.com> + * http://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @package MediaWiki + */ + +/** + * Since PHP4 doesn't have exceptions, here's some error objects + * loosely modeled on the standard PEAR_Error model... + * @package MediaWiki + */ +class WikiError { + /** + * @param string $message + */ + function WikiError( $message ) { + $this->mMessage = $message; + } + + /** + * @return string Plaintext error message to display + */ + function getMessage() { + return $this->mMessage; + } + + /** + * In following PEAR_Error model this could be formatted differently, + * but so far it's not. + * @return string + */ + function toString() { + return $this->getMessage(); + } + + /** + * Returns true if the given object is a WikiError-descended + * error object, false otherwise. + * + * @param mixed $object + * @return bool + * @static + */ + function isError( &$object ) { + return is_a( $object, 'WikiError' ); + } +} + +/** + * Localized error message object + * @package MediaWiki + */ +class WikiErrorMsg extends WikiError { + /** + * @param string $message Wiki message name + * @param ... parameters to pass to wfMsg() + */ + function WikiErrorMsg( $message/*, ... */ ) { + $args = func_get_args(); + array_shift( $args ); + $this->mMessage = wfMsgReal( $message, $args, true ); + } +} + +/** + * @package MediaWiki + * @todo document + */ +class WikiXmlError extends WikiError { + /** + * @param resource $parser + * @param string $message + */ + function WikiXmlError( $parser, $message = 'XML parsing error', $context = null, $offset = 0 ) { + $this->mXmlError = xml_get_error_code( $parser ); + $this->mColumn = xml_get_current_column_number( $parser ); + $this->mLine = xml_get_current_line_number( $parser ); + $this->mByte = xml_get_current_byte_index( $parser ); + $this->mContext = $this->_extractContext( $context, $offset ); + $this->mMessage = $message; + xml_parser_free( $parser ); + wfDebug( "WikiXmlError: " . $this->getMessage() . "\n" ); + } + + /** @return string */ + function getMessage() { + return sprintf( '%s at line %d, col %d (byte %d%s): %s', + $this->mMessage, + $this->mLine, + $this->mColumn, + $this->mByte, + $this->mContext, + xml_error_string( $this->mXmlError ) ); + } + + function _extractContext( $context, $offset ) { + if( is_null( $context ) ) { + return null; + } else { + // Hopefully integer overflow will be handled transparently here + $inlineOffset = $this->mByte - $offset; + return '; "' . substr( $context, $inlineOffset, 16 ) . '"'; + } + } +} + +?> |