Join script should rule out retired usernames
[bpt/portal.git] / quota.mlt
1 <% @header [("title", ["Disk quota change requests"])];
2
3 val admin = Group.inGroupName "server";
4
5 if $"new" <> "" then
6 ref url = "?cmd=request&msg=" ^ Web.urlEncode ($"msg");
7 ref changed = false;
8 val uname = Init.getUserName ();
9
10 %>Are you sure you want to request these quota changes?
11 <ul><%
12
13 foreach vol in Quotas.getQuotas uname do
14 val requested = Web.stoi ($(#vol vol));
15 url := url ^ "&" ^ #vol vol ^ "=" ^ Int.toString requested;
16 if requested <> #quota vol then
17 changed := true;
18 %><li> Change quota for <% #vol vol %> from <% #quota vol %> to <% requested %>.</li><%
19 end
20 end;
21
22 %></ul><%
23 if changed then %>
24 <a href="<% url %>">Yes, I'm sure!</a>
25 <% else %>
26 Hm, no changes!
27 <% end
28 elseif $"cmd" = "request" then
29 ref cmds = "";
30 val uname = Init.getUserName ();
31
32 foreach vol in Quotas.getQuotas uname do
33 val requested = Web.stoi ($(#vol vol));
34 if requested <> #quota vol then
35 cmds := cmds ^ "fs sq " ^ Quotas.path (#vol vol) ^ " " ^ Int.toString requested
36 ^ "\n# Current quota: " ^ Int.toString (#quota vol) ^ "\n"
37 end
38 end;
39
40 val id = Quota.add (Init.getUserId (), cmds, $"msg");
41 if not (Quota.notifyNew id) then
42 %><h3>Error sending e-mail notification</h3><%
43 end
44 %><h3>Request added</h3><%
45
46 elseif $"cmd" = "open" then
47 %><h3>Open requests</h3>
48 <a href="?cmd=list">List all requests</a><%
49
50 foreach (name, req) in Quota.listOpen () do %>
51 <br><hr><br>
52 <table class="blanks">
53 <tr> <td>By:</td> <td><a href="user?id=<% #usr req %>"><% name %></a></td> </tr>
54 <tr> <td>Time:</td> <td><% #stamp req %> (<% Util.diffFromNow (#stamp req) %> ago)</td> </tr>
55 <tr> <td>Request:</td> <td><% Web.htmlNl (#data req) %></td> </tr>
56 <tr> <td>Reason:</td> <td><% Web.html (#msg req) %></td> </tr>
57 </table>
58
59 <% if admin then %>
60 <br>
61 <a href="?mod=<% #id req %>">[Modify]</a>
62 <a href="?del=<% #id req %>">[Delete]</a><br>
63 <% end %>
64
65 <% end
66
67 elseif $"cmd" = "list" then
68 %><h3>All requests</h3><%
69
70 foreach (name, req) in Quota.list () do %>
71 <br><hr><br>
72 <table class="blanks">
73 <tr> <td>By:</td> <td><a href="user?id=<% #usr req %>"><% name %></a></td> </tr>
74 <tr> <td>Time:</td> <td><% #stamp req %> (<% Util.diffFromNow (#stamp req) %> ago)</td> </tr>
75 <tr> <td>Request:</td> <td><% Web.htmlNl (#data req) %></td> </tr>
76 <tr> <td>Reason:</td> <td><% Web.html (#msg req) %></td> </tr>
77 </table>
78
79 <% if admin then %>
80 <br>
81 <a href="?mod=<% #id req %>">[Modify]</a>
82 <a href="?del=<% #id req %>">[Delete]</a>
83 <% end %>
84
85 <% end
86
87 elseif $"mod" <> "" then
88 Group.requireGroupName "server";
89 val id = Web.stoi ($"mod");
90 val req = Quota.lookup id;
91 val user = Init.lookupUser (#usr req) %>
92 <h3>Handle request</h3>
93
94 <form method="post">
95 <input type="hidden" name="save" value="<% id %>">
96 <table class="blanks">
97 <tr> <td>Requestor:</td> <td><a href="user?id=<% #usr req %>"><% #name user %></a></td> </tr>
98 <tr> <td>Time:</td> <td><% #stamp req %> (<% Util.diffFromNow (#stamp req) %> ago)</td> </tr>
99 <tr> <td>Status:</td> <td><select name="status">
100 <option value="0"<% if #status req = Quota.NEW then %> selected<% end %>>New</option>
101 <option value="1"<% if #status req = Quota.INSTALLED then %> selected<% end %>>Installed</option>
102 <option value="2"<% if #status req = Quota.REJECTED then %> selected<% end %>>Rejected</option>
103 </select></td> </tr>
104 <tr> <td>Request:</td> <td><input name="req" size="60" value="<% Web.html (#data req) %>"></td> </tr>
105 <tr> <td>Message:</td> <td><textarea name="msg" rows="10" cols="80" wrap="soft"><% Web.html (#msg req) %></textarea></td> </tr>
106 <tr> <td><input type="submit" value="Save"></td> </tr>
107 </table>
108 </form>
109
110 <% elseif $"save" <> "" then
111 Group.requireGroupName "server";
112 val id = Web.stoi ($"save");
113 val req = Quota.lookup id;
114 val oldStatus = #status req;
115 val newStatus = Quota.statusFromInt (Web.stoi ($"status"));
116 Quota.modify {req with data = $"req", msg = $"msg", status = newStatus};
117 if not (Quota.notifyMod (oldStatus, newStatus, Init.getUserName(), id)) then
118 %><h3>Error sending e-mail notification</h3><%
119 end
120 %><h3>Request modified</h3>
121 Back to: <a href="?cmd=open">open requests</a>, <a href="?cmd=list">all requests</a>
122
123 <% elseif $"del" <> "" then
124 Group.requireGroupName "server";
125 val id = Web.stoi ($"del");
126 val req = Quota.lookup id;
127 val user = Init.lookupUser (#usr req)
128 %><h3>Are you sure you want to delete request by <% #name user %> for <tt><% #data req %></tt>?</h3>
129 <a href="?del2=<% id %>">Yes, I'm sure!</a>
130
131 <% elseif $"del2" <> "" then
132 Group.requireGroupName "server";
133 val id = Web.stoi ($"del2");
134 Quota.delete id
135 %><h3>Request deleted</b><h3>
136 Back to: <a href="?cmd=open">open requests</a>, <a href="?cmd=list">all requests</a>
137
138 <% else %>
139
140 <h3>Request a disk quota change</h3>
141
142 <p>Remember that a high quota does not by itself use up any resources. Quotas are solely a check on unintentional overusage. We don't yet have any concrete policies to charge members based on disk usage, and, if we do implement such policies, you'll be charged only on actual disk usage, not quota.</p>
143
144 <form method="post">
145
146 <table>
147 <tr> <th>Volume</th> <th>Used (kB)</th> <th>Quota now (kB)</th> <th>Requested quota (kB)</th> </tr>
148 <% foreach vol in Quotas.getQuotas (Init.getUserName ()) do %>
149 <tr> <td><% #vol vol %></td> <td><% #used vol %></td> <td><% #quota vol %></td>
150 <td><input name="<% #vol vol %>" value="<% #quota vol %>"></td> </tr>
151 <% end %>
152 </table>
153
154 <input type="hidden" name="new" value="1">
155 <table class="blanks">
156 <tr> <td>Additional comments:</td> <td><textarea name="msg" rows="5" cols="80" wrap="soft"></textarea></td> </tr>
157 <tr> <td><input type="submit" value="Request"></td> </tr>
158 </table>
159 </form>
160
161 <% end %>
162
163 <% @footer[] %>