Tweakadeedooda while running through our first real application in a while
[hcoop/zz_old/portal.git] / users.mlt
CommitLineData
8d347a33 1<% Group.requireGroupNum 0;
2
3@header [("title", ["Member management"])];
4
5ref showNormal = true;
6
7if $"cmd" = "Create" then
8 if not (Init.validUsername ($"name")) then %>
1fe415e0 9 <h3>Invalid username</h3>
8d347a33 10 <% else switch Init.userNameToId ($"name") of
11 SOME _ => %>
1fe415e0 12 <h3>Username already in use</h3>
8d347a33 13<% | NONE =>
5146e435 14 val ap = Web.stoi ($"app");
8d347a33 15 val bal =
16 (case $"bal" of
17 "" => Balance.addBalance ($"name")
18 | s => Web.stoi s);
19
892e3ea1 20 val id = Init.addUser ($"name", $"rname", bal, ap, 1);
4b8df0b1 21 Group.addToGroups (id, map Web.stoi (Web.getMultiParam "grp"));
22
23 if $"amount" <> "" then
24 val amount = Web.stor ($"amount");
25 val trn = Money.addTransaction ($"descr", amount, Init.dateString ());
26 Money.addCharge {trn = trn, usr = id, amount = amount};
27 Money.applyCharges trn
28 end;
29
30 if $"subscribe" = "on" then
31b85852 31 if not (Pref.subscribe ("hcoop-announce", $"name" ^ Init.emailSuffix)) then
1fe415e0 32 %><h3>Error subscribing to hcoop-announce</h3><%
4b8df0b1 33 end
cee714e2 34 end;
35
36 if $"nomail" = "" then
37 App.welcome ap
38 end
39
40 %><h3>Member added</h3>
8d347a33 41<% end
42 end
43elseif $"mod" <> "" then
44 showNormal := false;
45 val user = Init.lookupUser (Web.stoi ($"mod")) %>
1fe415e0 46<h3>Modify member record</h3>
8d347a33 47
add44c00 48<form action="users" method="post">
8d347a33 49<input type="hidden" name="id" value="<% $"mod" %>">
1fe415e0 50<table class="blanks">
51<tr> <td>Name:</td> <td><input name="name" value="<% #name user %>"></td> </tr>
52<tr> <td>Real name:</td> <td><input name="rname" value="<% #rname user %>"></td> </tr>
53<tr> <td>Funded by:</td> <td><select name="bal">
8d347a33 54<% foreach bal in Balance.listBalances () do %>
55 <option value="<% #id bal %>"<% if #bal user = #id bal then %> selected <% end %>><% Web.html (#name bal) %></option>
56<% end %>
57</select></td></tr>
58<tr> <td><input type="submit" name="cmd" value="Save"></td> </tr>
59</table>
60</form>
61
62<% elseif $"cmd" = "Save" then
63 val user = Init.lookupUser (Web.stoi ($"id"));
64 Init.modUser {user with name = $"name", bal = Web.stoi ($"bal")} %>
1fe415e0 65 <h3>Member record saved.</h3>
8d347a33 66
67<% elseif $"del" <> "" then
68 showNormal := false;
69 val user = Init.lookupUser (Web.stoi ($"del")) %>
1fe415e0 70 <h3>Are you sure you want to delete member <a href="user?id=<% #id user %>"><% #name user %></a>?</h3>
8d347a33 71 <a href="users?del2=<% $"del" %>">Yes, delete <% #name user %>!</a>
72
73<% elseif $"del2" <> "" then
74 val user = Init.lookupUser (Web.stoi ($"del2"));
75 Init.deleteUser (Web.stoi ($"del2")) %>
1fe415e0 76 <h3><% #name user %> deleted!</h3>
8d347a33 77
ef379996 78<% elseif $"retire" <> "" then
79 showNormal := false;
80 val user = Init.lookupUser (Web.stoi ($"retire")) %>
81 <h3>Are you sure you want to retire member <a href="user?id=<% #id user %>"><% #name user %></a>?</h3>
82 <a href="users?retire2=<% $"retire" %>">Yes, retire <% #name user %>!</a>
83
84<% elseif $"retire2" <> "" then
85 val usr = Web.stoi ($"retire2");
86 val user = Init.lookupUser usr;
87 switch (Group.groupNameToId "paying", Group.groupNameToId "retired") of
88 (SOME paying, SOME retired) =>
89 Group.removeFromGroup {usr = usr, grp = paying};
90 Group.addToGroup {usr = usr, grp = retired} %>
91 <h3><% #name user %> retired!</h3><%
92 | _ => %><h3>Couldn't find "paying" or "retired" group by name!</h3><%
93 end
94
95elseif $"cmd" = "grandfather" then
5146e435 96 Init.grandfatherUsers()
1fe415e0 97 %><h3>Grandfathered</h3>
5146e435 98
ef48ed9e 99<% elseif $"cmd" = "addform" then
100 showNormal := false %>
1fe415e0 101<h3>New member</h3>
8d347a33 102
add44c00 103<form action="users" method="post">
1fe415e0 104<table class="blanks">
105<tr> <td>Name:</td> <td><input name="name"></td> </tr>
106<tr> <td>Real name:</td> <td><input name="rname"></td> </tr>
107<tr> <td>Funded by:</td> <td><select name="bal">
8d347a33 108 <option value="">A new balance</option>
109<% foreach bal in Balance.listBalances () do %>
110 <option value="<% #id bal %>"><% Web.html (#name bal) %></option>
111<% end %>
112</select></td></tr>
1fe415e0 113<tr> <td>Initial transaction amount:</td> <td><input name="amount"></td> </tr>
114<tr> <td>Initial transaction description:</td> <td><input name="descr"></td> </tr>
115<tr> <td><input type="checkbox" name="subscribe" checked></td> <td>Subscribe to hcoop-announce</td> </tr>
116<tr> <td>Groups:</td> <td><select name="grp" size="5" multiple>
8d347a33 117<% foreach group in Group.listGroups () do %>
f98251aa 118 <option value="<% #id group %>"<% if #name group = "paying" then %> selected<% end %>><% Web.html (#name group) %></option>
8d347a33 119<% end %>
120</select></td></tr>
121<tr> <td><input type="submit" name="cmd" value="Create"></td> </tr>
122</table>
123</form>
124
da3f3cbc 125<% elseif $"cmd" = "unmigrated" then
126 showNormal := false;
270da709 127 ref negative = 0;
da3f3cbc 128 val users = Init.unmigratedUsers () %>
129
130<h3>Unmigrated members (<% length users %>)</h3>
131
132<table>
133<% foreach user in users do %>
270da709 134 <tr> <td><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a></td>
da3f3cbc 135<% val bal = Balance.lookupBalance (#bal user);
270da709 136if Balance.isNegative bal then
137 negative := negative + 1
138end %>
139<td><% #amount bal %></td><td>
140<%if #name bal <> #name user then %>
141 <i><% Web.html (#name bal) %></i>
da3f3cbc 142<% end %>
270da709 143</td> </tr>
da3f3cbc 144<% end %>
145</table>
146
270da709 147<p><% negative %> have negative balances.</p>
148
9fe97917 149<% elseif $"cmd" = "diff" then
150 showNormal := false;
151
152 val against = (case $"against" of
153 "" => Init.usersInAfs ()
154 | x => String.tokens Char.isSpace x);
155
156 val diff = Init.usersDiff (Init.listUsernames (), against) %>
157
158<h3>User diff</h3>
159
160<h4>Only on the portal:</h4>
161<ul>
162<% foreach user in #onlyInFirst diff do %>
163 <li> <a href="user?id=<% valOf (Init.userNameToId user) %>"><% Web.html user %></a></li>
164<% end %>
165</ul>
166
167<h4>Only in AFS:</h4>
168<ul>
169<% foreach user in #onlyInSecond diff do %>
170 <li> <% Web.html user %></li>
171<% end %>
172</ul>
173
ef48ed9e 174<% end %>
175
176<% if showNormal then %>
177
178<a href="users?cmd=addform">Add a user manually</a><br>
179
1fe415e0 180<h3>Manage current members</h3>
8d347a33 181
182<table>
183<% foreach user in Init.listUsers () do %>
184 <tr> <td><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a></td> <td>
185<% val bal = Balance.lookupBalance (#bal user);
186if #name bal <> #name user then %>
187<i><% Web.html (#name bal) %></i>
188<% end %>
ef379996 189 </td><td><a href="users?mod=<% #id user %>">[Modify]</a> <a href="users?del=<% #id user %>">[Delete]</a>
190 <a href="users?retire=<% #id user %>">[Retire]</a></td> </tr>
8d347a33 191<% end %>
192</table>
193
5146e435 194<br><a href="users?cmd=grandfather">Grandfather old users to have applications</a><br>
da3f3cbc 195<a href="users?cmd=unmigrated">Who hasn't migrated yet?</a><br>
9fe97917 196<a href="users?cmd=diff">How does the set of users in AFS compare with the set of active portal users?</a><br>
5146e435 197
8d347a33 198<% end %>
199
200<% @footer [] %>