Make WordPress Core

Ticket #18429: wp.newPost.11.patch

File wp.newPost.11.patch, 5.0 KB (added by nprasath002, 13 years ago)
  • class-wp-xmlrpc-server.php

    # This patch file was generated by NetBeans IDE
    # Following Index: paths are relative to: C:\xampp\htdocs\wordtrunk\wp-includes
    # This patch can be applied using context Tools: Patch action on respective folder.
    # It uses platform neutral UTF-8 encoding and \n newlines.
    # Above lines and this line are ignored by the patching process.
     
    596596
    597597                do_action( 'xmlrpc_call', 'wp.newPost' );
    598598
    599                 unset( $content_struct['ID'] );
    600 
    601                 return $this->_wp_insertPost( $user, $content_struct );
    602         }
    603 
    604         /*
    605          * Helper method for filtering out elements from an array.
    606          */
    607         function _is_greater_than_one( $count ){
    608                 return $count > 1;
    609         }
    610 
    611         /*
    612          * Helper method for wp_newPost and wp_editPost, containing shared logic.
    613          */
    614         function _wp_insertPost( $user, $content_struct ) {
    615                 $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0,
    616                         'post_password' => '', 'post_excerpt' => '', 'post_content' => '', 'post_title' => '', 'sticky' => 0 );
    617 
    618                 $post_data = wp_parse_args( $content_struct, $defaults );
    619 
    620                 $post_type = get_post_type_object( $post_data['post_type'] );
     599                $post_type = get_post_type_object( $content_struct['post_type'] );
    621600                if( ! ( (bool) $post_type ) )
    622601                        return new IXR_Error( 403, __( 'Invalid post type' ) );
    623602
    624603                if( ! current_user_can( $post_type->cap->edit_posts ) )
    625604                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) );
    626605
    627                 switch ( $post_data['post_status'] ) {
     606                switch ( $content_struct['post_status'] ) {
    628607                        case 'draft':
    629608                        case 'pending':
    630609                                break;
     
    638617                                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type' ));
    639618                                break;
    640619                        default:
    641                                 $post_data['post_status'] = 'draft';
     620                                $content_struct['post_status'] = 'draft';
    642621                        break;
    643622                }
    644623
    645                 if ( ! empty( $post_data['post_password'] ) && ! current_user_can( $post_type->cap->publish_posts ) )
     624                if ( ! empty( $content_struct['post_password'] ) && ! current_user_can( $post_type->cap->publish_posts ) )
    646625                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type' ) );
    647626
     627                unset( $content_struct['ID'] );
    648628
     629                return $this->_wp_insertPost( $user, $content_struct );
     630        }
     631
     632        /*
     633         * Helper method for filtering out elements from an array.
     634         */
     635        function _is_greater_than_one( $count ){
     636                return $count > 1;
     637        }
     638
     639        /*
     640         * Helper method for wp_newPost and wp_editPost, containing shared logic.
     641         */
     642        function _wp_insertPost( $user, $content_struct ) {
     643                $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0,
     644                        'post_password' => '', 'post_excerpt' => '', 'post_content' => '', 'post_title' => '', 'sticky' => 0 );
     645
     646                $post_data = wp_parse_args( $content_struct, $defaults );
     647
    649648                $post_data['post_author'] = absint( $post_data['post_author'] );
    650649                if( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) {
    651650                        if( ! current_user_can( $post_type->cap->edit_others_posts ) )
     
    852851
    853852                do_action( 'xmlrpc_call', 'wp.editPost' );
    854853
    855                 // User Capabilities are checked in _wp_insertPost.
    856 
    857854                $post = get_post( $post_id, ARRAY_A );
    858 
    859855                if ( empty( $post["ID"] ) )
    860856                        return new IXR_Error( 404, __( 'Invalid post ID.' ) );
    861857
     
    872868                $this->escape( $post );
    873869                $merged_content_struct = array_merge( $post, $content_struct );
    874870
     871                $post_type = get_post_type_object( $merged_content_struct['post_type'] );
     872                if( ! ( (bool) $post_type ) )
     873                        return new IXR_Error( 403, __( 'Invalid post type' ) );
     874
     875                if( ! current_user_can( $post_type->cap->edit_post, $post_id ) )
     876                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) );
     877
     878                switch ( $merged_content_struct['post_status'] ) {
     879                        case 'draft':
     880                        case 'pending':
     881                                break;
     882                        case 'private':
     883                                if( ! current_user_can( $post_type->cap->publish_post, $post_id ) )
     884                                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to create private posts in this post type' ));
     885                                break;
     886                        case 'publish':
     887                        case 'future':
     888                                if( ! current_user_can( $post_type->cap->publish_post, $post_id ) )
     889                                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type' ));
     890                                break;
     891                        default:
     892                                $post_data['post_status'] = 'draft';
     893                        break;
     894                }
     895
     896                if ( ! empty( $merged_content_struct['post_password'] ) && ! current_user_can( $post_type->cap->publish_post, $post_id ) )
     897                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type' ) );
     898
    875899                $retval = $this->_wp_insertPost( $user, $merged_content_struct );
    876900                if ( $retval instanceof IXR_Error )
    877901                        return $retval;