var $value;
/** Counters for batch operations */
- var $successCount = 0, $failCount = 0;
+ public $successCount = 0, $failCount = 0;
+ /** Array to indicate which items of the batch operations were successful */
+ public $success = array();
/*semi-private*/ var $errors = array();
/*semi-private*/ var $cleanCallback = false;
$this->cleanCallback = false;
}
+ /**
+ * @param $params array
+ * @return array
+ */
protected function cleanParams( $params ) {
if ( !$this->cleanCallback ) {
return $params;
return $cleanParams;
}
+ /**
+ * @param $item
+ * @return string
+ */
protected function getItemXML( $item ) {
$params = $this->cleanParams( $item['params'] );
$xml = "<{$item['type']}>\n" .
Xml::element( 'message', null, $item['message'] ) . "\n" .
- Xml::element( 'text', null, wfMsgReal( $item['message'], $params ) ) ."\n";
+ Xml::element( 'text', null, wfMsg( $item['message'], $params ) ) ."\n";
foreach ( $params as $param ) {
$xml .= Xml::element( 'param', null, $param );
}
- $xml .= "</{$this->type}>\n";
+ $xml .= "</{$item['type']}>\n";
return $xml;
}
/**
* Get the error list as XML
+ * @return string
*/
function getXML() {
$xml = "<errors>\n";
}
}
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 ) {
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 wfMsgNoTrans( $error['message'],
+ array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ) );
+ } else {
+ $message = array_shift($error);
+ return wfMsgNoTrans( $message,
+ array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) );
+ }
+ } else {
+ return wfMsgNoTrans( $error );
+ }
+ }
+
+ /**
+ * 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 $other Status Other Status object
* @param $overwriteValue Boolean: whether to override the "value" member
*/
function merge( $other, $overwriteValue = false ) {
* @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
- $result[] = $error['message'];
+ } else {
+ $result[] = array( $error['message'] );
+ }
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Returns a list of status messages of the given type, with message and
+ * params left untouched, like a sane version of getStatusArray
+ *
+ * @param $type String
+ *
+ * @return Array
+ */
+ public function getErrorsByType( $type ) {
+ $result = array();
+ foreach ( $this->errors as $error ) {
+ if ( $error['type'] === $type ) {
+ $result[] = $error;
+ }
}
return $result;
}
}
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.
+ *
+ * @return bool
+ */
+ 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();
+ }
}