payment: note that Stripe has instituted an additional 1% fee for non-US cards
[hcoop/portal.git] / apps.mlt
index 3a26e41..2488349 100644 (file)
--- a/apps.mlt
+++ b/apps.mlt
@@ -1,23 +1,54 @@
 <% @header [("title", ["Membership applications"])];
 
 val you = Init.getUserId ();
-val board = Group.inGroupName "board";
+val board = Group.reallyInGroupName "board";
 val root = Group.inGroupNum 0;
 
 ref showNormal = true;
 
-if $"vote" <> "" then
+if $"show" <> "" then
+       showNormal := false;
+       val usr = Web.stoi ($"show");
+       val user = Init.lookupUser usr;
+       val appl = App.lookupApp (#app user) %>
+
+       <table class="blanks">
+       <tr> <td>Received:</td> <td><% #applied appl %> (<% Util.diffFromNow (#applied appl) %> ago)</td> </tr>
+       <tr> <td>Approved by:</td> <td><%
+               ref first = true;
+               ref found = false;
+               val votes = App.votes (#id appl);
+               foreach (id, name) in votes do
+                       if first then
+                               first := false
+                       else
+                               %>, <%
+                       end
+                       %><a href="user?id=<% id %>"><% name %></a><%
+                       if id = you then
+                               found := true
+                               %> <a href="apps?unvote=<% #id appl %>">[Unvote]</a><%
+                       end
+               end %> <% if (iff board then not found else false) then %><a href="apps?vote=<% #id appl %>">[Vote]</a><% end %></td> </tr>
+       <tr> <td>Username:</td> <td><% #name appl %></td> </tr>
+       <tr> <td>Real name:</td> <td><% Web.html (#rname appl) %></td> </tr>
+       <tr> <td>E-mail:</td> <td><a href="mailto:<% #email appl %>"><% #email appl %></a></td> </tr>
+       <tr> <td>Forward e-mail?</td> <td><% if #forward appl then %>yes<% else %>no<% end %></td> </tr>
+       <tr> <td>Proposed uses:</td> <td><% Web.htmlNl (#uses appl) %></td> </tr>
+       <tr> <td>Other information:</td> <td><% Web.htmlNl (#other appl) %></td> </tr>
+       </table>        
+<% elseif $"vote" <> "" then
        Group.requireGroupName "board";
        App.vote (you, Web.stoi ($"vote"))
-       %><h3><b>Vote registered</b></h3><%
+       %><h3>Vote registered</h3><%
 elseif $"unvote" <> "" then
        Group.requireGroupName "board";
        App.unvote (you, Web.stoi ($"unvote"))
-       %><h3><b>Unvote registered</b></h3><%
+       %><h3>Unvote registered</h3><%
 elseif $"deny" <> "" then
        showNormal := false;
        val appl = App.lookupApp (Web.stoi ($"deny"))
-       %><h3><b>Deny application for <% #name appl %></b></h3>
+       %><h3>Deny application for <% #name appl %></h3>
        <form action="apps" method="post">
        <input type="hidden" name="deny2" value="<% $"deny" %>">
        <b>Reason</b>:<br>
@@ -27,37 +58,37 @@ elseif $"deny" <> "" then
 elseif $"deny2" <> "" then
        Group.requireGroupName "board";
        if not (App.deny (Web.stoi ($"deny2"), $"msg")) then
-               %><h3><b>Error denying application</b></h3><%
+               %><h3>Error denying application</h3><%
        else
-               %><h3><b>Application denied</b></h3><%
+               %><h3>Application denied</h3><%
        end
 elseif $"approve" <> "" then
        showNormal := false;
        val appl = App.lookupApp (Web.stoi ($"approve"))
-       %><h3><b>Approve application for <% #name appl %></b></h3>
+       %><h3>Approve application for <% #name appl %></h3>
        <form action="apps" method="post">
        <input type="hidden" name="approve2" value="<% $"approve" %>">
-       <b>Message</b>:<br>
+       <b>Message</b> (will be added at the end of <tt>~hcoop/portal/welcome.txt</tt>, so you might want to include some introductory text):<br>
        <textarea name="msg" rows="5" cols="80" wrap="soft"></textarea><br>
        <input type="submit" value="Submit">
        </form><%
 elseif $"approve2" <> "" then
        Group.requireGroupName "board";
        if not (App.approve (Web.stoi ($"approve2"), $"msg")) then
-               %><h3><b>Error approving application</b></h3><%
+               %><h3>Error approving application</h3><%
        else
-               %><h3><b>Application approved</b></h3><%
+               %><h3>Application approved</h3><%
        end
 elseif $"cmd" = "approved" then
        showNormal := false
 
-       %><h3><b>Pending applications</b></h3><%
+       %><h3>Pending applications</h3><%
 
-       foreach appl in App.listApps App.ACCEPTED do %>
+       foreach appl in App.listApps [App.ACCEPTED, App.BEING_ADDED] do %>
                <br><hr><br>
-               <table>
-               <tr> <td align="right"><b>Received</b>:</td> <td><% #applied appl %></td> </tr>
-               <tr> <td align="right"><b>Approved by</b>:</td> <td><%
+               <table class="blanks">
+               <tr> <td>Received:</td> <td><% #applied appl %> (<% Util.diffFromNow (#applied appl) %> ago)</td> </tr>
+               <tr> <td>Approved by:</td> <td><%
                        ref first = true;
                        ref found = false;
                        foreach (id, name) in App.votes (#id appl) do
@@ -68,12 +99,16 @@ elseif $"cmd" = "approved" then
                                end
                                %><a href="user?id=<% id %>"><% name %></a><%
                        end %> </td> </tr>
-       <tr> <td align="right"><b>Username</b>:</td> <td><% #name appl %></td> </tr>
-       <tr> <td align="right"><b>Real name</b>:</td> <td><% Web.html (#rname appl) %></td> </tr>
-       <tr> <td align="right"><b>E-mail address</b>:</td> <td><a href="mailto:<% #email appl %>"><% #email appl %></a></td> </tr>
-       <tr> <td align="right"><b>Forward e-mail?</b></td> <td><% if #forward appl then %>yes<% else %>no<% end %></td> </tr>
-       <tr> <td align="right" valign="top"><b>Proposed uses</b>:</td> <td><% Web.htmlNl (#uses appl) %></td> </tr>
-       <tr> <td align="right" valign="top"><b>Other information</b>:</td> <td><% Web.htmlNl (#other appl) %></td> </tr>
+       <tr> <td>Username:</td> <td><% #name appl %></td> </tr>
+       <tr> <td>Real name:</td> <td><% Web.html (#rname appl) %></td> </tr>
+       <tr> <td>E-mail address:</td> <td><a href="mailto:<% #email appl %>"><% #email appl %></a></td> </tr>
+       <% switch #paypal appl of
+         SOME s => %><tr> <td>PayPal:</td> <td><a href="mailto:<% s %>"><% s %></a></td> </tr>
+       <% end %>
+       <tr> <td>Forward e-mail?</td> <td><% if #forward appl then %>yes<% else %>no<% end %></td> </tr>
+       <tr> <td>Proposed uses:</td> <td><% Web.htmlNl (#uses appl) %></td> </tr>
+       <tr> <td>Other information:</td> <td><% Web.htmlNl (#other appl) %></td> </tr>
+       <% if #status appl = App.BEING_ADDED then %><tr> <td colspan="2" align="left"><font color="red"><b>WARNING: Someone already followed the add link for this application.  Maybe he forgot to finish.</b></font></td></tr><% end %>
        </table>
 
        <% if root then %>
@@ -85,28 +120,26 @@ elseif $"add" <> "" then
        showNormal := false;
        val id = Web.stoi ($"add");
        val appl = App.lookupApp id;
-       App.add id %>
+       App.preAdd id %>
 
-First, create this UNIX user:
-<blockquote><tt>portal_adduser <% #name appl %> "<% #rname appl %>"<% if #forward appl then %> "<% #email appl %>"<% end %></tt></blockquote>
-
-<p>You should then run <tt>visudo</tt> to add <% #name appl %> to the <tt>MEMBERS</tt> group.  If you're not transmitting <% #name appl %>'s password to him by other means, run <tt>savepass <% #name appl %> &lt;password&gt;</tt> to save it in <tt>~<% #name appl %>/.pass</tt>.  If <% #name appl %> is bootstrapping with public-key ssh, don't forget to run <tt>savekey <% #name appl %> &lt;authorized_keys file location&gt;</tt>.</p>
+First, run this on gibran:
+<blockquote><tt>new-user <% #name appl %> "<% #rname appl %>"<% if #forward appl then %> "<% #email appl %>"<% end %></tt></blockquote>
 
 <form action="users" method="post">
 <input type="hidden" name="app" value="<% #id appl %>">
-<table>
-<tr> <td align="right"><b>Name</b>:</td> <td><input name="name" value="<% Web.html (#name appl) %>"></td> </tr>
-<tr> <td align="right"><b>Real name</b>:</td> <td><input name="rname" value="<% Web.html (#rname appl) %>"></td> </tr>
-<tr> <td align="right" valign="top"><b>Funded by</b>:</td> <td><select name="bal">
+<table class="blanks">
+<tr> <td>Name:</td> <td><input name="name" value="<% Web.html (#name appl) %>"></td> </tr>
+<tr> <td>Real name:</td> <td><input name="rname" value="<% Web.html (#rname appl) %>"></td> </tr>
+<tr> <td>Funded by:</td> <td><select name="bal">
        <option value="">A new balance</option>
 <% foreach bal in Balance.listBalances () do %>
        <option value="<% #id bal %>"><% Web.html (#name bal) %></option>
 <% end %>
 </select></td></tr>
-<tr> <td align="right"><b>Initial transaction amount</b>:</td> <td><input name="amount"></td> </tr>
-<tr> <td align="right"><b>Initial transaction description</b>:</td> <td><input name="descr"></td> </tr>
-<tr> <td align="right"><input type="checkbox" name="subscribe" checked></td> <td>Subscribe to hcoop-announce</td> </tr>
-<tr> <td align="right"><b>Groups</b>:</td> <td><select name="grp" size="5" multiple>
+<tr> <td>Initial transaction amount:</td> <td><input name="amount"></td> </tr>
+<tr> <td>Initial transaction description:</td> <td><input name="descr"></td> </tr>
+<!--tr> <td><input type="checkbox" name="subscribe" checked></td> <td>Subscribe to hcoop-announce</td> </tr-->
+<tr> <td>Groups:</td> <td><select name="grp" size="5" multiple>
 <% foreach group in Group.listGroups () do %>
        <option value="<% #id group %>"<% if #name group = "paying" then %> selected<% end %>><% Web.html (#name group) %></option>
 <% end %>
@@ -119,21 +152,22 @@ First, create this UNIX user:
 
 <% elseif $"abort" <> "" then
        App.abortAdd (Web.stoi ($"abort"))
-       %><h3><b>Aborted</b></h3><%
+       %><h3>Aborted</h3><%
 
 end %>
 
 <% if showNormal then %>
-<h3><b>Pending applications</b></h3>
+<h3>Pending applications</h3>
 
-<% foreach appl in App.listApps App.PENDING do %>
+<% foreach appl in App.listApps [App.PENDING] do %>
        <br><hr><br>
-       <table>
-       <tr> <td align="right"><b>Received</b>:</td> <td><% #applied appl %></td> </tr>
-       <tr> <td align="right"><b>Approved by</b>:</td> <td><%
+       <table class="blanks">
+       <tr> <td>Received:</td> <td><% #applied appl %> (<% Util.diffFromNow (#applied appl) %> ago)</td></tr>
+       <tr> <td>Approved by:</td> <td><%
                ref first = true;
                ref found = false;
-               foreach (id, name) in App.votes (#id appl) do
+               val votes = App.votes (#id appl);
+               foreach (id, name) in votes do
                        if first then
                                first := false
                        else
@@ -145,19 +179,22 @@ end %>
                                %> <a href="apps?unvote=<% #id appl %>">[Unvote]</a><%
                        end
                end %> <% if (iff board then not found else false) then %><a href="apps?vote=<% #id appl %>">[Vote]</a><% end %></td> </tr>
-       <tr> <td align="right"><b>Username</b>:</td> <td><% #name appl %></td> </tr>
-       <tr> <td align="right"><b>Real name</b>:</td> <td><% Web.html (#rname appl) %></td> </tr>
-       <tr> <td align="right"><b>E-mail address</b>:</td> <td><a href="mailto:<% #email appl %>"><% #email appl %></a></td> </tr>
-       <tr> <td align="right"><b>Forward e-mail?</b></td> <td><% if #forward appl then %>yes<% else %>no<% end %></td> </tr>
-       <tr> <td align="right" valign="top"><b>Proposed uses</b>:</td> <td><% Web.htmlNl (#uses appl) %></td> </tr>
-       <tr> <td align="right" valign="top"><b>Other information</b>:</td> <td><% Web.htmlNl (#other appl) %></td> </tr>
+       <tr> <td>Username:</td> <td><% #name appl %></td> </tr>
+       <tr> <td>Real name:</td> <td><% Web.html (#rname appl) %></td> </tr>
+       <tr> <td>E-mail address:</td> <td><a href="mailto:<% #email appl %>"><% #email appl %></a></td> </tr>
+       <% switch #paypal appl of
+         SOME s => %><tr> <td>PayPal:</td> <td><a href="mailto:<% s %>"><% s %></a></td> </tr>
+       <% end %>
+       <tr> <td>Forward e-mail?</td> <td><% if #forward appl then %>yes<% else %>no<% end %></td> </tr>
+       <tr> <td>Proposed uses:</td> <td><% Web.htmlNl (#uses appl) %></td> </tr>
+       <tr> <td>Other information:</td> <td><% Web.htmlNl (#other appl) %></td> </tr>
        </table>
 
        <% if board then %>
-       <a href="apps?approve=<% #id appl %>">Approve this member.</a><br>
+       <% if length votes >= 3 then %><a href="apps?approve=<% #id appl %>">Approve this member.</a><br><% end %>
        <a href="apps?deny=<% #id appl %>">Deny this application.</a>
        <% end %>
-<% end
+<% end 
 end %>
 
-<% @footer[] %>
\ No newline at end of file
+<% @footer[] %>