WordPress.org

Make WordPress Core

Changeset 2703


Ignore:
Timestamp:
07/11/2005 10:39:50 PM (13 years ago)
Author:
ryan
Message:

Role/capability system. Round one. Props: Owen Winkler

Location:
trunk
Files:
1 added
6 edited

Legend:

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

    r2702 r2703  
    6767    $post_ID = $p = (int) $_GET['post'];
    6868
    69     if ( !user_can_edit_post($user_ID, $post_ID) )
     69    if ( !current_user_can('edit_post', $post_ID) )
    7070        die ( __('You are not allowed to edit this post.') );
    7171
  • trunk/wp-admin/upgrade-functions.php

    r2702 r2703  
    227227        if ( !empty( $user->user_nickname ) )
    228228            update_usermeta( $user->ID, 'nickname', $wpdb->escape($user->user_nickname) );
    229         if ( !empty( $user->user_level ) )
     229        if ( !empty( $user->user_level ) ) {
    230230            update_usermeta( $user->ID, $table_prefix . 'user_level', $user->user_level );
     231            $role = translate_level_to_role($user->user_level);
     232            update_usermeta( $user->ID, $table_prefix . 'capabilities', array($role => true) );
     233        }
    231234        if ( !empty( $user->user_icq ) )
    232235            update_usermeta( $user->ID, 'icq', $wpdb->escape($user->user_icq) );
     
    750753    return $template;
    751754}
     755
     756function translate_level_to_role($level) {
     757    switch ($level) {
     758    case 10:
     759    case 9:
     760    case 8:
     761        return 'publisher';
     762    case 7:
     763    case 6:
     764    case 5:
     765        return 'managing_editor';
     766    case 4:
     767    case 3:
     768        return 'copy_editor';
     769    case 2:
     770        return 'staff_writer';
     771    case 1:
     772        return 'freelancer';
     773    case 0:
     774        return 'visitor';
     775    }
     776}
     777
    752778?>
  • trunk/wp-admin/upgrade-schema.php

    r2702 r2703  
    217217    add_option('use_trackback', 0);
    218218
     219    populate_roles();
     220
    219221    // Delete unused options
    220222    $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url');
     
    230232}
    231233
     234function populate_roles() {
     235    global $table_prefix;
     236
     237    $roles = array ('administrator' =>
     238                                    array('name' => __('Administrator'),
     239                                            'capabilities' => array(
     240                                                'edit_posts' => true,
     241                                                'edit_others_posts' => true,
     242                                                'edit_published_posts' => true,
     243                                                'publish_posts' => true,
     244                                                'edit_pages' => true,
     245                                                'manage_categories' => true,
     246                                                'manage_links' => true,
     247                                                'upload_images' => true,
     248                                                'manage_options' => true,
     249                                                'switch_themes' => true,
     250                                                'edit_themes' => true,
     251                                                'activate_plugins' => true,
     252                                                'edit_plugins' => true,
     253                                                'edit_users' => true,
     254                                                'edit_files' => true,
     255                                                'read' => true,
     256                                                'level_10' => true,
     257                                                'level_9' => true,
     258                                                'level_8' => true
     259                                                )),
     260
     261                                    'editor' =>
     262                                    array('name' => __('Editor'),
     263                                            'capabilities' => array(
     264                                                'edit_posts' => true,
     265                                                'edit_others_posts' => true,
     266                                                'edit_published_posts' => true,
     267                                                'publish_posts' => true,
     268                                                'edit_pages' => true,
     269                                                'manage_categories' => true,
     270                                                'manage_links' => true,
     271                                                'upload_images' => true,
     272                                                'read' => true,
     273                                                'level_7' => true,
     274                                                'level_6' => true,
     275                                                'level_5' => true
     276                                                )),
     277
     278                                    'author' =>
     279                                    array('name' => __('Author'),
     280                                            'capabilities' => array(
     281                                                'edit_posts' => true,
     282                                                'publish_posts' => true,
     283                                                'upload_images' => true,
     284                                                'read' => true,
     285                                                'level_2' => true
     286                                                )),
     287
     288                                    'contributor' =>
     289                                    array('name' => __('Contributor'),
     290                                            'capabilities' => array(
     291                                                'edit_posts' => true,
     292                                                'read' => true,
     293                                                'level_1' => true
     294                                                )),
     295                                           
     296                                    'subscriber' =>
     297                                    array('name' => __('Subscriber'),
     298                                            'capabilities' => array(
     299                                                'read' => true,
     300                                                'level_0' => true
     301                                                )),
     302
     303                                    'inactive' =>
     304                                    array('name' => __('Inactive'),
     305                                                'capabilities' => array())
     306                                    );
     307
     308    add_option($table_prefix . 'user_roles', $roles);
     309}
    232310?>
  • trunk/wp-includes/functions.php

    r2702 r2703  
    12191219function update_category_cache() {
    12201220    global $cache_categories, $wpdb;
    1221     $dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories");
    1222     foreach ($dogs as $catt)
    1223         $cache_categories[$catt->cat_ID] = $catt;
    1224 }
    1225 
    1226 function update_user_cache() {
    1227     global $cache_userdata, $wpdb;
    1228     $level_key = $wpdb->prefix . 'user_level';
    1229     $user_ids = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key'");
    1230     $user_ids = join(',', $user_ids);
    1231     $query = apply_filters('user_cache_query', "SELECT * FROM $wpdb->users WHERE ID IN ($user_ids)");
    1232     if ( $users = $wpdb->get_results( $query ) ) :
    1233         foreach ($users as $user) :
    1234             $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
    1235             foreach ( $metavalues as $meta ) {
    1236                 $user->{$meta->meta_key} = $meta->meta_value;
    1237                 // We need to set user_level from meta, not row
    1238                 if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
    1239                     $user->user_level = $meta->meta_value;
    1240             }
    1241 
    1242             $cache_userdata[$user->ID] = $user;
    1243             $cache_userdata[$user->user_login] =& $cache_userdata[$user->ID];
    1244         endforeach;
     1221    if($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories")):
     1222        foreach ($dogs as $catt)
     1223            $cache_categories[$catt->cat_ID] = $catt;
    12451224        return true;
    1246     else :
     1225    else:
    12471226        return false;
    12481227    endif;
     
    19601939}
    19611940
     1941function get_usermeta( $user_id, $meta_key = '') {
     1942    global $wpdb;
     1943    $user_id = (int) $user_id;
     1944
     1945    if ( !empty($meta_key) ) {
     1946        $meta_key = preg_replace('|a-z0-9_|i', '', $meta_key);
     1947        $metas = $wpdb->get_results("SELECT * FROM $wpdb->usermeta WHERE user_id = '$user_id' AND meta_key = '$meta_key'");
     1948    } else {
     1949        $metas = $wpdb->get_results("SELECT * FROM $wpdb->usermeta WHERE user_id = '$user_id'");
     1950    }
     1951
     1952    foreach ($metas as $index => $meta) {
     1953        @ $value = unserialize($meta->meta_key);
     1954        if ($value !== FALSE)
     1955            $metas[$index]->meta_key = $value;         
     1956    }
     1957
     1958    if ( !empty($meta_key) )
     1959        return $metas[0];
     1960    else
     1961        return $metas;
     1962}
     1963
    19621964function update_usermeta( $user_id, $meta_key, $meta_value ) {
    19631965    global $wpdb;
     
    19651967        return false;
    19661968    $meta_key = preg_replace('|a-z0-9_|i', '', $meta_key);
     1969
     1970    if ( is_array($meta_value) || is_object($meta_value) )
     1971        $meta_value = serialize($meta_value);
     1972
    19671973    $cur = $wpdb->get_row("SELECT * FROM $wpdb->usermeta WHERE user_id = '$user_id' AND meta_key = '$meta_key'");
    19681974    if ( !$cur ) {
  • trunk/wp-includes/pluggable-functions.php

    r2702 r2703  
    2020    $user_pass_md5 = md5($userdata->user_pass);
    2121    $user_identity = $userdata->display_name;
    22     $current_user  = $userdata;
     22
     23    if ( empty($current_user) )
     24        $current_user = new WP_User($user_ID);
    2325}
    2426endif;
     
    3032    if ( $user_id == 0 )
    3133        return false;
    32 
     34       
    3335    if ( isset( $cache_userdata[$user_id] ) )
    3436        return $cache_userdata[$user_id];
     
    4042
    4143    foreach ( $metavalues as $meta ) {
    42         $user->{$meta->meta_key} = $meta->meta_value;
     44        @ $value = unserialize($meta->meta_value);
     45        if ($value === FALSE)
     46            $value = $meta->meta_value;
     47        $user->{$meta->meta_key} = $value;
     48
    4349        // We need to set user_level from meta, not row
    4450        if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
  • trunk/wp-settings.php

    r2701 r2703  
    7575
    7676$wpdb->hide_errors();
    77 if ( !update_user_cache() && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !defined('WP_INSTALLING')) ) {
     77if ( !update_category_cache() && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !defined('WP_INSTALLING')) ) {
    7878    if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') )
    7979        $link = 'install.php';
     
    8686require (ABSPATH . WPINC . '/functions-formatting.php');
    8787require (ABSPATH . WPINC . '/functions-post.php');
     88require (ABSPATH . WPINC . '/capabilities.php');
    8889require (ABSPATH . WPINC . '/classes.php');
    8990require (ABSPATH . WPINC . '/template-functions-general.php');
     
    161162$wp_rewrite = new WP_Rewrite();
    162163$wp = new WP();
     164$wp_roles = new WP_Roles();
    163165
    164166// Everything is loaded and initialized.
Note: See TracChangeset for help on using the changeset viewer.