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
|