summaryrefslogtreecommitdiff
path: root/includes/Status.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Status.php')
-rw-r--r--includes/Status.php154
1 files changed, 139 insertions, 15 deletions
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 ) {
@@ -166,7 +198,45 @@ class Status {
}
/**
+ * 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();
+ }
}