Skip to:
Content

bbPress.org

Changeset 4297


Ignore:
Timestamp:
11/02/2012 06:00:53 PM (12 years ago)
Author:
johnjamesjacoby
Message:

Capabilities:

  • Update bbp_set_user_role() and bbp_get_user_role() to only work with bbPress forums roles.
  • See #1939.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/users/functions.php

    r4289 r4297  
    13761376 * @uses bbp_get_user_id() To get the user id
    13771377 * @uses get_userdata() To get the user data
    1378  * @uses apply_filters() Calls 'bbp_get_user_role' with the
    1379  *                        role and user id
     1378 * @uses apply_filters() Calls 'bbp_set_user_role' with the role and user id
    13801379 * @return string
    13811380 */
    1382 function bbp_set_user_role( $user_id = 0, $new_role = '', $context = '' ) {
     1381function bbp_set_user_role( $user_id = 0, $new_role = '' ) {
    13831382
    13841383    // Validate user id
    13851384    $user_id = bbp_get_user_id( $user_id, false, false );
    1386     if ( empty( $user_id ) )
    1387         return false;
    1388 
    1389     // Get userdata
    1390     $user = get_userdata( $user_id );
    1391 
    1392     // Get the user's main role
    1393     switch ( strtolower( $context ) ) {
    1394 
    1395         // bbPress context
    1396         case 'forum'     :
    1397         case 'forums'    :
    1398         case 'bbpress'   :         
    1399             $forum_roles = array_intersect( array_values( $user->roles ), array_keys( bbp_get_forums_editable_roles() ) );
    1400 
    1401             foreach ( $forum_roles as $forum_role ) {
    1402                 $user->remove_role( $forum_role );
     1385    $user    = get_userdata( $user_id );
     1386
     1387    // User exists
     1388    if ( !empty( $user ) ) {
     1389
     1390        // Remove previous forum roles if any exist
     1391        $roles = bbp_get_user_role( $user_id );
     1392
     1393        if ( !empty( $roles ) ) {
     1394            foreach ( $roles as $role ) {
     1395                $user->remove_role( $role );
    14031396            }
    1404 
    1405             $user->add_role( $new_role );
    1406 
    1407             break;
    1408 
    1409         // WordPress core context
    1410         case ''          :
    1411         case 'blog'      :
    1412         case 'wordpress' :
    1413         default          :
    1414             $blog_roles = array_intersect( array_values( $user->roles ), array_keys( get_editable_roles() ) );
    1415 
    1416             foreach ( $blog_roles as $blog_role ) {
    1417                 $user->remove_role( $blog_role );
    1418             }
    1419 
    1420             $user->add_role( $new_role );
    1421 
    1422             break;
    1423     }
    1424 
    1425     return apply_filters( 'bbp_get_user_role', $new_role, $context, $user_id, $user );
     1397        }
     1398
     1399        // Add new forums role
     1400        $user->add_role( $new_role );
     1401
     1402    // User does don exist so return false
     1403    } else {
     1404        $new_role = false;
     1405    }
     1406
     1407    return apply_filters( 'bbp_get_user_role', $new_role, $user_id, $user );
    14261408}
    14271409
     
    14341416 * @uses bbp_get_user_id() To get the user id
    14351417 * @uses get_userdata() To get the user data
    1436  * @uses apply_filters() Calls 'bbp_get_user_role' with the
    1437  *                        role and user id
     1418 * @uses apply_filters() Calls 'bbp_get_user_role' with the role and user id
    14381419 * @return string
    14391420 */
    1440 function bbp_get_user_role( $user_id = 0, $context = '' ) {
     1421function bbp_get_user_role( $user_id = 0 ) {
    14411422
    14421423    // Validate user id
    14431424    $user_id = bbp_get_user_id( $user_id, false, false );
    1444     if ( empty( $user_id ) )
    1445         return false;
    1446 
    1447     // Get userdata
    1448     $user = get_userdata( $user_id );
    1449 
    1450     // User has no roles so set as empty string
    1451     if ( empty( $user->roles ) ) {
    1452 
    1453         // Assume the anonymous role if looking for a bbPress role
    1454         if ( in_array( $context, array( 'forum', 'forums', 'bbpress' ) ) ) {
    1455             $role = bbp_get_spectator_role();
    1456 
    1457         // Otherwise trust that there is no role
    1458         } else {
    1459             $role = '';
     1425    $user    = get_userdata( $user_id );
     1426    $role    = false;
     1427
     1428    // User has roles so lets
     1429    if ( ! empty( $user->roles ) ) {
     1430        $roles = array_intersect( array_values( $user->roles ), array_keys( bbp_get_editable_roles() ) );
     1431
     1432        // If there's a role in the array, use the first one
     1433        if ( !empty( $roles ) ) {
     1434            $role = array_shift( array_values( $role ) );
    14601435        }
    1461 
    1462     // User has roles so lets
    1463     } else {
    1464 
    1465         // Get the user's main role
    1466         switch ( strtolower( $context ) ) {
    1467 
    1468             // bbPress context
    1469             case 'forum'     :
    1470             case 'forums'    :
    1471             case 'bbpress'   :
    1472                 $role = array_intersect( array_values( $user->roles ), array_keys( bbp_get_forums_editable_roles() ) );
    1473 
    1474                 // If there's a role in the array, use the first one
    1475                 if ( !empty( $role ) ) {
    1476                     $role = array_shift( array_values( $role ) );
    1477 
    1478                 // Otherwise, give them the anonymous role
    1479                 } else {
    1480                     $role = bbp_get_spectator_role();
    1481                 }
    1482 
    1483                 break;
    1484 
    1485             // WordPress core context
    1486             case ''          :
    1487             case 'blog'      :
    1488             case 'wordpress' :
    1489             default          :
    1490                 $role = array_intersect( array_values( $user->roles ), array_keys( get_editable_roles() ) );
    1491 
    1492                 // If there's a role in the array, use the first one
    1493                 if ( !empty( $role ) ) {
    1494                     $role = array_shift( array_values( $role ) );
    1495                 }
    1496 
    1497                 break;
    1498         }
    1499     }
    1500 
    1501     return apply_filters( 'bbp_get_user_role', $role, $context, $user_id, $user );
     1436    }
     1437
     1438    return apply_filters( 'bbp_get_user_role', $role, $user_id, $user );
    15021439}
    15031440
Note: See TracChangeset for help on using the changeset viewer.