--- buddylistautoadd.module	Fri Nov 16 13:25:02 2007
+++ buddylistautoadd.module	Mon Nov 19 08:18:42 2007
@@ -1,17 +1,18 @@
 <?php
 // $Id: buddylistautoadd.module,v 1.1 2007/04/25 01:38:58 kbahey Exp $
 
-define('BUDDYLISTAUTOADD',           'buddylistautoadd');
-define('BUDDYLISTAUTOADD_USER_NAME', 'buddylistautoadd_user_name');
-define('BUDDYLISTAUTOADD_UID',       'buddylistautoadd_uid');
+define('BUDDYLISTAUTOADD',                'buddylistautoadd');
+define('BUDDYLISTAUTOADD_USER_NAME',      'buddylistautoadd_user_name');
+define('BUDDYLISTAUTOADD_INCLUDED_ROLES', 'buddylistautoadd_included_roles');
+define('BUDDYLISTAUTOADD_UID',            'buddylistautoadd_uid');
 
 function buddylistautoadd_help($section) {
   switch ($section) {
     case 'admin/help#buddylistautoadd':
       return '<p>'. t('Adds a user automatically to the buddy list.') . '</p>';
   }
 }
 
 function buddylistautoadd_menu($may_cache) {
   $items = array();
 
@@ -35,59 +36,110 @@
   return $items;
 }
 
 function buddylistautoadd_admin_settings() {
   $form[BUDDYLISTAUTOADD_USER_NAME] = array(
     '#type'              => 'textfield',
     '#title'             => 'User to auto add',
     '#default_value'     => buddylistautoadd_get_user(),
     '#description'       => t('Select the user that should be added to all other users buddy list'),
     '#autocomplete_path' => 'buddylistautoadd/user/autocomplete',
   );
+	$form[BUDDYLISTAUTOADD_INCLUDED_ROLES] = buddylistautoadd_roles_form();
+		
   return system_settings_form($form);
 }
 
+function buddylistautoadd_roles_form() {
+  $roles = user_roles();
+
+	// Build the array of roles and role ids  
+	foreach($roles as $rid => $role) {
+    // Skip the anonymous role
+		if ($rid != 1) {
+      $arrRoles[$rid] = $role;
+    }
+  }
+	
+	// Build the checkbox group
+	$form[BUDDYLISTAUTOADD_INCLUDED_ROLES] = array(
+  	'#type' => 'checkboxes',
+  	'#title' => t('Roles to participate in buddylist auto add'),
+  	'#default_value' => variable_get(BUDDYLISTAUTOADD_INCLUDED_ROLES, ''),
+  	'#options' => $arrRoles,
+    '#description' => t('Select the roles that will participate in the buddylist autoadd process.  Roles not selected will not have a default buddy'),
+	);
+	
+  return $form;
+}
+
 function buddylistautoadd_get_user() {
   $uid = variable_get(BUDDYLISTAUTOADD_UID, 0);
   $user = user_load(array('uid' => $uid));
   return $user->name;
 }
 
 function buddylistautoadd_list_user($string) {
   $matches = array();
   $result = db_query_range("SELECT name FROM {users} WHERE name LIKE '%s%%'", $string, NULL, 10);
   while ($user = db_fetch_object($result)) {
     $matches[$user->name] = check_plain($user->name);
   }
   print drupal_to_js($matches);
   exit();
 }
 
 function buddylistautoadd_admin_settings_validate($form_id, $form_values) {
-  if (empty($form_values[BUDDYLISTAUTOADD_USER_NAME])) {
+	if (empty($form_values[BUDDYLISTAUTOADD_USER_NAME])) {
     form_set_error('user', t('You must specify a valid user name.'));
     return;
   }
+	
+	// Make sure the user selected at least one role
+	if (empty($form_values[BUDDYLISTAUTOADD_INCLUDED_ROLES])) {
+		form_set_error('user', t('You must select at least one role.'));
+		return;
+	}
+	
   $name = $form_values[BUDDYLISTAUTOADD_USER_NAME];
   if (!$user = db_fetch_object(db_query("SELECT name, uid FROM {users} WHERE name = '%s'", $name))) {
     form_set_error('user', t('%user is not a valid user on this site.', array('%user' => $name)), 'error');
     return;
   }
-  variable_set(BUDDYLISTAUTOADD_UID, $user->uid);
+	
+	variable_set(BUDDYLISTAUTOADD_UID, $user->uid);
+	variable_set(BUDDYLISTAUTOADD_INCLUDED_ROLES, $form_values[BUDDYLISTAUTOADD_INCLUDED_ROLES]);
 }
 
 function buddylistautoadd_user($op, &$edit, &$account, $category = NULL) {
-  switch($op) {
+	switch($op) {
     case 'insert':
       $uid = variable_get(BUDDYLISTAUTOADD_UID, 0);
+			$roles = variable_get(BUDDYLISTAUTOADD_INCLUDED_ROLES, array());
+
       if ($uid) {
+				$boolIsValidRole = false;
+				
         $buddy = user_load(array('uid' => $uid));
-        db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)',
-          $account->uid , $buddy->uid , time());
-				db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)',
-          $buddy->uid , $account->uid , time());
-        drupal_set_message(t('User @name was automatically added to your buddy list',
-          array('@name' => $buddy->name)));
+				
+				// Match up the roles against the role of the new user
+				foreach($account->roles as $rid => $role) {
+					// If the user has a role that is allowed, set a flag
+					if((array_key_exists($rid, $roles)) && ($roles[$rid])){
+						$boolIsValidRole = true;
+						break;
+					}
+				}				
+				
+				// If the user has a valid role, do the auto-add
+				if($boolIsValidRole) {
+					db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)',
+						$account->uid , $buddy->uid , time());
+					db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)',
+						$buddy->uid , $account->uid , time());
+					drupal_set_message(t('User @name was automatically added to your buddy list',
+						array('@name' => $buddy->name)));
+				}
       }
       break;
   }
 }
