Make WordPress Core

Ticket #27792: 27792.4.diff

File 27792.4.diff, 3.1 KB (added by DrewAPicture, 11 years ago)

+ unit tests

  • src/wp-admin/includes/post.php

     
    433433        }
    434434
    435435        $updated = $skipped = $locked = array();
     436        $shared_post_data = $post_data;
     437
    436438        foreach ( $post_IDs as $post_ID ) {
     439                // Start with fresh post data with each iteration.
     440                $post_data = $shared_post_data;
     441
    437442                $post_type_object = get_post_type_object( get_post_type( $post_ID ) );
    438443
    439444                if ( !isset( $post_type_object ) || ( isset($children) && in_array($post_ID, $children) ) || !current_user_can( 'edit_post', $post_ID ) ) {
     
    482487                $post_data['ID'] = $post_ID;
    483488                $post_data['post_ID'] = $post_ID;
    484489
    485                 $translated_post_data = _wp_translate_postdata( true, $post_data );
    486                 if ( is_wp_error( $translated_post_data ) ) {
     490                $post_data = _wp_translate_postdata( true, $post_data );
     491                if ( is_wp_error( $post_data ) ) {
    487492                        $skipped[] = $post_ID;
    488493                        continue;
    489494                }
    490495
    491                 $updated[] = wp_update_post( $translated_post_data );
     496                $updated[] = wp_update_post( $post_data );
    492497
    493498                if ( isset( $post_data['sticky'] ) && current_user_can( $ptype->cap->edit_others_posts ) ) {
    494499                        if ( 'sticky' == $post_data['sticky'] )
  • tests/phpunit/tests/admin/includesPost.php

     
    136136                wp_set_current_user( 0 );
    137137        }
    138138
     139        /**
     140         * @ticket 27792
     141         */
     142        function test_bulk_edit_posts() {
     143                $user_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
     144                $users = $this->factory->user->create_many( 2, array( 'role' => 'author' ) );
     145                wp_set_current_user( $user_id );
     146
     147                $post1 = $this->factory->post->create( array(
     148                        'post_author'    => $users[0],
     149                        'comment_status' => 'open',
     150                        'ping_status'    => 'open',
     151                ) );
     152
     153                $post2 = $this->factory->post->create( array(
     154                        'post_author'    => $users[1],
     155                        'comment_status' => 'closed',
     156                        'ping_status'    => 'closed',
     157                ) );
     158
     159                $post2_clone = $post2;
     160
     161                $request = array(
     162                        's'                => null,
     163                        'post_status'      => 'all',
     164                        'post_type'        => 'post',
     165                        '_wpnonce'         => rand_str( 10 ),
     166                        '_wp_http_referer' => '/wp-admin/edit.php',
     167                        'action'           => 'edit',
     168                        'm'                => 0,
     169                        'cat'              => 0,
     170                        'paged'            => 1,
     171                        'model'            => 'list',
     172                        'post_author'      => -1,
     173                        'ping_status'      => null,
     174                        '_status'          => -1,
     175                        'sticky'           => -1,
     176                        'post_format'      => 'image',
     177                        'post'             => array( $post1, $post2_clone ),
     178                        'action2'          => -1,
     179                );
     180
     181                $done = bulk_edit_posts( $request );
     182
     183                $post2 = get_post( $post2 );
     184                $post2_clone = get_post( $post2_clone );
     185
     186                $this->assertEquals( $post2->post_author, $post2_clone->post_author );
     187                $this->assertEquals( 'closed', $post2_clone->comment_status );
     188                $this->assertEquals( 'closed', $post2_clone->ping_status );
     189
     190                wp_set_current_user( 0 );
     191        }
     192
    139193}
     194 No newline at end of file