--- og_user_roles.module.5.x-3.3.orig	2008-11-03 14:00:06.000000000 -0800
+++ og_user_roles.module	2008-11-21 11:25:52.000000000 -0800
@@ -1,5 +1,5 @@
 <?php
-// $Id: og_user_roles.module,v 1.1.2.16 2008/10/15 20:51:11 somebodysysop Exp $
+// $Id: og_user_roles.module,v 3.1.1.2 2008/05/17 19:50:44 somebodysysop Exp $
 
 /**
  * @file
@@ -24,7 +24,7 @@ function og_user_roles_help($section) {
  *
  */
 function og_user_roles_perm() {
-  return array('administer og_user_roles', 'configure member roles', 'create og_subgroups', 'manage registration codes', 'use registration codes');
+  return array('administer og_user_roles', 'configure member roles', 'create og_subgroups', 'manage registration codes', 'use registration codes', 'no oguseredit');
 }
 
 /**
@@ -592,6 +592,22 @@ function og_user_roles_menu($may_cache) 
         );
       }
     }
+    // Add tab to the group subscribers page for admins to
+    // manage member accounts
+    if (arg(0) == 'og' && arg(1) == 'users' && is_numeric(arg(2))) {
+      $gid = arg(2);
+      if (og_user_roles_is_allowed($gid)) {
+        $items[] = array(
+          'path' => "og/users/$gid/manage",
+          'title' => t('Manage users'),
+          'callback' => 'og_user_roles_user_manage',
+          'callback arguments' => array($gid),
+          'access' => user_access('administer users'),
+          'weight' => 6,
+          'type' => MENU_LOCAL_TASK
+        );
+      }
+    }
   }
 
   return $items;
@@ -635,8 +651,16 @@ function og_user_roles_page($gid) {
 function og_user_roles_modr8_page($nid) {
   require_once drupal_get_path('module', 'modr8'). '/modr8_admin.inc';
   
-  $count_sql = db_rewrite_sql('SELECT COUNT(*) FROM {node} n WHERE n.status = 1 AND n.moderate = 1 AND n.nid = '.$nid);
-  $page_sql = db_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.status = 1 AND n.moderate = 1 AND n.nid = '.$nid.' ORDER BY n.changed DESC');
+//  $count_sql = db_rewrite_sql('SELECT COUNT(*) FROM {node} n WHERE n.status = 1 AND n.moderate = 1 AND n.nid = '.$nid);
+//  $page_sql = db_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.status = 1 AND n.moderate = 1 AND n.nid = '.$nid.' ORDER BY n.changed DESC');
+  $is_published = '';
+  if (!user_access('administer nodes')) {
+    // Users who don't have the 'administer nodes' permission can only see published nodes.
+    $is_published = 'n.status = 1 AND ';
+  }
+
+  $count_sql = db_rewrite_sql('SELECT COUNT(*) FROM {node} n WHERE '. $is_published .' n.moderate = 1 AND n.nid = '.$nid);
+  $page_sql = db_rewrite_sql('SELECT n.nid FROM {node} n WHERE '. $is_published .' n.moderate = 1 AND n.nid = '.$nid.' ORDER BY n.changed DESC');
   $result = pager_query($page_sql, variable_get('modr8_nodes_per_page', 10), 0, $count_sql);
   
   $output = '';
@@ -1355,19 +1379,6 @@ function og_user_roles_init() {
           drupal_goto($path);
 		}
       }
-      // If user clicks "Users" link while on group home page:
-      // Using referrer node ID (assuming it's a group)
-      if ($ref_arg[1] == 'node' && is_numeric($ref_arg[2])) {
-          $path = "ogusermanage/" . $ref_arg[2];
-          drupal_goto($path);
-      }
-      // If user clicks "Users" link while on group home page:
-      // Using og_last
-      if ($_SESSION['og_last']) {
-          $gid = $_SESSION['og_last']->nid;
-          $path = "ogusermanage/" . $gid;
-          drupal_goto($path);
-      }
     }
 
     // If this is a group relativity or book module node/add, re-direct to ognodeadd
@@ -1456,7 +1467,7 @@ function og_user_roles_user($op, &$edit,
             $recipient_uid = $obj->uid;
             $recipient_user = user_load(array('uid' => $recipient_uid));
             $recipient = $recipient_user->mail;
-            mimemail($sender, $recipient, $subject, $message);
+            if (module_exists('mimemail')) mimemail($sender, $recipient, $subject, $message);
           } // end while
         }
 	  }
@@ -1546,7 +1557,6 @@ function og_user_roles_og($op, $nid, $ui
       }
 
       $user = user_load(array('uid' => $uid));
-//      $node = node_load($nid);
       // --- Modification - 2008-05-20 - as per: http://drupal.org/node/259956
       $node = db_fetch_object(db_query("SELECT type, title FROM {node} WHERE nid=%d", $nid));
 
@@ -1588,13 +1598,13 @@ function og_user_roles_og($op, $nid, $ui
       // --- Modification - 2008-01-10 - as per: http://drupal.org/node/197489
       // Places all new group administrators into default group administrator role.
       $admin = $args['is_admin'];
-      if (variable_get('og_user_roles_assign_admingrouprole', 0) == 1 && $admin == 1) {
-        $rid = variable_get('og_user_roles_admingrouprole_value', 0);
-        og_user_roles_role_join($uid, $rid, $nid); // assign user to group role in that group
-      }
-      if (variable_get('og_user_roles_assign_admingrouprole', 0) == 1 && $admin == 0) {
+      if (variable_get('og_user_roles_assign_admingrouprole', 0) == 1 && $admin === 0) {
         $rid = variable_get('og_user_roles_admingrouprole_value', 0);
         og_user_roles_role_delete($uid, $rid, $nid); // delete this admin role for this user in this group (if it exists)
+      }
+      if (variable_get('og_user_roles_assign_admingrouprole', 0) == 1 && $admin === 1) {
+        $rid = variable_get('og_user_roles_admingrouprole_value', 0);
+        og_user_roles_role_join($uid, $rid, $nid); // assign user to group role in that group
       }
       break;
 
@@ -1835,6 +1845,12 @@ function og_user_roles_nodeapi(&$node, $
 function og_user_roles_user_access($string, $gid, $uid) {
   $roles = array();
   $perms = "";
+
+  // User #1 has all privileges:
+  if ($uid == 1) {
+    return TRUE;
+  }
+
   if ($uid) {
     $roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
   }
@@ -1939,7 +1955,8 @@ function og_user_roles_all_roles($user) 
 	  $nid = intval($_REQUEST['translation']);
 	  $gid = og_user_roles_getgid($nid, $uid);
 	  if ($gid) {
-	    drupal_set_message('recognized translation node add, gid = '.$gid);	  
+	    // Troubleshooting
+	    // drupal_set_message('recognized translation node add, gid = '.$gid);	  
 	    $_GET['gids'] = array($gid); // inject gid
 	  }
 	}
@@ -2333,16 +2350,17 @@ function og_user_roles_all_roles($user) 
 		$basename = urldecode($basename);
         $basename = preg_replace("/\+/", " ", $basename);
 		// Now, get the node associated with this file;
-        $file = db_fetch_object(db_query("SELECT nid from {files} where filepath like '%s'", '%' . $basename));
+//        $file = db_fetch_object(db_query("SELECT nid from {files} where filepath like '%s'", '%' . $basename));
+        $file = db_fetch_object(db_query("SELECT nid from {files} where filepath like '%s'", '%' . '/' . $basename));
 		$nid = $file->nid;
         $gid = og_user_roles_getgid($nid, $uid);
         $group_node = node_load($gid);
         og_set_group_context($group_node);
         // Troubleshooting
-        drupal_set_message($basename);
-        drupal_set_message('nid ' . $nid);        
-        drupal_set_message('gid ' . $gid);        
-        drupal_set_message('ogur group ' . $_SESSION['og_user_role']);
+        // drupal_set_message($basename);
+        // drupal_set_message('nid ' . $nid);        
+        // drupal_set_message('gid ' . $gid);        
+        // drupal_set_message('ogur group ' . $_SESSION['og_user_role']);
 	  }
 	}
 
@@ -2745,35 +2763,42 @@ function og_user_roles_oguseredit($uid =
   $user->roles = $roles;
   $gids = $_GET['gids'];
   if ($gids) {
-     $group_node = node_load($gids[0]);
+     $group_node = node_load($gids[0]);
+	 $gid = $gids[0];
      og_set_group_context($group_node);
   }
 
-//  $account = user_load(array('uid' => $uid));
-//  if (array_keys($account->og_groups)) {
-//    $gids = array_intersect(array_keys($account->og_groups), array_keys($user->og_groups));
-//	if ($gids) {
-//      if ($_SESSION['og_last']) {
-//        $this_gid = $_SESSION['og_last']->nid;
-//          foreach ($gids as $item) {
-//		  if ($item == $this_gid) {
-//            $gid = $item;		  
-//            $group_node = node_load($gid);
-//            og_set_group_context($group_node);
-//		  }
-//		}
-//	  }
-//	}
-//  }
+  $account = user_load(array('uid' => $uid));
+  $in_this_group = 'no';
+  $oguseredit = 'yes';
+
+  if (user_access('no oguseredit', $account)) $oguseredit = 'no';
+
+ /**
+  * This checks all groups the user is a member of to see if any one has given the
+  * 'no oguseredit' permission.	 If one group has given him a role with this
+  * permission, then his profile cannot be edited using oguseredit.
+  */
+  $user_gids = array_keys($account->og_groups);
+  if ($user_gids) {
+    foreach ($user_gids as $user_gid) {
+      if (og_user_roles_user_access('no oguseredit', $user_gid, $uid) === TRUE) $oguseredit = 'no'; 
+    }
+  }
+
+  if (array_keys($account->og_groups)) {
+    if (array_key_exists($gid, $account->og_groups)) $in_this_group = 'yes';
+  }
 
