annotate demo/more/bid.ur @ 1023:e46227efcbba

Bidding interface
author Adam Chlipala <adamc@hcoop.net>
date Sun, 01 Nov 2009 10:20:20 -0500
parents 4de35df3d545
children 7facf72aaf0a
rev   line source
adamc@1022 1 functor Make(M : Conference.INPUT) = struct
adamc@1022 2 open M
adamc@1022 3
adamc@1022 4 table bid : {User : userId, Paper : paperId, Interest : char}
adamc@1022 5 PRIMARY KEY (User, Paper)
adamc@1022 6
adamc@1022 7 table assignment : {User : userId, Paper : paperId}
adamc@1022 8 PRIMARY KEY (User, Paper)
adamc@1022 9
adamc@1022 10 val linksForPc =
adamc@1022 11 let
adamc@1023 12 fun yourBids () =
adamc@1023 13 me <- getPcLogin;
adamc@1023 14 ps <- queryX (SELECT paper.Id, paper.{{M.paper}}, bid.Interest
adamc@1023 15 FROM paper LEFT JOIN bid ON bid.Paper = paper.Id
adamc@1023 16 AND bid.User = {[me.Id]})
adamc@1023 17 (fn r => <xml><entry>
adamc@1023 18 <hidden{#Paper} value={show r.Paper.Id}/>
adamc@1023 19 {useMore <xml><tr>
adamc@1023 20 <td>{summarizePaper (r.Paper -- #Id)}</td>
adamc@1023 21 <td><select{#Bid}>
adamc@1023 22 {Select.selectChar ((#"-", "No") :: (#"_", "Maybe") :: (#"+", "Yes") :: [])
adamc@1023 23 r.Bid.Interest}
adamc@1023 24 </select></td>
adamc@1023 25 </tr></xml>}
adamc@1023 26 </entry></xml>);
adamc@1023 27 return <xml><body>
adamc@1023 28 <h1>Bid on papers</h1>
adamc@1023 29
adamc@1023 30 <form>
adamc@1023 31 <subforms{#Papers}><table>
adamc@1023 32 <tr> <th>Paper</th> <th>Your Bid</th> </tr>
adamc@1023 33 {ps}
adamc@1023 34 </table></subforms>
adamc@1023 35 <submit value="Change" action={changeBids}/>
adamc@1023 36 </form>
adamc@1023 37 </body></xml>
adamc@1023 38
adamc@1023 39 and changeBids r =
adamc@1023 40 me <- getPcLogin;
adamc@1023 41 List.app (fn {Paper = p, Bid = b} =>
adamc@1023 42 case b of
adamc@1023 43 "" => return ()
adamc@1023 44 | _ => let
adamc@1023 45 val p = readError p
adamc@1023 46 in
adamc@1023 47 (dml (DELETE FROM bid WHERE Paper = {[p]} AND User = {[me.Id]});
adamc@1023 48 dml (INSERT INTO bid (Paper, User, Interest)
adamc@1023 49 VALUES ({[p]}, {[me.Id]}, {[String.sub b 0]})))
adamc@1023 50 end) r.Papers;
adamc@1023 51 yourBids ()
adamc@1022 52 in
adamc@1022 53 <xml>
adamc@1023 54 <li> <a link={yourBids ()}>Bid on papers</a></li>
adamc@1022 55 </xml>
adamc@1022 56 end
adamc@1022 57
adamc@1022 58 con yourPaperTables = [Assignment = _]
adamc@1022 59 constraint [Paper] ~ yourPaperTables
adamc@1022 60 fun joinYourPaper [tabs] [paper] [[Paper] ~ tabs] [[Paper] ~ _] [tabs ~ yourPaperTables] [[Id] ~ paper]
adamc@1022 61 (fi : sql_from_items ([Paper = [Id = paperId] ++ paper] ++ tabs)) =
adamc@1022 62 sql_inner_join fi (sql_from_table [#Assignment] assignment) (WHERE Paper.Id = Assignment.Paper)
adamc@1022 63 end