Ticket #5540: user_role-r6506-a.patch
File user_role-r6506-a.patch, 8.2 KB (added by , 16 years ago) |
---|
-
wordpress/wp-includes/wp-db.php
33 33 var $options; 34 34 var $postmeta; 35 35 var $usermeta; 36 var $user_role; 36 37 var $terms; 37 38 var $term_taxonomy; 38 39 var $term_relationships; 39 var $tables = array('users', 'usermeta', ' posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',40 var $tables = array('users', 'usermeta', 'user_role', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options', 40 41 'postmeta', 'terms', 'term_taxonomy', 'term_relationships'); 41 42 var $charset; 42 43 var $collate; -
wordpress/wp-includes/version.php
3 3 // This holds the version number in a separate file so we can bump it without cluttering the SVN 4 4 5 5 $wp_version = '2.4-bleeding'; 6 $wp_db_version = 6 124;6 $wp_db_version = 6506; 7 7 8 8 ?> -
wordpress/wp-includes/capabilities.php
178 178 if ( ! isset($wp_roles) ) 179 179 $wp_roles = new WP_Roles(); 180 180 181 // Filter out caps that are not role names and assign to $this->roles181 //This handles the old usermeta capabilities if present 182 182 if(is_array($this->caps)) 183 183 $this->roles = array_filter(array_keys($this->caps), array(&$wp_roles, 'is_role')); 184 185 // Fetch roles from the user_role table 186 global $wpdb, $blog_id; 187 $user_id = intval($this->ID); 188 $roles = $wpdb->get_col("SELECT role FROM {$wpdb->user_role} WHERE blog_id = {$blog_id} AND user_id = {$user_id}"); 189 if ($roles) 190 $this->roles = array_filter($roles, array(&$wp_roles, 'is_role')); 184 191 185 192 //Build $allcaps from role caps, overlay user's $caps 186 193 $this->allcaps = array(); 187 194 foreach( (array) $this->roles as $role) { 195 $this->allcaps[$role] = true; 188 196 $role = $wp_roles->get_role($role); 189 197 $this->allcaps = array_merge($this->allcaps, $role->capabilities); 190 198 } … … 192 200 } 193 201 194 202 function add_role($role) { 203 if ( !is_role($role) ) 204 return new WP_Error( 'invalid_user_role', sprintf(__('Invalid user role: %s'), $role) ); 205 195 206 $this->caps[$role] = true; 196 update_usermeta($this->ID, $this->cap_key, $this->caps); 207 global $wpdb, $blog_id; 208 $user_id = intval($this->ID); 209 $role = $wpdb->escape($role); 210 $wpdb->query( "INSERT INTO {$wpdb->user_role} (blog_id, user_id, role) VALUES ({$blog_id}, {$user_id}, '{$role}')" ); 197 211 $this->get_role_caps(); 198 212 $this->update_user_level_from_caps(); 199 213 } 200 214 201 215 function remove_role($role) { 202 if ( empty($this->roles[$role]) || (count($this->roles) <= 1) )203 return;204 216 unset($this->caps[$role]); 205 update_usermeta($this->ID, $this->cap_key, $this->caps); 217 global $wpdb, $blog_id; 218 $user_id = intval($this->ID); 219 $role = $wpdb->escape($role); 220 $wpdb->query( "DELETE FROM {$wpdb->user_role} WHERE blog_id = {$blog_id} AND user_id = {$user_id} AND role = '{$role}'" ); 206 221 $this->get_role_caps(); 207 222 } 208 223 209 224 function set_role($role) { 210 foreach($this->roles as $oldrole) 211 unset($this->caps[$oldrole]); 225 foreach($this->roles as $oldrole) { 226 if ($oldrole != $role) 227 $this->remove_role($oldrole); 228 } 212 229 if ( !empty($role) ) { 213 $this->caps[$role] = true;214 $this->roles = array($role => true);230 if ( !in_array($role, $this->roles) ) 231 $this->add_role($role); 215 232 } else { 216 233 $this->roles = false; 217 234 } 218 update_usermeta($this->ID, $this->cap_key, $this->caps);219 $this->get_role_caps();220 $this->update_user_level_from_caps();221 235 } 222 236 223 237 function level_reduction($max, $item) { … … 259 273 function has_cap($cap) { 260 274 if ( is_numeric($cap) ) 261 275 $cap = $this->translate_level_to_cap($cap); 262 276 263 277 $args = array_slice(func_get_args(), 1); 264 278 $args = array_merge(array($cap, $this->ID), $args); 265 279 $caps = call_user_func_array('map_meta_cap', $args); … … 481 495 return $wp_roles->remove_role($role); 482 496 } 483 497 498 function is_role($role) { 499 global $wp_roles; 500 501 if ( ! isset($wp_roles) ) 502 $wp_roles = new WP_Roles(); 503 504 return $wp_roles->is_role($role); 505 } 506 484 507 ?> -
wordpress/wp-includes/user.php
52 52 global $wpdb, $blog_id; 53 53 if ( empty($id) ) 54 54 $id = (int) $blog_id; 55 $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE " . $wpdb->users . ".ID = " . $wpdb->usermeta . ".user_id AND meta_key = '" . $wpdb->prefix . "capabilities' ORDER BY {$wpdb->usermeta}.user_id" );55 $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, role FROM {$wpdb->users}, {$wpdb->user_role} WHERE {$wpdb->users}.ID = {$wpdb->user_role}.user_id GROUP BY user_id ORDER BY {$wpdb->user_role}.user_id" ); 56 56 return $users; 57 57 } 58 58 -
wordpress/wp-admin/includes/schema.php
143 143 PRIMARY KEY (umeta_id), 144 144 KEY user_id (user_id), 145 145 KEY meta_key (meta_key) 146 ) $charset_collate;"; 146 ) $charset_collate; 147 CREATE TABLE IF NOT EXISTS $wpdb->user_role ( 148 user_role_id bigint(20) NOT NULL auto_increment, 149 blog_id bigint(20) NOT NULL default '0', 150 user_id bigint(20) NOT NULL default '0', 151 role varchar(32) NOT NULL default '', 152 PRIMARY KEY (user_role_id), 153 KEY user_blog (blog_id,user_id), 154 KEY user_id (user_id) 155 ) $charset_collate; 156 "; 147 157 148 158 function populate_options() { 149 159 global $wpdb, $wp_db_version; -
wordpress/wp-admin/includes/user.php
266 266 267 267 $wpdb->query("DELETE FROM $wpdb->users WHERE ID = $id"); 268 268 $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = '$id'"); 269 $wpdb->query("DELETE FROM $wpdb->user_role WHERE user_id = '$id'"); 269 270 270 271 wp_cache_delete($id, 'users'); 271 272 wp_cache_delete($user->user_login, 'userlogins'); -
wordpress/wp-admin/includes/upgrade.php
197 197 198 198 if ( $wp_current_db_version < 6124 ) 199 199 upgrade_230_old_tables(); 200 201 global $wpdb, $blog_id; 202 if ( $wp_current_db_version < 6506 ) 203 upgrade_user_roles($wpdb->prefix, $blog_id); 200 204 201 205 maybe_disable_automattic_widgets(); 202 206 … … 715 719 $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); 716 720 } 717 721 722 function upgrade_user_roles($prefix, $blog_id) { 723 // convert the old capabilities usermeta into user_role rows 724 // old usermeta rows are removed 725 726 global $wpdb; 727 $prefix = $wpdb->escape($prefix); 728 $blog_id = intval($blog_id); 729 $users = $wpdb->get_results( "SELECT umeta_id, user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = '{$prefix}capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); 718 730 731 foreach ($users as $user) { 732 // find any usermeta capabilites that are roles, and insert them as user_role rows 733 $caps = unserialize($user->meta_value); 734 foreach ( $caps as $cap => $active ) { 735 if ( is_role($cap) ) { 736 if ($active) { 737 $role = strtolower($cap); 738 $wpdb->insert( $wpdb->user_role, array('blog_id' => $blog_id, 'user_id' => $user->user_id, 'role' => $role) ); 739 } 740 unset( $caps[$cap] ); 741 } 742 743 } 744 745 // write any remaining caps as usermeta capabilities 746 $newcaps = maybe_serialize($caps); 747 $wpdb->update( $wpdb->usermeta, array('meta_value' => $newcaps), array('umeta_id' => $user->umeta_id) ); 748 wp_cache_delete($user->user_id, 'users'); 749 } 750 } 751 719 752 // The functions we use to actually do stuff 720 753 721 754 // General