Skip to:
Content

bbPress.org


Ignore:
Timestamp:
04/17/2011 04:23:07 AM (15 years ago)
Author:
johnjamesjacoby
Message:

Abstracts the add/remove capability functions to remove duplication. Removes 'edit_users' capability from Forum Moderator role as it's reserved for admin/super admin respectively. Fixes #1488. Props GautamGupta for initial patch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/plugin/bbp-includes/bbp-caps.php

    r2818 r2994  
    2121 */
    2222function bbp_add_roles() {
     23
    2324    // Add the Moderator role and add the default role caps. Mod caps are added by the bbp_add_caps () function
    24     $default =& get_role( get_option( 'default_role' ) );
     25    $default = get_role( get_option( 'default_role' ) );
     26
     27    // Moderators are default role + forum moderating caps in bbp_add_caps()
    2528    add_role( 'bbp_moderator', __( 'Forum Moderator', 'bbpress' ), $default->capabilities );
    2629
     
    4043 */
    4144function bbp_add_caps() {
    42     // Add caps to admin role
    43     if ( $admin =& get_role( 'administrator' ) ) {
    44 
    45         // Forum caps
    46         $admin->add_cap( 'publish_forums'        );
    47         $admin->add_cap( 'edit_forums'           );
    48         $admin->add_cap( 'edit_others_forums'    );
    49         $admin->add_cap( 'delete_forums'         );
    50         $admin->add_cap( 'delete_others_forums'  );
    51         $admin->add_cap( 'read_private_forums'   );
    52 
    53         // Topic caps
    54         $admin->add_cap( 'publish_topics'        );
    55         $admin->add_cap( 'edit_topics'           );
    56         $admin->add_cap( 'edit_others_topics'    );
    57         $admin->add_cap( 'delete_topics'         );
    58         $admin->add_cap( 'delete_others_topics'  );
    59         $admin->add_cap( 'read_private_topics'   );
    60 
    61         // Reply caps
    62         $admin->add_cap( 'publish_replies'       );
    63         $admin->add_cap( 'edit_replies'          );
    64         $admin->add_cap( 'edit_others_replies'   );
    65         $admin->add_cap( 'delete_replies'        );
    66         $admin->add_cap( 'delete_others_replies' );
    67         $admin->add_cap( 'read_private_replies'  );
    68 
    69         // Topic tag caps
    70         $admin->add_cap( 'manage_topic_tags'     );
    71         $admin->add_cap( 'edit_topic_tags'       );
    72         $admin->add_cap( 'delete_topic_tags'     );
    73         $admin->add_cap( 'assign_topic_tags'     );
    74 
    75         // Misc
    76         $admin->add_cap( 'moderate'              );
    77         $admin->add_cap( 'throttle'              );
    78         $admin->add_cap( 'view_trash'            );
    79     }
    80 
    81     // Add caps to moderator role
    82     if ( $mod =& get_role( 'bbp_moderator' ) ) {
    83 
    84         // Topic caps
    85         $mod->add_cap( 'publish_topics'        );
    86         $mod->add_cap( 'edit_topics'           );
    87         $mod->add_cap( 'edit_others_topics'    );
    88         $mod->add_cap( 'delete_topics'         );
    89         $mod->add_cap( 'delete_others_topics'  );
    90         $mod->add_cap( 'read_private_topics'   );
    91 
    92         // Reply caps
    93         $mod->add_cap( 'publish_replies'       );
    94         $mod->add_cap( 'edit_replies'          );
    95         $mod->add_cap( 'edit_others_replies'   );
    96         $mod->add_cap( 'delete_replies'        );
    97         $mod->add_cap( 'delete_others_replies' );
    98         $mod->add_cap( 'read_private_replies'  );
    99 
    100         // Topic tag caps
    101         $mod->add_cap( 'manage_topic_tags'     );
    102         $mod->add_cap( 'edit_topic_tags'       );
    103         $mod->add_cap( 'delete_topic_tags'     );
    104         $mod->add_cap( 'assign_topic_tags'     );
    105 
    106         // Users
    107         $mod->add_cap( 'edit_users'            );
    108 
    109         // Misc
    110         $mod->add_cap( 'moderate'              );
    111         $mod->add_cap( 'throttle'              );
    112         $mod->add_cap( 'view_trash'            );
    113     }
    114 
    115     // Add caps to default role
    116     if ( $default =& get_role( get_option( 'default_role' ) ) ) {
    117 
    118         // Topic caps
    119         $default->add_cap( 'publish_topics'    );
    120         $default->add_cap( 'edit_topics'       );
    121 
    122         // Reply caps
    123         $default->add_cap( 'publish_replies'   );
    124         $default->add_cap( 'edit_replies'      );
    125 
    126         // Topic tag caps
    127         $default->add_cap( 'assign_topic_tags' );
     45    global $wp_roles;
     46
     47    // Loop through available roles
     48    foreach( $wp_roles->roles as $role => $details ) {
     49
     50        // Load this role
     51        $this_role = get_role( $role );
     52
     53        // Loop through caps for this role and remove them
     54        foreach ( bbp_get_caps_for_role( $role ) as $cap ) {
     55            $this_role->add_cap( $cap );
     56        }
    12857    }
    12958
     
    14372 */
    14473function bbp_remove_caps() {
    145     // Remove caps from admin role
    146     if ( $admin =& get_role( 'administrator' ) ) {
    147 
    148         // Forum caps
    149         $admin->remove_cap( 'publish_forums'        );
    150         $admin->remove_cap( 'edit_forums'           );
    151         $admin->remove_cap( 'edit_others_forums'    );
    152         $admin->remove_cap( 'delete_forums'         );
    153         $admin->remove_cap( 'delete_others_forums'  );
    154         $admin->remove_cap( 'read_private_forums'   );
    155 
    156         // Topic caps
    157         $admin->remove_cap( 'publish_topics'        );
    158         $admin->remove_cap( 'edit_topics'           );
    159         $admin->remove_cap( 'edit_others_topics'    );
    160         $admin->remove_cap( 'delete_topics'         );
    161         $admin->remove_cap( 'delete_others_topics'  );
    162         $admin->remove_cap( 'read_private_topics'   );
    163 
    164         // Reply caps
    165         $admin->remove_cap( 'publish_replies'       );
    166         $admin->remove_cap( 'edit_replies'          );
    167         $admin->remove_cap( 'edit_others_replies'   );
    168         $admin->remove_cap( 'delete_replies'        );
    169         $admin->remove_cap( 'delete_others_replies' );
    170         $admin->remove_cap( 'read_private_replies'  );
    171 
    172         // Topic tag caps
    173         $admin->remove_cap( 'manage_topic_tags'     );
    174         $admin->remove_cap( 'edit_topic_tags'       );
    175         $admin->remove_cap( 'delete_topic_tags'     );
    176         $admin->remove_cap( 'assign_topic_tags'     );
    177 
    178         // Misc
    179         $admin->remove_cap( 'moderate'              );
    180         $admin->remove_cap( 'throttle'              );
    181         $admin->remove_cap( 'view_trash'            );
    182     }
    183 
    184     // Remove caps from default role
    185     if ( $default =& get_role( get_option( 'default_role' ) ) ) {
    186 
    187         // Topic caps
    188         $default->remove_cap( 'publish_topics'    );
    189         $default->remove_cap( 'edit_topics'       );
    190 
    191         // Reply caps
    192         $default->remove_cap( 'publish_replies'   );
    193         $default->remove_cap( 'edit_replies'      );
    194 
    195         // Topic tag caps
    196         $default->remove_cap( 'assign_topic_tags' );
     74    global $wp_roles;
     75
     76    // Loop through available roles
     77    foreach( $wp_roles->roles as $role => $details ) {
     78       
     79        // Load this role
     80        $this_role = get_role( $role );
     81
     82        // Loop through caps for this role and remove them
     83        foreach ( bbp_get_caps_for_role( $role ) as $cap ) {
     84            $this_role->remove_cap( $cap );
     85        }
    19786    }
    19887
     
    211100 */
    212101function bbp_remove_roles() {
     102
    213103    // Remove the Moderator role
    214104    remove_role( 'bbp_moderator' );
     
    235125
    236126    switch ( $cap ) {
     127
     128        // Reading
    237129        case 'read_forum' :
    238130        case 'read_topic' :
     
    253145            break;
    254146
     147        // Editing
    255148        case 'edit_forum' :
    256149        case 'edit_topic' :
     
    269162            break;
    270163
     164        // Deleting
    271165        case 'delete_forum' :
    272166
     
    307201 */
    308202function bbp_get_forum_caps() {
     203
    309204    // Forum meta caps
    310205    $caps = array (
     
    325220 */
    326221function bbp_get_topic_caps() {
     222
    327223    // Topic meta caps
    328224    $caps = array (
     
    343239 */
    344240function bbp_get_reply_caps () {
     241
    345242    // Reply meta caps
    346243    $caps = array (
     
    365262 */
    366263function bbp_get_topic_tag_caps () {
     264
    367265    // Topic tag meta caps
    368266    $caps = array (
     
    376274}
    377275
     276
     277/**
     278 * Returns an array of capabilities based on the role that is being requested.
     279 *
     280 * @since bbPress (r2994)
     281 *
     282 * @param string $role Optional. Defaults to The role to load caps for
     283 * @uses apply_filters() Allow return value to be filtered
     284 *
     285 * @return array Capabilities for $role
     286 */
     287function bbp_get_caps_for_role( $role = '' ) {
     288
     289    // Which role are we looking for?
     290    switch ( $role ) {
     291
     292        // Administrator
     293        case 'administrator' :
     294
     295            $caps = array(
     296
     297                // Forum caps
     298                'publish_forums',
     299                'edit_forums',
     300                'edit_others_forums',
     301                'delete_forums',
     302                'delete_others_forums',
     303                'read_private_forums',
     304
     305                // Topic caps
     306                'publish_topics',
     307                'edit_topics',
     308                'edit_others_topics',
     309                'delete_topics',
     310                'delete_others_topics',
     311                'read_private_topics',
     312
     313                // Reply caps
     314                'publish_replies',
     315                'edit_replies',
     316                'edit_others_replies',
     317                'delete_replies',
     318                'delete_others_replies',
     319                'read_private_replies',
     320
     321                // Topic tag caps
     322                'manage_topic_tags',
     323                'edit_topic_tags',
     324                'delete_topic_tags',
     325                'assign_topic_tags',
     326
     327                // Misc
     328                'moderate',
     329                'throttle',
     330                'view_trash'
     331            );
     332
     333            break;
     334
     335        // Moderator
     336        case 'bbp_moderator' :
     337
     338            $caps = array(
     339
     340                // Topic caps
     341                'publish_topics',
     342                'edit_topics',
     343                'edit_others_topics',
     344                'delete_topics',
     345                'delete_others_topics',
     346                'read_private_topics',
     347
     348                // Reply caps
     349                'publish_replies',
     350                'edit_replies',
     351                'edit_others_replies',
     352                'delete_replies',
     353                'delete_others_replies',
     354                'read_private_replies',
     355
     356                // Topic tag caps
     357                'manage_topic_tags',
     358                'edit_topic_tags',
     359                'delete_topic_tags',
     360                'assign_topic_tags',
     361
     362                // Misc
     363                'moderate',
     364                'throttle',
     365                'view_trash',
     366            );
     367
     368            break;
     369
     370        // Other specific roles
     371        case 'editor'      :
     372        case 'author'      :
     373        case 'contributor' :
     374        case 'subscriber'  :
     375        default            :
     376
     377            $caps = array(
     378
     379                // Topic caps
     380                'publish_topics',
     381                'edit_topics',
     382
     383                // Reply caps
     384                'publish_replies',
     385                'edit_replies',
     386
     387                // Topic tag caps
     388                'assign_topic_tags',
     389
     390            );
     391
     392            break;
     393    }
     394
     395    return apply_filters( 'bbp_get_caps_for_role', $caps, $role );
     396}
     397
    378398?>
Note: See TracChangeset for help on using the changeset viewer.