From 9db190c7e736ec8d063187d4241b59feaf7dc2d1 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 22 Jun 2011 11:28:20 +0200 Subject: update to MediaWiki 1.17.0 --- includes/Status.php | 154 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 139 insertions(+), 15 deletions(-) (limited to 'includes/Status.php') diff --git a/includes/Status.php b/includes/Status.php index a07a4b81..f049980f 100644 --- a/includes/Status.php +++ b/includes/Status.php @@ -24,6 +24,8 @@ class Status { /** * Factory function for fatal errors + * + * @param $message String: message name */ static function newFatal( $message /*, parameters...*/ ) { $params = func_get_args(); @@ -33,25 +35,52 @@ class Status { return $result; } + /** + * Factory function for good results + * + * @param $value Mixed + */ static function newGood( $value = null ) { $result = new self; $result->value = $value; return $result; } + /** + * Change operation result + * + * @param $ok Boolean: whether to operation completed + * @param $value Mixed + */ function setResult( $ok, $value = null ) { $this->ok = $ok; $this->value = $value; } + /** + * Returns whether the operation completed and didn't have any error or + * warnings + * + * @return Boolean + */ function isGood() { return $this->ok && !$this->errors; } + /** + * Returns whether the operation completed + * + * @return Boolean + */ function isOK() { return $this->ok; } + /** + * Add a new warning + * + * @param $message String: message name + */ function warning( $message /*, parameters... */ ) { $params = array_slice( func_get_args(), 1 ); $this->errors[] = array( @@ -63,6 +92,8 @@ class Status { /** * Add an error, do not set fatal flag * This can be used for non-fatal errors + * + * @param $message String: message name */ function error( $message /*, parameters... */ ) { $params = array_slice( func_get_args(), 1 ); @@ -73,7 +104,10 @@ class Status { } /** - * Add an error and set OK to false, indicating that the operation as a whole was fatal + * Add an error and set OK to false, indicating that the operation + * as a whole was fatal + * + * @param $message String: message name */ function fatal( $message /*, parameters... */ ) { $params = array_slice( func_get_args(), 1 ); @@ -128,9 +162,11 @@ class Status { /** * Get the error list as a wikitext formatted list - * @param string $shortContext A short enclosing context message name, to be used - * when there is a single error - * @param string $longContext A long enclosing context message name, for a list + * + * @param $shortContext String: a short enclosing context message name, to + * be used when there is a single error + * @param $longContext String: a long enclosing context message name, for a list + * @return String */ function getWikiText( $shortContext = false, $longContext = false ) { if ( count( $this->errors ) == 0 ) { @@ -143,19 +179,15 @@ class Status { } } if ( count( $this->errors ) == 1 ) { - $params = array_map( 'wfEscapeWikiText', $this->cleanParams( $this->errors[0]['params'] ) ); - $s = wfMsgReal( $this->errors[0]['message'], $params, true, false, false ); + $s = $this->getWikiTextForError( $this->errors[0], $this->errors[0] ); if ( $shortContext ) { $s = wfMsgNoTrans( $shortContext, $s ); } elseif ( $longContext ) { $s = wfMsgNoTrans( $longContext, "* $s\n" ); } } else { - $s = ''; - foreach ( $this->errors as $error ) { - $params = array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ); - $s .= '* ' . wfMsgReal( $error['message'], $params, true, false, false ) . "\n"; - } + $s = '* '. implode("\n* ", + $this->getWikiTextArray( $this->errors ) ) . "\n"; if ( $longContext ) { $s = wfMsgNoTrans( $longContext, $s ); } elseif ( $shortContext ) { @@ -165,8 +197,46 @@ class Status { return $s; } + /** + * Return the wiki text for a single error. + * @param $error Mixed With an array & two values keyed by + * 'message' and 'params', use those keys-value pairs. + * Otherwise, if its an array, just use the first value as the + * message and the remaining items as the params. + * + * @return String + */ + protected function getWikiTextForError( $error ) { + if ( is_array( $error ) ) { + if ( isset( $error['message'] ) && isset( $error['params'] ) ) { + return wfMsgReal( $error['message'], + array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ), + true, false, false ); + } else { + $message = array_shift($error); + return wfMsgReal( $message, + array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ), + true, false, false ); + } + } else { + return wfMsgReal( $error, array(), true, false, false); + } + } + + /** + * Return an array with the wikitext for each item in the array. + * @param $errors Array + * @return Array + */ + function getWikiTextArray( $errors ) { + return array_map( array( $this, 'getWikiTextForError' ), $errors ); + } + /** * Merge another status object into this one + * + * @param $other Other Status object + * @param $overwriteValue Boolean: whether to override the "value" member */ function merge( $other, $overwriteValue = false ) { $this->errors = array_merge( $this->errors, $other->errors ); @@ -178,20 +248,48 @@ class Status { $this->failCount += $other->failCount; } + /** + * Get the list of errors (but not warnings) + * + * @return Array + */ function getErrorsArray() { + return $this->getStatusArray( "error" ); + } + + /** + * Get the list of warnings (but not errors) + * + * @return Array + */ + function getWarningsArray() { + return $this->getStatusArray( "warning" ); + } + + /** + * Returns a list of status messages of the given type + * @param $type String + * + * @return Array + */ + protected function getStatusArray( $type ) { $result = array(); foreach ( $this->errors as $error ) { - if ( $error['type'] == 'error' ) - if( $error['params'] ) + if ( $error['type'] === $type ) { + if( $error['params'] ) { $result[] = array_merge( array( $error['message'] ), $error['params'] ); - else + } else { $result[] = $error['message']; + } + } } return $result; } - /** * Returns true if the specified message is present as a warning or error + * + * @param $msg String: message name + * @return Boolean */ function hasMessage( $msg ) { foreach ( $this->errors as $error ) { @@ -201,4 +299,30 @@ class Status { } return false; } + + /** + * If the specified source message exists, replace it with the specified + * destination message, but keep the same parameters as in the original error. + * + * Return true if the replacement was done, false otherwise. + */ + function replaceMessage( $source, $dest ) { + $replaced = false; + foreach ( $this->errors as $index => $error ) { + if ( $error['message'] === $source ) { + $this->errors[$index]['message'] = $dest; + $replaced = true; + } + } + return $replaced; + } + + /** + * Backward compatibility function for WikiError -> Status migration + * + * @return String + */ + public function getMessage() { + return $this->getWikiText(); + } } -- cgit v1.2.3-54-g00ecf