]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/class-wp-xmlrpc-server.php
WordPress 4.2.5-scripts
[autoinstalls/wordpress.git] / wp-includes / class-wp-xmlrpc-server.php
index 4ea5df60f8d94282e976c38b2db69c5409aae335..aac66314937d21376dc42b6bb9da75975b9f63a4 100644 (file)
  * @since 1.5.0
  */
 class wp_xmlrpc_server extends IXR_Server {
-
+       /**
+        * @var array
+        */
+       public $methods;
+       /**
+        * @var array
+        */
+       public $blog_options;
+       /**
+        * @var IXR_Error
+        */
+       public $error;
        /**
         * Register all of the XMLRPC methods that XMLRPC server understands.
         *
@@ -30,8 +41,6 @@ class wp_xmlrpc_server extends IXR_Server {
         * or replace XMLRPC methods.
         *
         * @since 1.5.0
-        *
-        * @return wp_xmlrpc_server
         */
        public function __construct() {
                $this->methods = array(
@@ -152,7 +161,10 @@ class wp_xmlrpc_server extends IXR_Server {
         * @return mixed|bool Return value of the callback, false otherwise.
         */
        public function __call( $name, $arguments ) {
-               return call_user_func_array( array( $this, $name ), $arguments );
+               if ( '_multisite_getUsersBlogs' === $name ) {
+                       return call_user_func_array( array( $this, $name ), $arguments );
+               }
+               return false;
        }
 
        public function serve_request() {
@@ -192,7 +204,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @param string $username User's username.
         * @param string $password User's password.
-        * @return mixed WP_User object if authentication passed, false otherwise
+        * @return WP_User|bool WP_User object if authentication passed, false otherwise
         */
        public function login( $username, $password ) {
                /*
@@ -505,7 +517,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $args Method parameters. Contains:
         *  - username
         *  - password
-        * @return array. Contains:
+        * @return array|IXR_Error Array contains:
         *  - 'isAdmin'
         *  - 'url'
         *  - 'blogid'
@@ -911,8 +923,10 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // Pull the categories info together.
                $categories = array();
-               foreach ( wp_get_post_categories( $page->ID ) as $cat_id ) {
-                       $categories[] = get_cat_name( $cat_id );
+               if ( is_object_in_taxonomy( 'page', 'category' ) ) {
+                       foreach ( wp_get_post_categories( $page->ID ) as $cat_id ) {
+                               $categories[] = get_cat_name( $cat_id );
+                       }
                }
 
                // Get the author info.
@@ -970,18 +984,17 @@ class wp_xmlrpc_server extends IXR_Server {
         */
        protected function _prepare_comment( $comment ) {
                // Format page date.
-               $comment_date = $this->_convert_date( $comment->comment_date );
                $comment_date_gmt = $this->_convert_date_gmt( $comment->comment_date_gmt, $comment->comment_date );
 
-               if ( '0' == $comment->comment_approved )
+               if ( '0' == $comment->comment_approved ) {
                        $comment_status = 'hold';
-               else if ( 'spam' == $comment->comment_approved )
+               } elseif ( 'spam' == $comment->comment_approved ) {
                        $comment_status = 'spam';
-               else if ( '1' == $comment->comment_approved )
+               } elseif ( '1' == $comment->comment_approved ) {
                        $comment_status = 'approve';
-               else
+               } else {
                        $comment_status = $comment->comment_approved;
-
+               }
                $_comment = array(
                        'date_created_gmt' => $comment_date_gmt,
                        'user_id'          => $comment->user_id,
@@ -1065,7 +1078,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 3.4.0
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $content_struct
@@ -1088,7 +1101,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - terms_names - array, with taxonomy names as keys and arrays of term names as values
         *      - enclosure
         *      - any other fields supported by wp_insert_post()
-        * @return string post_id
+        * @return string|IXR_Error post_id
         */
        public function wp_newPost( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -1096,7 +1109,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $content_struct = $args[3];
@@ -1105,13 +1117,13 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
 
                // convert the date field back to IXR form
-               if ( isset( $content_struct['post_date'] ) && ! is_a( $content_struct['post_date'], 'IXR_Date' ) ) {
+               if ( isset( $content_struct['post_date'] ) && ! ( $content_struct['post_date'] instanceof IXR_Date ) ) {
                        $content_struct['post_date'] = $this->_convert_date( $content_struct['post_date'] );
                }
 
                // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct,
                // since _insert_post will ignore the non-GMT date if the GMT date is set
-               if ( isset( $content_struct['post_date_gmt'] ) && ! is_a( $content_struct['post_date_gmt'], 'IXR_Date' ) ) {
+               if ( isset( $content_struct['post_date_gmt'] ) && ! ( $content_struct['post_date_gmt'] instanceof IXR_Date ) ) {
                        if ( $content_struct['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) {
                                unset( $content_struct['post_date_gmt'] );
                        } else {
@@ -1138,6 +1150,56 @@ class wp_xmlrpc_server extends IXR_Server {
                return $count > 1;
        }
 
+       private function _validate_boolean( $var ) {
+               if ( is_bool( $var ) ) {
+                       return $var;
+               }
+
+               if ( is_string( $var ) && 'false' === strtolower( $var ) ) {
+                       return false;
+               }
+
+               return (bool) $var;
+       }
+
+       /**
+        * Encapsulate the logic for sticking a post
+        * and determining if the user has permission to do so
+        *
+        * @since 4.3.0
+        * @access private
+        *
+        * @param array $post_data
+        * @param bool  $update
+        * @return void|IXR_Error
+        */
+       private function _toggle_sticky( $post_data, $update = false ) {
+               $post_type = get_post_type_object( $post_data['post_type'] );
+
+               // Private and password-protected posts cannot be stickied.
+               if ( 'private' === $post_data['post_status'] || ! empty( $post_data['post_password'] ) ) {
+                       // Error if the client tried to stick the post, otherwise, silently unstick.
+                       if ( ! empty( $post_data['sticky'] ) ) {
+                               return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
+                       }
+
+                       if ( $update ) {
+                               unstick_post( $post_data['ID'] );
+                       }
+               } elseif ( isset( $post_data['sticky'] ) )  {
+                       if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
+                               return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
+                       }
+
+                       $sticky = $this->_validate_boolean( $post_data['sticky'] );
+                       if ( $sticky ) {
+                               stick_post( $post_data['ID'] );
+                       } else {
+                               unstick_post( $post_data['ID'] );
+                       }
+               }
+       }
+
        /**
         * Helper method for wp_newPost and wp_editPost, containing shared logic.
         *
@@ -1145,7 +1207,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @uses wp_insert_post()
         *
         * @param WP_User $user The post author if post_author isn't set in $content_struct.
-        * @param array $content_struct Post data to insert.
+        * @param array|IXR_Error $content_struct Post data to insert.
         */
        protected function _insert_post( $user, $content_struct ) {
                $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0,
@@ -1230,20 +1292,9 @@ class wp_xmlrpc_server extends IXR_Server {
                $post_ID = $post_data['ID'];
 
                if ( $post_data['post_type'] == 'post' ) {
-                       // Private and password-protected posts cannot be stickied.
-                       if ( $post_data['post_status'] == 'private' || ! empty( $post_data['post_password'] ) ) {
-                               // Error if the client tried to stick the post, otherwise, silently unstick.
-                               if ( ! empty( $post_data['sticky'] ) )
-                                       return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
-                               if ( $update )
-                                       unstick_post( $post_ID );
-                       } elseif ( isset( $post_data['sticky'] ) )  {
-                               if ( ! current_user_can( $post_type->cap->edit_others_posts ) )
-                                       return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
-                               if ( $post_data['sticky'] )
-                                       stick_post( $post_ID );
-                               else
-                                       unstick_post( $post_ID );
+                       $error = $this->_toggle_sticky( $post_data, $update );
+                       if ( $error ) {
+                               return $error;
                        }
                }
 
@@ -1392,12 +1443,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 3.4.0
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - int     $post_id
         *  - array   $content_struct
-        * @return true on success
+        * @return bool|IXR_Error true on success
         */
        public function wp_editPost( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
@@ -1405,7 +1456,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_id        = (int) $args[3];
@@ -1456,11 +1506,11 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses wp_delete_post()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - int     $post_id
-        * @return true on success
+        * @return bool|IXR_Error true on success
         */
        public function wp_deletePost( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -1468,7 +1518,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $post_id    = (int) $args[3];
@@ -1510,11 +1559,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_post()
         * @param array $args Method parameters. Contains:
-        *  - int     $post_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
+        *  - int     $post_id
         *  - array   $fields optional
-        * @return array contains (based on $fields parameter):
+        * @return array|IXR_Error Array contains (based on $fields parameter):
         *  - 'post_id'
         *  - 'post_title'
         *  - 'post_date'
@@ -1544,7 +1594,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $post_id            = (int) $args[3];
@@ -1597,12 +1646,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @see get_posts() for more on $filter values
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $filter optional
         *  - array   $fields optional
-        * @return array contains a collection of posts.
+        * @return array|IXR_Error Array contains a collection of posts.
         */
        public function wp_getPosts( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
@@ -1610,7 +1659,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $filter     = isset( $args[3] ) ? $args[3] : array();
@@ -1688,7 +1736,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses wp_insert_term()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $content_struct
@@ -1699,7 +1747,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'parent'
         *      - 'description'
         *      - 'slug'
-        * @return string term_id
+        * @return string|IXR_Error term_id
         */
        public function wp_newTerm( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -1707,7 +1755,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $content_struct     = $args[3];
@@ -1775,7 +1822,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses wp_update_term()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $term_id
@@ -1787,7 +1834,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'parent'
         *      - 'description'
         *      - 'slug'
-        * @return bool True, on success.
+        * @return bool|IXR_Error True, on success.
         */
        public function wp_editTerm( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
@@ -1795,7 +1842,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $term_id            = (int) $args[3];
@@ -1875,7 +1921,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses wp_delete_term()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $taxnomy_name
@@ -1888,7 +1934,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $taxonomy           = $args[3];
@@ -1934,12 +1979,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_term()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $taxonomy
         *  - string  $term_id
-        * @return array contains:
+        * @return array|IXR_Error Array contains:
         *  - 'term_id'
         *  - 'name'
         *  - 'slug'
@@ -1956,7 +2001,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $taxonomy           = $args[3];
@@ -1997,12 +2041,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_terms()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $taxonomy
         *  - array   $filter optional
-        * @return array terms
+        * @return array|IXR_Error terms
         */
        public function wp_getTerms( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -2010,7 +2054,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $taxonomy       = $args[3];
@@ -2074,11 +2117,11 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_taxonomy()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $taxonomy
-        * @return array (@see get_taxonomy())
+        * @return array|IXR_Error (@see get_taxonomy())
         */
        public function wp_getTaxonomy( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -2086,7 +2129,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $taxonomy       = $args[3];
@@ -2129,7 +2171,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_taxonomies()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         * @return array taxonomies
@@ -2140,7 +2182,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $filter             = isset( $args[3] ) ? $args[3] : array( 'public' => true );
@@ -2187,12 +2228,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_userdata()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - int     $user_id
         *  - array   $fields optional
-        * @return array contains (based on $fields parameter):
+        * @return array|IXR_Error Array contains (based on $fields parameter):
         *  - 'user_id'
         *  - 'username'
         *  - 'first_name'
@@ -2212,7 +2253,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $user_id    = (int) $args[3];
@@ -2262,12 +2302,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @see wp_getUser() for more on $fields and return values
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $filter optional
         *  - array   $fields optional
-        * @return array users data
+        * @return array|IXR_Error users data
         */
        public function wp_getUsers( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
@@ -2275,7 +2315,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $filter     = isset( $args[3] ) ? $args[3] : array();
@@ -2334,11 +2373,11 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_userdata()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $fields optional
-        * @return array (@see wp_getUser)
+        * @return array|IXR_Error (@see wp_getUser)
         */
        public function wp_getProfile( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
@@ -2346,7 +2385,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
 
@@ -2376,7 +2414,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses wp_update_user()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $content_struct
@@ -2388,7 +2426,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'nickname'
         *      - 'nicename'
         *      - 'bio'
-        * @return bool True, on success.
+        * @return bool|IXR_Error True, on success.
         */
        public function wp_editProfile( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -2396,7 +2434,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $content_struct = $args[3];
@@ -2453,16 +2490,15 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - page_id
         *  - username
         *  - password
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPage($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $page_id        = (int) $args[1];
                $username       = $args[2];
                $password       = $args[3];
@@ -2497,16 +2533,15 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - num_pages
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPages($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $num_pages      = isset($args[3]) ? (int) $args[3] : 10;
@@ -2532,12 +2567,10 @@ class wp_xmlrpc_server extends IXR_Server {
                                        $pages_struct[] = $this->_prepare_page( $page );
                        }
 
-                       return($pages_struct);
-               }
-               // If no pages were found return an error.
-               else {
-                       return(array());
+                       return $pages_struct;
                }
+
+               return array();
        }
 
        /**
@@ -2546,14 +2579,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters. See {@link wp_xmlrpc_server::mw_newPost()}
-        * @return unknown
+        * @return int|IXR_Error
         */
        public function wp_newPage($args) {
                // Items not escaped here will be escaped in newPost.
                $username       = $this->escape($args[1]);
                $password       = $this->escape($args[2]);
-               $page           = $args[3];
-               $publish        = $args[4];
 
                if ( !$user = $this->login($username, $password) )
                        return $this->error;
@@ -2565,7 +2596,7 @@ class wp_xmlrpc_server extends IXR_Server {
                $args[3]["post_type"] = 'page';
 
                // Let mw_newPost do all of the heavy lifting.
-               return($this->mw_newPost($args));
+               return $this->mw_newPost( $args );
        }
 
        /**
@@ -2574,12 +2605,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return bool True, if success.
+        * @return bool|IXR_Error True, if success.
         */
        public function wp_deletePage($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $page_id        = (int) $args[3];
@@ -2594,16 +2624,16 @@ class wp_xmlrpc_server extends IXR_Server {
                // make sure it is a page and not a post.
                $actual_page = get_post($page_id, ARRAY_A);
                if ( !$actual_page || ($actual_page['post_type'] != 'page') )
-                       return(new IXR_Error(404, __('Sorry, no such page.')));
+                       return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
 
                // Make sure the user can delete pages.
                if ( !current_user_can('delete_page', $page_id) )
-                       return(new IXR_Error(401, __('Sorry, you do not have the right to delete this page.')));
+                       return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete this page.' ) );
 
                // Attempt to delete the page.
                $result = wp_delete_post($page_id);
                if ( !$result )
-                       return(new IXR_Error(500, __('Failed to delete the page.')));
+                       return new IXR_Error( 500, __( 'Failed to delete the page.' ) );
 
                /**
                 * Fires after a page has been successfully deleted via XML-RPC.
@@ -2615,7 +2645,7 @@ class wp_xmlrpc_server extends IXR_Server {
                 */
                do_action( 'xmlrpc_call_success_wp_deletePage', $page_id, $args );
 
-               return(true);
+               return true;
        }
 
        /**
@@ -2624,11 +2654,10 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return unknown
+        * @return array|IXR_Error
         */
        public function wp_editPage($args) {
                // Items not escaped here will be escaped in editPost.
-               $blog_id        = (int) $args[0];
                $page_id        = (int) $this->escape($args[1]);
                $username       = $this->escape($args[2]);
                $password       = $this->escape($args[3]);
@@ -2644,11 +2673,11 @@ class wp_xmlrpc_server extends IXR_Server {
                // Get the page data and make sure it is a page.
                $actual_page = get_post($page_id, ARRAY_A);
                if ( !$actual_page || ($actual_page['post_type'] != 'page') )
-                       return(new IXR_Error(404, __('Sorry, no such page.')));
+                       return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
 
                // Make sure the user is allowed to edit pages.
                if ( !current_user_can('edit_page', $page_id) )
-                       return(new IXR_Error(401, __('Sorry, you do not have the right to edit this page.')));
+                       return new IXR_Error( 401, __( 'Sorry, you do not have the right to edit this page.' ) );
 
                // Mark this as content for a page.
                $content['post_type'] = 'page';
@@ -2663,7 +2692,7 @@ class wp_xmlrpc_server extends IXR_Server {
                );
 
                // Let mw_editPost do all of the heavy lifting.
-               return($this->mw_editPost($args));
+               return $this->mw_editPost( $args );
        }
 
        /**
@@ -2672,14 +2701,13 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return unknown
+        * @return array|IXR_Error
         */
        public function wp_getPageList($args) {
                global $wpdb;
 
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
 
@@ -2716,7 +2744,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        unset($page_list[$i]->post_status);
                }
 
-               return($page_list);
+               return $page_list;
        }
 
        /**
@@ -2725,13 +2753,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getAuthors($args) {
 
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -2739,7 +2766,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
 
                if ( !current_user_can('edit_posts') )
-                       return(new IXR_Error(401, __('Sorry, you cannot edit posts on this site.')));
+                       return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) );
 
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'wp.getAuthors' );
@@ -2762,12 +2789,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getTags( $args ) {
                $this->escape( $args );
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
 
@@ -2784,6 +2810,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                if ( $all_tags = get_tags() ) {
                        foreach( (array) $all_tags as $tag ) {
+                               $struct = array();
                                $struct['tag_id']                       = $tag->term_id;
                                $struct['name']                         = $tag->name;
                                $struct['count']                        = $tag->count;
@@ -2804,12 +2831,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return int Category ID.
+        * @return int|IXR_Error Category ID.
         */
        public function wp_newCategory($args) {
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
                $category                               = $args[3];
@@ -2822,7 +2848,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // Make sure the user is allowed to add a category.
                if ( !current_user_can('manage_categories') )
-                       return(new IXR_Error(401, __('Sorry, you do not have the right to add a category.')));
+                       return new IXR_Error(401, __('Sorry, you do not have the right to add a category.'));
 
                // If no slug was provided make it empty so that
                // WordPress will generate one.
@@ -2850,9 +2876,9 @@ class wp_xmlrpc_server extends IXR_Server {
                        if ( 'term_exists' == $cat_id->get_error_code() )
                                return (int) $cat_id->get_error_data();
                        else
-                               return(new IXR_Error(500, __('Sorry, the new category failed.')));
+                               return new IXR_Error(500, __('Sorry, the new category failed.'));
                } elseif ( ! $cat_id ) {
-                       return(new IXR_Error(500, __('Sorry, the new category failed.')));
+                       return new IXR_Error(500, __('Sorry, the new category failed.'));
                }
 
                /**
@@ -2874,12 +2900,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.5.0
         *
         * @param array $args Method parameters.
-        * @return mixed See {@link wp_delete_term()} for return info.
+        * @return bool|IXR_Error See {@link wp_delete_term()} for return info.
         */
        public function wp_deleteCategory($args) {
                $this->escape($args);
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
                $category_id    = (int) $args[3];
@@ -2916,12 +2941,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.2.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_suggestCategories($args) {
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
                $category                               = $args[3];
@@ -2931,7 +2955,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
 
                if ( !current_user_can( 'edit_posts' ) )
-                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts to this site in order to view categories.' ) );
+                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
 
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'wp.suggestCategories' );
@@ -2945,7 +2969,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        );
                }
 
-               return($category_suggestions);
+               return $category_suggestions;
        }
 
        /**
@@ -2954,12 +2978,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_id     = (int) $args[3];
@@ -2982,7 +3005,7 @@ class wp_xmlrpc_server extends IXR_Server {
        /**
         * Retrieve comments.
         *
-        * Besides the common blog_id, username, and password arguments, it takes a filter
+        * Besides the common blog_id (unused), username, and password arguments, it takes a filter
         * array as last argument.
         *
         * Accepted 'filter' keys are 'status', 'post_id', 'offset', and 'number'.
@@ -2996,12 +3019,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters.
-        * @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents
+        * @return array|IXR_Error Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents
         */
        public function wp_getComments($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $struct         = isset( $args[3] ) ? $args[3] : array();
@@ -3053,16 +3075,15 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - comment_id
-        * @return mixed {@link wp_delete_comment()}
+        * @return bool|IXR_Error {@link wp_delete_comment()}
         */
        public function wp_deleteComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_ID     = (int) $args[3];
@@ -3102,7 +3123,7 @@ class wp_xmlrpc_server extends IXR_Server {
        /**
         * Edit comment.
         *
-        * Besides the common blog_id, username, and password arguments, it takes a
+        * Besides the common blog_id (unused), username, and password arguments, it takes a
         * comment_id integer and a content_struct array as last argument.
         *
         * The allowed keys in the content_struct array are:
@@ -3115,18 +3136,17 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 2.7.0
         *
-        * @param array $args. Contains:
-        *  - blog_id
+        * @param array $args Contains:
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - comment_id
         *  - content_struct
-        * @return bool True, on success.
+        * @return bool|IXR_Error True, on success.
         */
        public function wp_editComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_ID     = (int) $args[3];
@@ -3205,12 +3225,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters.
-        * @return mixed {@link wp_new_comment()}
+        * @return int|IXR_Error {@link wp_new_comment()}
         */
        public function wp_newComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post           = $args[3];
@@ -3230,10 +3249,11 @@ class wp_xmlrpc_server extends IXR_Server {
 
                if ( !$user ) {
                        $logged_in = false;
-                       if ( $allow_anon && get_option('comment_registration') )
+                       if ( $allow_anon && get_option('comment_registration') ) {
                                return new IXR_Error( 403, __( 'You must be registered to comment' ) );
-                       else if ( !$allow_anon )
+                       } elseif ( ! $allow_anon ) {
                                return $this->error;
+                       }
                } else {
                        $logged_in = true;
                }
@@ -3249,6 +3269,7 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( ! get_post($post_id) )
                        return new IXR_Error( 404, __( 'Invalid post ID.' ) );
 
+               $comment = array();
                $comment['comment_post_ID'] = $post_id;
 
                if ( $logged_in ) {
@@ -3307,12 +3328,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.7.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getCommentStatusList($args) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3334,12 +3354,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getCommentCount( $args ) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_id        = (int) $args[3];
@@ -3368,12 +3387,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPostStatusList( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3395,12 +3413,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPageStatusList( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3422,12 +3439,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.6.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPageTemplates( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3449,12 +3465,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.6.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getOptions( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $options        = isset( $args[3] ) ? (array) $args[3] : array();
@@ -3503,12 +3518,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 2.6.0
         *
         * @param array $args Method parameters.
-        * @return unknown
+        * @return array|IXR_Error
         */
        public function wp_setOptions( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $options        = (array) $args[3];
@@ -3519,6 +3533,7 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( !current_user_can( 'manage_options' ) )
                        return new IXR_Error( 403, __( 'You are not allowed to update options.' ) );
 
+               $option_names = array();
                foreach ( $options as $o_name => $o_value ) {
                        $option_names[] = $o_name;
                        if ( !array_key_exists( $o_name, $this->blog_options ) )
@@ -3540,11 +3555,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 3.1.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - attachment_id
-        * @return array. Associative array containing:
+        * @return array|IXR_Error Associative array contains:
         *  - 'date_created_gmt'
         *  - 'parent'
         *  - 'link'
@@ -3557,7 +3572,6 @@ class wp_xmlrpc_server extends IXR_Server {
        public function wp_getMediaItem($args) {
                $this->escape($args);
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
                $attachment_id  = (int) $args[3];
@@ -3580,7 +3594,7 @@ class wp_xmlrpc_server extends IXR_Server {
        /**
         * Retrieves a collection of media library items (or attachments)
         *
-        * Besides the common blog_id, username, and password arguments, it takes a filter
+        * Besides the common blog_id (unused), username, and password arguments, it takes a filter
         * array as last argument.
         *
         * Accepted 'filter' keys are 'parent_id', 'mime_type', 'offset', and 'number'.
@@ -3594,16 +3608,15 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 3.1.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - filter
-        * @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents
+        * @return array|IXR_Error Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents
         */
        public function wp_getMediaLibrary($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $struct         = isset( $args[3] ) ? $args[3] : array() ;
@@ -3638,15 +3651,14 @@ class wp_xmlrpc_server extends IXR_Server {
          * @since 3.1.0
          *
          * @param array $args Method parameters. Contains:
-         *  - blog_id
+         *  - blog_id (unused)
          *  - username
          *  - password
-         * @return array
+         * @return array|IXR_Error
          */
        public function wp_getPostFormats( $args ) {
                $this->escape( $args );
 
-               $blog_id = (int) $args[0];
                $username = $args[1];
                $password = $args[2];
 
@@ -3661,12 +3673,13 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $formats = get_post_format_strings();
 
-               # find out if they want a list of currently supports formats
+               // find out if they want a list of currently supports formats
                if ( isset( $args[3] ) && is_array( $args[3] ) ) {
                        if ( $args[3]['show-supported'] ) {
                                if ( current_theme_supports( 'post-formats' ) ) {
                                        $supported = get_theme_support( 'post-formats' );
 
+                                       $data = array();
                                        $data['all'] = $formats;
                                        $data['supported'] = $supported[0];
 
@@ -3685,12 +3698,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_post_type_object()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - string  $post_type_name
         *  - array   $fields
-        * @return array contains:
+        * @return array|IXR_Error Array contains:
         *  - 'labels'
         *  - 'description'
         *  - 'capability_type'
@@ -3707,7 +3720,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_type_name = $args[3];
@@ -3750,12 +3762,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @uses get_post_types()
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - array   $filter
         *  - array   $fields
-        * @return array
+        * @return array|IXR_Error
         */
        public function wp_getPostTypes( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
@@ -3763,7 +3775,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $filter             = isset( $args[3] ) ? $args[3] : array( 'public' => true );
@@ -3807,12 +3818,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @see wp_getPost() for more on $fields
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - int     $post_id
         *  - array   $fields
-        * @return array contains a collection of posts.
+        * @return array|IXR_Error contains a collection of posts.
         */
        public function wp_getRevisions( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
@@ -3820,7 +3831,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $post_id    = (int) $args[3];
@@ -3884,11 +3894,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @uses wp_restore_post_revision()
         *
         * @param array $args Method parameters. Contains:
-        *  - int     $blog_id
+        *  - int     $blog_id (unused)
         *  - string  $username
         *  - string  $password
         *  - int     $post_id
-        * @return bool false if there was an error restoring, true if success.
+        * @return bool|IXR_Error false if there was an error restoring, true if success.
         */
        public function wp_restoreRevision( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
@@ -3896,7 +3906,6 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->escape( $args );
 
-               $blog_id     = (int) $args[0];
                $username    = $args[1];
                $password    = $args[2];
                $revision_id = (int) $args[3];
@@ -3940,7 +3949,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function blogger_getUsersBlogs($args) {
                if ( is_multisite() )
@@ -3974,6 +3983,8 @@ class wp_xmlrpc_server extends IXR_Server {
         * Private function for retrieving a users blogs for multisite setups
         *
         * @access protected
+        *
+        * @return array|IXR_Error
         */
        protected function _multisite_getUsersBlogs($args) {
                $current_blog = get_blog_details();
@@ -4007,7 +4018,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function blogger_getUserInfo($args) {
 
@@ -4042,7 +4053,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function blogger_getPost($args) {
 
@@ -4087,14 +4098,13 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function blogger_getRecentPosts($args) {
 
                $this->escape($args);
 
                // $args[0] = appkey - ignored
-               $blog_ID    = (int) $args[1]; /* though we don't use it yet */
                $username = $args[2];
                $password  = $args[3];
                if ( isset( $args[4] ) )
@@ -4118,6 +4128,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
                }
 
+               $recent_posts = array();
                foreach ($posts_list as $entry) {
                        if ( !current_user_can( 'edit_post', $entry['ID'] ) )
                                continue;
@@ -4129,18 +4140,12 @@ class wp_xmlrpc_server extends IXR_Server {
                        $content .= '<category>'.$categories.'</category>';
                        $content .= wp_unslash($entry['post_content']);
 
-                       $struct[] = array(
+                       $recent_posts[] = array(
                                'userid' => $entry['post_author'],
                                'dateCreated' => $post_date,
                                'content' => $content,
                                'postid' => (string) $entry['ID'],
                        );
-
-               }
-
-               $recent_posts = array();
-               for ( $j=0; $j<count($struct); $j++ ) {
-                       array_push($recent_posts, $struct[$j]);
                }
 
                return $recent_posts;
@@ -4151,6 +4156,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 1.5.0
         * @deprecated 3.5.0
+        * @return IXR_Error
         */
        public function blogger_getTemplate($args) {
                return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
@@ -4161,6 +4167,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 1.5.0
         * @deprecated 3.5.0
+        * @return IXR_Error
         */
        public function blogger_setTemplate($args) {
                return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
@@ -4172,13 +4179,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return int
+        * @return int|IXR_Error
         */
        public function blogger_newPost($args) {
 
                $this->escape($args);
 
-               $blog_ID    = (int) $args[1]; /* though we don't use it yet */
                $username = $args[2];
                $password  = $args[3];
                $content    = $args[4];
@@ -4205,7 +4211,7 @@ class wp_xmlrpc_server extends IXR_Server {
                $post_date = current_time('mysql');
                $post_date_gmt = current_time('mysql', 1);
 
-               $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status');
+               $post_data = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status');
 
                $post_ID = wp_insert_post($post_data);
                if ( is_wp_error( $post_ID ) )
@@ -4235,7 +4241,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return bool true when done.
+        * @return bool|IXR_Error true when done.
         */
        public function blogger_editPost( $args ) {
 
@@ -4245,7 +4251,6 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[2];
                $password   = $args[3];
                $content     = $args[4];
-               $publish     = $args[5];
 
                if ( ! $user = $this->login( $username, $password ) ) {
                        return $this->error;
@@ -4303,7 +4308,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return bool True when post is deleted.
+        * @return bool|IXR_Error True when post is deleted.
         */
        public function blogger_deletePost($args) {
                $this->escape($args);
@@ -4311,7 +4316,6 @@ class wp_xmlrpc_server extends IXR_Server {
                $post_ID     = (int) $args[1];
                $username  = $args[2];
                $password   = $args[3];
-               $publish     = $args[4];
 
                if ( !$user = $this->login($username, $password) )
                        return $this->error;
@@ -4377,17 +4381,16 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters. Contains:
-        *  - blog_id
+        *  - blog_id (unused)
         *  - username
         *  - password
         *  - content_struct
         *  - publish
-        * @return int
+        * @return int|IXR_Error
         */
        public function mw_newPost($args) {
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                $content_struct = $args[3];
@@ -4474,15 +4477,14 @@ class wp_xmlrpc_server extends IXR_Server {
                        switch ( $post_type ) {
                                case "post":
                                        if ( !current_user_can( 'edit_others_posts' ) )
-                                               return( new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) ) );
+                                               return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) );
                                        break;
                                case "page":
                                        if ( !current_user_can( 'edit_others_pages' ) )
-                                               return( new IXR_Error( 401, __( 'You are not allowed to create pages as this user.' ) ) );
+                                               return new IXR_Error( 401, __( 'You are not allowed to create pages as this user.' ) );
                                        break;
                                default:
-                                       return( new IXR_Error( 401, __( 'Invalid post type' ) ) );
-                                       break;
+                                       return new IXR_Error( 401, __( 'Invalid post type' ) );
                        }
                        $author = get_userdata( $content_struct['wp_author_id'] );
                        if ( ! $author )
@@ -4617,10 +4619,12 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // Only posts can be sticky
                if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
-                       if ( $content_struct['sticky'] == true )
-                               stick_post( $post_ID );
-                       elseif ( $content_struct['sticky'] == false )
-                               unstick_post( $post_ID );
+                       $data = $postdata;
+                       $data['sticky'] = $content_struct['sticky'];
+                       $error = $this->_toggle_sticky( $data );
+                       if ( $error ) {
+                               return $error;
+                       }
                }
 
                if ( isset($content_struct['custom_fields']) )
@@ -4664,6 +4668,10 @@ class wp_xmlrpc_server extends IXR_Server {
                return strval($post_ID);
        }
 
+       /**
+        * @param integer $post_ID
+        * @param array   $enclosure
+        */
        public function add_enclosure_if_new( $post_ID, $enclosure ) {
                if ( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) {
                        $encstring = $enclosure['url'] . "\n" . $enclosure['length'] . "\n" . $enclosure['type'] . "\n";
@@ -4709,7 +4717,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return bool True on success.
+        * @return bool|IXR_Error True on success.
         */
        public function mw_editPost($args) {
 
@@ -4766,7 +4774,6 @@ class wp_xmlrpc_server extends IXR_Server {
                $menu_order = $postdata['menu_order'];
 
                // Let WordPress manage slug if none was provided.
-               $post_name = "";
                $post_name = $postdata['post_name'];
                if ( isset($content_struct['wp_slug']) )
                        $post_name = $content_struct['wp_slug'];
@@ -4790,21 +4797,26 @@ class wp_xmlrpc_server extends IXR_Server {
                $post_author = $postdata['post_author'];
 
                // Only set the post_author if one is set.
-               if ( isset($content_struct['wp_author_id']) && ($user->ID != $content_struct['wp_author_id']) ) {
-                       switch ( $post_type ) {
-                               case 'post':
-                                       if ( !current_user_can('edit_others_posts') )
-                                               return(new IXR_Error(401, __('You are not allowed to change the post author as this user.')));
-                                       break;
-                               case 'page':
-                                       if ( !current_user_can('edit_others_pages') )
-                                               return(new IXR_Error(401, __('You are not allowed to change the page author as this user.')));
-                                       break;
-                               default:
-                                       return(new IXR_Error(401, __('Invalid post type')));
-                                       break;
+               if ( isset( $content_struct['wp_author_id'] ) ) {
+                       // Check permissions if attempting to switch author to or from another user.
+                       if ( $user->ID != $content_struct['wp_author_id'] || $user->ID != $post_author ) {
+                               switch ( $post_type ) {
+                                       case 'post':
+                                               if ( ! current_user_can( 'edit_others_posts' ) ) {
+                                                       return new IXR_Error( 401, __( 'You are not allowed to change the post author as this user.' ) );
+                                               }
+                                               break;
+                                       case 'page':
+                                               if ( ! current_user_can( 'edit_others_pages' ) ) {
+                                                       return new IXR_Error( 401, __( 'You are not allowed to change the page author as this user.' ) );
+                                               }
+                                               break;
+                                       default:
+                                               return new IXR_Error( 401, __( 'Invalid post type' ) );
+                                               break;
+                               }
+                               $post_author = $content_struct['wp_author_id'];
                        }
-                       $post_author = $content_struct['wp_author_id'];
                }
 
                if ( isset($content_struct['mt_allow_comments']) ) {
@@ -4902,11 +4914,12 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $tags_input = isset( $content_struct['mt_keywords'] ) ? $content_struct['mt_keywords'] : null;
 
-               if ( ('publish' == $post_status) ) {
-                       if ( ( 'page' == $post_type ) && !current_user_can('publish_pages') )
-                               return new IXR_Error(401, __('Sorry, you do not have the right to publish this page.'));
-                       else if ( !current_user_can('publish_posts') )
-                               return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.'));
+               if ( 'publish' == $post_status || 'private' == $post_status ) {
+                       if ( 'page' == $post_type && ! current_user_can( 'publish_pages' ) ) {
+                               return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this page.' ) );
+                       } elseif ( ! current_user_can( 'publish_posts' ) ) {
+                               return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
+                       }
                }
 
                if ( $post_more )
@@ -4946,10 +4959,13 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // Only posts can be sticky
                if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
-                       if ( $content_struct['sticky'] == true )
-                               stick_post( $post_ID );
-                       elseif ( $content_struct['sticky'] == false )
-                               unstick_post( $post_ID );
+                       $data = $newpost;
+                       $data['sticky'] = $content_struct['sticky'];
+                       $data['post_type'] = 'post';
+                       $error = $this->_toggle_sticky( $data, true );
+                       if ( $error ) {
+                               return $error;
+                       }
                }
 
                if ( isset($content_struct['custom_fields']) )
@@ -4996,7 +5012,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mw_getPost($args) {
 
@@ -5121,13 +5137,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mw_getRecentPosts($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                if ( isset( $args[3] ) )
@@ -5149,7 +5164,7 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( !$posts_list )
                        return array();
 
-               $struct = array();
+               $recent_posts = array();
                foreach ($posts_list as $entry) {
                        if ( !current_user_can( 'edit_post', $entry['ID'] ) )
                                continue;
@@ -5193,7 +5208,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        if ( empty( $post_format ) )
                                $post_format = 'standard';
 
-                       $struct[] = array(
+                       $recent_posts[] = array(
                                'dateCreated' => $post_date,
                                'userid' => $entry['post_author'],
                                'postid' => (string) $entry['ID'],
@@ -5221,15 +5236,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                'date_modified' => $post_modified,
                                'date_modified_gmt' => $post_modified_gmt,
                                'sticky' => ( $entry['post_type'] === 'post' && is_sticky( $entry['ID'] ) ),
+                               'wp_post_thumbnail' => get_post_thumbnail_id( $entry['ID'] )
                        );
-
-                       $entry_index = count( $struct ) - 1;
-                       $struct[ $entry_index ][ 'wp_post_thumbnail' ] = get_post_thumbnail_id( $entry['ID'] );
-               }
-
-               $recent_posts = array();
-               for ( $j=0; $j<count($struct); $j++ ) {
-                       array_push($recent_posts, $struct[$j]);
                }
 
                return $recent_posts;
@@ -5241,13 +5249,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mw_getCategories($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
 
@@ -5264,6 +5271,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                if ( $cats = get_categories(array('get' => 'all')) ) {
                        foreach ( $cats as $cat ) {
+                               $struct = array();
                                $struct['categoryId'] = $cat->term_id;
                                $struct['parentId'] = $cat->parent;
                                $struct['description'] = $cat->name;
@@ -5289,12 +5297,11 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mw_newMediaObject($args) {
                global $wpdb;
 
-               $blog_ID     = (int) $args[0];
                $username  = $this->escape($args[1]);
                $password   = $this->escape($args[2]);
                $data        = $args[3];
@@ -5403,13 +5410,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mt_getRecentPostTitles($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                if ( isset( $args[3] ) )
@@ -5430,7 +5436,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
                }
 
-               $struct = array();
+               $recent_posts = array();
 
                foreach ($posts_list as $entry) {
                        if ( !current_user_can( 'edit_post', $entry['ID'] ) )
@@ -5439,7 +5445,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        $post_date = $this->_convert_date( $entry['post_date'] );
                        $post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] );
 
-                       $struct[] = array(
+                       $recent_posts[] = array(
                                'dateCreated' => $post_date,
                                'userid' => $entry['post_author'],
                                'postid' => (string) $entry['ID'],
@@ -5447,12 +5453,6 @@ class wp_xmlrpc_server extends IXR_Server {
                                'post_status' => $entry['post_status'],
                                'date_created_gmt' => $post_date_gmt
                        );
-
-               }
-
-               $recent_posts = array();
-               for ( $j=0; $j<count($struct); $j++ ) {
-                       array_push($recent_posts, $struct[$j]);
                }
 
                return $recent_posts;
@@ -5464,13 +5464,12 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mt_getCategoryList($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
 
@@ -5487,6 +5486,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                if ( $cats = get_categories(array('hide_empty' => 0, 'hierarchical' => 0)) ) {
                        foreach ( $cats as $cat ) {
+                               $struct = array();
                                $struct['categoryId'] = $cat->term_id;
                                $struct['categoryName'] = $cat->name;
 
@@ -5503,7 +5503,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function mt_getPostCategories($args) {
 
@@ -5547,7 +5547,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return bool True on success.
+        * @return bool|IXR_Error True on success.
         */
        public function mt_setPostCategories($args) {
 
@@ -5628,7 +5628,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return mixed
+        * @return array|IXR_Error
         */
        public function mt_getTrackbackPings($args) {
 
@@ -5671,7 +5671,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return int
+        * @return int|IXR_Error
         */
        public function mt_publishPost($args) {
 
@@ -5716,7 +5716,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return string|IXR_Error
         */
        public function pingback_ping($args) {
                global $wpdb;
@@ -5729,8 +5729,6 @@ class wp_xmlrpc_server extends IXR_Server {
                $pagelinkedfrom = $args[0];
                $pagelinkedto   = $args[1];
 
-               $title = '';
-
                $pagelinkedfrom = str_replace('&amp;', '&', $pagelinkedfrom);
                $pagelinkedto = str_replace('&amp;', '&', $pagelinkedto);
                $pagelinkedto = str_replace('&', '&amp;', $pagelinkedto);
@@ -5758,27 +5756,23 @@ class wp_xmlrpc_server extends IXR_Server {
                //        if so, then let's use it and drop the old code.
                $urltest = parse_url($pagelinkedto);
                if ( $post_ID = url_to_postid($pagelinkedto) ) {
-                       $way = 'url_to_postid()';
+                       // $way
                } elseif ( isset( $urltest['path'] ) && preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
                        // the path defines the post_ID (archives/p/XXXX)
                        $blah = explode('/', $match[0]);
                        $post_ID = (int) $blah[1];
-                       $way = 'from the path';
                } elseif ( isset( $urltest['query'] ) && preg_match('#p=[0-9]{1,}#', $urltest['query'], $match) ) {
                        // the querystring defines the post_ID (?p=XXXX)
                        $blah = explode('=', $match[0]);
                        $post_ID = (int) $blah[1];
-                       $way = 'from the querystring';
                } elseif ( isset($urltest['fragment']) ) {
                        // an #anchor is there, it's either...
                        if ( intval($urltest['fragment']) ) {
                                // ...an integer #XXXX (simplest case)
                                $post_ID = (int) $urltest['fragment'];
-                               $way = 'from the fragment (numeric)';
                        } elseif ( preg_match('/post-[0-9]+/',$urltest['fragment']) ) {
                                // ...a post id in the form 'post-###'
                                $post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']);
-                               $way = 'from the fragment (post-###)';
                        } elseif ( is_string($urltest['fragment']) ) {
                                // ...or a string #title, a little more complicated
                                $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
@@ -5787,7 +5781,6 @@ class wp_xmlrpc_server extends IXR_Server {
                                        // returning unknown error '0' is better than die()ing
                                        return $this->pingback_error( 0, '' );
                                }
-                               $way = 'from the fragment (title)';
                        }
                } else {
                        // TODO: Attempt to extract a post ID from the given URL
@@ -5929,7 +5922,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
        public function pingback_extensions_getPingbacks($args) {
 
@@ -5969,6 +5962,10 @@ class wp_xmlrpc_server extends IXR_Server {
                return $pingbacks;
        }
 
+       /**
+        * @param integer $code
+        * @param string $message
+        */
        protected function pingback_error( $code, $message ) {
                /**
                 * Filter the XML-RPC pingback error return.