Mercurial > hg > fapweb
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/admin.inc.php Tue Dec 04 19:07:18 2012 +0200 @@ -0,0 +1,452 @@ +<? +// Check if sessions are enabled +if (!stChkSetting("admpass")) +{ + echo "<h1>Oh noes, admin configuration not done!</h1>\n". + "<p>Better go and prod that, so you get to use the fine admin interface.</p>\n"; + $authState = "error"; +} +else +if (stAuthSession()) +{ + $authState = "ok"; +} +else +{ + // Perform authentication if we are not in session already + echo "<h1>Party admin login</h1>\n". + "<p>Please use illegal telepathy over HTTP to provide a password to enter the party administration systembolaget.</p>\n". + "<form name=\"admlogin\" action=\"login.php\" method=\"post\">\n". + stGetFormHiddenInput("mode", "check")."\n". + stGetFormHiddenInput("goto", $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."\n". + stGetFormPasswordInput("admpass", "pass", "")."\n". + " <input type=\"submit\" value=\" Login \" />\n". + "</form>\n"; + + $authState = "login"; +} + +if ($authState == "ok") +{ +?> +<script type="text/javascript"> +function statusMsg(msg) +{ + document.getElementById("nstatus").innerHTML = msg; +} + + +function strtrim(str) +{ + if (!str || str == null) + return ""; + return str.replace(/^\s+|\s+$/g,'') +} + + +function strencode(str) +{ + return encodeURIComponent(escape(str)); +} + + +function createXMLRequest() +{ + var req; + if (window.XMLHttpRequest) + { + // Modern browsers + req = new XMLHttpRequest(); + } + else + { + // Old IE versions + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + return req; +} + + +function sendPOSTRequest(params, success, failure) +{ + var req = createXMLRequest(); + req.open("POST", "ajax.php", true); + req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + req.setRequestHeader("Content-length", params.length); + req.setRequestHeader("Connection", "close"); + + req.onreadystatechange = function() + { + if (req.readyState == 4) + { + if (req.status == 404) + { + window.location = "logout"; + } + else + if (req.status == 200) + { + success(req.responseText); + statusMsg(req.statusText); + } + else + { + if (failure) + { + failure(req.status, req.statusText, req.responseText); + } + else + { + statusMsg("["+req.status+" - "+req.statusText+"] "+ req.responseText); + } + } + } + } + req.send(params); +} + + +function makePostArgs(fields, fprefix, fsuffix) +{ + var res = []; + for (var id in fields) + { + var elem = document.getElementById(fprefix + id + fsuffix); + if (!elem) + { + alert("No such DOM element '"+ id +"'."); + return ""; + } + + switch (fields[id]) + { + case 0: + case 1: + { + var str = strtrim(elem.value); + if (fields[id] == 1 && str == "") + { + alert("One or more of the fields are empty."); + return ""; + } + res.push(id+"="+strencode(str)); + } + break; + + case 2: + res.push(id+"="+parseInt(elem.value)); + break; + + case 3: + res.push(id+"="+(elem.checked ? "1" : "0")); + break; + + } + } + return res.join("&"); +} + + +function refreshItems(id,name,msgname) +{ + var msuccess = function(txt) + { + var nitem = document.getElementById(id); + nitem.innerHTML = txt; + } + + sendPOSTRequest("action=get&type="+name, msuccess); +} + + +function deleteItem(id,prefix,type,func,dsc) +{ + var msuccess = function(txt) + { + var item = document.getElementById(prefix+id); + item.style.display = "none"; + setTimeout(func, 550); + } + + if (confirm("Are you sure you want to delete "+dsc+" #"+id+"?")) + { + sendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess); + } +} + + +function refreshNews() +{ + refreshItems("nnews", "news", "News list"); +} + + +function refreshAttendees() +{ + refreshItems("nattendees", "attendees", "Attendees list"); +} + + +function refreshDump() +{ + var msuccess = function(txt) + { + var nitem = document.getElementById("ndump"); + nitem.innerHTML = txt; + } + + sendPOSTRequest("action=dump&type=attendees", msuccess); +} + + +function refreshCompos() +{ + refreshItems("ncompos", "compos", "Compo list"); +} + + +function refreshEntries() +{ + refreshItems("nentries", "entries", "Entry list"); +} + + +function refreshVoters() +{ + refreshItems("nvoters", "voters", "Voters list"); +} + + +function addNews() +{ + var args = makePostArgs({"title":1,"text":1,"author":1}, "nn", ""); + + var msuccess = function(txt) + { + setTimeout("refreshNews();", 550); + } + + sendPOSTRequest( + "action=add&type=news&"+args, + msuccess); + return false; +} + + +function deleteNews(id) +{ + deleteItem(id, "news", "news", "refreshNews();", "news item"); +} + + +function deleteAttendee(id) +{ + deleteItem(id, "attendee", "attendees", "refreshAttendees();", "attendee"); +} + + +function updateAttendee(id) +{ + var args = makePostArgs({"oneliner":0,"email":0}, "at", id); + + sendPOSTRequest("action=update&type=attendees&id="+id+"&"+args); +} + + +function addCompo() +{ + var args = makePostArgs({"name":1, "description":1}, "nc", ""); + + var msuccess = function(txt) + { + setTimeout("refreshCompos();", 550); + } + + sendPOSTRequest("action=add&type=compo&"+args, msuccess); + return false; +} + + +function updateCompo(id) +{ + var args = makePostArgs({"name":1, "description":1, "enabled":3}, "co", id); + + sendPOSTRequest("action=update&type=compo&id="+id+"&"+args); +} + + +function addEntry(id) +{ + var args = makePostArgs({"name":1, "author":1}, "ne", id); + + var msuccess = function(txt) + { + setTimeout("refreshEntries();", 550); + } + + sendPOSTRequest("action=add&type=entry&compo_id="+id+"&"+args, msuccess); + return false; +} + + +function updateEntry(id) +{ + var args = makePostArgs({"name":1, "author":1}, "en", id); + + sendPOSTRequest( + "action=update&type=entry&id="+id+"&"+args); +} + + +function deleteEntry(id) +{ + deleteItem(id, "entry", "entries", "refreshEntries();", "entry"); +} + + +function updateVoter(id) +{ + var args = makePostArgs({"enabled":3, "name":0}, "vo", id); + + sendPOSTRequest("action=update&type=voter&id="+id+"&"+args); +} + + +var registeredTabs = Object(); + + +function updateTabList() +{ + var item = document.getElementById("pageTabs"); + var str = ""; + for (var id in registeredTabs) + { + str += "<a href=\"#\" onClick=\"switchActiveTab('"+ + id+"')\">"+registeredTabs[id]+"</a>"; + } + + str += "<a class=\"admin\" href=\"logout\">Logout</a>"; + + item.innerHTML = str; +} + + +function registerTab(id, name) +{ + registeredTabs[id] = name; +} + + +function refreshTabs() +{ + for (var id in registeredTabs) + { + setTimeout("refresh"+ registeredTabs[id] +"();", 10); + } +} + + +function switchActiveTab(tab) +{ + for (var id in registeredTabs) + { + var ob = document.getElementById(id); + if (ob) + { + ob.style.display = (tab == id) ? "block" : "none"; + if (tab == id) + { + setTimeout("refresh"+ registeredTabs[id] +"();", 10); + } + } + } +} +</script> + +<div id="nstatus"> +- +</div> + +<div id="pageTabs"> +</div> + +<!-- ========================== --> + +<div id="ntab0"> + +<form method="post" action="" onsubmit="return addNews()"> + <input id="nntitle" type="text" size="40" /><br /> + <textarea id="nntext" rows="5" cols="60"></textarea><br /> + <input id="nnauthor" type="text" value="orgaz" /> + <input id="nnadd" type="submit" value=" Add post " /> + <input type="button" value=" Clear " onClick="this.form.reset()" /> +</form> + +<hr /> + +<div id="nnews"> +</div> +</div> + +<!-- ========================== --> + +<div id="ntab1"> +<div id="nattendees"> +</div> +</div> + +<!-- ========================== --> + +<div id="ntab2"> +<div id="ndump"> +</div> +</div> + +<!-- ========================== --> + +<div id="ntab3"> + +<form method="post" action="" onsubmit="return addCompo()"> + <input id="ncname" type="text" size="64" /><br /> + <textarea id="ncdescription" rows="5" cols="60"></textarea><br /> + <input id="nccompo" type="submit" value=" Add compo " /> + <input type="button" value=" Clear " onClick="this.form.reset()" /> +</form> + +<hr /> +<div id="ncompos"> +</div> +</div> + +<!-- ========================== --> + +<div id="ntab4"> +<div id="nentries"> +</div> +</div> + +<!-- ========================== --> + +<div id="ntab5"> +<p> +Key entries can only be generated via the shell-utility 'keygen'. +</p> +<div id="nvoters"> +</div> +</div> + +<!-- ========================== --> + +<script type="text/javascript"> +registerTab("ntab0", "News"); +registerTab("ntab1", "Attendees"); +registerTab("ntab2", "Dump"); +registerTab("ntab3", "Compos"); +registerTab("ntab4", "Entries"); +registerTab("ntab5", "Voters"); +updateTabList(); +switchActiveTab("ntab0"); +</script> +<? +} +?> \ No newline at end of file