diff --git a/drupalchat.admin.inc b/drupalchat.admin.inc index 216d9ec..9cdce71 100644 --- a/drupalchat.admin.inc +++ b/drupalchat.admin.inc @@ -424,7 +424,9 @@ function drupalchat_settings_form($form, &$form_state) { $form['drupalchat_chatlist_cont']['drupalchat_rel']['#options'][DRUPALCHAT_REL_FF] = t('Flag Friend module'); } if (module_exists('og')) { - $form['drupalchat_chatlist_cont']['drupalchat_rel']['#options'][DRUPALCHAT_REL_OG] = t('Organic Groups module'); + $form['drupalchat_chatlist_cont']['drupalchat_rel']['#options'][DRUPALCHAT_REL_OG] = t('Organic Group members as buddies'); + $form['drupalchat_chatlist_cont']['drupalchat_rel']['#options'][DRUPALCHAT_REL_OG_CHATROOM] = t('Organic Groups as chatrooms'); + $form['drupalchat_chatlist_cont']['drupalchat_rel']['#options'][DRUPALCHAT_REL_OG_AND_CHATROOM] = t('Organic Group members as buddies and each og as chatroom'); } $form['drupalchat_chatlist_cont']['drupalchat_ur_name'] = array( '#type' => 'textfield', diff --git a/drupalchat.module b/drupalchat.module index e9a0d15..a368722 100644 --- a/drupalchat.module +++ b/drupalchat.module @@ -17,7 +17,9 @@ define('DRUPALCHAT_USER_IDLE', 2); define('DRUPALCHAT_REL_AUTH', 0); define('DRUPALCHAT_REL_UR', 1); define('DRUPALCHAT_REL_FF', 2); -define('DRUPALCHAT_REL_OG', 3); +define('DRUPALCHAT_REL_OG', 3); // Only og members as buddies +define('DRUPALCHAT_REL_OG_CHATROOM', 4); // Each og as a separate chatroom +define('DRUPALCHAT_REL_OG_AND_CHATROOM', 5); // Og members as buddies as well as each og as a separate chatroom define('DRUPALCHAT_EXTERNAL_HOST', 'http://api'.variable_get('drupalchat_ext_d_i','3').'.iflychat.com'); define('DRUPALCHAT_EXTERNAL_PORT', '80'); @@ -934,6 +936,32 @@ function _drupalchat_buddylist($uid) { $uid == $friend->uid ? $users[] = $friend->friend_uid : $users[] = $friend->uid; } } + elseif ($drupalchat_rel == DRUPALCHAT_REL_OG || $drupalchat_rel == DRUPALCHAT_REL_OG_CHATROOM) { + $user = user_load($uid); + + // Create an array of all groups this user belongs to + $groups = field_get_items('user', $user, OG_AUDIENCE_FIELD); + $og_array = array(); + foreach ($groups as $group) { + $og_array[] = $group['target_id']; + } + + // Query the database for all users belonging to those groups + if (!empty($og_array)) { + $query = db_select('og_membership', 'ogm'); + $query + ->fields('ogm', array('etid')) + ->condition('entity_type', 'user') + ->condition('gid', $og_array, 'IN') + ->condition('etid', $uid, '<>') + ->distinct(); + $results = $query->execute()->fetchAllAssoc('etid'); + } + // Create a flat array of user IDs + foreach ($results as $member) { + $users[] = $member->etid; + } + } return $users; } @@ -947,7 +975,31 @@ function _drupalchat_buddylist_online($buddylist) { $users['c-0']['p'] = $base_url . '/' . drupal_get_path('module', 'drupalchat') . '/themes/' . variable_get('drupalchat_theme', 'light') . '/images/default_room.png'; } } - if (variable_get('drupalchat_rel', DRUPALCHAT_REL_AUTH) > DRUPALCHAT_REL_AUTH) { + if (variable_get('drupalchat_rel', DRUPALCHAT_REL_AUTH) == DRUPALCHAT_REL_OG_CHATROOM || variable_get('drupalchat_rel', DRUPALCHAT_REL_AUTH) == DRUPALCHAT_REL_OG_AND_CHATROOM) { + $u = user_load($user->uid); + $groups = field_get_items('user', $u, OG_AUDIENCE_FIELD); + + $og_array = array(); + foreach ($groups as $group) { + $og_array[] = $group['target_id']; + } + if(!empty($og_array)) { + $groups = db_select('node', 'n') + ->fields('n', array('nid', 'title')) + ->condition('nid', $og_array, 'IN') + ->execute() + ->fetchAllAssoc('nid'); + $count = 1; + foreach ($groups as $group) { + $users['c-' . $count] = array('name' => t($group->title), 'status' => '1'); + if(variable_get('drupalchat_user_picture', 1) == 1) { + $users['c-' . $count]['p'] = $base_url . '/' . drupal_get_path('module', 'drupalchat') . '/themes/' . variable_get('drupalchat_theme', 'light') . '/images/default_room.png'; + } + $count++; + } + } + } + if (variable_get('drupalchat_rel', DRUPALCHAT_REL_AUTH) != DRUPALCHAT_REL_AUTH) { // Return empty on an empty buddylist if (empty($buddylist)) { $users['total'] = 0;