Make WordPress Core

Changeset 12833


Ignore:
Timestamp:
01/26/2010 11:32:04 AM (14 years ago)
Author:
dd32
Message:

First scratch at Taxonomy Capabilities. See #12035

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-ajax.php

    r12818 r12833  
    205205    $taxonomy = get_taxonomy(substr($action, 4));
    206206    check_ajax_referer( $action );
    207     if ( !current_user_can( 'manage_categories' ) )
     207    if ( !current_user_can( $taxonomy->manage_cap ) )
    208208        die('-1');
    209209    $names = explode(',', $_POST['new'.$taxonomy->name]);
     
    330330    $tag_id = (int) $_POST['tag_ID'];
    331331    check_ajax_referer( "delete-tag_$tag_id" );
    332     if ( !current_user_can( 'manage_categories' ) )
    333         die('-1');
    334332
    335333    $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
     334    $tax = get_taxonomy($taxonomy);
     335
     336    if ( !current_user_can( $tax->delete_cap ) )
     337        die('-1');
    336338
    337339    $tag = get_term( $tag_id, $taxonomy );
     
    600602case 'add-tag' : // From Manage->Tags
    601603    check_ajax_referer( 'add-tag' );
    602     if ( !current_user_can( 'manage_categories' ) )
    603         die('-1');
    604604
    605605    $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
     606    $tax = get_taxonomy($taxonomy);
     607
     608    if ( !current_user_can( $tax->edit_cap ) )
     609        die('-1');
     610
    606611    $tag = wp_insert_term($_POST['tag-name'], $taxonomy, $_POST );
    607612
     
    11761181    check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' );
    11771182
    1178     if ( ! current_user_can('manage_categories') )
     1183    $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : false;
     1184    if ( ! $taxonomy )
     1185        die( __('Cheatin’ uh?') );
     1186    $tax = get_taxonomy($taxonomy);
     1187       
     1188    if ( ! current_user_can( $tax->edit_cap ) )
    11791189        die( __('Cheatin’ uh?') );
    11801190
  • trunk/wp-admin/edit-form-advanced.php

    r12798 r12833  
    9898    $label = isset($taxonomy->label) ? esc_attr($taxonomy->label) : $tax_name;
    9999
     100    if ( !current_user_can($taxonomy->manage_cap) )
     101        continue;
     102
    100103    if ( !is_taxonomy_hierarchical($tax_name) )
    101104        add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', $post_type, 'side', 'core');
    102105    else
    103         add_meta_box($tax_name.'div', $label, 'post_categories_meta_box', 'post', 'side', 'core', array( 'taxonomy' => $tax_name ));
     106        add_meta_box($tax_name . 'div', $label, 'post_categories_meta_box', 'post', 'side', 'core', array( 'taxonomy' => $tax_name ));
    104107}
    105108
  • trunk/wp-admin/edit-tags.php

    r12818 r12833  
    1919if ( !is_taxonomy($taxonomy) )
    2020    wp_die(__('Invalid taxonomy'));
     21
     22$tax = get_taxonomy($taxonomy);
    2123
    2224if ( empty($post_type) || !in_array( $post_type, get_post_types( array('_show' => true) ) ) )
     
    4042    check_admin_referer('add-tag');
    4143
    42     if ( !current_user_can('manage_categories') )
     44    if ( !current_user_can($tax->edit_cap) )
    4345        wp_die(__('Cheatin’ uh?'));
    4446
     
    6163    check_admin_referer('delete-tag_' .  $tag_ID);
    6264
    63     if ( !current_user_can('manage_categories') )
     65    if ( !current_user_can($tax->delete_cap) )
    6466        wp_die(__('Cheatin’ uh?'));
    6567
     
    8183    check_admin_referer('bulk-tags');
    8284
    83     if ( !current_user_can('manage_categories') )
     85    if ( !current_user_can($tax->delete_cap) )
    8486        wp_die(__('Cheatin’ uh?'));
    8587
     
    116118    check_admin_referer('update-tag_' . $tag_ID);
    117119
    118     if ( !current_user_can('manage_categories') )
     120    if ( !current_user_can($tax->edit_cap) )
    119121        wp_die(__('Cheatin’ uh?'));
    120122
     
    143145}
    144146
    145 $can_manage = current_user_can('manage_categories');
    146 
    147147wp_enqueue_script('admin-tags');
    148 if ( $can_manage )
     148if ( current_user_can($tax->edit_cap) )
    149149    wp_enqueue_script('inline-edit-tax');
    150150
     
    250250
    251251    <tbody id="the-list" class="list:tag">
    252 <?php
    253 
    254 $count = tag_rows( $pagenum, $tags_per_page, $searchterms, $taxonomy );
    255 ?>
     252<?php tag_rows( $pagenum, $tags_per_page, $searchterms, $taxonomy ); ?>
    256253    </tbody>
    257254</table>
     
    285282<h3><?php _e('Popular Tags'); ?></h3>
    286283<?php
    287 if ( $can_manage )
     284if ( current_user_can($tax->edit_cap) )
    288285    wp_tag_cloud(array('taxonomy' => $taxonomy, 'link' => 'edit'));
    289286else
     
    292289</div>
    293290
    294 <?php if ( $can_manage ) {
    295     do_action('add_tag_form_pre'); ?>
     291<?php if ( current_user_can($tax->edit_cap) ) {
     292    do_action('add_tag_form_pre', $taxonomy); ?>
    296293
    297294<div class="form-wrap">
     
    328325
    329326<p class="submit"><input type="submit" class="button" name="submit" id="submit" value="<?php esc_attr_e('Add Tag'); ?>" /></p>
    330 <?php do_action('add_tag_form'); ?>
     327<?php do_action('add_tag_form', $taxonomy); ?>
    331328</form></div>
    332329<?php } ?>
  • trunk/wp-admin/includes/meta-boxes.php

    r12798 r12833  
    240240    $tax_name = esc_attr(substr($box['id'], 8));
    241241    $taxonomy = get_taxonomy($tax_name);
     242    if ( !current_user_can($taxonomy->manage_cap) )
     243        return;
    242244    $helps = isset($taxonomy->helps) ? esc_attr($taxonomy->helps) : __('Separate tags with commas.');
    243245?>
     
    276278        $args = $box['args'];
    277279    extract( wp_parse_args($args, $defaults), EXTR_SKIP );
     280    $tax = get_taxonomy($taxonomy);
     281
     282    if ( !current_user_can($tax->manage_cap) )
     283        return;
    278284    ?>
    279285    <div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv">
     
    295301        </div>
    296302
    297     <?php if ( current_user_can('manage_categories') ) : ?>
     303    <?php if ( current_user_can($tax->edit_cap) ) : ?>
    298304            <div id="<?php echo $taxonomy; ?>-adder" class="wp-hidden-children">
    299305                <h4><a id="<?php echo $taxonomy; ?>-add-toggle" href="#<?php echo $taxonomy; ?>-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
  • trunk/wp-admin/includes/template.php

    r12818 r12833  
    212212function inline_edit_term_row($type, $taxonomy) {
    213213
    214     if ( ! current_user_can( 'manage_categories' ) )
     214    $tax = get_taxonomy($taxonomy);
     215    if ( ! current_user_can( $tax->edit_cap ) )
    215216        return;
    216217
     
    679680        else
    680681            $tagsel = $taxonomy;
     682
     683        $tax = get_taxonomy($taxonomy);
     684
    681685        $count = ( $count > 0 ) ? "<a href='edit.php?$tagsel=$tag->slug'>$count</a>" : $count;
    682686
     
    685689        $qe_data = get_term($tag->term_id, $taxonomy, object, 'edit');
    686690        $edit_link = "edit-tags.php?action=edit&amp;taxonomy=$taxonomy&amp;tag_ID=$tag->term_id";
     691
    687692        $out = '';
    688693        $out .= '<tr id="tag-' . $tag->term_id . '"' . $class . '>';
     694
    689695        $columns = get_column_headers('edit-tags');
    690696        $hidden = get_hidden_columns('edit-tags');
     697        $default_term = get_option('default_' . $taxonomy);
    691698        foreach ( $columns as $column_name => $column_display_name ) {
    692699            $class = "class=\"$column_name column-$column_name\"";
     
    700707            switch ($column_name) {
    701708                case 'cb':
    702                     if ( $tag->term_id != get_option('default_' . $taxonomy) )
     709                    if ( current_user_can($tax->delete_cap) && $tag->term_id != $default_term )
    703710                        $out .= '<th scope="row" class="check-column"> <input type="checkbox" name="delete_tags[]" value="' . $tag->term_id . '" /></th>';
    704711                    else
     
    708715                    $out .= '<td ' . $attributes . '><strong><a class="row-title" href="' . $edit_link . '" title="' . esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $name)) . '">' . $name . '</a></strong><br />';
    709716                    $actions = array();
    710                     $actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
    711                     $actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
    712                     if ( $tag->term_id != get_option('default_' . $taxonomy) )
     717                    if ( current_user_can($tax->edit_cap) ) {
     718                        $actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
     719                        $actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
     720                    }
     721                    if ( current_user_can($tax->delete_cap) && $tag->term_id != $default_term )
    713722                        $actions['delete'] = "<a class='delete-tag' href='" . wp_nonce_url("edit-tags.php?action=delete&amp;taxonomy=$taxonomy&amp;tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id) . "'>" . __('Delete') . "</a>";
    714723
     
    747756        }
    748757
    749         $out .= '</tr>';
     758        $out .= "</tr>\n";
    750759
    751760        return $out;
     
    796805    }
    797806
    798     // filter and send to screen
    799807    echo $out;
    800808    return $count;
     
    11361144
    11371145    <fieldset class="inline-edit-col-left"><div class="inline-edit-col">
    1138         <h4><?php echo $bulk ? ( __( 'Bulk Edit' ) ) : __( 'Quick Edit' ); ?></h4>
     1146        <h4><?php echo $bulk ? __( 'Bulk Edit' ) : __( 'Quick Edit' ); ?></h4>
    11391147
    11401148
  • trunk/wp-includes/taxonomy.php

    r12818 r12833  
    1616 */
    1717function create_initial_taxonomies() {
    18     register_taxonomy( 'category', 'post', array('hierarchical' => true, 'update_count_callback' => '_update_post_term_count', 'label' => __('Categories'), 'query_var' => false, 'rewrite' => false) ) ;
    19     register_taxonomy( 'post_tag', 'post', array('hierarchical' => false, 'update_count_callback' => '_update_post_term_count', 'label' => __('Post Tags'), 'query_var' => false, 'rewrite' => false) ) ;
    20     register_taxonomy( 'link_category', 'link', array('hierarchical' => false, 'label' => __('Categories'), 'query_var' => false, 'rewrite' => false) ) ;
     18    register_taxonomy( 'category', 'post', array(   'hierarchical' => true,
     19                                                    'update_count_callback' => '_update_post_term_count',
     20                                                    'label' => __('Categories'),
     21                                                    'query_var' => false,
     22                                                    'rewrite' => false,
     23                                                    'edit_cap' => 'no_priv'
     24                                                ) ) ;
     25
     26    register_taxonomy( 'post_tag', 'post', array(
     27                                                    'hierarchical' => false,
     28                                                    'update_count_callback' => '_update_post_term_count',
     29                                                    'label' => __('Post Tags'),
     30                                                    'query_var' => false,
     31                                                    'rewrite' => false
     32                                                ) ) ;
     33
     34    register_taxonomy( 'link_category', 'link', array(  'hierarchical' => false,
     35                                                        'label' => __('Categories'),
     36                                                        'query_var' => false,
     37                                                        'rewrite' => false
     38                                                    ) ) ;
    2139}
    2240add_action( 'init', 'create_initial_taxonomies', 0 ); // highest priority
     
    168186    global $wp_taxonomies, $wp_rewrite, $wp;
    169187
    170     if (!is_array($wp_taxonomies))
     188    if ( ! is_array($wp_taxonomies) )
    171189        $wp_taxonomies = array();
    172190
     
    190208        $wp_rewrite->add_rewrite_tag("%$taxonomy%", '([^/]+)', $args['query_var'] ? "{$args['query_var']}=" : "taxonomy=$taxonomy&term=$term");
    191209        $wp_rewrite->add_permastruct($taxonomy, "/{$args['rewrite']['slug']}/%$taxonomy%", $args['rewrite']['with_front']);
     210    }
     211
     212    foreach ( array('manage_cap', 'edit_cap', 'delete_cap') as $cap ) {
     213        if ( empty($args[$cap]) )
     214            $args[$cap] = 'manage_categories';
    192215    }
    193216
Note: See TracChangeset for help on using the changeset viewer.