Wordpress 3.0.6
[autoinstalls/wordpress.git] / xmlrpc.php
index 6e5848e8c582e28efbcc9e711894baec8c45ac5f..5ec072b09e02d591d4eec4af814c1e548c8ddbc8 100644 (file)
@@ -201,6 +201,9 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $this->initialise_blog_option_info( );
                $this->methods = apply_filters('xmlrpc_methods', $this->methods);
+       }
+
+       function serve_request() {
                $this->IXR_Server($this->methods);
        }
 
@@ -243,7 +246,7 @@ class wp_xmlrpc_server extends IXR_Server {
         */
        function login_pass_ok($user_login, $user_pass) {
                if ( !get_option( 'enable_xmlrpc' ) ) {
-                       $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this blog.  An admin user can enable them at %s'),  admin_url('options-writing.php') ) );
+                       $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site.  An admin user can enable them at %s'),  admin_url('options-writing.php') ) );
                        return false;
                }
 
@@ -265,7 +268,7 @@ class wp_xmlrpc_server extends IXR_Server {
         */
        function login($username, $password) {
                if ( !get_option( 'enable_xmlrpc' ) ) {
-                       $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this blog.  An admin user can enable them at %s'),  admin_url('options-writing.php') ) );
+                       $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site.  An admin user can enable them at %s'),  admin_url('options-writing.php') ) );
                        return false;
                }
 
@@ -276,7 +279,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return false;
                }
 
-               set_current_user( $user->ID );
+               wp_set_current_user( $user->ID );
                return $user;
        }
 
@@ -291,14 +294,13 @@ class wp_xmlrpc_server extends IXR_Server {
        function escape(&$array) {
                global $wpdb;
 
-               if(!is_array($array)) {
+               if (!is_array($array)) {
                        return($wpdb->escape($array));
-               }
-               else {
+               } else {
                        foreach ( (array) $array as $k => $v ) {
-                               if (is_array($v)) {
+                               if ( is_array($v) ) {
                                        $this->escape($array[$k]);
-                               } else if (is_object($v)) {
+                               } else if ( is_object($v) ) {
                                        //skip
                                } else {
                                        $array[$k] = $wpdb->escape($v);
@@ -367,7 +369,7 @@ class wp_xmlrpc_server extends IXR_Server {
        }
 
        /**
-        * Setup blog options property.
+        * Set up blog options property.
         *
         * Passes property through 'xmlrpc_blog_options' filter.
         *
@@ -389,7 +391,7 @@ class wp_xmlrpc_server extends IXR_Server {
                                'value'                 => $wp_version
                        ),
                        'blog_url'                      => array(
-                               'desc'                  => __( 'Blog URL' ),
+                               'desc'                  => __( 'Site URL' ),
                                'readonly'              => true,
                                'option'                => 'siteurl'
                        ),
@@ -401,12 +403,12 @@ class wp_xmlrpc_server extends IXR_Server {
                                'option'                => 'gmt_offset'
                        ),
                        'blog_title'            => array(
-                               'desc'                  => __( 'Blog Title' ),
+                               'desc'                  => __( 'Site Title' ),
                                'readonly'              => false,
                                'option'                        => 'blogname'
                        ),
                        'blog_tagline'          => array(
-                               'desc'                  => __( 'Blog Tagline' ),
+                               'desc'                  => __( 'Site Tagline' ),
                                'readonly'              => false,
                                'option'                => 'blogdescription'
                        ),
@@ -419,6 +421,11 @@ class wp_xmlrpc_server extends IXR_Server {
                                'desc'                  => __( 'Time Format' ),
                                'readonly'              => false,
                                'option'                => 'time_format'
+                       ),
+                       'users_can_register'    => array(
+                               'desc'                  => __( 'Allow new users to sign up' ),
+                               'readonly'              => false,
+                               'option'                => 'users_can_register'
                        )
                );
 
@@ -434,8 +441,9 @@ class wp_xmlrpc_server extends IXR_Server {
         * @return array
         */
        function wp_getUsersBlogs( $args ) {
+               global $current_site;
                // If this isn't on WPMU then just use blogger_getUsersBlogs
-               if( !function_exists( 'is_site_admin' ) ) {
+               if ( !is_multisite() ) {
                        array_unshift( $args, 1 );
                        return $this->blogger_getUsersBlogs( $args );
                }
@@ -445,23 +453,23 @@ class wp_xmlrpc_server extends IXR_Server {
                $username = $args[0];
                $password = $args[1];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
+
 
                do_action( 'xmlrpc_call', 'wp.getUsersBlogs' );
 
                $blogs = (array) get_blogs_of_user( $user->ID );
                $struct = array( );
 
-               foreach( $blogs as $blog ) {
+               foreach ( $blogs as $blog ) {
                        // Don't include blogs that aren't hosted at this site
-                       if( $blog->site_id != $current_site->id )
+                       if ( $blog->site_id != $current_site->id )
                                continue;
 
                        $blog_id = $blog->userblog_id;
                        switch_to_blog($blog_id);
-                       $is_admin = current_user_can('level_8');
+                       $is_admin = current_user_can('manage_options');
 
                        $struct[] = array(
                                'isAdmin'               => $is_admin,
@@ -497,7 +505,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        return $this->error;
                }
 
-               if( !current_user_can( 'edit_page', $page_id ) )
+               if ( !current_user_can( 'edit_page', $page_id ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit this page.' ) );
 
                do_action('xmlrpc_call', 'wp.getPage');
@@ -506,14 +514,14 @@ class wp_xmlrpc_server extends IXR_Server {
                $page = get_page($page_id);
 
                // If we found the page then format the data.
-               if($page->ID && ($page->post_type == "page")) {
+               if ( $page->ID && ($page->post_type == "page") ) {
                        // Get all of the page content and link.
                        $full_page = get_extended($page->post_content);
                        $link = post_permalink($page->ID);
 
                        // Get info the page parent if there is one.
                        $parent_title = "";
-                       if(!empty($page->post_parent)) {
+                       if ( !empty($page->post_parent) ) {
                                $parent = get_page($page->post_parent);
                                $parent_title = $parent->post_title;
                        }
@@ -527,13 +535,12 @@ class wp_xmlrpc_server extends IXR_Server {
                        $page_date_gmt = mysql2date("Ymd\TH:i:s", $page->post_date_gmt, false);
 
                        // For drafts use the GMT version of the date
-                       if ( $page->post_status == 'draft' ) {
+                       if ( $page->post_status == 'draft' )
                                $page_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $page->post_date ), 'Ymd\TH:i:s' );
-                       }
 
                        // Pull the categories info together.
                        $categories = array();
-                       foreach(wp_get_post_categories($page->ID) as $cat_id) {
+                       foreach ( wp_get_post_categories($page->ID) as $cat_id ) {
                                $categories[] = get_cat_name($cat_id);
                        }
 
@@ -541,7 +548,7 @@ class wp_xmlrpc_server extends IXR_Server {
                        $author = get_userdata($page->post_author);
 
                        $page_template = get_post_meta( $page->ID, '_wp_page_template', true );
-                       if( empty( $page_template ) )
+                       if ( empty( $page_template ) )
                                $page_template = 'default';
 
                        $page_struct = array(
@@ -593,30 +600,24 @@ class wp_xmlrpc_server extends IXR_Server {
                $blog_id        = (int) $args[0];
                $username       = $args[1];
                $password       = $args[2];
-               $num_pages      = (int) $args[3];
+               $num_pages      = isset($args[3]) ? (int) $args[3] : 10;
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_pages' ) )
+               if ( !current_user_can( 'edit_pages' ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) );
 
                do_action('xmlrpc_call', 'wp.getPages');
 
-               $page_limit = 10;
-               if( isset( $num_pages ) ) {
-                       $page_limit = $num_pages;
-               }
-
-               $pages = get_posts( array('post_type' => 'page', 'post_status' => 'all', 'numberposts' => $page_limit) );
+               $pages = get_posts( array('post_type' => 'page', 'post_status' => 'any', 'numberposts' => $num_pages) );
                $num_pages = count($pages);
 
                // If we have pages, put together their info.
-               if($num_pages >= 1) {
+               if ( $num_pages >= 1 ) {
                        $pages_struct = array();
 
-                       for($i = 0; $i < $num_pages; $i++) {
+                       for ( $i = 0; $i < $num_pages; $i++ ) {
                                $page = wp_xmlrpc_server::wp_getPage(array(
                                        $blog_id, $pages[$i]->ID, $username, $password
                                ));
@@ -646,16 +647,14 @@ class wp_xmlrpc_server extends IXR_Server {
                $page           = $args[3];
                $publish        = $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'wp.newPage');
 
                // Make sure the user is allowed to add new pages.
-               if(!current_user_can("publish_pages")) {
+               if ( !current_user_can("publish_pages") )
                        return(new IXR_Error(401, __("Sorry, you cannot add new pages.")));
-               }
 
                // Mark this as content for a page.
                $args[3]["post_type"] = "page";
@@ -680,32 +679,25 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $page_id        = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'wp.deletePage');
 
                // Get the current page based on the page_id and
                // make sure it is a page and not a post.
                $actual_page = wp_get_single_post($page_id, ARRAY_A);
-               if(
-                       !$actual_page
-                       || ($actual_page["post_type"] != "page")
-               ) {
+               if ( !$actual_page || ($actual_page["post_type"] != "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)) {
+               if ( !current_user_can("delete_page", $page_id) )
                        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) {
+               if ( !$result )
                        return(new IXR_Error(500, __("Failed to delete the page.")));
-               }
 
                return(true);
        }
@@ -727,25 +719,19 @@ class wp_xmlrpc_server extends IXR_Server {
                $content        = $args[4];
                $publish        = $args[5];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'wp.editPage');
 
                // Get the page data and make sure it is a page.
                $actual_page = wp_get_single_post($page_id, ARRAY_A);
-               if(
-                       !$actual_page
-                       || ($actual_page["post_type"] != "page")
-               ) {
+               if ( !$actual_page || ($actual_page["post_type"] != "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)) {
+               if ( !current_user_can("edit_page", $page_id) )
                        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";
@@ -780,11 +766,10 @@ class wp_xmlrpc_server extends IXR_Server {
                $username                               = $args[1];
                $password                               = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_pages' ) )
+               if ( !current_user_can( 'edit_pages' ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) );
 
                do_action('xmlrpc_call', 'wp.getPageList');
@@ -804,7 +789,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // The date needs to be formated properly.
                $num_pages = count($page_list);
-               for($i = 0; $i < $num_pages; $i++) {
+               for ( $i = 0; $i < $num_pages; $i++ ) {
                        $post_date = mysql2date("Ymd\TH:i:s", $page_list[$i]->post_date, false);
                        $post_date_gmt = mysql2date("Ymd\TH:i:s", $page_list[$i]->post_date_gmt, false);
 
@@ -841,18 +826,16 @@ class wp_xmlrpc_server extends IXR_Server {
                $username       = $args[1];
                $password       = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if(!current_user_can("edit_posts")) {
-                       return(new IXR_Error(401, __("Sorry, you cannot edit posts on this blog.")));
-               }
+               if ( !current_user_can("edit_posts") )
+                       return(new IXR_Error(401, __("Sorry, you cannot edit posts on this site.")));
 
                do_action('xmlrpc_call', 'wp.getAuthors');
 
                $authors = array();
-               foreach( (array) get_users_of_blog() as $row ) {
+               foreach ( (array) get_users_of_blog() as $row ) {
                        $authors[] = array(
                                "user_id"       => $row->user_id,
                                "user_login"    => $row->user_login,
@@ -878,19 +861,17 @@ class wp_xmlrpc_server extends IXR_Server {
                $username               = $args[1];
                $password               = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) ) {
-                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this blog in order to view tags.' ) );
-               }
+               if ( !current_user_can( 'edit_posts' ) )
+                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view tags.' ) );
 
                do_action( 'xmlrpc_call', 'wp.getKeywords' );
 
                $tags = array( );
 
-               if( $all_tags = get_tags( ) ) {
+               if ( $all_tags = get_tags() ) {
                        foreach( (array) $all_tags as $tag ) {
                                $struct['tag_id']                       = $tag->term_id;
                                $struct['name']                         = $tag->name;
@@ -922,22 +903,19 @@ class wp_xmlrpc_server extends IXR_Server {
                $password                               = $args[2];
                $category                               = $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'wp.newCategory');
 
                // Make sure the user is allowed to add a category.
-               if(!current_user_can("manage_categories")) {
+               if ( !current_user_can("manage_categories") )
                        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.
-               if(empty($category["slug"])) {
+               if ( empty($category["slug"]) )
                        $category["slug"] = "";
-               }
 
                // If no parent_id was provided make it empty
                // so that it will be a top level page (no parent).
@@ -945,9 +923,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        $category["parent_id"] = "";
 
                // If no description was provided make it empty.
-               if(empty($category["description"])) {
+               if ( empty($category["description"]) )
                        $category["description"] = "";
-               }
 
                $new_category = array(
                        "cat_name"                              => $category["name"],
@@ -956,8 +933,13 @@ class wp_xmlrpc_server extends IXR_Server {
                        "category_description"  => $category["description"]
                );
 
-               $cat_id = wp_insert_category($new_category);
-               if(!$cat_id) {
+               $cat_id = wp_insert_category($new_category, true);
+               if ( is_wp_error( $cat_id ) ) {
+                       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.")));
+               } elseif ( ! $cat_id ) {
                        return(new IXR_Error(500, __("Sorry, the new category failed.")));
                }
 
@@ -980,15 +962,13 @@ class wp_xmlrpc_server extends IXR_Server {
                $password               = $args[2];
                $category_id    = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'wp.deleteCategory');
 
-               if( !current_user_can("manage_categories") ) {
+               if ( !current_user_can("manage_categories") )
                        return new IXR_Error( 401, __( "Sorry, you do not have the right to delete a category." ) );
-               }
 
                return wp_delete_category( $category_id );
        }
@@ -1010,12 +990,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $category                               = $args[3];
                $max_results                    = (int) $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) )
-                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts to this blog in order to view categories.' ) );
+               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.' ) );
 
                do_action('xmlrpc_call', 'wp.suggestCategories');
 
@@ -1047,12 +1026,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $comment_id     = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                if ( !current_user_can( 'moderate_comments' ) )
-                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
+                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) );
 
                do_action('xmlrpc_call', 'wp.getComment');
 
@@ -1063,11 +1041,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $comment_date = mysql2date("Ymd\TH:i:s", $comment->comment_date, false);
                $comment_date_gmt = mysql2date("Ymd\TH:i:s", $comment->comment_date_gmt, false);
 
-               if ( 0 == $comment->comment_approved )
+               if ( '0' == $comment->comment_approved )
                        $comment_status = 'hold';
                else if ( 'spam' == $comment->comment_approved )
                        $comment_status = 'spam';
-               else if ( 1 == $comment->comment_approved )
+               else if ( '1' == $comment->comment_approved )
                        $comment_status = 'approve';
                else
                        $comment_status = $comment->comment_approved;
@@ -1103,6 +1081,7 @@ class wp_xmlrpc_server extends IXR_Server {
         * @return array
         */
        function wp_getComments($args) {
+               $raw_args = $args;
                $this->escape($args);
 
                $blog_id        = (int) $args[0];
@@ -1110,9 +1089,8 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $struct         = $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                if ( !current_user_can( 'moderate_comments' ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit comments.' ) );
@@ -1146,7 +1124,7 @@ class wp_xmlrpc_server extends IXR_Server {
 
                for ( $i = 0; $i < $num_comments; $i++ ) {
                        $comment = wp_xmlrpc_server::wp_getComment(array(
-                               $blog_id, $username, $password, $comments[$i]->comment_ID,
+                               $raw_args[0], $raw_args[1], $raw_args[2], $comments[$i]->comment_ID,
                        ));
                        $comments_struct[] = $comment;
                }
@@ -1170,18 +1148,20 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $comment_ID     = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                if ( !current_user_can( 'moderate_comments' ) )
-                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
+                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) );
 
                do_action('xmlrpc_call', 'wp.deleteComment');
 
-               if ( ! get_comment($comment_ID) )
+               if ( !$comment = get_comment( $comment_ID ) )
                        return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
 
+               if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
+                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) );
+
                return wp_delete_comment($comment_ID);
        }
 
@@ -1202,18 +1182,20 @@ class wp_xmlrpc_server extends IXR_Server {
                $comment_ID     = (int) $args[3];
                $content_struct = $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                if ( !current_user_can( 'moderate_comments' ) )
-                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
+                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) );
 
-               do_action('xmlrpc_call', 'wp.editComment');
-
-               if ( ! get_comment($comment_ID) )
+               if ( !$comment = get_comment( $comment_ID ) )
                        return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
 
+               if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
+                       return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) );
+
+               do_action('xmlrpc_call', 'wp.editComment');
+
                if ( isset($content_struct['status']) ) {
                        $statuses = get_comment_statuses();
                        $statuses = array_keys($statuses);
@@ -1353,12 +1335,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $username       = $args[1];
                $password       = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                if ( !current_user_can( 'moderate_comments' ) )
-                       return new IXR_Error( 403, __( 'You are not allowed access to details about this blog.' ) );
+                       return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
 
                do_action('xmlrpc_call', 'wp.getCommentStatusList');
 
@@ -1381,13 +1362,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $post_id        = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) ) {
+               if ( !current_user_can( 'edit_posts' ) )
                        return new IXR_Error( 403, __( 'You are not allowed access to details about comments.' ) );
-               }
 
                do_action('xmlrpc_call', 'wp.getCommentCount');
 
@@ -1415,13 +1394,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $username       = $args[1];
                $password       = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) ) {
-                       return new IXR_Error( 403, __( 'You are not allowed access to details about this blog.' ) );
-               }
+               if ( !current_user_can( 'edit_posts' ) )
+                       return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
 
                do_action('xmlrpc_call', 'wp.getPostStatusList');
 
@@ -1443,13 +1420,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $username       = $args[1];
                $password       = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) ) {
-                       return new IXR_Error( 403, __( 'You are not allowed access to details about this blog.' ) );
-               }
+               if ( !current_user_can( 'edit_pages' ) )
+                       return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
 
                do_action('xmlrpc_call', 'wp.getPageStatusList');
 
@@ -1471,13 +1446,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $username       = $args[1];
                $password       = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_pages' ) ) {
-                       return new IXR_Error( 403, __( 'You are not allowed access to details about this blog.' ) );
-               }
+               if ( !current_user_can( 'edit_pages' ) )
+                       return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
 
                $templates = get_page_templates( );
                $templates['Default'] = 'default';
@@ -1501,14 +1474,12 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $options        = (array) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                // If no specific options where asked for, return all of them
-               if (count( $options ) == 0 ) {
+               if ( count( $options ) == 0 )
                        $options = array_keys($this->blog_options);
-               }
 
                return $this->_getOptions($options);
        }
@@ -1521,15 +1492,13 @@ class wp_xmlrpc_server extends IXR_Server {
         * @param array $options Options to retrieve.
         * @return array
         */
-       function _getOptions($options)
-       {
+       function _getOptions($options) {
                $data = array( );
-               foreach( $options as $option ) {
-                       if( array_key_exists( $option, $this->blog_options ) )
-                       {
+               foreach ( $options as $option ) {
+                       if ( array_key_exists( $option, $this->blog_options ) ) {
                                $data[$option] = $this->blog_options[$option];
                                //Is the value static or dynamic?
-                               if( isset( $data[$option]['option'] ) ) {
+                               if ( isset( $data[$option]['option'] ) ) {
                                        $data[$option]['value'] = get_option( $data[$option]['option'] );
                                        unset($data[$option]['option']);
                                }
@@ -1555,22 +1524,18 @@ class wp_xmlrpc_server extends IXR_Server {
                $password       = $args[2];
                $options        = (array) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'manage_options' ) )
+               if ( !current_user_can( 'manage_options' ) )
                        return new IXR_Error( 403, __( 'You are not allowed to update options.' ) );
 
-               foreach( $options as $o_name => $o_value ) {
+               foreach ( $options as $o_name => $o_value ) {
                        $option_names[] = $o_name;
-                       if( empty( $o_value ) )
+                       if ( !array_key_exists( $o_name, $this->blog_options ) )
                                continue;
 
-                       if( !array_key_exists( $o_name, $this->blog_options ) )
-                               continue;
-
-                       if( $this->blog_options[$o_name]['readonly'] == true )
+                       if ( $this->blog_options[$o_name]['readonly'] == true )
                                continue;
 
                        update_option( $this->blog_options[$o_name]['option'], $o_value );
@@ -1595,15 +1560,16 @@ class wp_xmlrpc_server extends IXR_Server {
         * @return array
         */
        function blogger_getUsersBlogs($args) {
+               if ( is_multisite() )
+                       return $this->_multisite_getUsersBlogs($args);
 
                $this->escape($args);
 
                $username = $args[1];
                $password  = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.getUsersBlogs');
 
@@ -1620,6 +1586,35 @@ class wp_xmlrpc_server extends IXR_Server {
                return array($struct);
        }
 
+       /**
+        * Private function for retrieving a users blogs for multisite setups
+        *
+        * @access protected
+        */
+       function _multisite_getUsersBlogs($args) {
+               global $current_blog;
+               $domain = $current_blog->domain;
+               $path = $current_blog->path . 'xmlrpc.php';
+               $protocol = is_ssl() ? 'https' : 'http';
+
+               $rpc = new IXR_Client("$protocol://{$domain}{$path}");
+               $rpc->query('wp.getUsersBlogs', $args[1], $args[2]);
+               $blogs = $rpc->getResponse();
+
+               if ( isset($blogs['faultCode']) )
+                       return new IXR_Error($blogs['faultCode'], $blogs['faultString']);
+
+               if ( $_SERVER['HTTP_HOST'] == $domain && $_SERVER['REQUEST_URI'] == $path ) {
+                       return $blogs;
+               } else {
+                       foreach ( (array) $blogs as $blog ) {
+                               if ( strpos($blog['url'], $_SERVER['HTTP_HOST']) )
+                                       return array($blog);
+                       }
+                       return array();
+               }
+       }
+
        /**
         * Retrieve user's data.
         *
@@ -1637,12 +1632,11 @@ class wp_xmlrpc_server extends IXR_Server {
                $username = $args[1];
                $password  = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) )
-                       return new IXR_Error( 401, __( 'Sorry, you do not have access to user data on this blog.' ) );
+               if ( !current_user_can( 'edit_posts' ) )
+                       return new IXR_Error( 401, __( 'Sorry, you do not have access to user data on this site.' ) );
 
                do_action('xmlrpc_call', 'blogger.getUserInfo');
 
@@ -1673,11 +1667,10 @@ class wp_xmlrpc_server extends IXR_Server {
                $username = $args[2];
                $password  = $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_post', $post_ID ) )
+               if ( !current_user_can( 'edit_post', $post_ID ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
 
                do_action('xmlrpc_call', 'blogger.getPost');
@@ -1717,21 +1710,20 @@ class wp_xmlrpc_server extends IXR_Server {
                $password  = $args[3];
                $num_posts  = $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.getRecentPosts');
 
                $posts_list = wp_get_recent_posts($num_posts);
 
-               if (!$posts_list) {
+               if ( !$posts_list ) {
                        $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.'));
                        return $this->error;
                }
 
                foreach ($posts_list as $entry) {
-                       if( !current_user_can( 'edit_post', $entry['ID'] ) )
+                       if ( !current_user_can( 'edit_post', $entry['ID'] ) )
                                continue;
 
                        $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false);
@@ -1751,7 +1743,7 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $recent_posts = array();
-               for ($j=0; $j<count($struct); $j++) {
+               for ( $j=0; $j<count($struct); $j++ ) {
                        array_push($recent_posts, $struct[$j]);
                }
 
@@ -1775,15 +1767,13 @@ class wp_xmlrpc_server extends IXR_Server {
                $password  = $args[3];
                $template   = $args[4]; /* could be 'main' or 'archiveIndex', but we don't use it */
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.getTemplate');
 
-               if ( !current_user_can('edit_themes') ) {
+               if ( !current_user_can('edit_themes') )
                        return new IXR_Error(401, __('Sorry, this user can not edit the template.'));
-               }
 
                /* warning: here we make the assumption that the blog's URL is on the same server */
                $filename = get_option('home') . '/';
@@ -1817,15 +1807,13 @@ class wp_xmlrpc_server extends IXR_Server {
                $content    = $args[4];
                $template   = $args[5]; /* could be 'main' or 'archiveIndex', but we don't use it */
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.setTemplate');
 
-               if ( !current_user_can('edit_themes') ) {
+               if ( !current_user_can('edit_themes') )
                        return new IXR_Error(401, __('Sorry, this user cannot edit the template.'));
-               }
 
                /* warning: here we make the assumption that the blog's URL is on the same server */
                $filename = get_option('home') . '/';
@@ -1859,15 +1847,14 @@ class wp_xmlrpc_server extends IXR_Server {
                $content    = $args[4];
                $publish    = $args[5];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.newPost');
 
                $cap = ($publish) ? 'publish_posts' : 'edit_posts';
                if ( !current_user_can($cap) )
-                       return new IXR_Error(401, __('Sorry, you are not allowed to post on this blog.'));
+                       return new IXR_Error(401, __('Sorry, you are not allowed to post on this site.'));
 
                $post_status = ($publish) ? 'publish' : 'draft';
 
@@ -1886,7 +1873,7 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( is_wp_error( $post_ID ) )
                        return new IXR_Error(500, $post_ID->get_error_message());
 
-               if (!$post_ID)
+               if ( !$post_ID )
                        return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.'));
 
                $this->attach_uploads( $post_ID, $post_content );
@@ -1914,17 +1901,15 @@ class wp_xmlrpc_server extends IXR_Server {
                $content     = $args[4];
                $publish     = $args[5];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.editPost');
 
                $actual_post = wp_get_single_post($post_ID,ARRAY_A);
 
-               if (!$actual_post || $actual_post['post_type'] != 'post') {
+               if ( !$actual_post || $actual_post['post_type'] != 'post' )
                        return new IXR_Error(404, __('Sorry, no such post.'));
-               }
 
                $this->escape($actual_post);
 
@@ -1944,9 +1929,9 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $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 );
 
                return true;
@@ -1968,26 +1953,23 @@ class wp_xmlrpc_server extends IXR_Server {
                $password   = $args[3];
                $publish     = $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'blogger.deletePost');
 
                $actual_post = wp_get_single_post($post_ID,ARRAY_A);
 
-               if (!$actual_post || $actual_post['post_type'] != 'post') {
+               if ( !$actual_post || $actual_post['post_type'] != 'post' )
                        return new IXR_Error(404, __('Sorry, no such post.'));
-               }
 
-               if ( !current_user_can('edit_post', $post_ID) )
+               if ( !current_user_can('delete_post', $post_ID) )
                        return new IXR_Error(401, __('Sorry, you do not have the right to delete this post.'));
 
                $result = wp_delete_post($post_ID);
 
-               if (!$result) {
+               if ( !$result )
                        return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be deleted.'));
-               }
 
                return true;
        }
@@ -2011,78 +1993,77 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
                $content_struct = $args[3];
-               $publish     = $args[4];
+               $publish     = isset( $args[4] ) ? $args[4] : 0;
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'metaWeblog.newPost');
 
-               $cap = ( $publish ) ? 'publish_posts' : 'edit_posts';
-               $error_message = __( 'Sorry, you are not allowed to publish posts on this blog.' );
-               $post_type = 'post';
                $page_template = '';
-               if( !empty( $content_struct['post_type'] ) ) {
-                       if( $content_struct['post_type'] == 'page' ) {
-                               $cap = ( $publish ) ? 'publish_pages' : 'edit_pages';
-                               $error_message = __( 'Sorry, you are not allowed to publish pages on this blog.' );
+               if ( !empty( $content_struct['post_type'] ) ) {
+                       if ( $content_struct['post_type'] == 'page' ) {
+                               if ( $publish || 'publish' == $content_struct['page_status'])
+                                       $cap  = 'publish_pages';
+                               else
+                                       $cap = 'edit_pages';
+                               $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
                                $post_type = 'page';
-                               if( !empty( $content_struct['wp_page_template'] ) )
+                               if ( !empty( $content_struct['wp_page_template'] ) )
                                        $page_template = $content_struct['wp_page_template'];
-                       }
-                       elseif( $content_struct['post_type'] == 'post' ) {
-                               // This is the default, no changes needed
-                       }
-                       else {
+                       } elseif ( $content_struct['post_type'] == 'post' ) {
+                               if ( $publish || 'publish' == $content_struct['post_status'])
+                                       $cap  = 'publish_posts';
+                               else
+                                       $cap = 'edit_posts';
+                               $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
+                               $post_type = 'post';
+                       } else {
                                // No other post_type values are allowed here
                                return new IXR_Error( 401, __( 'Invalid post type.' ) );
                        }
+               } else {
+                       if ( $publish || 'publish' == $content_struct['post_status'])
+                               $cap  = 'publish_posts';
+                       else
+                               $cap = 'edit_posts';
+                       $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
+                       $post_type = 'post';
                }
 
-               if( !current_user_can( $cap ) ) {
+               if ( !current_user_can( $cap ) )
                        return new IXR_Error( 401, $error_message );
-               }
 
                // Let WordPress generate the post_name (slug) unless
                // one has been provided.
                $post_name = "";
-               if(isset($content_struct["wp_slug"])) {
+               if ( isset($content_struct["wp_slug"]) )
                        $post_name = $content_struct["wp_slug"];
-               }
 
                // Only use a password if one was given.
-               if(isset($content_struct["wp_password"])) {
+               if ( isset($content_struct["wp_password"]) )
                        $post_password = $content_struct["wp_password"];
-               }
 
                // Only set a post parent if one was provided.
-               if(isset($content_struct["wp_page_parent_id"])) {
+               if ( isset($content_struct["wp_page_parent_id"]) )
                        $post_parent = $content_struct["wp_page_parent_id"];
-               }
 
                // Only set the menu_order if it was provided.
-               if(isset($content_struct["wp_page_order"])) {
+               if ( isset($content_struct["wp_page_order"]) )
                        $menu_order = $content_struct["wp_page_order"];
-               }
 
                $post_author = $user->ID;
 
                // If an author id was provided then use it instead.
-               if(
-                       isset($content_struct["wp_author_id"])
-                       && ($user->ID != $content_struct["wp_author_id"])
-               ) {
-                       switch($post_type) {
+               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")) {
+                                       if ( !current_user_can("edit_others_posts") )
                                                return(new IXR_Error(401, __("You are not allowed to post as this user")));
-                                       }
                                        break;
                                case "page":
-                                       if(!current_user_can("edit_others_pages")) {
+                                       if ( !current_user_can("edit_others_pages") )
                                                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.")));
@@ -2092,12 +2073,12 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $post_title = $content_struct['title'];
-               $post_content = apply_filters( 'content_save_pre', $content_struct['description'] );
+               $post_content = $content_struct['description'];
 
                $post_status = $publish ? 'publish' : 'draft';
 
-               if( isset( $content_struct["{$post_type}_status"] ) ) {
-                       switch( $content_struct["{$post_type}_status"] ) {
+               if ( isset( $content_struct["{$post_type}_status"] ) ) {
+                       switch ( $content_struct["{$post_type}_status"] ) {
                                case 'draft':
                                case 'private':
                                case 'publish':
@@ -2105,9 +2086,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                        break;
                                case 'pending':
                                        // Pending is only valid for posts, not pages.
-                                       if( $post_type === 'post' ) {
+                                       if ( $post_type === 'post' )
                                                $post_status = $content_struct["{$post_type}_status"];
-                                       }
                                        break;
                                default:
                                        $post_status = $publish ? 'publish' : 'draft';
@@ -2120,9 +2100,9 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $tags_input = $content_struct['mt_keywords'];
 
-               if(isset($content_struct["mt_allow_comments"])) {
-                       if(!is_numeric($content_struct["mt_allow_comments"])) {
-                               switch($content_struct["mt_allow_comments"]) {
+               if ( isset($content_struct["mt_allow_comments"]) ) {
+                       if ( !is_numeric($content_struct["mt_allow_comments"]) ) {
+                               switch ( $content_struct["mt_allow_comments"] ) {
                                        case "closed":
                                                $comment_status = "closed";
                                                break;
@@ -2133,9 +2113,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                                $comment_status = get_option("default_comment_status");
                                                break;
                                }
-                       }
-                       else {
-                               switch((int) $content_struct["mt_allow_comments"]) {
+                       } else {
+                               switch ( (int) $content_struct["mt_allow_comments"] ) {
                                        case 0:
                                        case 2:
                                                $comment_status = "closed";
@@ -2148,14 +2127,13 @@ class wp_xmlrpc_server extends IXR_Server {
                                                break;
                                }
                        }
-               }
-               else {
+               } else {
                        $comment_status = get_option("default_comment_status");
                }
 
-               if(isset($content_struct["mt_allow_pings"])) {
-                       if(!is_numeric($content_struct["mt_allow_pings"])) {
-                               switch($content_struct['mt_allow_pings']) {
+               if ( isset($content_struct["mt_allow_pings"]) ) {
+                       if ( !is_numeric($content_struct["mt_allow_pings"]) ) {
+                               switch ( $content_struct['mt_allow_pings'] ) {
                                        case "closed":
                                                $ping_status = "closed";
                                                break;
@@ -2166,9 +2144,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                                $ping_status = get_option("default_ping_status");
                                                break;
                                }
-                       }
-                       else {
-                               switch((int) $content_struct["mt_allow_pings"]) {
+                       } else {
+                               switch ( (int) $content_struct["mt_allow_pings"] ) {
                                        case 0:
                                                $ping_status = "closed";
                                                break;
@@ -2180,14 +2157,12 @@ class wp_xmlrpc_server extends IXR_Server {
                                                break;
                                }
                        }
-               }
-               else {
+               } else {
                        $ping_status = get_option("default_ping_status");
                }
 
-               if ($post_more) {
+               if ( $post_more )
                        $post_content = $post_content . "<!--more-->" . $post_more;
-               }
 
                $to_ping = $content_struct['mt_tb_ping_urls'];
                if ( is_array($to_ping) )
@@ -2211,7 +2186,7 @@ class wp_xmlrpc_server extends IXR_Server {
                logIO('O', 'Post cats: ' . var_export($catnames,true));
                $post_category = array();
 
-               if (is_array($catnames)) {
+               if ( is_array($catnames) ) {
                        foreach ($catnames as $cat) {
                                $post_category[] = get_cat_ID($cat);
                        }
@@ -2224,20 +2199,19 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( is_wp_error( $post_ID ) )
                        return new IXR_Error(500, $post_ID->get_error_message());
 
-               if (!$post_ID) {
+               if ( !$post_ID )
                        return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.'));
-               }
 
                // Only posts can be sticky
-               if ( $post_type == 'post' && isset( $content_struct['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 );
+               }
 
-               if ( isset($content_struct['custom_fields']) ) {
+               if ( isset($content_struct['custom_fields']) )
                        $this->set_custom_fields($post_ID, $content_struct['custom_fields']);
-               }
 
                // Handle enclosures
                $this->add_enclosure_if_new($post_ID, $content_struct['enclosure']);
@@ -2250,7 +2224,7 @@ class wp_xmlrpc_server extends IXR_Server {
        }
 
        function add_enclosure_if_new($post_ID, $enclosure) {
-               if( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) {
+               if ( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) {
 
                        $encstring = $enclosure['url'] . "\n" . $enclosure['length'] . "\n" . $enclosure['type'];
                        $found = false;
@@ -2264,9 +2238,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                        }
                                }
                        }
-                       if (!$found) {
+                       if (!$found)
                                add_post_meta( $post_ID, 'enclosure', $encstring );
-                       }
                }
        }
 
@@ -2282,12 +2255,11 @@ class wp_xmlrpc_server extends IXR_Server {
                global $wpdb;
 
                // find any unattached files
-               $attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '-1' AND post_type = 'attachment'" );
-               if( is_array( $attachments ) ) {
-                       foreach( $attachments as $file ) {
-                               if( strpos( $post_content, $file->guid ) !== false ) {
+               $attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '0' AND post_type = 'attachment'" );
+               if ( is_array( $attachments ) ) {
+                       foreach ( $attachments as $file ) {
+                               if ( strpos( $post_content, $file->guid ) !== false )
                                        $wpdb->update($wpdb->posts, array('post_parent' => $post_ID), array('ID' => $file->ID) );
-                               }
                        }
                }
        }
@@ -2310,87 +2282,88 @@ class wp_xmlrpc_server extends IXR_Server {
                $content_struct = $args[3];
                $publish     = $args[4];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'metaWeblog.editPost');
 
                $cap = ( $publish ) ? 'publish_posts' : 'edit_posts';
-               $error_message = __( 'Sorry, you are not allowed to publish posts on this blog.' );
+               $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
                $post_type = 'post';
                $page_template = '';
-               if( !empty( $content_struct['post_type'] ) ) {
-                       if( $content_struct['post_type'] == 'page' ) {
-                               $cap = ( $publish ) ? 'publish_pages' : 'edit_pages';
-                               $error_message = __( 'Sorry, you are not allowed to publish pages on this blog.' );
+               if ( !empty( $content_struct['post_type'] ) ) {
+                       if ( $content_struct['post_type'] == 'page' ) {
+                               if ( $publish || 'publish' == $content_struct['page_status'] )
+                                       $cap  = 'publish_pages';
+                               else
+                                       $cap = 'edit_pages';
+                               $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
                                $post_type = 'page';
-                               if( !empty( $content_struct['wp_page_template'] ) )
+                               if ( !empty( $content_struct['wp_page_template'] ) )
                                        $page_template = $content_struct['wp_page_template'];
-                       }
-                       elseif( $content_struct['post_type'] == 'post' ) {
-                               // This is the default, no changes needed
-                       }
-                       else {
+                       } elseif ( $content_struct['post_type'] == 'post' ) {
+                               if ( $publish || 'publish' == $content_struct['post_status'] )
+                                       $cap  = 'publish_posts';
+                               else
+                                       $cap = 'edit_posts';
+                               $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
+                               $post_type = 'post';
+                       } else {
                                // No other post_type values are allowed here
                                return new IXR_Error( 401, __( 'Invalid post type.' ) );
                        }
+               } else {
+                       if ( $publish || 'publish' == $content_struct['post_status'] )
+                               $cap  = 'publish_posts';
+                       else
+                               $cap = 'edit_posts';
+                       $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
+                       $post_type = 'post';
                }
 
-               if( !current_user_can( $cap ) ) {
+               if ( !current_user_can( $cap ) )
                        return new IXR_Error( 401, $error_message );
-               }
 
                $postdata = wp_get_single_post($post_ID, ARRAY_A);
 
                // If there is no post data for the give post id, stop
                // now and return an error.  Other wise a new post will be
                // created (which was the old behavior).
-               if(empty($postdata["ID"])) {
+               if ( empty($postdata["ID"]) )
                        return(new IXR_Error(404, __("Invalid post ID.")));
-               }
 
                $this->escape($postdata);
                extract($postdata, EXTR_SKIP);
 
                // Let WordPress manage slug if none was provided.
                $post_name = "";
-               if(isset($content_struct["wp_slug"])) {
+               if ( isset($content_struct["wp_slug"]) )
                        $post_name = $content_struct["wp_slug"];
-               }
 
                // Only use a password if one was given.
-               if(isset($content_struct["wp_password"])) {
+               if ( isset($content_struct["wp_password"]) )
                        $post_password = $content_struct["wp_password"];
-               }
 
                // Only set a post parent if one was given.
-               if(isset($content_struct["wp_page_parent_id"])) {
+               if ( isset($content_struct["wp_page_parent_id"]) )
                        $post_parent = $content_struct["wp_page_parent_id"];
-               }
 
                // Only set the menu_order if it was given.
-               if(isset($content_struct["wp_page_order"])) {
+               if ( isset($content_struct["wp_page_order"]) )
                        $menu_order = $content_struct["wp_page_order"];
-               }
 
                $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) {
+               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")) {
+                                       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")) {
+                                       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.")));
@@ -2399,9 +2372,9 @@ class wp_xmlrpc_server extends IXR_Server {
                        $post_author = $content_struct["wp_author_id"];
                }
 
-               if(isset($content_struct["mt_allow_comments"])) {
-                       if(!is_numeric($content_struct["mt_allow_comments"])) {
-                               switch($content_struct["mt_allow_comments"]) {
+               if ( isset($content_struct["mt_allow_comments"]) ) {
+                       if ( !is_numeric($content_struct["mt_allow_comments"]) ) {
+                               switch ( $content_struct["mt_allow_comments"] ) {
                                        case "closed":
                                                $comment_status = "closed";
                                                break;
@@ -2412,9 +2385,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                                $comment_status = get_option("default_comment_status");
                                                break;
                                }
-                       }
-                       else {
-                               switch((int) $content_struct["mt_allow_comments"]) {
+                       } else {
+                               switch ( (int) $content_struct["mt_allow_comments"] ) {
                                        case 0:
                                        case 2:
                                                $comment_status = "closed";
@@ -2429,9 +2401,9 @@ class wp_xmlrpc_server extends IXR_Server {
                        }
                }
 
-               if(isset($content_struct["mt_allow_pings"])) {
-                       if(!is_numeric($content_struct["mt_allow_pings"])) {
-                               switch($content_struct["mt_allow_pings"]) {
+               if ( isset($content_struct["mt_allow_pings"]) ) {
+                       if ( !is_numeric($content_struct["mt_allow_pings"]) ) {
+                               switch ( $content_struct["mt_allow_pings"] ) {
                                        case "closed":
                                                $ping_status = "closed";
                                                break;
@@ -2442,9 +2414,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                                $ping_status = get_option("default_ping_status");
                                                break;
                                }
-                       }
-                       else {
-                               switch((int) $content_struct["mt_allow_pings"]) {
+                       } else {
+                               switch ( (int) $content_struct["mt_allow_pings"] ) {
                                        case 0:
                                                $ping_status = "closed";
                                                break;
@@ -2459,12 +2430,12 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $post_title = $content_struct['title'];
-               $post_content = apply_filters( 'content_save_pre', $content_struct['description'] );
+               $post_content = $content_struct['description'];
                $catnames = $content_struct['categories'];
 
                $post_category = array();
 
-               if (is_array($catnames)) {
+               if ( is_array($catnames) ) {
                        foreach ($catnames as $cat) {
                                $post_category[] = get_cat_ID($cat);
                        }
@@ -2474,7 +2445,7 @@ class wp_xmlrpc_server extends IXR_Server {
                $post_more = $content_struct['mt_text_more'];
 
                $post_status = $publish ? 'publish' : 'draft';
-               if( isset( $content_struct["{$post_type}_status"] ) ) {
+               if ( isset( $content_struct["{$post_type}_status"] ) ) {
                        switch( $content_struct["{$post_type}_status"] ) {
                                case 'draft':
                                case 'private':
@@ -2483,9 +2454,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                        break;
                                case 'pending':
                                        // Pending is only valid for posts, not pages.
-                                       if( $post_type === 'post' ) {
+                                       if ( $post_type === 'post' )
                                                $post_status = $content_struct["{$post_type}_status"];
-                                       }
                                        break;
                                default:
                                        $post_status = $publish ? 'publish' : 'draft';
@@ -2502,9 +2472,8 @@ class wp_xmlrpc_server extends IXR_Server {
                                return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.'));
                }
 
-               if ($post_more) {
+               if ( $post_more )
                        $post_content = $post_content . "<!--more-->" . $post_more;
-               }
 
                $to_ping = $content_struct['mt_tb_ping_urls'];
                if ( is_array($to_ping) )
@@ -2531,20 +2500,19 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( is_wp_error( $result ) )
                        return new IXR_Error(500, $result->get_error_message());
 
-               if (!$result) {
+               if ( !$result )
                        return new IXR_Error(500, __('Sorry, your entry could not be edited. Something wrong happened.'));
-               }
 
                // Only posts can be sticky
-               if ( $post_type == 'post' && isset( $content_struct['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 );
+               }
 
-               if ( isset($content_struct['custom_fields']) ) {
+               if ( isset($content_struct['custom_fields']) )
                        $this->set_custom_fields($post_ID, $content_struct['custom_fields']);
-               }
 
                // Handle enclosures
                $this->add_enclosure_if_new($post_ID, $content_struct['enclosure']);
@@ -2572,11 +2540,10 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_post', $post_ID ) )
+               if ( !current_user_can( 'edit_post', $post_ID ) )
                        return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
 
                do_action('xmlrpc_call', 'metaWeblog.getPost');
@@ -2588,9 +2555,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        $post_date_gmt = mysql2date('Ymd\TH:i:s', $postdata['post_date_gmt'], false);
 
                        // For drafts use the GMT version of the post date
-                       if ( $postdata['post_status'] == 'draft' ) {
+                       if ( $postdata['post_status'] == 'draft' )
                                $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $postdata['post_date'] ), 'Ymd\TH:i:s' );
-                       }
 
                        $categories = array();
                        $catids = wp_get_post_categories($post_ID);
@@ -2617,9 +2583,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        $allow_pings = ('open' == $postdata['ping_status']) ? 1 : 0;
 
                        // Consider future posts as published
-                       if( $postdata['post_status'] === 'future' ) {
+                       if ( $postdata['post_status'] === 'future' )
                                $postdata['post_status'] = 'publish';
-                       }
 
                        $sticky = false;
                        if ( is_sticky( $post_ID ) )
@@ -2631,7 +2596,7 @@ class wp_xmlrpc_server extends IXR_Server {
                                        foreach ( (array) $val as $enc ) {
                                                $encdata = split("\n", $enc);
                                                $enclosure['url'] = trim(htmlspecialchars($encdata[0]));
-                                               $enclosure['length'] = trim($encdata[1]);
+                                               $enclosure['length'] = (int) trim($encdata[1]);
                                                $enclosure['type'] = trim($encdata[2]);
                                                break 2;
                                        }
@@ -2664,7 +2629,7 @@ class wp_xmlrpc_server extends IXR_Server {
                                'sticky' => $sticky
                        );
 
-                       if (!empty($enclosure)) $resp['enclosure'] = $enclosure;
+                       if ( !empty($enclosure) ) $resp['enclosure'] = $enclosure;
 
                        return $resp;
                } else {
@@ -2689,35 +2654,31 @@ class wp_xmlrpc_server extends IXR_Server {
                $password   = $args[2];
                $num_posts   = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'metaWeblog.getRecentPosts');
 
                $posts_list = wp_get_recent_posts($num_posts);
 
-               if (!$posts_list) {
+               if ( !$posts_list )
                        return array( );
-               }
 
                foreach ($posts_list as $entry) {
-                       if( !current_user_can( 'edit_post', $entry['ID'] ) )
+                       if ( !current_user_can( 'edit_post', $entry['ID'] ) )
                                continue;
 
                        $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false);
                        $post_date_gmt = mysql2date('Ymd\TH:i:s', $entry['post_date_gmt'], false);
 
                        // For drafts use the GMT version of the date
-                       if ( $entry['post_status'] == 'draft' ) {
+                       if ( $entry['post_status'] == 'draft' )
                                $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $entry['post_date'] ), 'Ymd\TH:i:s' );
-                       }
 
                        $categories = array();
                        $catids = wp_get_post_categories($entry['ID']);
-                       foreach($catids as $catid) {
+                       foreach( $catids as $catid )
                                $categories[] = get_cat_name($catid);
-                       }
 
                        $tagnames = array();
                        $tags = wp_get_post_tags( $entry['ID'] );
@@ -2740,9 +2701,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        $allow_pings = ('open' == $entry['ping_status']) ? 1 : 0;
 
                        // Consider future posts as published
-                       if( $entry['post_status'] === 'future' ) {
+                       if ( $entry['post_status'] === 'future' )
                                $entry['post_status'] = 'publish';
-                       }
 
                        $struct[] = array(
                                'dateCreated' => new IXR_Date($post_date),
@@ -2772,7 +2732,7 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $recent_posts = array();
-               for ($j=0; $j<count($struct); $j++) {
+               for ( $j=0; $j<count($struct); $j++ ) {
                        array_push($recent_posts, $struct[$j]);
                }
 
@@ -2795,18 +2755,17 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) )
-                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this blog in order to view categories.' ) );
+               if ( !current_user_can( 'edit_posts' ) )
+                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
 
                do_action('xmlrpc_call', 'metaWeblog.getCategories');
 
                $categories_struct = array();
 
-               if ( $cats = get_categories('get=all') ) {
+               if ( $cats = get_categories(array('get' => 'all')) ) {
                        foreach ( $cats as $cat ) {
                                $struct['categoryId'] = $cat->term_id;
                                $struct['parentId'] = $cat->parent;
@@ -2849,9 +2808,8 @@ class wp_xmlrpc_server extends IXR_Server {
 
                logIO('O', '(MW) Received '.strlen($bits).' bytes');
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'metaWeblog.newMediaObject');
 
@@ -2864,7 +2822,7 @@ class wp_xmlrpc_server extends IXR_Server {
                if ( $upload_err = apply_filters( "pre_upload_error", false ) )
                        return new IXR_Error(500, $upload_err);
 
-               if(!empty($data["overwrite"]) && ($data["overwrite"] == true)) {
+               if ( !empty($data["overwrite"]) && ($data["overwrite"] == true) ) {
                        // Get postmeta info on the object.
                        $old_file = $wpdb->get_row("
                                SELECT ID
@@ -2889,8 +2847,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        return new IXR_Error(500, $errorString);
                }
                // Construct the attachment array
-               // attach to post_id -1
-               $post_id = -1;
+               // attach to post_id 0
+               $post_id = 0;
                $attachment = array(
                        'post_title' => $name,
                        'post_content' => '',
@@ -2904,7 +2862,7 @@ class wp_xmlrpc_server extends IXR_Server {
                $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id );
                wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );
 
-               return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ) );
+               return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ), 'upload' );
        }
 
        /* MovableType API functions
@@ -2928,30 +2886,28 @@ class wp_xmlrpc_server extends IXR_Server {
                $password   = $args[2];
                $num_posts   = (int) $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'mt.getRecentPostTitles');
 
                $posts_list = wp_get_recent_posts($num_posts);
 
-               if (!$posts_list) {
+               if ( !$posts_list ) {
                        $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.'));
                        return $this->error;
                }
 
                foreach ($posts_list as $entry) {
-                       if( !current_user_can( 'edit_post', $entry['ID'] ) )
+                       if ( !current_user_can( 'edit_post', $entry['ID'] ) )
                                continue;
 
                        $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false);
                        $post_date_gmt = mysql2date('Ymd\TH:i:s', $entry['post_date_gmt'], false);
 
                        // For drafts use the GMT version of the date
-                       if ( $entry['post_status'] == 'draft' ) {
+                       if ( $entry['post_status'] == 'draft' )
                                $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $entry['post_date'] ), 'Ymd\TH:i:s' );
-                       }
 
                        $struct[] = array(
                                'dateCreated' => new IXR_Date($post_date),
@@ -2964,7 +2920,7 @@ class wp_xmlrpc_server extends IXR_Server {
                }
 
                $recent_posts = array();
-               for ($j=0; $j<count($struct); $j++) {
+               for ( $j=0; $j<count($struct); $j++ ) {
                        array_push($recent_posts, $struct[$j]);
                }
 
@@ -2987,19 +2943,18 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_posts' ) )
-                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this blog in order to view categories.' ) );
+               if ( !current_user_can( 'edit_posts' ) )
+                       return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
 
                do_action('xmlrpc_call', 'mt.getCategoryList');
 
                $categories_struct = array();
 
-               if ( $cats = get_categories('hide_empty=0&hierarchical=0') ) {
-                       foreach ($cats as $cat) {
+               if ( $cats = get_categories(array('hide_empty' => 0, 'hierarchical' => 0)) ) {
+                       foreach ( $cats as $cat ) {
                                $struct['categoryId'] = $cat->term_id;
                                $struct['categoryName'] = $cat->name;
 
@@ -3026,11 +2981,10 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
-               if( !current_user_can( 'edit_post', $post_ID ) )
+               if ( !current_user_can( 'edit_post', $post_ID ) )
                        return new IXR_Error( 401, __( 'Sorry, you can not edit this post.' ) );
 
                do_action('xmlrpc_call', 'mt.getPostCategories');
@@ -3039,7 +2993,7 @@ class wp_xmlrpc_server extends IXR_Server {
                $catids = wp_get_post_categories(intval($post_ID));
                // first listed category will be the primary category
                $isPrimary = true;
-               foreach($catids as $catid) {
+               foreach ( $catids as $catid ) {
                        $categories[] = array(
                                'categoryName' => get_cat_name($catid),
                                'categoryId' => (string) $catid,
@@ -3068,16 +3022,15 @@ class wp_xmlrpc_server extends IXR_Server {
                $password   = $args[2];
                $categories  = $args[3];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'mt.setPostCategories');
 
                if ( !current_user_can('edit_post', $post_ID) )
                        return new IXR_Error(401, __('Sorry, you cannot edit this post.'));
 
-               foreach($categories as $cat) {
+               foreach ( $categories as $cat ) {
                        $catids[] = $cat['categoryId'];
                }
 
@@ -3099,7 +3052,7 @@ class wp_xmlrpc_server extends IXR_Server {
                do_action('xmlrpc_call', 'mt.supportedMethods');
 
                $supported_methods = array();
-               foreach($this->methods as $key=>$value) {
+               foreach ( $this->methods as $key => $value ) {
                        $supported_methods[] = $key;
                }
 
@@ -3136,18 +3089,16 @@ class wp_xmlrpc_server extends IXR_Server {
 
                $actual_post = wp_get_single_post($post_ID, ARRAY_A);
 
-               if (!$actual_post) {
+               if ( !$actual_post )
                        return new IXR_Error(404, __('Sorry, no such post.'));
-               }
 
                $comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) );
 
-               if (!$comments) {
+               if ( !$comments )
                        return array();
-               }
 
                $trackback_pings = array();
-               foreach($comments as $comment) {
+               foreach ( $comments as $comment ) {
                        if ( 'trackback' == $comment->comment_type ) {
                                $content = $comment->comment_content;
                                $title = substr($content, 8, (strpos($content, '</strong>') - 8));
@@ -3156,7 +3107,7 @@ class wp_xmlrpc_server extends IXR_Server {
                                        'pingURL'   => $comment->comment_author_url,
                                        'pingIP'    => $comment->comment_author_IP
                                );
-               }
+                       }
                }
 
                return $trackback_pings;
@@ -3178,13 +3129,12 @@ class wp_xmlrpc_server extends IXR_Server {
                $username  = $args[1];
                $password   = $args[2];
 
-               if ( !$user = $this->login($username, $password) ) {
+               if ( !$user = $this->login($username, $password) )
                        return $this->error;
-               }
 
                do_action('xmlrpc_call', 'mt.publishPost');
 
-               if ( !current_user_can('edit_post', $post_ID) )
+               if ( !current_user_can('publish_posts') || !current_user_can('edit_post', $post_ID) )
                        return new IXR_Error(401, __('Sorry, you cannot edit this post.'));
 
                $postdata = wp_get_single_post($post_ID,ARRAY_A);
@@ -3231,36 +3181,36 @@ class wp_xmlrpc_server extends IXR_Server {
 
                // Check if the page linked to is in our site
                $pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home')));
-               if( !$pos1 )
+               if ( !$pos1 )
                        return new IXR_Error(0, __('Is there no link to us?'));
 
                // let's find which post is linked to
                // FIXME: does url_to_postid() cover all these cases already?
                //        if so, then let's use it and drop the old code.
                $urltest = parse_url($pagelinkedto);
-               if ($post_ID = url_to_postid($pagelinkedto)) {
+               if ( $post_ID = url_to_postid($pagelinkedto) ) {
                        $way = 'url_to_postid()';
-               } elseif (preg_match('#p/[0-9]{1,}#', $urltest['path'], $match)) {
+               } elseif ( 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 (preg_match('#p=[0-9]{1,}#', $urltest['query'], $match)) {
+               } elseif ( 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'])) {
+               } elseif ( isset($urltest['fragment']) ) {
                        // an #anchor is there, it's either...
-                       if (intval($urltest['fragment'])) {
+                       if ( intval($urltest['fragment']) ) {
                                // ...an integer #XXXX (simpliest case)
                                $post_ID = (int) $urltest['fragment'];
                                $way = 'from the fragment (numeric)';
-                       } elseif (preg_match('/post-[0-9]+/',$urltest['fragment'])) {
+                       } 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'])) {
+                       } 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", $title);
@@ -3292,10 +3242,8 @@ class wp_xmlrpc_server extends IXR_Server {
                        return new IXR_Error(33, __('The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.'));
 
                // Let's check that the remote site didn't already pingback this entry
-               $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s", $post_ID, $pagelinkedfrom) );
-
-               if ( $wpdb->num_rows ) // We already have a Pingback from this URL
-                       return new IXR_Error(48, __('The pingback has already been registered.'));
+               if ( $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s", $post_ID, $pagelinkedfrom) ) )
+                       return new IXR_Error( 48, __( 'The pingback has already been registered.' ) );
 
                // very stupid, but gives time to the 'from' server to publish !
                sleep(1);
@@ -3395,26 +3343,25 @@ class wp_xmlrpc_server extends IXR_Server {
                $url = $args;
 
                $post_ID = url_to_postid($url);
-               if (!$post_ID) {
+               if ( !$post_ID ) {
                        // We aren't sure that the resource is available and/or pingback enabled
                        return new IXR_Error(33, __('The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.'));
                }
 
                $actual_post = wp_get_single_post($post_ID, ARRAY_A);
 
-               if (!$actual_post) {
+               if ( !$actual_post ) {
                        // No such post = resource not found
                        return new IXR_Error(32, __('The specified target URL does not exist.'));
                }
 
                $comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) );
 
-               if (!$comments) {
+               if ( !$comments )
                        return array();
-               }
 
                $pingbacks = array();
-               foreach($comments as $comment) {
+               foreach ( $comments as $comment ) {
                        if ( 'pingback' == $comment->comment_type )
                                $pingbacks[] = $comment->comment_author_url;
                }
@@ -3424,5 +3371,5 @@ class wp_xmlrpc_server extends IXR_Server {
 }
 
 $wp_xmlrpc_server = new wp_xmlrpc_server();
-
-?>
+$wp_xmlrpc_server->serve_request();
+?>
\ No newline at end of file