| _ => 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
else
raise Access ("You aren't a member of group \"" ^ grp ^ "\"")
+fun requireAnyGroupName groups =
+ if List.exists (fn grp => inGroupName grp) groups then
+ ()
+ else
+ raise Access ("You aren't a member of any groups \"" ^ String.concatWith ", " groups ^ "\"")
+
fun validGroupName name =
size name <= 10
andalso CharVector.all Char.isAlphaNum name