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
FROM WebUser
ORDER BY name`)
+fun listActiveUsers () =
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares
+ FROM WebUserActive
+ ORDER BY name`)
+
fun nextSeq (db, seq) =
case C.oneRow db ($`SELECT nextval('^(seq)')`) of
[id] => C.intFromSql id
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 ())
+
end
</table>
</form>
+<% elseif $"cmd" = "unmigrated" then
+ showNormal := false;
+ 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> <td>
+<% val bal = Balance.lookupBalance (#bal user);
+if #name bal <> #name user then %>
+<i><% Web.html (#name bal) %></i>
+<% end %>
+ </td> </tr>
+<% end %>
+</table>
+
<% end %>
<% if showNormal then %>
</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>
<% end %>