-
   $access = user_access('administer users');
 
-  if ($access === TRUE && $uid != 1) {
+  if ($access === TRUE && $uid != 1 && $in_this_group == 'yes' && $oguseredit == 'yes') {
     if (arg(2) == 'edit') $output = drupal_get_form('user_edit');
     if (arg(2) == 'delete') $output = user_edit();
     if (is_null(arg(2))) $output = user_view($uid);
   } else {
+    if ($oguseredit == 'no') drupal_set_message('This user account may not be edited using oguseredit.');
+    if ($in_this_group == 'no') drupal_set_message('This user is not a member of the current group.');
     $output = 'Access denied.';
     watchdog('access denied', 'oguseredit/'. $uid, WATCHDOG_WARNING);
   }
@@ -2785,14 +2810,15 @@ function og_user_roles_oguseredit($uid =
  * Manage users from OG User Roles
  * ogusermanage
  */
-function og_user_roles_user_manage() {
+function og_user_roles_user_manage($gid) {
   global $user;
   $roles = og_user_roles_all_roles($user); // This returns normal $user->roles and includes OG roles if any
 
   $user->roles = $roles;
   $gids = array_keys($user->og_groups);
 
-  $this_gid = arg(1);
+  $this_gid = $gid;
+
   if ($this_gid) {
     $group_node = node_load($this_gid);
     og_set_group_context($group_node);
@@ -2821,7 +2847,7 @@ function og_user_roles_user_manage() {
     if ($common_gids) {
       foreach ($common_gids as $common) {
         if ($common == $this_gid && $is_admin == 1 && user_access('administer users') && $uid != 1) {
- 	        $output .= "<li>" . l($account->name, 'oguseredit/' . $uid, $attributes = array(), 'gids[]=' . $this_gid) . " | " . l('(edit)', 'oguseredit/' . $uid . '/edit', $attributes = array(), 'gids[]=' . $this_gid) . "</li>";
+ 	        $output .= "<li>" . l($account->name, 'oguseredit/' . $uid, $attributes = array(), 'gids[]=' . $this_gid) . " | " . l('(edit)', 'oguseredit/' . $uid . '/edit', $attributes = array(), 'gids[]=' . $this_gid . '&destination=og/users/'.$this_gid.'/manage') . " | " . l('(delete)', 'oguseredit/' . $uid . '/delete', $attributes = array(), 'gids[]=' . $this_gid . '&destination=og/users/'.$this_gid.'/manage') . "</li>";
          }
       }
     }
@@ -3473,7 +3499,7 @@ function og_user_roles_theme() {
  */
 function og_user_roles_og_create_links($group) {
   if (variable_get('og_user_roles_links_content_' . $group->nid, 0) == 1) {
-    $links[] = l(t('Create content'), "node/add", array('title' => t('Add new content in this group.')), "gids[]=$group->nid");
+    $links[] = l(t('Create content'), "node/ognodeadd", array('title' => t('Add new content in this group.')), "gids[]=$group->nid");
     return $links;
   }
 }
