? .node.module.marks
Index: user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user.module,v
retrieving revision 1.529
diff -U3 -r1.529 user.module
--- user.module	12 Nov 2005 11:26:16 -0000	1.529
+++ user.module	14 Nov 2005 03:47:42 -0000
@@ -1546,16 +1546,24 @@
 /**
  * Menu callback: administer permissions.
  */
-function user_admin_perm() {
+function user_admin_perm($rids = NULL) {
+
+  if($rids) {
+    $rids = explode(',', $rids);
+    $where = ' WHERE r.rid = %d';
+    for($i=1;$i<count($rids);$i++) {
+      $where .= '|| r.rid = %d';
+    }
+  }
 
   // Compile role array:
-  $result = db_query('SELECT r.rid, p.perm FROM {role} r LEFT JOIN {permission} p ON r.rid = p.rid ORDER BY name');
+  $result = db_query('SELECT r.rid, p.perm FROM {role} r LEFT JOIN {permission} p ON r.rid = p.rid'. $where .' ORDER BY name', $rids);
   $roles = array();
   while ($role = db_fetch_object($result)) {
     $role_permissions[$role->rid] = $role->perm;
   }
 
-  $result = db_query('SELECT rid, name FROM {role} ORDER BY name');
+  $result = db_query('SELECT rid, name FROM {role} r'. $where .' ORDER BY name', $rids);
   $role_names = array();
   while ($role = db_fetch_object($result)) {
     $role_names[$role->rid] = $role->name;
@@ -1582,7 +1590,7 @@
   // Have to build checkboxes here after checkbox arrays are built
   foreach ($role_names as $rid => $name) {
     $form['checkboxes'][$rid] = array('#type' => 'checkboxes', '#options' => $options, '#default_value' => $status[$rid]);
-    $form['role_names'][$rid] = array('#type' => 'markup', '#value' => $name, '#tree' => TRUE);
+    $form['role_names'][$rid] = array('#type' => 'markup', '#value' => l($name, 'admin/access/'. $rid), '#tree' => TRUE);
   }
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save permissions'));
 
@@ -1621,21 +1629,22 @@
   return $output;
 }
 
-function user_admin_perm_execute() {
-  $edit = $GLOBALS['form_values'];
+function user_admin_perm_execute($form_id, $edit) {
   // Save permissions:
   $result = db_query('SELECT * FROM {role}');
   while ($role = db_fetch_object($result)) {
-    // Delete, so if we clear every checkbox we reset that role;
-    // otherwise permissions are active and denied everywhere.
-    db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid);
-    foreach ($edit[$role->rid] as $key => $value) {
-      if (!$value) {
-        unset($edit[$role->rid][$key]);
+    if(isset($edit[$role->rid])) {
+      // Delete, so if we clear every checkbox we reset that role;
+      // otherwise permissions are active and denied everywhere.
+      db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid);
+      foreach ($edit[$role->rid] as $key => $value) {
+        if (!$value) {
+          unset($edit[$role->rid][$key]);
+        }
+      }
+      if (count($edit[$role->rid])) {
+        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $role->rid, implode(', ', array_keys($edit[$role->rid])));
       }
-    }
-    if (count($edit[$role->rid])) {
-      db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $role->rid, implode(', ', array_keys($edit[$role->rid])));
     }
   }
 
