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