WordPress.org

Make WordPress Core

Ticket #5541: no_db_roles-r6510-2.patch

File no_db_roles-r6510-2.patch, 11.8 KB (added by tellyworth, 6 years ago)
  • wordpress/wp-includes/capabilities.php

     
    11<?php 
    22 
    33class WP_Roles { 
    4         var $roles; 
    54 
    65        var $role_objects = array(); 
    76        var $role_names = array(); 
    8         var $role_key; 
    9         var $use_db = true; 
    107 
    118        function WP_Roles() { 
    129                $this->_init(); 
    1310        } 
    1411 
    1512        function _init () { 
    16                 global $wpdb; 
    17                 global $wp_user_roles; 
    18                 $this->role_key = $wpdb->prefix . 'user_roles'; 
    19                 if ( ! empty($wp_user_roles) ) { 
    20                         $this->roles = $wp_user_roles; 
    21                         $this->use_db = false; 
    22                 } else { 
    23                         $this->roles = get_option($this->role_key); 
    24                 } 
    25  
    26                 if ( empty($this->roles) ) 
    27                         return; 
    28  
    29                 $this->role_objects = array(); 
    30                 $this->role_names =  array(); 
    31                 foreach ($this->roles as $role => $data) { 
    32                         $this->role_objects[$role] = new WP_Role($role, $this->roles[$role]['capabilities']); 
    33                         $this->role_names[$role] = $this->roles[$role]['name']; 
    34                 } 
     13                do_action_ref_array('init_roles', array(&$this)); 
    3514        } 
    3615 
    3716        function add_role($role, $display_name, $capabilities = '') { 
    3817                if ( isset($this->roles[$role]) ) 
    3918                        return; 
    4019 
    41                 $this->roles[$role] = array( 
    42                         'name' => $display_name, 
    43                         'capabilities' => $capabilities); 
    44                 if ( $this->use_db ) 
    45                         update_option($this->role_key, $this->roles); 
    4620                $this->role_objects[$role] = new WP_Role($role, $capabilities); 
    4721                $this->role_names[$role] = $display_name; 
    4822                return $this->role_objects[$role]; 
     
    5428 
    5529                unset($this->role_objects[$role]); 
    5630                unset($this->role_names[$role]); 
    57                 unset($this->roles[$role]); 
    58  
    59                 if ( $this->use_db ) 
    60                         update_option($this->role_key, $this->roles); 
    6131        } 
    6232 
    6333        function add_cap($role, $cap, $grant = true) { 
    64                 $this->roles[$role]['capabilities'][$cap] = $grant; 
    65                 if ( $this->use_db ) 
    66                         update_option($this->role_key, $this->roles); 
     34                if (isset($this->role_objects[$role])) 
     35                        $this->role_objects[$role]->add_cap($cap, $grant); 
    6736        } 
    6837 
    6938        function remove_cap($role, $cap) { 
    70                 unset($this->roles[$role]['capabilities'][$cap]); 
    71                 if ( $this->use_db ) 
    72                         update_option($this->role_key, $this->roles); 
     39                if (isset($this->role_objects[$role])) 
     40                        $this->role_objects[$role]->remove_cap($cap, $grant); 
    7341        } 
    7442 
    7543        function &get_role($role) { 
     
    9967        } 
    10068 
    10169        function add_cap($cap, $grant = true) { 
    102                 global $wp_roles; 
    103  
    104                 if ( ! isset($wp_roles) ) 
    105                         $wp_roles = new WP_Roles(); 
    106  
    10770                $this->capabilities[$cap] = $grant; 
    108                 $wp_roles->add_cap($this->name, $cap, $grant); 
    10971        } 
    11072 
    11173        function remove_cap($cap) { 
    112                 global $wp_roles; 
    113  
    114                 if ( ! isset($wp_roles) ) 
    115                         $wp_roles = new WP_Roles(); 
    116  
    11774                unset($this->capabilities[$cap]); 
    118                 $wp_roles->remove_cap($this->name, $cap); 
    11975        } 
    12076 
    12177        function has_cap($cap) { 
    12278                $capabilities = apply_filters('role_has_cap', $this->capabilities, $cap, $this->name); 
    123                 if ( !empty($capabilities[$cap]) ) 
    124                         return $capabilities[$cap]; 
    125                 else 
    126                         return false; 
     79                $grant = !empty( $capabilities[$cap] ); 
     80                return apply_filters("{$this->name}_has_cap", $grant); 
    12781        } 
    12882 
    12983} 
     
    280234 
    281235} 
    282236 
     237// Populate standard role definitions 
     238function populate_roles(&$roles) { 
     239 
     240        $roles->add_role('administrator', _c('Administrator|User role'), array( 
     241                'switch_themes' => true, 
     242                'edit_themes' => true, 
     243                'activate_plugins' => true, 
     244                'edit_plugins' => true, 
     245                'edit_users' => true, 
     246                'edit_files' => true, 
     247                'manage_options' => true, 
     248                'moderate_comments' => true, 
     249                'manage_categories' => true, 
     250                'manage_links' => true, 
     251                'upload_files' => true, 
     252                'import' => true, 
     253                'unfiltered_html' => true, 
     254                'edit_posts' => true, 
     255                'edit_others_posts' => true, 
     256                'edit_published_posts' => true, 
     257                'publish_posts' => true, 
     258                'edit_pages' => true, 
     259                'read' => true, 
     260                'level_10' => true, 
     261                'level_9' => true, 
     262                'level_8' => true, 
     263                'level_7' => true, 
     264                'level_6' => true, 
     265                'level_5' => true, 
     266                'level_4' => true, 
     267                'level_3' => true, 
     268                'level_2' => true, 
     269                'level_1' => true, 
     270                'level_0' => true, 
     271                'edit_others_pages' => true, 
     272                'edit_published_pages' => true, 
     273                'publish_pages' => true, 
     274                'delete_pages' => true, 
     275                'delete_others_pages' => true, 
     276                'delete_published_pages' => true, 
     277                'delete_posts' => true, 
     278                'delete_others_posts' => true, 
     279                'delete_published_posts' => true, 
     280                'delete_private_posts' => true, 
     281                'edit_private_posts' => true, 
     282                'read_private_posts' => true, 
     283                'delete_private_pages' => true, 
     284                'edit_private_pages' => true, 
     285                'read_private_pages' => true, 
     286                'delete_users' => true, 
     287                'create_users' => true, 
     288                'unfiltered_upload' => true, 
     289        )); 
     290         
     291        $roles->add_role('editor', _c('Editor|User role'), array( 
     292                'moderate_comments' => true, 
     293                'manage_categories' => true, 
     294                'manage_links' => true, 
     295                'upload_files' => true, 
     296                'unfiltered_html' => true, 
     297                'edit_posts' => true, 
     298                'edit_others_posts' => true, 
     299                'edit_published_posts' => true, 
     300                'publish_posts' => true, 
     301                'edit_pages' => true, 
     302                'read' => true, 
     303                'level_7' => true, 
     304                'level_6' => true, 
     305                'level_5' => true, 
     306                'level_4' => true, 
     307                'level_3' => true, 
     308                'level_2' => true, 
     309                'level_1' => true, 
     310                'level_0' => true, 
     311                'edit_others_pages' => true, 
     312                'edit_published_pages' => true, 
     313                'publish_pages' => true, 
     314                'delete_pages' => true, 
     315                'delete_others_pages' => true, 
     316                'delete_published_pages' => true, 
     317                'delete_posts' => true, 
     318                'delete_others_posts' => true, 
     319                'delete_published_posts' => true, 
     320                'delete_private_posts' => true, 
     321                'edit_private_posts' => true, 
     322                'read_private_posts' => true, 
     323                'delete_private_pages' => true, 
     324                'edit_private_pages' => true, 
     325                'read_private_pages' => true, 
     326        )); 
     327         
     328        $roles->add_role( 'author', _c('Author|User role'), array( 
     329                'upload_files' => true, 
     330                'edit_posts' => true, 
     331                'edit_published_posts' => true, 
     332                'publish_posts' => true, 
     333                'read' => true, 
     334                'level_2' => true, 
     335                'level_1' => true, 
     336                'level_0' => true, 
     337                'delete_posts' => true, 
     338                'delete_published_posts' => true, 
     339        ) ); 
     340         
     341        $roles->add_role( 'contributor', _c('Contributor|User role'), array( 
     342                'edit_posts' => true, 
     343                'read' => true, 
     344                'level_1' => true, 
     345                'level_0' => true, 
     346                'delete_posts' => true, 
     347        ) ); 
     348         
     349        $roles->add_role('subscriber', _c('Editor|User role'), array( 
     350                'read' => true, 
     351                'level_0' => true, 
     352        ) ); 
     353} 
     354 
     355add_action('init_roles', 'populate_roles'); 
     356 
    283357// Map meta capabilities to primitive capabilities. 
    284358function map_meta_cap($cap, $user_id) { 
    285359        $args = array_slice(func_get_args(), 2); 
  • wordpress/wp-admin/includes/schema.php

     
    247247        endforeach; 
    248248} 
    249249 
    250 function populate_roles() { 
    251         populate_roles_160(); 
    252         populate_roles_210(); 
    253         populate_roles_230(); 
    254 } 
    255  
    256 function populate_roles_160() { 
    257         // Add roles 
    258         add_role('administrator', _c('Administrator|User role')); 
    259         add_role('editor', _c('Editor|User role')); 
    260         add_role('author', _c('Author|User role')); 
    261         add_role('contributor', _c('Contributor|User role')); 
    262         add_role('subscriber', _c('Subscriber|User role')); 
    263  
    264         // Add caps for Administrator role 
    265         $role = get_role('administrator'); 
    266         $role->add_cap('switch_themes'); 
    267         $role->add_cap('edit_themes'); 
    268         $role->add_cap('activate_plugins'); 
    269         $role->add_cap('edit_plugins'); 
    270         $role->add_cap('edit_users'); 
    271         $role->add_cap('edit_files'); 
    272         $role->add_cap('manage_options'); 
    273         $role->add_cap('moderate_comments'); 
    274         $role->add_cap('manage_categories'); 
    275         $role->add_cap('manage_links'); 
    276         $role->add_cap('upload_files'); 
    277         $role->add_cap('import'); 
    278         $role->add_cap('unfiltered_html'); 
    279         $role->add_cap('edit_posts'); 
    280         $role->add_cap('edit_others_posts'); 
    281         $role->add_cap('edit_published_posts'); 
    282         $role->add_cap('publish_posts'); 
    283         $role->add_cap('edit_pages'); 
    284         $role->add_cap('read'); 
    285         $role->add_cap('level_10'); 
    286         $role->add_cap('level_9'); 
    287         $role->add_cap('level_8'); 
    288         $role->add_cap('level_7'); 
    289         $role->add_cap('level_6'); 
    290         $role->add_cap('level_5'); 
    291         $role->add_cap('level_4'); 
    292         $role->add_cap('level_3'); 
    293         $role->add_cap('level_2'); 
    294         $role->add_cap('level_1'); 
    295         $role->add_cap('level_0'); 
    296  
    297         // Add caps for Editor role 
    298         $role = get_role('editor'); 
    299         $role->add_cap('moderate_comments'); 
    300         $role->add_cap('manage_categories'); 
    301         $role->add_cap('manage_links'); 
    302         $role->add_cap('upload_files'); 
    303         $role->add_cap('unfiltered_html'); 
    304         $role->add_cap('edit_posts'); 
    305         $role->add_cap('edit_others_posts'); 
    306         $role->add_cap('edit_published_posts'); 
    307         $role->add_cap('publish_posts'); 
    308         $role->add_cap('edit_pages'); 
    309         $role->add_cap('read'); 
    310         $role->add_cap('level_7'); 
    311         $role->add_cap('level_6'); 
    312         $role->add_cap('level_5'); 
    313         $role->add_cap('level_4'); 
    314         $role->add_cap('level_3'); 
    315         $role->add_cap('level_2'); 
    316         $role->add_cap('level_1'); 
    317         $role->add_cap('level_0'); 
    318  
    319         // Add caps for Author role 
    320         $role = get_role('author'); 
    321         $role->add_cap('upload_files'); 
    322         $role->add_cap('edit_posts'); 
    323         $role->add_cap('edit_published_posts'); 
    324         $role->add_cap('publish_posts'); 
    325         $role->add_cap('read'); 
    326         $role->add_cap('level_2'); 
    327         $role->add_cap('level_1'); 
    328         $role->add_cap('level_0'); 
    329  
    330         // Add caps for Contributor role 
    331         $role = get_role('contributor'); 
    332         $role->add_cap('edit_posts'); 
    333         $role->add_cap('read'); 
    334         $role->add_cap('level_1'); 
    335         $role->add_cap('level_0'); 
    336  
    337         // Add caps for Subscriber role 
    338         $role = get_role('subscriber'); 
    339         $role->add_cap('read'); 
    340         $role->add_cap('level_0'); 
    341 } 
    342  
    343 function populate_roles_210() { 
    344         $roles = array('administrator', 'editor'); 
    345         foreach ($roles as $role) { 
    346                 $role = get_role($role); 
    347                 if ( empty($role) ) 
    348                         continue; 
    349  
    350                 $role->add_cap('edit_others_pages'); 
    351                 $role->add_cap('edit_published_pages'); 
    352                 $role->add_cap('publish_pages'); 
    353                 $role->add_cap('delete_pages'); 
    354                 $role->add_cap('delete_others_pages'); 
    355                 $role->add_cap('delete_published_pages'); 
    356                 $role->add_cap('delete_posts'); 
    357                 $role->add_cap('delete_others_posts'); 
    358                 $role->add_cap('delete_published_posts'); 
    359                 $role->add_cap('delete_private_posts'); 
    360                 $role->add_cap('edit_private_posts'); 
    361                 $role->add_cap('read_private_posts'); 
    362                 $role->add_cap('delete_private_pages'); 
    363                 $role->add_cap('edit_private_pages'); 
    364                 $role->add_cap('read_private_pages'); 
    365         } 
    366  
    367         $role = get_role('administrator'); 
    368         if ( ! empty($role) ) { 
    369                 $role->add_cap('delete_users'); 
    370                 $role->add_cap('create_users'); 
    371         } 
    372  
    373         $role = get_role('author'); 
    374         if ( ! empty($role) ) { 
    375                 $role->add_cap('delete_posts'); 
    376                 $role->add_cap('delete_published_posts'); 
    377         } 
    378  
    379         $role = get_role('contributor'); 
    380         if ( ! empty($role) ) { 
    381                 $role->add_cap('delete_posts'); 
    382         } 
    383 } 
    384  
    385 function populate_roles_230() { 
    386         $role = get_role( 'administrator' ); 
    387  
    388         if ( !empty( $role ) ) { 
    389                 $role->add_cap( 'unfiltered_upload' ); 
    390         } 
    391 } 
    392  
    393250?> 
  • wordpress/wp-admin/includes/upgrade.php

     
    1313        wp_cache_flush(); 
    1414        make_db_current_silent(); 
    1515        populate_options(); 
    16         populate_roles(); 
    1716 
    1817        update_option('blogname', $blog_title); 
    1918        update_option('admin_email', $user_email); 
     
    409408function upgrade_160() { 
    410409        global $wpdb, $wp_current_db_version; 
    411410 
    412         populate_roles_160(); 
    413  
    414411        $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); 
    415412        foreach ( $users as $user ) : 
    416413                if ( !empty( $user->user_firstname ) ) 
     
    508505                } 
    509506        } 
    510507 
    511         if ( $wp_current_db_version < 3845 ) { 
    512                 populate_roles_210(); 
    513         } 
    514  
    515508        if ( $wp_current_db_version < 3531 ) { 
    516509                // Give future posts a post_status of future. 
    517510                $now = gmdate('Y-m-d H:i:59'); 
     
    527520function upgrade_230() { 
    528521        global $wp_current_db_version, $wpdb; 
    529522 
    530         if ( $wp_current_db_version < 5200 ) { 
    531                 populate_roles_230(); 
    532         } 
    533  
    534523        // Convert categories to terms. 
    535524        $tt_ids = array(); 
    536525        $have_tags = false;