diff 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
line wrap: on
line diff
--- a/demo/more/bid.ur	Sat Oct 31 15:51:50 2009 -0400
+++ b/demo/more/bid.ur	Sun Nov 01 10:20:20 2009 -0500
@@ -7,22 +7,51 @@
     table assignment : {User : userId, Paper : paperId}
           PRIMARY KEY (User, Paper)
 
-    fun isOnPc id =
-        ro <- oneOrNoRows1 (SELECT user.OnPc
-                            FROM user
-                            WHERE user.Id = {[id]});
-        return (case ro of
-                    None => False
-                  | Some r => r.OnPc)
-
     val linksForPc =
         let
-            fun bid () =
-                me <- getLogin;
-                return <xml>Bidding time!</xml>
+            fun yourBids () =
+                me <- getPcLogin;
+                ps <- queryX (SELECT paper.Id, paper.{{M.paper}}, bid.Interest
+                              FROM paper LEFT JOIN bid ON bid.Paper = paper.Id
+                                AND bid.User = {[me.Id]})
+                             (fn r => <xml><entry>
+                               <hidden{#Paper} value={show r.Paper.Id}/>
+                               {useMore <xml><tr>
+                                 <td>{summarizePaper (r.Paper -- #Id)}</td>
+                                 <td><select{#Bid}>
+                                   {Select.selectChar ((#"-", "No") :: (#"_", "Maybe") :: (#"+", "Yes") :: [])
+                                                      r.Bid.Interest}
+                                 </select></td>
+                               </tr></xml>}
+                             </entry></xml>);
+                return <xml><body>
+                  <h1>Bid on papers</h1>
+
+                  <form>
+                    <subforms{#Papers}><table>
+                      <tr> <th>Paper</th> <th>Your Bid</th> </tr>
+                      {ps}
+                    </table></subforms>
+                    <submit value="Change" action={changeBids}/>
+                  </form>
+                </body></xml>
+
+            and changeBids r =
+                me <- getPcLogin;
+                List.app (fn {Paper = p, Bid = b} =>
+                             case b of
+                                 "" => return ()
+                               | _ => let
+                                     val p = readError p
+                                 in
+                                     (dml (DELETE FROM bid WHERE Paper = {[p]} AND User = {[me.Id]});
+                                      dml (INSERT INTO bid (Paper, User, Interest)
+                                           VALUES ({[p]}, {[me.Id]}, {[String.sub b 0]})))
+                                 end) r.Papers;
+                yourBids ()
         in
             <xml>
-              <li> <a link={bid ()}>Bid on papers</a></li>
+              <li> <a link={yourBids ()}>Bid on papers</a></li>
             </xml>
         end