Skip to:
Content

bbPress.org


Ignore:
Timestamp:
09/17/2012 12:03:03 AM (13 years ago)
Author:
johnjamesjacoby
Message:

Capabilities:

  • Remove experimental Bozo functionality. We can use the 'participate' to prevent forum participation without creating topics or replies.
  • Introduce functions to reset, save, and remove user capabilities.
  • Use these functions in both theme-side and admin-side profiles.
  • Add capabilities to bbp-twentyten theme. This will be moved into the stand-alone bbp-twentyten theme soon'ish.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bbp-includes/bbp-core-caps.php

    r4206 r4222  
    115115        'moderate',
    116116        'throttle',
    117         'view_trash',
    118         'bozo'
     117        'view_trash'
    119118    ) );
    120119}
     
    277276                $retval = __( 'View items in forum trash', 'bbpress' );
    278277                break;
    279             case 'bozo' :
    280                 $retval = __( 'User is a forum bozo', 'bbpress' );
    281                 break;
    282278
    283279            // Forum caps
     
    426422        /** General ***********************************************************/
    427423
    428         case 'bozo' :
    429 
    430             // Inactive users are not bozos
     424        /**
     425         * The 'participate' capability is similar to WordPress's 'read' cap,
     426         * in that it is the minimum required cap to perform any other bbPress
     427         * related thing.
     428         */
     429        case 'participate' :
     430
     431            // Inactive users cannot participate
    431432            if ( bbp_is_user_inactive( $user_id ) ) {
    432433                $caps = array( 'do_not_allow' );
    433434
    434             // Moderators are not bozos
     435            // Moderators are always participants
    435436            } elseif ( user_can( $user_id, 'moderate' ) ) {
     437                $caps = array( $cap );
     438
     439            // Map to read
     440            } else {
     441                $caps = array( 'read' );
     442            }
     443
     444            break;
     445           
     446        case 'moderate' :
     447
     448            // All admins are administrators
     449            if ( user_can( $user_id, 'administrator' ) ) {
     450                $caps = array( 'read' );
     451            }
     452            break;
     453
     454        /** Reading ***********************************************************/
     455
     456        case 'read_private_forums' :
     457        case 'read_hidden_forums'  :
     458
     459            // Non-participants cannot never read private/hidden forums
     460            if ( ! user_can( $user_id, 'participate' ) ) {
    436461                $caps = array( 'do_not_allow' );
    437             }
    438 
    439             break;
    440 
    441         /** Reading ***********************************************************/
     462
     463            // Moderators can always read private/hidden forums
     464            } elseif ( user_can( $user_id, 'moderate' ) ) {
     465                $caps = array( $cap );
     466            }
     467
     468            break;
    442469
    443470        case 'read_forum' :
     
    445472        case 'read_reply' :
    446473
    447             // Get the post
    448             $_post = get_post( $args[0] );
    449             if ( !empty( $_post ) ) {
    450 
    451                 // Get caps for post type object
    452                 $post_type = get_post_type_object( $_post->post_type );
    453                 $caps      = array();
    454 
    455                 // Post is public
    456                 if ( bbp_get_public_status_id() == $_post->post_status ) {
    457                     $caps[] = 'read';
    458 
    459                 // User is author so allow read
    460                 } elseif ( (int) $user_id == (int) $_post->post_author ) {
    461                     $caps[] = 'read';
    462 
    463                 // Unknown so map to private posts
    464                 } else {
    465                     $caps[] = $post_type->cap->read_private_posts;
     474            // User cannot participate
     475            if ( ! user_can( $user_id, 'participate' ) ) {
     476                $caps = array( 'do_not_allow' );
     477
     478            // Do some post ID based logic
     479            } else {
     480           
     481                // Get the post
     482                $_post = get_post( $args[0] );
     483                if ( !empty( $_post ) ) {
     484
     485                    // Get caps for post type object
     486                    $post_type = get_post_type_object( $_post->post_type );
     487
     488                    // Post is public
     489                    if ( bbp_get_public_status_id() == $_post->post_status ) {
     490                        $caps = array( 'particpate' );
     491
     492                    // User is author so allow read
     493                    } elseif ( (int) $user_id == (int) $_post->post_author ) {
     494                        $caps = array( 'participate' );
     495
     496                    // Unknown so map to private posts
     497                    } else {
     498                        $caps = array( $post_type->cap->read_private_forums );
     499                    }
    466500                }
    467501            }
     
    475509        case 'publish_replies' :
    476510
    477             // Add do_not_allow cap if user is spam or deleted
    478             if ( bbp_is_user_inactive( $user_id ) )
     511            // Non participants cannot participate
     512            if ( ! user_can( $user_id, 'participate' ) ) {
    479513                $caps = array( 'do_not_allow' );
    480514
     515            // Moderators can always edit
     516            } elseif ( user_can( $user_id, 'moderate' ) ) {
     517                $caps = array( $cap );
     518            }
     519
    481520            break;
    482521
     
    484523
    485524        // Used primarily in wp-admin
    486         case 'edit_forums' :
    487         case 'edit_topics' :
    488         case 'edit_replies' :
    489 
    490             // Add do_not_allow cap if user is spam or deleted
    491             if ( bbp_is_user_inactive( $user_id ) )
     525        case 'edit_forums'         :
     526        case 'edit_topics'         :
     527        case 'edit_replies'        :
     528        case 'edit_others_topics'  :
     529        case 'edit_others_replies' :
     530
     531            // Moderators can always edit
     532            if ( ! user_can( $user_id, 'participate' ) ) {
    492533                $caps = array( 'do_not_allow' );
     534
     535            // Moderators can always edit forum content
     536            } elseif ( user_can( $user_id, 'moderate' ) ) {
     537                $caps = array( $cap );
     538            }
    493539
    494540            break;
     
    567613                    $caps[] = 'do_not_allow';
    568614
     615                // Moderators can always edit forum content
     616                } elseif ( user_can( $user_id, 'moderate' ) ) {
     617                    $caps[] = 'participate';
     618
    569619                // Unknown so map to delete_others_posts
    570620                } else {
    571621                    $caps[] = $post_type->cap->delete_others_posts;
    572622                }
     623            }
     624
     625            break;
     626           
     627        // Moderation override
     628        case 'delete_topics'         :
     629        case 'delete_replies'        :
     630        case 'delete_others_topics'  :
     631        case 'delete_others_replies' :
     632
     633            // Moderators can always edit
     634            if ( ! user_can( $user_id, 'participate' ) ) {
     635                $caps = array( 'do_not_allow' );
     636
     637            // Moderators can always edit forum content
     638            } elseif ( user_can( $user_id, 'moderate' ) ) {
     639                $caps = array( $cap );
     640            }
     641
     642            break;
     643           
     644        /** Topic Tags ********************************************************/
     645
     646        case 'manage_topic_tags' :
     647        case 'edit_topic_tags'   :
     648        case 'delete_topic_tags' :
     649        case 'assign_topic_tags' :
     650
     651            // Moderators can always edit
     652            if ( ! user_can( $user_id, 'participate' ) ) {
     653                $caps = array( 'do_not_allow' );
     654
     655            // Moderators can always edit forum content
     656            } elseif ( user_can( $user_id, 'moderate' ) ) {
     657                $caps = array( $cap );
    573658            }
    574659
     
    748833
    749834    return apply_filters( 'bbp_get_caps_for_role', $caps, $role );
     835}
     836
     837/**
     838 * Remove all bbPress capabilities for a given user
     839 *
     840 * @since bbPress (r4221)
     841 *
     842 * @param int $user_id
     843 * @return boolean True on success, false on failure
     844 */
     845function bbp_remove_user_caps( $user_id = 0 ) {
     846
     847    // Bail if no user was passed
     848    if ( empty( $user_id ) )
     849        return false;
     850
     851    // Load up the user
     852    $user = new WP_User( $user_id );
     853
     854    // Remove all caps
     855    foreach ( bbp_get_capability_groups() as $group )
     856        foreach ( bbp_get_capabilities_for_group( $group ) as $capability )
     857            $user->remove_cap( $capability );
     858
     859    // Success
     860    return true;
     861}
     862
     863/**
     864 * Remove all bbPress capabilities for a given user
     865 *
     866 * @since bbPress (r4221)
     867 *
     868 * @param int $user_id
     869 * @return boolean True on success, false on failure
     870 */
     871function bbp_reset_user_caps( $user_id = 0 ) {
     872
     873    // Bail if no user was passed
     874    if ( empty( $user_id ) )
     875        return false;
     876
     877    // Bail if not a member of this blog
     878    if ( ! user_can( $user_id, 'read' ) )
     879        return false;
     880
     881    // Remove all caps for user
     882    bbp_remove_user_caps( $user_id );
     883
     884    // Load up the user
     885    $user = new WP_User( $user_id );
     886
     887    // User has no role so bail
     888    if ( ! isset( $user->roles ) )
     889        return false;
     890
     891    // Use first user role
     892    $caps = bbp_get_caps_for_role( array_shift( $user->roles ) );
     893
     894    // Add caps for the first role
     895    foreach ( $caps as $cap )
     896        $user->add_cap( $cap, true );
     897
     898    // Success
     899    return true;
     900}
     901
     902/**
     903 * Save all bbPress capabilities for a given user
     904 *
     905 * @since bbPress (r4221)
     906 *
     907 * @param type $user_id
     908 * @return boolean
     909 */
     910function bbp_save_user_caps( $user_id = 0 ) {
     911
     912    // Bail if no user was passed
     913    if ( empty( $user_id ) )
     914        return false;
     915
     916    // Bail if not a member of this blog
     917    if ( ! user_can( $user_id, 'read' ) )
     918        return false;
     919
     920    // Load up the user
     921    $user = new WP_User( $user_id );
     922
     923    // Loop through capability groups
     924    foreach ( bbp_get_capability_groups() as $group ) {
     925        foreach ( bbp_get_capabilities_for_group( $group ) as $capability ) {
     926
     927            // Maybe add cap
     928            if ( ! empty( $_POST['_bbp_' . $capability] ) && ! $user->has_cap( $capability ) ) {
     929                $user->add_cap( $capability, true );
     930
     931            // Maybe remove cap
     932            } elseif ( empty( $_POST['_bbp_' . $capability] ) && $user->has_cap( $capability ) ) {
     933                $user->add_cap( $capability, false );
     934            }
     935        }
     936    }
     937
     938    // Success
     939    return true;
    750940}
    751941
Note: See TracChangeset for help on using the changeset viewer.