X-Git-Url: https://git.hcoop.net/hcoop/portal.git/blobdiff_plain/d5f8418bc9167e9597c463175b38830ba17624b6..573def24c0220a72beff4e3f5739a450d83de170:/app.sml diff --git a/app.sml b/app.sml index 117ae05..98b8c75 100644 --- a/app.sml +++ b/app.sml @@ -9,6 +9,7 @@ datatype status = | ACCEPTED | REJECTED | ADDED + | BEING_ADDED val statusFromInt = fn 0 => CONFIRMING @@ -16,6 +17,7 @@ val statusFromInt = | 2 => ACCEPTED | 3 => REJECTED | 4 => ADDED + | 5 => BEING_ADDED | _ => raise C.Sql "Bad status" val statusToInt = @@ -24,6 +26,7 @@ val statusToInt = | ACCEPTED => 2 | REJECTED => 3 | ADDED => 4 + | BEING_ADDED => 5 fun statusFromSql v = statusFromInt (C.intFromSql v) fun statusToSql s = C.intToSql (statusToInt s) @@ -58,11 +61,11 @@ fun lookupApp id = SOME row => mkAppRow row | NONE => raise Fail "Membership application not found" -fun listApps status = +fun listApps statuses = C.map (getDb ()) mkAppRow ($`SELECT id, name, rname, gname, email, forward, uses, other, passwd, status, applied, ipaddr, confirmed, decided, msg, unix_passwd, paypal, checkout FROM MemberApp - WHERE status = ^(statusToSql status) + WHERE status IN (^(String.concatWith "," (map statusToSql statuses))) AND NOT (status = 2 AND decided < CURRENT_TIMESTAMP - INTERVAL '1 MONTH') ORDER BY applied`) @@ -111,23 +114,29 @@ fun approve (app, msg) = Mail.mwrite (mail, "To: "); Mail.mwrite (mail, #email entry); Mail.mwrite (mail, "\n"); - Mail.mwrite (mail, Util.readFile "/home/hcoop/portal/welcome.txt"); + Mail.mwrite (mail, Util.readFile (Config.staticFilesRoot ^ "welcome.txt")); Mail.mwrite (mail, msg); OS.Process.isSuccess (Mail.mclose mail) end -fun add app = +fun preAdd app = let val _ = C.dml (getDb ()) ($`UPDATE MemberApp - SET status = 3 + SET status = 5 WHERE id = ^(C.intToSql app)`) val app = lookupApp app + in + () + end - val outf = TextIO.openOut (Config.passwordFiles ^ #name app) +fun add app = + let + val appR = lookupApp app in - TextIO.output (outf, #unix_passwd app); - TextIO.closeOut outf + ignore (C.dml (getDb ()) ($`UPDATE MemberApp + SET status = 4 + WHERE id = ^(C.intToSql app)`)) end fun welcome app = @@ -139,7 +148,7 @@ fun welcome app = Mail.mwrite (mail, "To: "); Mail.mwrite (mail, #email app); Mail.mwrite (mail, "\n"); - Mail.mwrite (mail, Util.readFile "/home/hcoop/portal/paid.txt"); + Mail.mwrite (mail, Util.readFile (Config.staticFilesRoot ^ "paid.txt")); ignore (Mail.mclose mail) end @@ -161,15 +170,15 @@ fun readFile fname = before TextIO.closeIn inf end -fun readTosBody () = readFile "/home/hcoop/public_html/tos.body.html" -fun readTosAgree () = readFile "/home/hcoop/public_html/tos.agree.html" -fun readTosMinorAgree () = readFile "/home/hcoop/public_html/tos.agree.minor.html" +fun readTosBody () = readFile (Config.staticFilesRoot ^ "tos.body.html") +fun readTosAgree () = readFile (Config.staticFilesRoot ^ "tos.agree.html") +fun readTosMinorAgree () = readFile (Config.staticFilesRoot ^ "tos.agree.minor.html") fun searchPaypal paypal = C.map (getDb ()) mkAppRow ($`SELECT id, name, rname, gname, email, forward, uses, other, passwd, status, applied, ipaddr, confirmed, decided, msg, unix_passwd, paypal, checkout FROM MemberApp - WHERE paypal = ^(C.stringToSql (Util.allLower paypal)) + WHERE paypal = ^(C.stringToSql (normEmail paypal)) AND status = 2 AND decided >= CURRENT_TIMESTAMP - INTERVAL '1 MONTH' ORDER BY applied`) @@ -178,7 +187,7 @@ fun searchCheckout checkout = C.map (getDb ()) mkAppRow ($`SELECT id, name, rname, gname, email, forward, uses, other, passwd, status, applied, ipaddr, confirmed, decided, msg, unix_passwd, paypal, checkout FROM MemberApp - WHERE checkout = ^(C.stringToSql (Util.allLower checkout)) + WHERE checkout = ^(C.stringToSql (normEmail checkout)) AND status = 2 AND decided >= CURRENT_TIMESTAMP - INTERVAL '1 MONTH' ORDER BY applied`)