]> 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 0f617dbf99b4399490f89801ae66f6069caf3351..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,10 +41,8 @@ class wp_xmlrpc_server extends IXR_Server {
         * or replace XMLRPC methods.
         *
         * @since 1.5.0
-        *
-        * @return wp_xmlrpc_server
         */
-       function __construct() {
+       public function __construct() {
                $this->methods = array(
                        // WordPress API
                        'wp.getUsersBlogs'              => 'this:wp_getUsersBlogs',
@@ -66,6 +75,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        'wp.deleteCategory'             => 'this:wp_deleteCategory',
                        'wp.suggestCategories'  => 'this:wp_suggestCategories',
                        'wp.uploadFile'                 => 'this:mw_newMediaObject',    // Alias
+                       'wp.deleteFile'                 => 'this:wp_deletePost',                // Alias
                        'wp.getCommentCount'    => 'this:wp_getCommentCount',
                        'wp.getPostStatusList'  => 'this:wp_getPostStatusList',
                        'wp.getPageStatusList'  => 'this:wp_getPageStatusList',
@@ -140,7 +150,24 @@ class wp_xmlrpc_server extends IXR_Server {
                $this->methods = apply_filters( 'xmlrpc_methods', $this->methods );
        }
 
-       function serve_request() {
+       /**
+        * Make private/protected methods readable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param callable $name      Method to call.
+        * @param array    $arguments Arguments to pass when calling.
+        * @return mixed|bool Return value of the callback, false otherwise.
+        */
+       public function __call( $name, $arguments ) {
+               if ( '_multisite_getUsersBlogs' === $name ) {
+                       return call_user_func_array( array( $this, $name ), $arguments );
+               }
+               return false;
+       }
+
+       public function serve_request() {
                $this->IXR_Server($this->methods);
        }
 
@@ -152,7 +179,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $args Method Parameters.
         * @return string
         */
-       function sayHello($args) {
+       public function sayHello($args) {
                return 'Hello!';
        }
 
@@ -164,7 +191,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $args Method Parameters.
         * @return int
         */
-       function addTwoNumbers($args) {
+       public function addTwoNumbers($args) {
                $number1 = $args[0];
                $number2 = $args[1];
                return $number1 + $number2;
@@ -177,9 +204,9 @@ 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
         */
-       function login( $username, $password ) {
+       public function login( $username, $password ) {
                /*
                 * Respect old get_option() filters left for back-compat when the 'enable_xmlrpc'
                 * option was deprecated in 3.5.0. Use the 'xmlrpc_enabled' hook instead.
@@ -238,7 +265,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param string $password User's password.
         * @return bool Whether authentication passed.
         */
-       function login_pass_ok( $username, $password ) {
+       public function login_pass_ok( $username, $password ) {
                return (bool) $this->login( $username, $password );
        }
 
@@ -250,7 +277,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param string|array $data Escape single string or array of strings.
         * @return string|array Type matches $data and sanitized for the database.
         */
-       function escape( &$data ) {
+       public function escape( &$data ) {
                if ( ! is_array( $data ) )
                        return wp_slash( $data );
 
@@ -270,7 +297,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param int $post_id Post ID.
         * @return array Custom fields, if exist.
         */
-       function get_custom_fields($post_id) {
+       public function get_custom_fields($post_id) {
                $post_id = (int) $post_id;
 
                $custom_fields = array();
@@ -298,7 +325,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param int $post_id Post ID.
         * @param array $fields Custom fields.
         */
-       function set_custom_fields($post_id, $fields) {
+       public function set_custom_fields($post_id, $fields) {
                $post_id = (int) $post_id;
 
                foreach ( (array) $fields as $meta ) {
@@ -328,7 +355,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 2.6.0
         */
-       function initialise_blog_option_info() {
+       public function initialise_blog_option_info() {
                global $wp_version;
 
                $this->blog_options = array(
@@ -490,14 +517,14 @@ 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'
         *  - 'blogName'
         *  - 'xmlrpc' - url of xmlrpc endpoint
         */
-       function wp_getUsersBlogs( $args ) {
+       public function wp_getUsersBlogs( $args ) {
                // If this isn't on WPMU then just use blogger_getUsersBlogs
                if ( !is_multisite() ) {
                        array_unshift( $args, 1 );
@@ -896,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.
@@ -955,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,
@@ -1050,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
@@ -1073,15 +1101,14 @@ 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
         */
-       function wp_newPost( $args ) {
+       public function wp_newPost( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $content_struct = $args[3];
@@ -1089,6 +1116,21 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( ! $user = $this->login( $username, $password ) )
                        return $this->error;
 
+               // convert the date field back to IXR form
+               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'] ) && ! ( $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 {
+                               $content_struct['post_date_gmt'] = $this->_convert_date( $content_struct['post_date_gmt'] );
+                       }
+               }
+
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'wp.newPost' );
 
@@ -1108,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.
         *
@@ -1115,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,
@@ -1200,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;
                        }
                }
 
@@ -1362,20 +1443,19 @@ 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
         */
-       function wp_editPost( $args ) {
+       public function wp_editPost( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_id        = (int) $args[3];
@@ -1426,19 +1506,18 @@ 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
         */
-       function wp_deletePost( $args ) {
+       public function wp_deletePost( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $post_id    = (int) $args[3];
@@ -1480,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'
@@ -1508,13 +1588,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *  - 'tags'
         *  - 'enclosure'
         */
-       function wp_getPost( $args ) {
+       public function wp_getPost( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $post_id            = (int) $args[3];
@@ -1567,20 +1646,19 @@ 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.
         */
-       function wp_getPosts( $args ) {
+       public function wp_getPosts( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $filter     = isset( $args[3] ) ? $args[3] : array();
@@ -1658,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
@@ -1669,15 +1747,14 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'parent'
         *      - 'description'
         *      - 'slug'
-        * @return string term_id
+        * @return string|IXR_Error term_id
         */
-       function wp_newTerm( $args ) {
+       public function wp_newTerm( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $content_struct     = $args[3];
@@ -1745,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
@@ -1757,15 +1834,14 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'parent'
         *      - 'description'
         *      - 'slug'
-        * @return bool True, on success.
+        * @return bool|IXR_Error True, on success.
         */
-       function wp_editTerm( $args ) {
+       public function wp_editTerm( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $term_id            = (int) $args[3];
@@ -1845,20 +1921,19 @@ 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
         *  - string     $term_id
         * @return boolean|IXR_Error If it suceeded true else a reason why not
         */
-       function wp_deleteTerm( $args ) {
+       public function wp_deleteTerm( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $taxonomy           = $args[3];
@@ -1904,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'
@@ -1920,13 +1995,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *  - 'parent'
         *  - 'count'
         */
-       function wp_getTerm( $args ) {
+       public function wp_getTerm( $args ) {
                if ( ! $this->minimum_args( $args, 5 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $taxonomy           = $args[3];
@@ -1967,20 +2041,19 @@ 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
         */
-       function wp_getTerms( $args ) {
+       public function wp_getTerms( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $taxonomy       = $args[3];
@@ -2044,19 +2117,18 @@ 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())
         */
-       function wp_getTaxonomy( $args ) {
+       public function wp_getTaxonomy( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $taxonomy       = $args[3];
@@ -2099,18 +2171,17 @@ 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
         */
-       function wp_getTaxonomies( $args ) {
+       public function wp_getTaxonomies( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $filter             = isset( $args[3] ) ? $args[3] : array( 'public' => true );
@@ -2157,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'
@@ -2176,13 +2247,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *  - 'display_name'
         *  - 'roles'
         */
-       function wp_getUser( $args ) {
+       public function wp_getUser( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $user_id    = (int) $args[3];
@@ -2232,20 +2302,19 @@ 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
         */
-       function wp_getUsers( $args ) {
+       public function wp_getUsers( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $filter     = isset( $args[3] ) ? $args[3] : array();
@@ -2304,19 +2373,18 @@ 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)
         */
-       function wp_getProfile( $args ) {
+       public function wp_getProfile( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
 
@@ -2346,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
@@ -2358,15 +2426,14 @@ class wp_xmlrpc_server extends IXR_Server {
         *      - 'nickname'
         *      - 'nicename'
         *      - 'bio'
-        * @return bool True, on success.
+        * @return bool|IXR_Error True, on success.
         */
-       function wp_editProfile( $args ) {
+       public function wp_editProfile( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $content_struct = $args[3];
@@ -2423,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
         */
-       function wp_getPage($args) {
+       public function wp_getPage($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $page_id        = (int) $args[1];
                $username       = $args[2];
                $password       = $args[3];
@@ -2457,7 +2523,7 @@ class wp_xmlrpc_server extends IXR_Server {
                }
                // If the page doesn't exist indicate that.
                else {
-                       return(new IXR_Error(404, __('Sorry, no such page.')));
+                       return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
                }
        }
 
@@ -2467,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
         */
-       function wp_getPages($args) {
+       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;
@@ -2502,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();
        }
 
        /**
@@ -2516,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
         */
-       function wp_newPage($args) {
+       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;
@@ -2535,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 );
        }
 
        /**
@@ -2544,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.
         */
-       function wp_deletePage($args) {
+       public function wp_deletePage($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $page_id        = (int) $args[3];
@@ -2564,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.
@@ -2585,7 +2645,7 @@ class wp_xmlrpc_server extends IXR_Server {
                 */
                do_action( 'xmlrpc_call_success_wp_deletePage', $page_id, $args );
 
-               return(true);
+               return true;
        }
 
        /**
@@ -2594,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
         */
-       function wp_editPage($args) {
+       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]);
@@ -2614,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';
@@ -2633,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 );
        }
 
        /**
@@ -2642,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
         */
-       function wp_getPageList($args) {
+       public function wp_getPageList($args) {
                global $wpdb;
 
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
 
@@ -2686,7 +2744,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        unset($page_list[$i]->post_status);
                }
 
-               return($page_list);
+               return $page_list;
        }
 
        /**
@@ -2695,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
         */
-       function wp_getAuthors($args) {
+       public function wp_getAuthors($args) {
 
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -2709,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' );
@@ -2732,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
         */
-       function wp_getTags( $args ) {
+       public function wp_getTags( $args ) {
                $this->escape( $args );
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
 
@@ -2754,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;
@@ -2774,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.
         */
-       function wp_newCategory($args) {
+       public function wp_newCategory($args) {
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
                $category                               = $args[3];
@@ -2792,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.
@@ -2820,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.'));
                }
 
                /**
@@ -2844,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.
         */
-       function wp_deleteCategory($args) {
+       public function wp_deleteCategory($args) {
                $this->escape($args);
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
                $category_id    = (int) $args[3];
@@ -2886,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
         */
-       function wp_suggestCategories($args) {
+       public function wp_suggestCategories($args) {
                $this->escape($args);
 
-               $blog_id                                = (int) $args[0];
                $username                               = $args[1];
                $password                               = $args[2];
                $category                               = $args[3];
@@ -2901,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' );
@@ -2915,7 +2969,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        );
                }
 
-               return($category_suggestions);
+               return $category_suggestions;
        }
 
        /**
@@ -2924,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
         */
-       function wp_getComment($args) {
+       public function wp_getComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_id     = (int) $args[3];
@@ -2952,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'.
@@ -2966,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
         */
-       function wp_getComments($args) {
+       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();
@@ -3023,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()}
         */
-       function wp_deleteComment($args) {
+       public function wp_deleteComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_ID     = (int) $args[3];
@@ -3072,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:
@@ -3085,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.
         */
-       function wp_editComment($args) {
+       public function wp_editComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $comment_ID     = (int) $args[3];
@@ -3175,14 +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()}
         */
-       function wp_newComment($args) {
-               global $wpdb;
-
+       public function wp_newComment($args) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post           = $args[3];
@@ -3202,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;
                }
@@ -3221,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 ) {
@@ -3279,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
         */
-       function wp_getCommentStatusList($args) {
+       public function wp_getCommentStatusList($args) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3306,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
         */
-       function wp_getCommentCount( $args ) {
+       public function wp_getCommentCount( $args ) {
                $this->escape($args);
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_id        = (int) $args[3];
@@ -3340,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
         */
-       function wp_getPostStatusList( $args ) {
+       public function wp_getPostStatusList( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3367,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
         */
-       function wp_getPageStatusList( $args ) {
+       public function wp_getPageStatusList( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3394,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
         */
-       function wp_getPageTemplates( $args ) {
+       public function wp_getPageTemplates( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
 
@@ -3421,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
         */
-       function wp_getOptions( $args ) {
+       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();
@@ -3449,7 +3492,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $options Options to retrieve.
         * @return array
         */
-       function _getOptions($options) {
+       public function _getOptions($options) {
                $data = array();
                $can_manage = current_user_can( 'manage_options' );
                foreach ( $options as $option ) {
@@ -3475,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
         */
-       function wp_setOptions( $args ) {
+       public function wp_setOptions( $args ) {
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $options        = (array) $args[3];
@@ -3491,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 ) )
@@ -3512,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'
@@ -3526,10 +3569,9 @@ class wp_xmlrpc_server extends IXR_Server {
         *  - 'description'
         *  - 'metadata'
         */
-       function wp_getMediaItem($args) {
+       public function wp_getMediaItem($args) {
                $this->escape($args);
 
-               $blog_id                = (int) $args[0];
                $username               = $args[1];
                $password               = $args[2];
                $attachment_id  = (int) $args[3];
@@ -3552,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'.
@@ -3566,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
         */
-       function wp_getMediaLibrary($args) {
+       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() ;
@@ -3610,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
          */
-       function wp_getPostFormats( $args ) {
+       public function wp_getPostFormats( $args ) {
                $this->escape( $args );
 
-               $blog_id = (int) $args[0];
                $username = $args[1];
                $password = $args[2];
 
@@ -3633,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];
 
@@ -3657,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'
@@ -3673,13 +3714,12 @@ class wp_xmlrpc_server extends IXR_Server {
         *  - 'taxonomies'
         *  - 'supports'
         */
-       function wp_getPostType( $args ) {
+       public function wp_getPostType( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
                $post_type_name = $args[3];
@@ -3722,20 +3762,19 @@ 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
         */
-       function wp_getPostTypes( $args ) {
+       public function wp_getPostTypes( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id            = (int) $args[0];
                $username           = $args[1];
                $password           = $args[2];
                $filter             = isset( $args[3] ) ? $args[3] : array( 'public' => true );
@@ -3779,20 +3818,19 @@ 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.
         */
-       function wp_getRevisions( $args ) {
+       public function wp_getRevisions( $args ) {
                if ( ! $this->minimum_args( $args, 4 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id    = (int) $args[0];
                $username   = $args[1];
                $password   = $args[2];
                $post_id    = (int) $args[3];
@@ -3856,19 +3894,18 @@ 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.
         */
-       function wp_restoreRevision( $args ) {
+       public function wp_restoreRevision( $args ) {
                if ( ! $this->minimum_args( $args, 3 ) )
                        return $this->error;
 
                $this->escape( $args );
 
-               $blog_id     = (int) $args[0];
                $username    = $args[1];
                $password    = $args[2];
                $revision_id = (int) $args[3];
@@ -3912,9 +3949,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function blogger_getUsersBlogs($args) {
+       public function blogger_getUsersBlogs($args) {
                if ( is_multisite() )
                        return $this->_multisite_getUsersBlogs($args);
 
@@ -3946,8 +3983,10 @@ class wp_xmlrpc_server extends IXR_Server {
         * Private function for retrieving a users blogs for multisite setups
         *
         * @access protected
+        *
+        * @return array|IXR_Error
         */
-       function _multisite_getUsersBlogs($args) {
+       protected function _multisite_getUsersBlogs($args) {
                $current_blog = get_blog_details();
 
                $domain = $current_blog->domain;
@@ -3979,9 +4018,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function blogger_getUserInfo($args) {
+       public function blogger_getUserInfo($args) {
 
                $this->escape($args);
 
@@ -4014,9 +4053,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function blogger_getPost($args) {
+       public function blogger_getPost($args) {
 
                $this->escape($args);
 
@@ -4059,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
         */
-       function blogger_getRecentPosts($args) {
+       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] ) )
@@ -4090,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;
@@ -4101,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;
@@ -4123,8 +4156,9 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 1.5.0
         * @deprecated 3.5.0
+        * @return IXR_Error
         */
-       function blogger_getTemplate($args) {
+       public function blogger_getTemplate($args) {
                return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
        }
 
@@ -4133,8 +4167,9 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @since 1.5.0
         * @deprecated 3.5.0
+        * @return IXR_Error
         */
-       function blogger_setTemplate($args) {
+       public function blogger_setTemplate($args) {
                return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
        }
 
@@ -4144,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
         */
-       function blogger_newPost($args) {
+       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];
@@ -4177,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 ) )
@@ -4207,9 +4241,9 @@ 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.
         */
-       function blogger_editPost($args) {
+       public function blogger_editPost( $args ) {
 
                $this->escape($args);
 
@@ -4217,41 +4251,43 @@ 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) )
+               if ( ! $user = $this->login( $username, $password ) ) {
                        return $this->error;
+               }
 
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'blogger.editPost' );
 
-               $actual_post = get_post($post_ID,ARRAY_A);
+               $actual_post = get_post( $post_ID, ARRAY_A );
 
-               if ( !$actual_post || $actual_post['post_type'] != 'post' )
-                       return new IXR_Error(404, __('Sorry, no such post.'));
+               if ( ! $actual_post || $actual_post['post_type'] != 'post' ) {
+                       return new IXR_Error( 404, __( 'Sorry, no such post.' ) );
+               }
 
                $this->escape($actual_post);
 
-               if ( !current_user_can('edit_post', $post_ID) )
+               if ( ! current_user_can( 'edit_post', $post_ID ) ) {
                        return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.'));
+               }
+               if ( 'publish' == $actual_post['post_status'] && ! current_user_can( 'publish_posts' ) ) {
+                       return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
+               }
 
-               extract($actual_post, EXTR_SKIP);
-
-               if ( ('publish' == $post_status) && !current_user_can('publish_posts') )
-                       return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.'));
-
-               $post_title = xmlrpc_getposttitle($content);
-               $post_category = xmlrpc_getpostcategory($content);
-               $post_content = xmlrpc_removepostdata($content);
-
-               $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt');
+               $postdata = array();
+               $postdata['ID'] = $actual_post['ID'];
+               $postdata['post_content'] = xmlrpc_removepostdata( $content );
+               $postdata['post_title'] = xmlrpc_getposttitle( $content );
+               $postdata['post_category'] = xmlrpc_getpostcategory( $content );
+               $postdata['post_status'] = $actual_post['post_status'];
+               $postdata['post_excerpt'] = $actual_post['post_excerpt'];
 
-               $result = wp_update_post($postdata);
+               $result = wp_update_post( $postdata );
 
-               if ( !$result )
+               if ( ! $result ) {
                        return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.'));
-
-               $this->attach_uploads( $ID, $post_content );
+               }
+               $this->attach_uploads( $actual_post['ID'], $postdata['post_content'] );
 
                /**
                 * Fires after a post has been successfully updated via the XML-RPC Blogger API.
@@ -4272,15 +4308,14 @@ 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.
         */
-       function blogger_deletePost($args) {
+       public function blogger_deletePost($args) {
                $this->escape($args);
 
                $post_ID     = (int) $args[1];
                $username  = $args[2];
                $password   = $args[3];
-               $publish     = $args[4];
 
                if ( !$user = $this->login($username, $password) )
                        return $this->error;
@@ -4346,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
         */
-       function mw_newPost($args) {
+       public function mw_newPost($args) {
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                $content_struct = $args[3];
@@ -4443,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 )
@@ -4586,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']) )
@@ -4633,7 +4668,11 @@ class wp_xmlrpc_server extends IXR_Server {
                return strval($post_ID);
        }
 
-       function add_enclosure_if_new( $post_ID, $enclosure ) {
+       /**
+        * @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";
                        $found = false;
@@ -4659,7 +4698,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param int $post_ID Post ID.
         * @param string $post_content Post Content for attachment.
         */
-       function attach_uploads( $post_ID, $post_content ) {
+       public function attach_uploads( $post_ID, $post_content ) {
                global $wpdb;
 
                // find any unattached files
@@ -4678,9 +4717,9 @@ 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.
         */
-       function mw_editPost($args) {
+       public function mw_editPost($args) {
 
                $this->escape($args);
 
@@ -4724,10 +4763,17 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $this->escape($postdata);
-               extract($postdata, EXTR_SKIP);
+
+               $ID = $postdata['ID'];
+               $post_content = $postdata['post_content'];
+               $post_title = $postdata['post_title'];
+               $post_excerpt = $postdata['post_excerpt'];
+               $post_password = $postdata['post_password'];
+               $post_parent = $postdata['post_parent'];
+               $post_type = $postdata['post_type'];
+               $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'];
@@ -4744,27 +4790,33 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( isset($content_struct['wp_page_order']) )
                        $menu_order = $content_struct['wp_page_order'];
 
+               $page_template = null;
                if ( ! empty( $content_struct['wp_page_template'] ) && 'page' == $post_type )
                        $page_template = $content_struct['wp_page_template'];
 
                $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']) ) {
@@ -4862,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 )
@@ -4906,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']) )
@@ -4956,9 +5012,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function mw_getPost($args) {
+       public function mw_getPost($args) {
 
                $this->escape($args);
 
@@ -5081,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
         */
-       function mw_getRecentPosts($args) {
+       public function mw_getRecentPosts($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                if ( isset( $args[3] ) )
@@ -5109,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;
@@ -5153,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'],
@@ -5181,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;
@@ -5201,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
         */
-       function mw_getCategories($args) {
+       public function mw_getCategories($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
 
@@ -5224,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;
@@ -5249,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
         */
-       function mw_newMediaObject($args) {
+       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];
@@ -5363,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
         */
-       function mt_getRecentPostTitles($args) {
+       public function mt_getRecentPostTitles($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
                if ( isset( $args[3] ) )
@@ -5390,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'] ) )
@@ -5399,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'],
@@ -5407,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;
@@ -5424,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
         */
-       function mt_getCategoryList($args) {
+       public function mt_getCategoryList($args) {
 
                $this->escape($args);
 
-               $blog_ID     = (int) $args[0];
                $username  = $args[1];
                $password   = $args[2];
 
@@ -5447,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;
 
@@ -5463,9 +5503,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function mt_getPostCategories($args) {
+       public function mt_getPostCategories($args) {
 
                $this->escape($args);
 
@@ -5507,9 +5547,9 @@ 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.
         */
-       function mt_setPostCategories($args) {
+       public function mt_setPostCategories($args) {
 
                $this->escape($args);
 
@@ -5548,7 +5588,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $args Method parameters.
         * @return array
         */
-       function mt_supportedMethods($args) {
+       public function mt_supportedMethods($args) {
 
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'mt.supportedMethods' );
@@ -5568,7 +5608,7 @@ class wp_xmlrpc_server extends IXR_Server {
         *
         * @param array $args Method parameters.
         */
-       function mt_supportedTextFilters($args) {
+       public function mt_supportedTextFilters($args) {
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
                do_action( 'xmlrpc_call', 'mt.supportedTextFilters' );
 
@@ -5588,9 +5628,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return mixed
+        * @return array|IXR_Error
         */
-       function mt_getTrackbackPings($args) {
+       public function mt_getTrackbackPings($args) {
 
                global $wpdb;
 
@@ -5631,9 +5671,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return int
+        * @return int|IXR_Error
         */
-       function mt_publishPost($args) {
+       public function mt_publishPost($args) {
 
                $this->escape($args);
 
@@ -5676,9 +5716,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return string|IXR_Error
         */
-       function pingback_ping($args) {
+       public function pingback_ping($args) {
                global $wpdb;
 
                /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
@@ -5689,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);
@@ -5718,36 +5756,31 @@ 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()';
-               } elseif ( preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
+                       // $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']);
-                               $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", like_escape( $title ) );
+                               $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", $title );
                                if (! ($post_ID = $wpdb->get_var($sql)) ) {
                                        // 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
@@ -5889,9 +5922,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @since 1.5.0
         *
         * @param array $args Method parameters.
-        * @return array
+        * @return array|IXR_Error
         */
-       function pingback_extensions_getPingbacks($args) {
+       public function pingback_extensions_getPingbacks($args) {
 
                global $wpdb;
 
@@ -5929,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.