re bug #25523: add mime.info and mime.types for *.dwg files so that when people add...
[lhc/web/wiklou.git] / includes / Status.php
index 7f47c1f..efd357b 100644 (file)
@@ -17,7 +17,9 @@ class Status {
        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 failed */
+       public $success = array();
 
        /*semi-private*/ var $errors = array();
        /*semi-private*/ var $cleanCallback = false;
@@ -179,19 +181,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 ) {
@@ -201,6 +199,41 @@ 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
         *
@@ -223,17 +256,37 @@ class Status {
         * @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
         *
@@ -248,4 +301,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();
+       }
 }