Skip to:
Content

BuddyPress.org

Changeset 540 for trunk/bp-groups.php


Ignore:
Timestamp:
11/13/2008 11:20:15 PM (17 years ago)
Author:
apeatling
Message:

Added ability for group admins to:

  • Promote users to moderators
  • Demote users to regular group members
  • Ban and kick users from a group
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-groups.php

    r527 r540  
    33
    44define ( 'BP_GROUPS_IS_INSTALLED', 1 );
    5 define ( 'BP_GROUPS_VERSION', '0.2.3' );
     5define ( 'BP_GROUPS_VERSION', '0.2.5' );
    66
    77include_once( 'bp-groups/bp-groups-classes.php' );
     
    1212include_once( 'bp-groups/bp-groups-notifications.php' );
    1313include_once( 'bp-groups/bp-groups-admin.php' );
    14 
    15 /*include_once( 'bp-messages/bp-groups-admin.php' );*/
    1614
    1715/**************************************************************************
     
    5452            inviter_id int(11) NOT NULL,
    5553            is_admin tinyint(1) NOT NULL DEFAULT '0',
     54            is_mod tinyint(1) NOT NULL DEFAULT '0',
    5655            user_title varchar(100) NOT NULL,
    5756            date_modified datetime NOT NULL,
    5857            comments longtext NOT NULL,
    5958            is_confirmed tinyint(1) NOT NULL DEFAULT '0',
     59            is_banned tinyint(1) NOT NULL DEFAULT '0',
    6060            KEY group_id (group_id),
     61            KEY is_admin (is_admin),
     62            KEY is_mod (is_mod),
    6163            KEY user_id (user_id),
    6264            KEY inviter_id (inviter_id),
     
    177179            $bp['is_item_admin'] = groups_is_user_admin( $bp['loggedin_userid'], $group_obj->id );
    178180       
     181        /* If the user is not an admin, check if they are a moderator */
     182        if ( !$bp['is_item_admin'] )
     183            $bp['is_item_mod'] = groups_is_user_mod( $bp['loggedin_userid'], $group_obj->id );
     184       
    179185        /* Is the logged in user a member of the group? */
    180186        $is_member = ( groups_is_user_member( $bp['loggedin_userid'], $group_obj->id ) ) ? true : false;
     
    228234            bp_core_add_subnav_item( $bp['groups']['slug'], 'home', __('Home', 'buddypress'), $group_link, 'groups_screen_group_home', 'group-home' );
    229235           
    230             // If the user is a group administrator, then show the group admin nav item */
    231             if ( $bp['is_item_admin'] )
    232                 bp_core_add_subnav_item( $bp['groups']['slug'], 'admin', __('Admin', 'buddypress'), $group_link , 'groups_screen_group_admin', 'group-admin', $bp['is_item_admin'] );
     236            // If the user is a group mod or more, then show the group admin nav item */
     237            if ( $bp['is_item_mod'] || $bp['is_item_admin'] )
     238                bp_core_add_subnav_item( $bp['groups']['slug'], 'admin', __('Admin', 'buddypress'), $group_link , 'groups_screen_group_admin', 'group-admin', ( $bp['is_item_admin'] + (int)$bp['is_item_mod'] ) );
    233239           
    234240            // If this is a closed group, and the user is not a member, show a "Request Membership" nav item.
     
    516522    if ( $bp['current_component'] == $bp['groups']['slug'] && $bp['action_variables'][0] == 'edit-details' ) {
    517523   
    518         if ( !$bp['is_item_admin'] )
     524        if ( !$bp['is_item_mod'] )
    519525            return false;
    520526       
     
    564570}
    565571add_action( 'wp', 'groups_screen_group_admin_settings', 4 );
     572
     573function groups_screen_group_admin_manage_members() {
     574    global $bp, $group_obj;
     575
     576    if ( $bp['current_component'] == $bp['groups']['slug'] && $bp['action_variables'][0] == 'manage-members' ) {
     577       
     578        if ( !$bp['is_item_admin'] )
     579            return false;
     580       
     581        if ( $bp['action_variables'][1] == 'promote' && is_numeric( $bp['action_variables'][2] ) ) {
     582            $user_id = $bp['action_variables'][2];
     583           
     584            // Promote a user.
     585            if ( !groups_promote_member( $user_id, $group_obj->id ) ) {
     586                bp_core_add_message( __( 'There was an error when promoting that user, please try again', 'buddypress' ), 'error' );
     587            } else {
     588                bp_core_add_message( __( 'User promoted successfully', 'buddypress' ) );
     589            }
     590           
     591            do_action( 'bp_groups_promoted_member', $user_id, $group_obj->id );
     592           
     593            bp_core_redirect( site_url() . '/' . $bp['current_component'] . '/' . $bp['current_item'] . '/admin/manage-members' );
     594        }
     595       
     596        if ( $bp['action_variables'][1] == 'demote' && is_numeric( $bp['action_variables'][2] ) ) {
     597            $user_id = $bp['action_variables'][2];
     598           
     599            // Demote a user.
     600            if ( !groups_demote_member( $user_id, $group_obj->id ) ) {
     601                bp_core_add_message( __( 'There was an error when demoting that user, please try again', 'buddypress' ), 'error' );
     602            } else {
     603                bp_core_add_message( __( 'User demoted successfully', 'buddypress' ) );
     604            }
     605
     606            do_action( 'bp_groups_demoted_member', $user_id, $group_obj->id );
     607           
     608            bp_core_redirect( site_url() . '/' . $bp['current_component'] . '/' . $bp['current_item'] . '/admin/manage-members' );
     609        }
     610       
     611        if ( $bp['action_variables'][1] == 'ban' && is_numeric( $bp['action_variables'][2] ) ) {
     612            $user_id = $bp['action_variables'][2];
     613           
     614            // Ban a user.
     615            if ( !groups_ban_member( $user_id, $group_obj->id ) ) {
     616                bp_core_add_message( __( 'There was an error when banning that user, please try again', 'buddypress' ), 'error' );
     617            } else {
     618                bp_core_add_message( __( 'User banned successfully', 'buddypress' ) );
     619            }
     620
     621            do_action( 'bp_groups_banned_member', $user_id, $group_obj->id );
     622           
     623            bp_core_redirect( site_url() . '/' . $bp['current_component'] . '/' . $bp['current_item'] . '/admin/manage-members' );
     624        }
     625       
     626        if ( $bp['action_variables'][1] == 'unban' && is_numeric( $bp['action_variables'][2] ) ) {
     627            $user_id = $bp['action_variables'][2];
     628           
     629            // Remove a ban for user.
     630            if ( !groups_unban_member( $user_id, $group_obj->id ) ) {
     631                bp_core_add_message( __( 'There was an error when unbanning that user, please try again', 'buddypress' ), 'error' );
     632            } else {
     633                bp_core_add_message( __( 'User ban removed successfully', 'buddypress' ) );
     634            }
     635
     636            do_action( 'bp_groups_unbanned_member', $user_id, $group_obj->id );
     637           
     638            bp_core_redirect( site_url() . '/' . $bp['current_component'] . '/' . $bp['current_item'] . '/admin/manage-members' );
     639        }
     640       
     641        bp_catch_uri( 'groups/admin/manage-members' );
     642    }
     643}
     644add_action( 'wp', 'groups_screen_group_admin_manage_members', 4 );
    566645
    567646
     
    685764       
    686765    // user wants to join a group
    687     if ( !groups_is_user_member( $bp['loggedin_userid'], $group_obj->id ) ) {
     766    if ( !groups_is_user_member( $bp['loggedin_userid'], $group_obj->id ) && !groups_is_user_banned( $bp['loggedin_userid'], $group_obj->id ) ) {
    688767        if ( !groups_join_group($group_obj->id) ) {
    689             bp_core_add_message( __('There was an error joining the group. Please try again.', 'buddypress'), 'error' );
     768            bp_core_add_message( __('There was an error joining the group.', 'buddypress'), 'error' );
    690769        } else {
    691770            bp_core_add_message( __('You joined the group!', 'buddypress') );
     
    10831162}
    10841163
     1164function groups_get_slug( $group_id ) {
     1165    $group = new BP_Groups_Group( $group_id, false, false );
     1166    return $group->slug;
     1167}
     1168
    10851169function groups_is_user_admin( $user_id, $group_id ) {
    10861170    return BP_Groups_Member::check_is_admin( $user_id, $group_id );
    10871171}
    10881172
     1173function groups_is_user_mod( $user_id, $group_id ) {
     1174    return BP_Groups_Member::check_is_mod( $user_id, $group_id );
     1175}
     1176
    10891177function groups_is_user_member( $user_id, $group_id ) {
    10901178    return BP_Groups_Member::check_is_member( $user_id, $group_id );
     1179}
     1180
     1181function groups_is_user_banned( $user_id, $group_id ) {
     1182    return BP_Groups_Member::check_is_banned( $user_id, $group_id );
    10911183}
    10921184
     
    12141306}
    12151307
    1216 function groups_get_group_admin( $group_id ) {
    1217     return BP_Groups_Member::get_group_administrator_id( $group_id );
     1308function groups_get_group_admins( $group_id ) {
     1309    return BP_Groups_Member::get_group_administrator_ids( $group_id );
     1310}
     1311
     1312function groups_get_group_mods( $group_id ) {
     1313    return BP_Groups_Member::get_group_moderator_ids( $group_id );
     1314}
     1315
     1316function groups_get_group_users( $group_id, $limit = false, $page = false ) {
     1317    return BP_Groups_Member::get_all_for_group( $group_id, $limit, $page );
    12181318}
    12191319
    12201320function groups_is_group_admin( $user_id, $group_id ) {
    12211321    return BP_Groups_Member::check_is_admin( $user_id, $group_id );
     1322}
     1323
     1324function groups_is_group_mod( $user_id, $group_id ) {
     1325    return BP_Groups_Member::check_is_mod( $user_id, $group_id );
    12221326}
    12231327
     
    12841388   
    12851389    return true;
     1390}
     1391
     1392function groups_promote_member( $user_id, $group_id ) {
     1393    global $bp;
     1394   
     1395    if ( !$bp['is_item_admin'] )
     1396        return false;
     1397       
     1398    $member = new BP_Groups_Member( $user_id, $group_id );
     1399    return $member->promote();
     1400}
     1401
     1402function groups_demote_member( $user_id, $group_id ) {
     1403    global $bp;
     1404   
     1405    if ( !$bp['is_item_admin'] )
     1406        return false;
     1407       
     1408    $member = new BP_Groups_Member( $user_id, $group_id );
     1409    return $member->demote();
     1410}
     1411
     1412function groups_ban_member( $user_id, $group_id ) {
     1413    global $bp;
     1414   
     1415    if ( !$bp['is_item_admin'] )
     1416        return false;
     1417       
     1418    $member = new BP_Groups_Member( $user_id, $group_id );
     1419    return $member->ban();
     1420}
     1421
     1422function groups_unban_member( $user_id, $group_id ) {
     1423    global $bp;
     1424   
     1425    if ( !$bp['is_item_admin'] )
     1426        return false;
     1427       
     1428    $member = new BP_Groups_Member( $user_id, $group_id );
     1429    return $member->unban();
    12861430}
    12871431
     
    13001444   
    13011445    if ( $requesting_user->save() ) {
    1302         $admin = groups_get_group_admin( $group_id );
    1303        
    1304         // Saved okay, now send the email notification
    1305         groups_notification_new_membership_request( $requesting_user_id, $admin->user_id, $group_id, $requesting_user->id );
    1306        
    1307         do_action( 'bp_groups_group_membership_requested', $requesting_user_id, $admin->user_id, $group_id, $requesting_user->id );
     1446        $admins = groups_get_group_admins( $group_id );
     1447       
     1448        for ( $i = 0; $i < count( $admins ); $i++ ) {
     1449            // Saved okay, now send the email notification
     1450            groups_notification_new_membership_request( $requesting_user_id, $admins[$i]->user_id, $group_id, $requesting_user->id );
     1451        }
     1452       
     1453        do_action( 'bp_groups_group_membership_requested', $requesting_user_id, $admins, $group_id, $requesting_user->id );
    13081454   
    13091455        return true;
     
    13921538    return BP_Groups_Group::get_random();
    13931539}
    1394 
    1395 
    13961540
    13971541//
Note: See TracChangeset for help on using the changeset viewer.