Mercurial > hg > fapweb
view admin.inc.php @ 103:c6b9041078ec
Add hard limit option for attendees, and add feature of using "0" to disable
hard and soft limit completely.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 21 Oct 2013 14:52:06 +0300 |
parents | 4684336cec09 |
children | a85f258f6beb |
line wrap: on
line source
<? $sessionType = "admin"; function stCreateSettingsData() { $args = array(); if (($res = stExecSQL("SELECT * FROM settings")) !== FALSE) { foreach ($res as $item) { switch ($item["vtype"]) { case VT_STR: case VT_TEXT: $type = 0; break; case VT_INT: $type = 4; break; case VT_BOOL: $type = 3; break; } $args[] = "\"".$item["key"]."\":".$type; } } echo "\n". "function updateSettings()\n". "{\n". " var args = makePostArgs({".implode(",", $args)."}, \"st\", \"\");\n". " sendPOSTRequest(\"action=update&type=settings&\"+args);\n". " return false;\n". "}\n"; } // 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". stGetFormStart("admlogin", "admlogin.php"). stGetFormHiddenInput("mode", "check")."\n". stGetFormPasswordInput("admpass", "", "")."\n". stGetFormSubmitInput("submit", "Login"). "</form>\n"; $authState = "login"; } if ($authState == "ok") { ?> <script type="text/javascript"> // <? stCreateSettingsData(); ?> 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 = "admlogout.php"; } else if (req.status == 200) { if (success) { 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 '"+ fprefix + id + fsuffix +"'."); return ""; } switch (fields[id]) { case 0: case 1: case 4: { var str = strtrim(elem.value); if ((fields[id] == 1 || fields[id] == 4) && str == "") { alert("One or more of the required fields are empty."); return ""; } if (fields[id] == 4) res.push(id+"="+parseInt(elem.value)); else 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 refreshVoters() { refreshItems("nvoters", "voters", "Voters list"); } function refreshCompos() { refreshItems("ncompos", "compos", "Compo list"); } function refreshEntries() { refreshItems("nentries", "entries", "Entry list"); } function addNews() { var args = makePostArgs({"title":1,"text":1,"author":1}, "nn", ""); var msuccess = function(txt) { setTimeout("refreshNews();", 50); } if (args != "") sendPOSTRequest("action=add&type=news&"+args, msuccess); return false; } function deleteNews(id) { deleteItem(id, "news", "news", "refreshNews();", "news item"); } function addAttendee() { var args = makePostArgs({"name":1,"groups":0,"oneliner":0,"email":0}, "ne", "x"); var msuccess = function(txt) { setTimeout("refreshAttendees();", 50); } if (args != "") sendPOSTRequest("action=add&type=attendees&"+args, msuccess); return false; } function deleteAttendee(id) { deleteItem(id, "attendee", "attendees", "refreshAttendees();", "attendee"); } function updateAttendee(id) { var args = makePostArgs({"oneliner":0,"email":0,"active":3}, "at", id); var msuccess = function(txt) { setTimeout("refreshAttendees();", 50); } if (args != "") sendPOSTRequest("action=update&type=attendees&id="+id+"&"+args, msuccess); } function updateAttendee2(id) { var elem = document.getElementById("atactive"+id); if (elem && !elem.checked) { if (confirm("Are you sure you want deactivate vote ID #"+id+"?")) updateAttendee(id); else setTimeout("refreshAttendees();", 50); } else updateAttendee(id); } function addCompo() { var args = makePostArgs({"name":1, "description":1}, "nc", ""); var msuccess = function(txt) { setTimeout("refreshCompos();", 50); } if (args != "") sendPOSTRequest("action=add&type=compo&"+args, msuccess); return false; } function updateCompo(id) { var args = makePostArgs({"name":1, "description":1, "visible":3, "voting":3, "showAuthors":3}, "co", id); if (args != "") sendPOSTRequest("action=update&type=compo&id="+id+"&"+args); } function addEntry(id) { var args = makePostArgs({"name":1, "author":1, "filename":0}, "ne", id); var msuccess = function(txt) { setTimeout("refreshEntries();", 50); } if (args != "") sendPOSTRequest("action=add&type=entry&compo_id="+id+"&"+args, msuccess); return false; } function updateEntry(id) { var args = makePostArgs({"name":1, "author":1, "filename":0, "compo_id":2}, "en", id); var msuccess = function(txt) { setTimeout("refreshEntries();", 50); } if (args != "") sendPOSTRequest("action=update&type=entry&id="+id+"&"+args, msuccess); } function deleteEntry(id) { deleteItem(id, "entry", "entries", "refreshEntries();", "entry"); } 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=\"admlogout.php\">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()"> <div id="nsettings"></div> </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="tabVoters"> <div id="nvoters"></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> <!-- ========================== --> <script type="text/javascript"> registerTab("tabSettings", "Settings"); registerTab("tabNews", "News"); registerTab("tabAttendees", "Attendees"); registerTab("tabVoters", "Voters"); registerTab("tabCompos", "Compos"); registerTab("tabEntries", "Entries"); updateTabList(); switchActiveTab("tabSettings"); </script> <? } ?>