Make WordPress Core

Changeset 2703


Ignore:
Timestamp:
07/11/2005 10:39:50 PM (21 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.