Mercurial > hg > fapweb
view 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 source
<? // 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> <? } ?>