Skip to:
Content

bbPress.org

Changeset 4297


Ignore:
Timestamp:
11/02/2012 06:00:53 PM (14 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.