Make WordPress Core

Ticket #16956: 16956.10.patch

File 16956.10.patch, 3.3 KB (added by dlh, 9 years ago)
  • src/wp-includes/capabilities-functions.php

     
    5353                }
    5454
    5555                $post_type = get_post_type_object( $post->post_type );
     56                if ( ! $post_type ) {
     57                        /* translators: 1: capability name, 2: post type */
     58                        _doing_it_wrong( 'map_meta_cap', sprintf( __( 'Checked capability %1$s against unregistered post type %2$s' ), $cap, $post->post_type ), '4.4' );
     59                        $caps[] = 'edit_others_posts';
     60                        break;
     61                }
    5662
    5763                if ( ! $post_type->map_meta_cap ) {
    5864                        $caps[] = $post_type->cap->$cap;
     
    101107                }
    102108
    103109                $post_type = get_post_type_object( $post->post_type );
     110                if ( ! $post_type ) {
     111                        /* translators: 1: capability name, 2: post type */
     112                        _doing_it_wrong( 'map_meta_cap', sprintf( __( 'Checked capability %1$s against unregistered post type %2$s' ), $cap, $post->post_type ), '4.4' );
     113                        $caps[] = 'edit_others_posts';
     114                        break;
     115                }
    104116
    105117                if ( ! $post_type->map_meta_cap ) {
    106118                        $caps[] = $post_type->cap->$cap;
     
    143155                }
    144156
    145157                $post_type = get_post_type_object( $post->post_type );
     158                if ( ! $post_type ) {
     159                        /* translators: 1: capability name, 2: post type */
     160                        _doing_it_wrong( 'map_meta_cap', sprintf( __( 'Checked capability %1$s against unregistered post type %2$s' ), $cap, $post->post_type ), '4.4' );
     161                        $caps[] = 'edit_others_posts';
     162                        break;
     163                }
    146164
    147165                if ( ! $post_type->map_meta_cap ) {
    148166                        $caps[] = $post_type->cap->$cap;
     
    169187        case 'publish_post':
    170188                $post = get_post( $args[0] );
    171189                $post_type = get_post_type_object( $post->post_type );
     190                if ( ! $post_type ) {
     191                        /* translators: 1: capability name, 2: post type */
     192                        _doing_it_wrong( 'map_meta_cap', sprintf( __( 'Checked capability %1$s against unregistered post type %2$s' ), $cap, $post->post_type ), '4.4' );
     193                        $caps[] = 'edit_others_posts';
     194                        break;
     195                }
    172196
    173197                $caps[] = $post_type->cap->publish_posts;
    174198                break;
  • tests/phpunit/tests/user/capabilities.php

     
    994994
    995995                $this->assertFalse( current_user_can( 'edit_user', $super_admin->ID ) );
    996996        }
     997
     998        /**
     999         * @ticket 16956
     1000         */
     1001        function test_require_edit_others_posts_if_post_type_doesnt_exist() {
     1002                register_post_type( 'existed' );
     1003                $post_id = $this->factory->post->create( array( 'post_type' => 'existed' ) );
     1004                _unregister_post_type( 'existed' );
     1005
     1006                $subscriber_id = $this->factory->user->create( array( 'role' => 'subscriber' ) );
     1007                $editor_id = $this->factory->user->create( array( 'role' => 'editor' ) );
     1008
     1009                $this->setExpectedIncorrectUsage( 'map_meta_cap' );
     1010                foreach ( array( 'delete_post', 'edit_post', 'read_post', 'publish_post' ) as $cap ) {
     1011                        wp_set_current_user( $subscriber_id );
     1012                        $this->assertSame( array( 'edit_others_posts' ), map_meta_cap( $cap, $subscriber_id, $post_id ) );
     1013                        $this->assertFalse( current_user_can( $cap, $post_id ) );
     1014
     1015                        wp_set_current_user( $editor_id );
     1016                        $this->assertSame( array( 'edit_others_posts' ), map_meta_cap( $cap, $editor_id, $post_id ) );
     1017                        $this->assertTrue( current_user_can( $cap, $post_id ) );
     1018                }
     1019        }
    9971020}