Poll voting
[hcoop/portal.git] / poll.mlt
index 19e1eba..3abe588 100644 (file)
--- a/poll.mlt
+++ b/poll.mlt
@@ -16,6 +16,55 @@ if $"cmd" = "list" then
 </li>
 <% end
 
+elseif $"vote" <> "" then
+       showNormal := false;    
+       val id = Web.stoi ($"vote");
+       val poll = Poll.lookupPoll id %>
+
+<table>
+<tr> <td align="right"><b>Poll#</b>:</td> <td><% id %></td> </tr>
+<tr> <td align="right"><b>Title</b>:</td> <td><% Web.html (#title poll) %></td> </tr>
+<tr> <td align="right"><b>Start</b>:</td> <td><% Web.html (#starts poll) %></td> </tr>
+<tr> <td align="right"><b>End</b>:</td> <td><% Web.html (#ends poll) %></td> </tr>
+<tr> <td align="right"><b>Votes/person</b>:</td> <td><% #votes poll %></td> </tr>
+<tr> <td align="right" valign="top"><b>Description</b>:</td> <td><% Web.htmlNl (#descr poll) %></td> </tr>
+</table>
+
+<h3><b>Choices</b></h3>
+
+<form action="poll">
+<input type="hidden" name="vote2" value="<% id %>">
+<% val choices = Poll.listChoicesWithMyVotes id;
+if #votes poll = 1 then %>
+<select name="v">
+<option value="">Abstain</option>
+<% else %>
+<select name="v" multiple size="<% length choices %>">
+<% end
+foreach (you, cho) in choices do %>
+       <option value="<% #id cho %>"<% if you then %> selected<% end %>><% Web.html (#descr cho) %></option>
+<% end %></select><br><br>
+<input type="submit" value="Vote">
+</form>
+
+<% elseif $"vote2" <> "" then
+       val id = Web.stoi ($"vote2");
+       val poll = Poll.lookupPoll id;
+       editingPoll := SOME id;
+
+       val votes = case Web.getMultiParam "v" of
+                 [""] => []
+               | v => map Web.stoi v;
+
+       if length votes > #votes poll then
+               %><h3><b>You can't vote for that many different choices!</b></h3><%
+       elseif not (Poll.noDupes votes) then
+               %><h3><b>You can't vote multiple times for the same choice!</b></h3><%
+       else
+               Poll.vote (Init.getUserId (), id, votes)
+               %><h3><b>Thanks for voting!</b></h3>
+<%     end
+
 elseif $"cmd" = "add" then
        val title = $"title";
        val starts = $"starts";
@@ -149,6 +198,43 @@ elseif $"delChoice" <> "" then
        editingPoll := SOME (#id poll) %>
        <h3><b>"<% Web.html (#descr cho) %>" deleted!</b></h3>
 
+<% elseif $"report" <> "" then
+       showNormal := false;
+       val id = Web.stoi ($"report");
+               
+       val poll = Poll.lookupPoll id;
+       val canModify = Poll.canModify poll %>
+
+<h3><b>Vote Report</b></h3>
+
+<table>
+<tr> <td align="right"><b>Poll#</b>:</td> <td><% id %></td> </tr>
+<tr> <td align="right"><b>Title</b>:</td> <td><% Web.html (#title poll) %></td> </tr>
+<tr> <td align="right"><b>Start</b>:</td> <td><% Web.html (#starts poll) %></td> </tr>
+<tr> <td align="right"><b>End</b>:</td> <td><% Web.html (#ends poll) %></td> </tr>
+<tr> <td align="right"><b>Votes/person</b>:</td> <td><% #votes poll %></td> </tr>
+<tr> <td align="right" valign="top"><b>Description</b>:</td> <td><% Web.htmlNl (#descr poll) %></td> </tr>
+</table>
+
+<br><hr><br>
+
+<table>
+<tr> <td><b>Votes</b></td> <td><b>Choice</b></td> <td><b>Voters</b></td> </tr>
+<% foreach (_, total, cho) in Poll.listChoicesWithVotes id do %>
+       <tr> <td><% total %></td> <td><% Web.html (#descr cho) %></td> <td>
+<%     ref first = true;
+       foreach user in Poll.listVoters (#id cho) do
+               if first then
+                       first := false
+               else
+                       %>, <%
+               end
+               %><a href="user?id=<% #id user %>"><% #name user %></a><%
+       end
+       %></td> </tr><%
+end %>
+</table>
+
 <% elseif $"id" <> "" then
        editingPoll := SOME (Web.stoi ($"id"))
 
@@ -156,29 +242,47 @@ end %>
 
 <% switch editingPoll of
          SOME id =>
-               val pol = Poll.lookupPoll id;
-               val canModify = Poll.canModify pol %>
+               val poll = Poll.lookupPoll id;
+               val canModify = Poll.canModify poll %>
 
 <table>
 <% if canModify then %><tr> <td></td> <td><a href="poll?mod=<% id %>">Edit poll data</a></td> </tr><% end %>
 <tr> <td align="right"><b>Poll#</b>:</td> <td><% id %></td> </tr>
-<tr> <td align="right"><b>Title</b>:</td> <td><% Web.html (#title pol) %></td> </tr>
-<tr> <td align="right"><b>Start</b>:</td> <td><% Web.html (#starts pol) %></td> </tr>
-<tr> <td align="right"><b>End</b>:</td> <td><% Web.html (#ends pol) %></td> </tr>
-<tr> <td align="right"><b>Votes/person</b>:</td> <td><% #votes pol %></td> </tr>
-<tr> <td align="right" valign="top"><b>Description</b>:</td> <td><% Web.htmlNl (#descr pol) %></td> </tr>
+<tr> <td align="right"><b>Title</b>:</td> <td><% Web.html (#title poll) %></td> </tr>
+<tr> <td align="right"><b>Start</b>:</td> <td><% Web.html (#starts poll) %></td> </tr>
+<tr> <td align="right"><b>End</b>:</td> <td><% Web.html (#ends poll) %></td> </tr>
+<tr> <td align="right"><b>Votes/person</b>:</td> <td><% #votes poll %></td> </tr>
+<tr> <td align="right" valign="top"><b>Description</b>:</td> <td><% Web.htmlNl (#descr poll) %></td> </tr>
 </table>
 
-<h3><b>Choices</b></h3>
+<h3><b>Choices<% if Poll.takingVotes poll then %><a href="poll?vote=<% id %>">(Vote!)</a><% end %></b></h3>
+
+<% if Poll.takingVotes poll then %>
+<table>
+<tr> <td><b>You</b></td> <td><b>Total</b></td> </tr>
+<% foreach (you, total, cho) in Poll.listChoicesWithVotes id do %>
+       <tr> <td align="center"><% if you then %>X<% end %></td>
+       <td align="center"><% total %></td>
+       <td><% Web.html (#descr cho) %></td>
+<% if canModify then %>
+<td><i>(<% #seq cho %>)</i>
+<a href="poll?modChoice=<% #id cho %>">[Modify]</a>
+<a href="poll?delChoice=<% #id cho %>">[Delete]</a></td>
+<% end %></tr>
+<% end %>
+</table>
 
-<% foreach cho in Poll.listChoices id do %>
+<a href="poll?report=<% id %>">Vote Report</a>
+<% else
+foreach cho in Poll.listChoices id do %>
        <li> <% Web.html (#descr cho) %>
 <% if canModify then %>
 <i>(<% #seq cho %>)</i>
 <a href="poll?modChoice=<% #id cho %>">[Modify]</a>
 <a href="poll?delChoice=<% #id cho %>">[Delete]</a>
 <% end %></li>
-<% end %>
+<% end
+end %>
 
 <% if canModify then %>
 <br><hr><br>