X-Git-Url: http://git.hcoop.net/hcoop/portal.git/blobdiff_plain/d5f8418bc9167e9597c463175b38830ba17624b6..44a63d224a81da3c5d2c9e50a46b6af956c47c5f:/group.sml diff --git a/group.sml b/group.sml index 33cc13e..afab84f 100644 --- a/group.sml +++ b/group.sml @@ -73,6 +73,18 @@ fun userInGroupName (usr, grp) = | _ => 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 *) @@ -118,6 +130,7 @@ fun groupMembers grp = 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 @@ -131,6 +144,12 @@ fun requireGroupName grp = 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