Remove auto-generated mlt files
[hcoop/zz_old/portal.git] / group.sml
index 8bad77f..fc72152 100644 (file)
--- a/group.sml
+++ b/group.sml
@@ -10,7 +10,7 @@ type group = {id :int, name : string}
 
 fun mkGroupRow [id, name] =
     {id = C.intFromSql id, name = C.stringFromSql name}
-  | mkGroupRow row = raise Fail ("Bad group row : " ^ makeSet id row)
+  | mkGroupRow row = Init.rowError ("group", row)
 
 fun addGroup name =
     let
@@ -18,8 +18,8 @@ fun addGroup name =
        val id = nextSeq (db, "WebGroupSeq")
     in
        C.dml db ($`INSERT INTO WebGroup (id, name)
-                    VALUES (^id, ^(C.stringToSql name))`);
-       C.intFromSql id
+                    VALUES (^(C.intToSql id), ^(C.stringToSql name))`);
+       id
     end
 
 fun lookupGroup id =
@@ -55,9 +55,9 @@ 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] => x <> "0"
+            SOME[x] => not (C.isNull x) andalso C.intFromSql x <> 0
           | _ => false)
     end
 
@@ -67,10 +67,9 @@ 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
-            SOME[x] => x <> "0"
+                                   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) =
@@ -106,10 +104,10 @@ fun removeFromGroup (mem : membership) =
 
 fun mkMembershipRow [grp, usr] =
     {grp = C.intFromSql grp, usr = C.intFromSql usr}
-  | mkMembershipRow row = raise Fail ("Bad membership row : " ^ makeSet id row)
+  | mkMembershipRow row = Init.rowError ("membership", row)
 
 fun groupMembers grp =
-    C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined FROM Membership, WebUser
+    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`)
@@ -141,4 +139,4 @@ fun groupNameToId name =
        SOME [id] => SOME (C.intFromSql id)
       | _ => NONE
 
-end
\ No newline at end of file
+end