<% @header [("title", ["Membership applications"])];
val you = Init.getUserId ();
-val board = Group.inGroupName "board";
+val board = Group.reallyInGroupName "board";
val root = Group.inGroupNum 0;
ref showNormal = true;
val userInGroupNum : int * int -> bool
val userInGroupName : int * string -> bool
+ val userReallyInGroupName : int * string -> bool (* Doesn't count root group *)
val addToGroup : membership -> unit
val addToGroups : int * int list -> unit
val inGroupNum : int -> bool
val inGroupName : string -> bool
+ val reallyInGroupName : string -> bool
(* These raise Access if the check fails *)
val requireGroupNum : int -> unit
val requireGroupName : string -> unit
-end
\ No newline at end of file
+end
| _ => false)
end
+fun userReallyInGroupName (usr, grp) =
+ let
+ val c = getDb ()
+ in
+ (case C.oneOrNoRows c ($`SELECT COUNT( * )
+ FROM Membership, WebGroup
+ WHERE (name = ^(C.stringToSql grp) AND grp = id)
+ AND usr = ^(C.intToSql usr)`) of
+ SOME[x] => not (C.isNull x) andalso C.intFromSql x <> 0
+ | _ => false)
+ end
+
(* Managing group memberships *)
fun inGroupNum grp = userInGroupNum (getUserId(), grp)
fun inGroupName grp = userInGroupName (getUserId(), grp)
+fun reallyInGroupName grp = userReallyInGroupName (getUserId(), grp)
fun requireGroupNum grp =
if inGroupNum grp then