val modUser : user -> unit
val deleteUser : int -> string
val byPledge : unit -> user list
- val unmigratedUsers : unit -> user list
val validUsername : string -> bool
val userNameToId : string -> int option
val dateString : unit -> string
- val grandfatherUsers : unit -> unit
-
type node = {id : int, name : string, descr : string, debian : string}
val listNodes : unit -> node list
[d] => C.stringFromSql d
| r => rowError ("dateString", r)
-fun grandfatherUsers () =
- let
- val db = getDb ()
-
- fun mkApp [id, name, rname] =
- let
- val id = C.intFromSql id
- val name = C.stringFromSql name
- val rname = C.stringFromSql rname
-
- val aid = nextSeq (db, "MemberAppSeq")
- in
- ignore (C.dml db ($`INSERT INTO MemberApp (id, name, rname, gname, email, forward, uses, other,
- passwd, status, applied, confirmed, decided, msg)
- VALUES (^(C.intToSql aid), ^(C.stringToSql name), ^(C.stringToSql rname),
- NULL, '^name^(emailSuffix)', FALSE, 'GRANDFATHERED', 'GRANDFATHERED',
- 'GRANDFATHERED', 4, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP,
- CURRENT_TIMESTAMP, 'GRANDFATHERED')`));
- ignore (C.dml db ($`UPDATE WebUser SET app = ^(C.intToSql aid) WHERE id = ^(C.intToSql id)`))
- end
- in
- C.app db mkApp "SELECT id, name, rname FROM WebUser WHERE app IS NULL"
- end
-
type node = {id : int, name : string, descr : string, debian : string}
fun mkNodeRow [id, name, descr, debian] =
OS.Process.exit OS.Process.success)
| _ => ignore (OS.Process.system "/usr/bin/tokens >/tmp/tokens.parent")
-fun unmigratedUsers () =
- List.filter (fn user =>
- (ignore (Posix.SysDB.getpwnam (#name user));
- false)
- handle OS.SysErr _ => true) (listActiveUsers ())
-
fun usersDiff (ls1, ls2) =
{onlyInFirst = List.filter (fn x => not (Util.mem (x, ls2))) ls1,
onlyInSecond = List.filter (fn x => not (Util.mem (x, ls1))) ls2}
| _ => %><h3>Couldn't find "paying" or "retired" group by name!</h3><%
end
-elseif $"cmd" = "grandfather" then
- Init.grandfatherUsers()
- %><h3>Grandfathered</h3>
-
-<% elseif $"cmd" = "addform" then
+elseif $"cmd" = "addform" then
showNormal := false %>
<h3>New member</h3>
</table>
</form>
-<% elseif $"cmd" = "unmigrated" then
- showNormal := false;
- ref negative = 0;
- val users = Init.unmigratedUsers () %>
-
-<h3>Unmigrated members (<% length users %>)</h3>
-
-<table>
-<% foreach user in users do %>
- <tr> <td><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a></td>
-<% val bal = Balance.lookupBalance (#bal user);
-if Balance.isNegative bal then
- negative := negative + 1
-end %>
-<td><% #amount bal %></td><td>
-<%if #name bal <> #name user then %>
- <i><% Web.html (#name bal) %></i>
-<% end %>
-</td> </tr>
-<% end %>
-</table>
-
-<p><% negative %> have negative balances.</p>
-
<% elseif $"cmd" = "diff" then
showNormal := false;
<% if showNormal then %>
<a href="users?cmd=addform">Add a user manually</a><br>
+<% if $"showretired" = "1" then %>
+<a href="users?showretired=0">Hide Retired Members</a><br>
+<% else %>
+<a href="users?showretired=1">Show Retired Members</a><br>
+<% end %>
<h3>Manage current members</h3>
<table class="data">
-<% foreach user in Init.listUsers () do %>
- <tr> <td><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a></td> <td>
+<% foreach user in List.filter (fn u => ($"showretired" = "1") or not (Group.userInGroupName (#id u, "retired"))) (Init.listUsers ()) do %>
+ <tr>
+ <td><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a></td>
+ <td>
<% val bal = Balance.lookupBalance (#bal user);
if #name bal <> #name user then %>
<i><% Web.html (#name bal) %></i>
<% end %>
- </td><td><a href="users?mod=<% #id user %>">[Modify]</a> <a href="users?del=<% #id user %>">[Delete]</a>
- <a href="users?retire=<% #id user %>">[Retire]</a></td> </tr>
+ </td>
+ <td><a href="users?mod=<% #id user %>">[Modify]</a> <a href="users?del=<% #id user %>">[Delete]</a>
+ <a href="users?retire=<% #id user %>">[Retire]</a></td>
+ </tr>
<% end %>
</table>
-<br><a href="users?cmd=grandfather">Grandfather old users to have applications</a><br>
-<a href="users?cmd=unmigrated">Who hasn't migrated yet?</a><br>
+<br>
<a href="users?cmd=diff">How does the set of users in AFS compare with the set of active portal users?</a><br>
<% end %>