Make WordPress Core

Ticket #35614: 35614.patch

File 35614.patch, 10.7 KB (added by johnbillion, 8 years ago)
  • src/wp-includes/taxonomy.php

     
    6161                'show_ui' => true,
    6262                'show_admin_column' => true,
    6363                '_builtin' => true,
     64                'capabilities' => array(
     65                        'manage_terms' => 'manage_categories',
     66                        'edit_terms'   => 'edit_categories',
     67                        'delete_terms' => 'delete_categories',
     68                        'assign_terms' => 'assign_categories',
     69                ),
    6470        ) );
    6571
    6672        register_taxonomy( 'post_tag', 'post', array(
     
    7177                'show_ui' => true,
    7278                'show_admin_column' => true,
    7379                '_builtin' => true,
     80                'capabilities' => array(
     81                        'manage_terms' => 'manage_post_tags',
     82                        'edit_terms'   => 'edit_post_tags',
     83                        'delete_terms' => 'delete_post_tags',
     84                        'assign_terms' => 'assign_post_tags',
     85                ),
    7486        ) );
    7587
    7688        register_taxonomy( 'nav_menu', 'nav_menu_item', array(
  • src/wp-includes/link-template.php

     
    930930        }
    931931
    932932        $tax = get_taxonomy( $term->taxonomy );
    933         if ( ! $tax || ! current_user_can( $tax->cap->edit_terms ) ) {
     933        if ( ! $tax || ! current_user_can( 'edit_term', $term->term_id ) ) {
    934934                return;
    935935        }
    936936
     
    984984                return;
    985985
    986986        $tax = get_taxonomy( $term->taxonomy );
    987         if ( ! current_user_can( $tax->cap->edit_terms ) )
     987        if ( ! current_user_can( 'edit_term', $term->term_id ) ) {
    988988                return;
     989        }
    989990
    990991        if ( empty( $link ) )
    991992                $link = __('Edit This');
  • src/wp-includes/class-wp-xmlrpc-server.php

     
    18821882
    18831883                $taxonomy = get_taxonomy( $content_struct['taxonomy'] );
    18841884
    1885                 if ( ! current_user_can( $taxonomy->cap->manage_terms ) )
     1885                if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) {
    18861886                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to create terms in this taxonomy.' ) );
     1887                }
    18871888
    18881889                $taxonomy = (array) $taxonomy;
    18891890
     
    20652066
    20662067                $taxonomy = get_taxonomy( $taxonomy );
    20672068
    2068                 if ( ! current_user_can( $taxonomy->cap->delete_terms ) )
    2069                         return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete terms in this taxonomy.' ) );
     2069                if ( ! current_user_can( 'delete_term', $term_id ) ) {
     2070                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this term.' ) );
     2071                }
    20702072
    20712073                $term = get_term( $term_id, $taxonomy->name );
    20722074
  • src/wp-includes/capabilities.php

     
    402402        case 'delete_site':
    403403                $caps[] = 'manage_options';
    404404                break;
     405        case 'edit_term':
     406        case 'delete_term':
     407        case 'assign_term':
     408                $term_id = $args[0];
     409                $term = get_term( $term_id );
     410                if ( ! $term || is_wp_error( $term ) ) {
     411                        $caps[] = 'do_not_allow';
     412                        break;
     413                }
     414
     415                $tax = get_taxonomy( $term->taxonomy );
     416                if ( ! $tax ) {
     417                        $caps[] = 'do_not_allow';
     418                        break;
     419                }
     420
     421                if ( 'delete_term' === $cap && ( $term->term_id == get_option( 'default_' . $term->taxonomy ) ) ) {
     422                        $caps[] = 'do_not_allow';
     423                        break;
     424                }
     425
     426                $taxo_cap = $cap . 's';
     427
     428                $caps = map_meta_cap( $tax->cap->$taxo_cap, $user_id, $term_id );
     429
     430                break;
     431        case 'manage_categories':
     432        case 'manage_post_tags':
     433        case 'edit_categories':
     434        case 'edit_post_tags':
     435        case 'delete_categories':
     436        case 'delete_post_tags':
     437                $caps[] = 'manage_categories';
     438                break;
     439        case 'assign_categories':
     440        case 'assign_post_tags':
     441                $caps[] = 'edit_posts';
     442                break;
    405443        default:
    406444                // Handle meta capabilities for custom post types.
    407445                global $post_type_meta_caps;
     
    413451                // If no meta caps match, return the original cap.
    414452                $caps[] = $cap;
    415453        }
    416 
     454       
    417455        /**
    418456         * Filters a user's capabilities depending on specific context and/or privilege.
    419457         *
  • src/wp-includes/admin-bar.php

     
    605605                        ) );
    606606                } elseif ( ! empty( $current_object->taxonomy )
    607607                        && ( $tax = get_taxonomy( $current_object->taxonomy ) )
    608                         && current_user_can( $tax->cap->edit_terms )
     608                        && current_user_can( 'edit_term', $current_object->term_id )
    609609                        && $edit_term_link = get_edit_term_link( $current_object->term_id, $current_object->taxonomy ) )
    610610                {
    611611                        $wp_admin_bar->add_menu( array(
  • src/wp-admin/term.php

     
    3131$title    = $tax->labels->edit_item;
    3232
    3333if ( ! in_array( $taxonomy, get_taxonomies( array( 'show_ui' => true ) ) ) ||
    34      ! current_user_can( $tax->cap->manage_terms )
     34     ! current_user_can( 'edit_term', $tag->term_id )
    3535) {
    3636        wp_die(
    3737                '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
    38                 '<p>' . __( 'Sorry, you are not allowed to manage this item.' ) . '</p>',
     38                '<p>' . __( 'Sorry, you are not allowed to edit this item.' ) . '</p>',
    3939                403
    4040        );
    4141}
  • src/wp-admin/includes/class-wp-terms-list-table.php

     
    332332         * @return string
    333333         */
    334334        public function column_cb( $tag ) {
    335                 $default_term = get_option( 'default_' . $this->screen->taxonomy );
    336 
    337                 if ( current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->delete_terms ) && $tag->term_id != $default_term )
     335                if ( current_user_can( 'delete_term', $tag->term_id ) ) {
    338336                        return '<label class="screen-reader-text" for="cb-select-' . $tag->term_id . '">' . sprintf( __( 'Select %s' ), $tag->name ) . '</label>'
    339337                                . '<input type="checkbox" name="delete_tags[]" value="' . $tag->term_id . '" id="cb-select-' . $tag->term_id . '" />';
     338                }
    340339
    341340                return '&nbsp;';
    342341        }
     
    411410         * @since 4.3.0
    412411         * @access protected
    413412         *
    414          * @param object $tag         Tag being acted upon.
    415          * @param string $column_name Current column name.
    416          * @param string $primary     Primary column name.
     413         * @param WP_Term $tag         Tag being acted upon.
     414         * @param string  $column_name Current column name.
     415         * @param string  $primary     Primary column name.
    417416         * @return string Row actions output for terms.
    418417         */
    419418        protected function handle_row_actions( $tag, $column_name, $primary ) {
     
    423422
    424423                $taxonomy = $this->screen->taxonomy;
    425424                $tax = get_taxonomy( $taxonomy );
    426                 $default_term = get_option( 'default_' . $taxonomy );
    427 
    428425                $uri = wp_doing_ajax() ? wp_get_referer() : $_SERVER['REQUEST_URI'];
    429426
    430427                $edit_link = add_query_arg(
     
    434431                );
    435432
    436433                $actions = array();
    437                 if ( current_user_can( $tax->cap->edit_terms ) ) {
     434                if ( current_user_can( 'edit_term', $tag->term_id ) ) {
    438435                        $actions['edit'] = sprintf(
    439436                                '<a href="%s" aria-label="%s">%s</a>',
    440437                                esc_url( $edit_link ),
     
    449446                                __( 'Quick&nbsp;Edit' )
    450447                        );
    451448                }
    452                 if ( current_user_can( $tax->cap->delete_terms ) && $tag->term_id != $default_term ) {
     449                if ( current_user_can( 'delete_term', $tag->term_id ) ) {
    453450                        $actions['delete'] = sprintf(
    454451                                '<a href="%s" class="delete-tag aria-button-if-js" aria-label="%s">%s</a>',
    455452                                wp_nonce_url( "edit-tags.php?action=delete&amp;taxonomy=$taxonomy&amp;tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id ),
  • src/wp-admin/includes/ajax-actions.php

     
    597597        $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
    598598        $tax = get_taxonomy($taxonomy);
    599599
    600         if ( !current_user_can( $tax->cap->delete_terms ) )
     600        if ( ! current_user_can( 'delete_term', $tag_id ) ) {
    601601                wp_die( -1 );
     602        }
    602603
    603604        $tag = get_term( $tag_id, $taxonomy );
    604605        if ( !$tag || is_wp_error( $tag ) )
     
    786787}
    787788
    788789/**
    789  * Ajax handler for deleting a link category.
     790 * Ajax handler for inserting a link category.
    790791 *
    791792 * @since 3.1.0
    792793 *
     
    796797        if ( empty( $action ) )
    797798                $action = 'add-link-category';
    798799        check_ajax_referer( $action );
    799         if ( !current_user_can( 'manage_categories' ) )
     800        $tax = get_taxonomy( 'link_category' );
     801        if ( ! current_user_can( $tax->cap->manage_terms ) ) {
    800802                wp_die( -1 );
     803        }
    801804        $names = explode(',', wp_unslash( $_POST['newcat'] ) );
    802805        $x = new WP_Ajax_Response();
    803806        foreach ( $names as $cat_name ) {
     
    17021705        if ( ! $tax )
    17031706                wp_die( 0 );
    17041707
    1705         if ( ! current_user_can( $tax->cap->edit_terms ) )
     1708        if ( ! isset( $_POST['tax_ID'] ) || ! ( $id = (int) $_POST['tax_ID'] ) ) {
    17061709                wp_die( -1 );
     1710        }
    17071711
    1708         $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-' . $taxonomy ) );
    1709 
    1710         if ( ! isset($_POST['tax_ID']) || ! ( $id = (int) $_POST['tax_ID'] ) )
     1712        if ( ! current_user_can( 'edit_term', $id ) ) {
    17111713                wp_die( -1 );
     1714        }
     1715
     1716        $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-' . $taxonomy ) );
    17121717
    17131718        $tag = get_term( $id, $taxonomy );
    17141719        $_POST['description'] = $tag->description;
  • src/wp-admin/edit-tags.php

     
    108108        $tag_ID = (int) $_REQUEST['tag_ID'];
    109109        check_admin_referer( 'delete-tag_' . $tag_ID );
    110110
    111         if ( ! current_user_can( $tax->cap->delete_terms ) ) {
     111        if ( ! current_user_can( 'delete_term', $tag_ID ) ) {
    112112                wp_die(
    113113                        '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
    114114                        '<p>' . __( 'Sorry, you are not allowed to delete this item.' ) . '</p>',
     
    168168        $tag_ID = (int) $_POST['tag_ID'];
    169169        check_admin_referer( 'update-tag_' . $tag_ID );
    170170
    171         if ( ! current_user_can( $tax->cap->edit_terms ) ) {
     171        if ( ! current_user_can( 'edit_term', $tag_ID ) ) {
    172172                wp_die(
    173173                        '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
    174174                        '<p>' . __( 'Sorry, you are not allowed to edit this item.' ) . '</p>',
     
    294294
    295295require_once( ABSPATH . 'wp-admin/admin-header.php' );
    296296
    297 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
    298         wp_die(
    299                 '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
    300                 '<p>' . __( 'Sorry, you are not allowed to edit this item.' ) . '</p>',
    301                 403
    302         );
    303 }
    304 
    305297/** Also used by the Edit Tag  form */
    306298require_once( ABSPATH . 'wp-admin/includes/edit-tag-messages.php' );
    307299