X-Git-Url: https://git.hcoop.net/hcoop/zz_old/portal.git/blobdiff_plain/369e1577bf72be99dcbb142fe605e5b4e6548102..45174231c9693be788280cc80acc5e28394e35bf:/group.sml diff --git a/group.sml b/group.sml index 7c24bbc..33cc13e 100644 --- a/group.sml +++ b/group.sml @@ -55,7 +55,7 @@ fun userInGroupNum (usr, grp) = in (case C.oneOrNoRows c ($`SELECT COUNT( * ) FROM Membership - WHERE grp = ^(C.intToSql grp) + WHERE (grp IN (0, ^(C.intToSql grp))) AND usr = ^(C.intToSql usr)`) of SOME[x] => not (C.isNull x) andalso C.intFromSql x <> 0 | _ => false) @@ -67,9 +67,8 @@ fun userInGroupName (usr, grp) = in (case C.oneOrNoRows c ($`SELECT COUNT( * ) FROM Membership, WebGroup - WHERE name = ^(C.stringToSql grp) - AND usr = ^(C.intToSql usr) - AND grp = id`) of + WHERE (grp = 0 OR (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 @@ -84,11 +83,10 @@ fun addToGroup (mem : membership) = val usr = #usr mem val grp = #grp mem in - if userInGroupNum (usr, grp) then - () - else - ignore (C.dml (getDb ()) ($`INSERT INTO Membership (grp, usr) - VALUES (^(C.intToSql grp), ^(C.intToSql usr))`)) + case C.oneOrNoRows (getDb ()) ($`SELECT * FROM Membership WHERE grp = ^(C.intToSql grp) AND usr = ^(C.intToSql usr)`) of + NONE => ignore (C.dml (getDb ()) ($`INSERT INTO Membership (grp, usr) + VALUES (^(C.intToSql grp), ^(C.intToSql usr))`)) + | SOME _ => () end fun addToGroups (usr, grps) = @@ -109,10 +107,11 @@ fun mkMembershipRow [grp, usr] = | mkMembershipRow row = Init.rowError ("membership", row) fun groupMembers grp = - C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined 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 *) @@ -134,11 +133,11 @@ fun requireGroupName grp = fun validGroupName name = size name <= 10 - andalso CharVector.all Char.isAlpha name + andalso CharVector.all Char.isAlphaNum name fun groupNameToId name = case C.oneOrNoRows (getDb ()) ($`SELECT id FROM WebGroup WHERE name = ^(C.stringToSql name)`) of SOME [id] => SOME (C.intFromSql id) | _ => NONE -end \ No newline at end of file +end