$role->name, 'id' => 'rid:' . $role->rid, 'category' => 'Roles'); } break; case 'uid': $result = db_query("SELECT uid, name FROM {users} WHERE uid = '%d'", $id); while ($user = db_fetch_object($result)) { $users[] = array('name' => $user->name, 'id' => 'uid:' . $user->uid, 'category' => 'Users'); } break; } } $json = array_merge($roles, $users); break; default: $term = $_POST['term']; // Process existing tokens $existing_roles = array(); $existing_users = array(); $existingTokens = explode(',', rawurldecode($_POST['existing'])); foreach ($existingTokens as $token) { $token = explode(':', $token); $type = $token[0]; $id = $token[1]; switch ($type) { case 'rid': $existing_roles[] = $id; break; case 'uid': $existing_users[] = $id; break; } } $existing_roles_sql = ''; if (!empty($existing_roles)) { $existing_roles_sql = " AND rid NOT IN (" . db_placeholders($existing_roles, 'int') . ")"; } $existing_users_sql = ''; if (!empty($existing_users)) { $existing_users_sql = " AND uid NOT IN (" . db_placeholders($existing_users, 'int') . ")"; } if ($term) { // Roles $roles = array(); if (is_numeric($term)) { $result = db_query_range("SELECT rid, name FROM {role} WHERE rid LIKE '%%%d%%'" . $existing_roles_sql, array($term, $existing_roles), 0, 10); } else { $result = db_query_range("SELECT rid, name FROM {role} WHERE LOWER(name) LIKE LOWER('%%%s%%')" . $existing_roles_sql, array($term, $existing_roles), 0, 10); } while ($role = db_fetch_object($result)) { // Ignore default Drupal roles if ($role->rid == 1 || $role->rid == 2) continue; $roles[] = array('name' => $role->name, 'id' => 'rid:' . $role->rid, 'description' => '(rid: ' . $role->rid . ')', 'category' => 'Roles'); } // Users $users = array(); if (is_numeric($term)) { $result = db_query_range("SELECT uid, name, status FROM {users} WHERE uid LIKE '%%%d%%'" . $existing_users_sql, array($term, $existing_users), 0, 10); } else { $query = "SELECT uid, name, status FROM {users} WHERE LOWER(name) LIKE LOWER('%%%s%%')" . $existing_users_sql; $result = db_query_range($query, array($term, $existing_users), 0, 10); } while ($user = db_fetch_object($result)) { // Ignore site admin, always has acess if ($user->uid == 1) continue; $users[] = array('name' => $user->name, 'id' => 'uid:' . $user->uid, 'description' => '(' . ($user->status ? '' : 'inactive, ') . 'uid: ' . $user->uid . ')', 'category' => 'Users'); } $json = array_merge($roles, $users); } break; } } navigate_json($json); }