| _ => 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 *)
| mkMembershipRow row = Init.rowError ("membership", row)
fun groupMembers grp =
- C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares FROM Membership, WebUser
- WHERE grp = ^(C.intToSql grp)
- AND usr = id
- ORDER BY name`)
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
+ FROM Membership, WebUser
+ WHERE grp = ^(C.intToSql grp)
+ AND usr = id
+ ORDER BY name`)
(* Checking memberships of the current user *)
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