comparison admin.inc.php @ 0:8019b357cc03

Initial import.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 04 Dec 2012 19:07:18 +0200
parents
children 76c3b89d7b11
comparison
equal deleted inserted replaced
-1:000000000000 0:8019b357cc03
1 <?
2 // Check if sessions are enabled
3 if (!stChkSetting("admpass"))
4 {
5 echo "<h1>Oh noes, admin configuration not done!</h1>\n".
6 "<p>Better go and prod that, so you get to use the fine admin interface.</p>\n";
7 $authState = "error";
8 }
9 else
10 if (stAuthSession())
11 {
12 $authState = "ok";
13 }
14 else
15 {
16 // Perform authentication if we are not in session already
17 echo "<h1>Party admin login</h1>\n".
18 "<p>Please use illegal telepathy over HTTP to provide a password to enter the party administration systembolaget.</p>\n".
19 "<form name=\"admlogin\" action=\"login.php\" method=\"post\">\n".
20 stGetFormHiddenInput("mode", "check")."\n".
21 stGetFormHiddenInput("goto", $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."\n".
22 stGetFormPasswordInput("admpass", "pass", "")."\n".
23 " <input type=\"submit\" value=\" Login \" />\n".
24 "</form>\n";
25
26 $authState = "login";
27 }
28
29 if ($authState == "ok")
30 {
31 ?>
32 <script type="text/javascript">
33 function statusMsg(msg)
34 {
35 document.getElementById("nstatus").innerHTML = msg;
36 }
37
38
39 function strtrim(str)
40 {
41 if (!str || str == null)
42 return "";
43 return str.replace(/^\s+|\s+$/g,'')
44 }
45
46
47 function strencode(str)
48 {
49 return encodeURIComponent(escape(str));
50 }
51
52
53 function createXMLRequest()
54 {
55 var req;
56 if (window.XMLHttpRequest)
57 {
58 // Modern browsers
59 req = new XMLHttpRequest();
60 }
61 else
62 {
63 // Old IE versions
64 req = new ActiveXObject("Microsoft.XMLHTTP");
65 }
66 return req;
67 }
68
69
70 function sendPOSTRequest(params, success, failure)
71 {
72 var req = createXMLRequest();
73 req.open("POST", "ajax.php", true);
74 req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
75 req.setRequestHeader("Content-length", params.length);
76 req.setRequestHeader("Connection", "close");
77
78 req.onreadystatechange = function()
79 {
80 if (req.readyState == 4)
81 {
82 if (req.status == 404)
83 {
84 window.location = "logout";
85 }
86 else
87 if (req.status == 200)
88 {
89 success(req.responseText);
90 statusMsg(req.statusText);
91 }
92 else
93 {
94 if (failure)
95 {
96 failure(req.status, req.statusText, req.responseText);
97 }
98 else
99 {
100 statusMsg("["+req.status+" - "+req.statusText+"] "+ req.responseText);
101 }
102 }
103 }
104 }
105 req.send(params);
106 }
107
108
109 function makePostArgs(fields, fprefix, fsuffix)
110 {
111 var res = [];
112 for (var id in fields)
113 {
114 var elem = document.getElementById(fprefix + id + fsuffix);
115 if (!elem)
116 {
117 alert("No such DOM element '"+ id +"'.");
118 return "";
119 }
120
121 switch (fields[id])
122 {
123 case 0:
124 case 1:
125 {
126 var str = strtrim(elem.value);
127 if (fields[id] == 1 && str == "")
128 {
129 alert("One or more of the fields are empty.");
130 return "";
131 }
132 res.push(id+"="+strencode(str));
133 }
134 break;
135
136 case 2:
137 res.push(id+"="+parseInt(elem.value));
138 break;
139
140 case 3:
141 res.push(id+"="+(elem.checked ? "1" : "0"));
142 break;
143
144 }
145 }
146 return res.join("&");
147 }
148
149
150 function refreshItems(id,name,msgname)
151 {
152 var msuccess = function(txt)
153 {
154 var nitem = document.getElementById(id);
155 nitem.innerHTML = txt;
156 }
157
158 sendPOSTRequest("action=get&type="+name, msuccess);
159 }
160
161
162 function deleteItem(id,prefix,type,func,dsc)
163 {
164 var msuccess = function(txt)
165 {
166 var item = document.getElementById(prefix+id);
167 item.style.display = "none";
168 setTimeout(func, 550);
169 }
170
171 if (confirm("Are you sure you want to delete "+dsc+" #"+id+"?"))
172 {
173 sendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess);
174 }
175 }
176
177
178 function refreshNews()
179 {
180 refreshItems("nnews", "news", "News list");
181 }
182
183
184 function refreshAttendees()
185 {
186 refreshItems("nattendees", "attendees", "Attendees list");
187 }
188
189
190 function refreshDump()
191 {
192 var msuccess = function(txt)
193 {
194 var nitem = document.getElementById("ndump");
195 nitem.innerHTML = txt;
196 }
197
198 sendPOSTRequest("action=dump&type=attendees", msuccess);
199 }
200
201
202 function refreshCompos()
203 {
204 refreshItems("ncompos", "compos", "Compo list");
205 }
206
207
208 function refreshEntries()
209 {
210 refreshItems("nentries", "entries", "Entry list");
211 }
212
213
214 function refreshVoters()
215 {
216 refreshItems("nvoters", "voters", "Voters list");
217 }
218
219
220 function addNews()
221 {
222 var args = makePostArgs({"title":1,"text":1,"author":1}, "nn", "");
223
224 var msuccess = function(txt)
225 {
226 setTimeout("refreshNews();", 550);
227 }
228
229 sendPOSTRequest(
230 "action=add&type=news&"+args,
231 msuccess);
232 return false;
233 }
234
235
236 function deleteNews(id)
237 {
238 deleteItem(id, "news", "news", "refreshNews();", "news item");
239 }
240
241
242 function deleteAttendee(id)
243 {
244 deleteItem(id, "attendee", "attendees", "refreshAttendees();", "attendee");
245 }
246
247
248 function updateAttendee(id)
249 {
250 var args = makePostArgs({"oneliner":0,"email":0}, "at", id);
251
252 sendPOSTRequest("action=update&type=attendees&id="+id+"&"+args);
253 }
254
255
256 function addCompo()
257 {
258 var args = makePostArgs({"name":1, "description":1}, "nc", "");
259
260 var msuccess = function(txt)
261 {
262 setTimeout("refreshCompos();", 550);
263 }
264
265 sendPOSTRequest("action=add&type=compo&"+args, msuccess);
266 return false;
267 }
268
269
270 function updateCompo(id)
271 {
272 var args = makePostArgs({"name":1, "description":1, "enabled":3}, "co", id);
273
274 sendPOSTRequest("action=update&type=compo&id="+id+"&"+args);
275 }
276
277
278 function addEntry(id)
279 {
280 var args = makePostArgs({"name":1, "author":1}, "ne", id);
281
282 var msuccess = function(txt)
283 {
284 setTimeout("refreshEntries();", 550);
285 }
286
287 sendPOSTRequest("action=add&type=entry&compo_id="+id+"&"+args, msuccess);
288 return false;
289 }
290
291
292 function updateEntry(id)
293 {
294 var args = makePostArgs({"name":1, "author":1}, "en", id);
295
296 sendPOSTRequest(
297 "action=update&type=entry&id="+id+"&"+args);
298 }
299
300
301 function deleteEntry(id)
302 {
303 deleteItem(id, "entry", "entries", "refreshEntries();", "entry");
304 }
305
306
307 function updateVoter(id)
308 {
309 var args = makePostArgs({"enabled":3, "name":0}, "vo", id);
310
311 sendPOSTRequest("action=update&type=voter&id="+id+"&"+args);
312 }
313
314
315 var registeredTabs = Object();
316
317
318 function updateTabList()
319 {
320 var item = document.getElementById("pageTabs");
321 var str = "";
322 for (var id in registeredTabs)
323 {
324 str += "<a href=\"#\" onClick=\"switchActiveTab('"+
325 id+"')\">"+registeredTabs[id]+"</a>";
326 }
327
328 str += "<a class=\"admin\" href=\"logout\">Logout</a>";
329
330 item.innerHTML = str;
331 }
332
333
334 function registerTab(id, name)
335 {
336 registeredTabs[id] = name;
337 }
338
339
340 function refreshTabs()
341 {
342 for (var id in registeredTabs)
343 {
344 setTimeout("refresh"+ registeredTabs[id] +"();", 10);
345 }
346 }
347
348
349 function switchActiveTab(tab)
350 {
351 for (var id in registeredTabs)
352 {
353 var ob = document.getElementById(id);
354 if (ob)
355 {
356 ob.style.display = (tab == id) ? "block" : "none";
357 if (tab == id)
358 {
359 setTimeout("refresh"+ registeredTabs[id] +"();", 10);
360 }
361 }
362 }
363 }
364 </script>
365
366 <div id="nstatus">
367 -
368 </div>
369
370 <div id="pageTabs">
371 </div>
372
373 <!-- ========================== -->
374
375 <div id="ntab0">
376
377 <form method="post" action="" onsubmit="return addNews()">
378 <input id="nntitle" type="text" size="40" /><br />
379 <textarea id="nntext" rows="5" cols="60"></textarea><br />
380 <input id="nnauthor" type="text" value="orgaz" />
381 <input id="nnadd" type="submit" value=" Add post " />
382 <input type="button" value=" Clear " onClick="this.form.reset()" />
383 </form>
384
385 <hr />
386
387 <div id="nnews">
388 </div>
389 </div>
390
391 <!-- ========================== -->
392
393 <div id="ntab1">
394 <div id="nattendees">
395 </div>
396 </div>
397
398 <!-- ========================== -->
399
400 <div id="ntab2">
401 <div id="ndump">
402 </div>
403 </div>
404
405 <!-- ========================== -->
406
407 <div id="ntab3">
408
409 <form method="post" action="" onsubmit="return addCompo()">
410 <input id="ncname" type="text" size="64" /><br />
411 <textarea id="ncdescription" rows="5" cols="60"></textarea><br />
412 <input id="nccompo" type="submit" value=" Add compo " />
413 <input type="button" value=" Clear " onClick="this.form.reset()" />
414 </form>
415
416 <hr />
417 <div id="ncompos">
418 </div>
419 </div>
420
421 <!-- ========================== -->
422
423 <div id="ntab4">
424 <div id="nentries">
425 </div>
426 </div>
427
428 <!-- ========================== -->
429
430 <div id="ntab5">
431 <p>
432 Key entries can only be generated via the shell-utility 'keygen'.
433 </p>
434 <div id="nvoters">
435 </div>
436 </div>
437
438 <!-- ========================== -->
439
440 <script type="text/javascript">
441 registerTab("ntab0", "News");
442 registerTab("ntab1", "Attendees");
443 registerTab("ntab2", "Dump");
444 registerTab("ntab3", "Compos");
445 registerTab("ntab4", "Entries");
446 registerTab("ntab5", "Voters");
447 updateTabList();
448 switchActiveTab("ntab0");
449 </script>
450 <?
451 }
452 ?>