Mercurial > hg > fapweb
view admin.inc.php @ 10:11816aad6967
Start work on settings interface.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 06 Dec 2012 14:44:30 +0200 |
parents | 4c5f651aa107 |
children | e36c4d2b09c4 |
line wrap: on
line source
<? // Check if sessions are enabled if (!stChkSetting("admPassword")) { 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 (stAdmSessionAuth()) { $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(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, 50); } if (confirm("Are you sure you want to delete "+dsc+" #"+id+"?")) { sendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess); } } function refreshSettings() { refreshItems("nsettings", "settings", "General settings"); } 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();", 50); } 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();", 50); } 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();", 50); } 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); var msuccess = function(txt) { setTimeout("refreshVoters();", 50); } sendPOSTRequest("action=update&type=voter&id="+id+"&"+args, msuccess); } function updateSettings() { var args = makePostArgs({ "oneliner":0, "email":0 }, "st", ""); sendPOSTRequest("action=update&type=settings&"+args); } var registeredTabs = Object(); function updateTabList() { var item = document.getElementById("pageTabs"); var str = ""; for (var id in registeredTabs) { str += "<a id=\"cc"+id+ "\"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); var ccob = document.getElementById("cc"+id); if (ob && ccob) { ob.style.display = (tab == id) ? "block" : "none"; ccob.style.borderTop = (tab == id) ? "4px solid white" : "none"; if (tab == id) { setTimeout("refresh"+ registeredTabs[id] +"();", 10); } } } } </script> <!-- ========================== --> <div id="nstatus">-</div> <div id="pageTabs"></div> <!-- ========================== --> <div id="tabSettings"> <form method="post" action="" onsubmit="return updateSettings()"> <input id="stsave1" type="submit" value=" Save settings " /> <div id="nsettings"></div> <input id="stsave2" type="submit" value=" Save settings " /> </form> </div> <!-- ========================== --> <div id="tabNews"> <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="tabAttendees"> <div id="nattendees"></div> </div> <!-- ========================== --> <div id="tabDump"> <div id="ndump"></div> </div> <!-- ========================== --> <div id="tabCompos"> <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="tabEntries"> <div id="nentries"></div> </div> <!-- ========================== --> <div id="tabVoters"> <p> Key entries can only be generated via the shell-utility 'keygen'. </p> <div id="nvoters"></div> </div> <!-- ========================== --> <script type="text/javascript"> registerTab("tabSettings", "Settings"); registerTab("tabNews", "News"); registerTab("tabAttendees", "Attendees"); registerTab("tabDump", "Dump"); registerTab("tabCompos", "Compos"); registerTab("tabEntries", "Entries"); registerTab("tabVoters", "Voters"); updateTabList(); switchActiveTab("tabVoters"); </script> <? } ?>