Index: advuser.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/advuser/advuser.module,v
retrieving revision 1.13.2.12
diff -u -p -r1.13.2.12 advuser.module
--- advuser.module	27 Jun 2008 15:42:33 -0000	1.13.2.12
+++ advuser.module	3 Jul 2008 17:06:39 -0000
@@ -70,6 +70,12 @@ function advuser_admin($callback_arg = '
       elseif ($_POST['accounts'] && $_POST['operation'] == 'email') {
         $output = drupal_get_form('advuser_multiple_email_confirm');
       } 
+      elseif ($_POST['accounts'] && strpos($_POST['operation'], 'add_og-') !== false) {
+        $output = drupal_get_form('advuser_multiple_add_og_confirm');
+      }
+      elseif ($_POST['accounts'] && strpos($_POST['operation'], 'remove_og-') !== false) {
+        $output = drupal_get_form('advuser_multiple_remove_og_confirm');
+      }
       else {
         $output = drupal_get_form('advuser_filter_form');
         $output .= drupal_get_form('advuser_admin_account');
@@ -293,16 +299,7 @@ function advuser_multiple_delete_confirm
     '#suffix' => '</ul>', 
     '#tree' => TRUE
   );
-  // array_filter returns only elements with TRUE values
-  foreach (array_filter($edit['accounts']) as $uid => $value) {
-    $user = db_result(db_query('SELECT name FROM {users} WHERE uid = %d', $uid));
-    $form['accounts'][$uid] = array(
-      '#type' => 'hidden', 
-      '#value' => $uid, 
-      '#prefix' => '<li>', 
-      '#suffix' => check_plain($user) ."</li>\n"
-    );
-  }
+  _advuser_form_add_accounts($form, $edit);
   $form['operation'] = array('#type' => 'hidden', '#value' => 'delete');
 
   return confirm_form(
@@ -325,7 +322,7 @@ function advuser_multiple_delete_confirm
 }
 
 /**
- * Email functionality
+ * Email and og functionality.
  */
 function advuser_advuser_operations() {
   $operations = array(
@@ -333,6 +330,26 @@ function advuser_advuser_operations() {
     'label' => t('Email selected users')
     )
   );
+
+  // Organic group support.
+  if (module_exists('og')) {
+    $result = db_query('SELECT n.nid, n.title FROM {node} n JOIN {og} og ON og.nid = n.nid');
+    if (db_num_rows($result)) {
+      $add_og = array();
+      $remove_og = array();
+      while( $og = db_fetch_array($result)) {
+        $add_og['add_og-' . $og['nid']] = $og['title'];
+        $remove_og['remove_og-' . $og['nid']] = $og['title'];
+      }
+
+      $og_operations = array(
+        t('Add organic group to selected users ') => array('label' => $add_og), 
+        t('Remove organic group from selected users ') => array('label' => $remove_og),
+      );
+      $operations += $og_operations;
+    }
+  }
+
   return $operations;
 }
 
@@ -340,16 +357,7 @@ function advuser_multiple_email_confirm(
   $edit = $_POST;
 
   $form['accounts'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE);
-  // array_filter returns only elements with TRUE values
-  foreach (array_filter($edit['accounts']) as $uid => $value) {
-    $user = db_result(db_query('SELECT name FROM {users} WHERE uid = %d', $uid));
-    $form['accounts'][$uid] = array(
-      '#type' => 'hidden', 
-      '#value' => $uid, 
-      '#prefix' => '<li>', 
-      '#suffix' => check_plain($user) ."</li>\n"
-    );
-  }
+  _advuser_form_add_accounts($form, $edit);
   $form['operation'] = array(
     '#type' => 'hidden', 
     '#value' => 'email'
@@ -400,6 +408,87 @@ function advuser_multiple_email_confirm_
   return 'admin/user/user/advuser';
 }
 
+function advuser_multiple_add_og_confirm() {
+  $edit = $_POST;
+
+  $form['accounts'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE);
+  _advuser_form_add_accounts($form, $edit);
+
+  $exp = explode ("-", $edit['operation']);
+  $nid = $exp[count($exp)-1];
+
+  $form['operation'] = array(
+    '#type' => 'hidden', 
+    '#value' => $edit['operation'],
+  );
+
+  $form['og_nid'] = array(
+    '#type' => 'hidden', 
+    '#value' => $nid,
+  );
+
+  $og_name = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid));
+
+  return confirm_form(
+    $form,
+    t('Are you sure you want to add these users to organic group %1 ?', array('%1' => $og_name)),
+    'admin/user/user/advuser',
+    t('This action cannot be undone.'),
+    t('Add'),
+    t('Cancel')
+  );
+}
+
+function advuser_multiple_remove_og_confirm() {
+  $edit = $_POST;
+
+  $form['accounts'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE);
+  _advuser_form_add_accounts($form, $edit);
+
+  $exp = explode ("-", $edit['operation']);
+  $nid = $exp[count($exp)-1];
+
+  $form['operation'] = array(
+    '#type' => 'hidden', 
+    '#value' => $edit['operation'],
+  );
+  $form['og_nid'] = array(
+    '#type' => 'hidden',
+    '#value' => $nid,
+  );
+
+  $og_name = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $nid));
+
+  return confirm_form(
+    $form,
+    t('Are you sure you want to remove these users from organic group %1 ?', array('%1' => $og_name)),
+    'admin/user/user/advuser',
+    t('This action cannot be undone.'),
+    t('Remove'),
+    t('Cancel')
+  );
+}
+
+function advuser_multiple_add_og_confirm_submit($form_id, $form_values) {
+  if ($form_values['confirm']) {
+    foreach ($form_values['accounts'] as $uid => $value) {
+      og_save_subscription($form_values['og_nid'], $uid, array('is_active' => 1, 'is_admin' => 0));
+    }
+    drupal_set_message(t('The users have been added to group.'));
+  }
+  return 'admin/user/user/advuser';
+}
+
+function advuser_multiple_remove_og_confirm_submit($form_id, $form_values) {
+  if ($form_values['confirm']) {
+    foreach ($form_values['accounts'] as $uid => $value) {
+      og_delete_subscription($form_values['og_nid'], $uid);
+    }
+    drupal_set_message(t('The users have been removed from group.'));
+  }
+  return 'admin/user/user/advuser';
+}
+
 /**
  * advuser settings page
  */
@@ -550,6 +639,23 @@ function _advuser_dbquery_users_to_notif
   return empty($user_where) ? FALSE : db_query('SELECT u.mail, u.name FROM {users} u WHERE uid IN (' . $user_where . ')');
 }
 
+/**
+ * @private
+ * Adds selected users uid to $form.
+ */
+function _advuser_form_add_accounts(&$form, $edit) {
+  // array_filter returns only elements with TRUE values.
+  foreach (array_filter($edit['accounts']) as $uid => $value) {
+    $user = db_result(db_query('SELECT name FROM {users} WHERE uid = %d', $uid));
+    $form['accounts'][$uid] = array(
+      '#type' => 'hidden', 
+      '#value' => $uid, 
+      '#prefix' => '<li>', 
+      '#suffix' => check_plain($user) ."</li>\n"
+    );
+  }
+}
+
 
 /**
  * Handle user insertion (new users)
