Mercurial > hg > fapweb
view admin.php @ 493:7061683be67e
Refresh current entry and entrylist data in compo control if regenerating
show positions.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 07 Dec 2013 16:28:19 +0200 |
parents | 1eabbd70cd25 |
children | 8c1a53532be0 |
line wrap: on
line source
<? // // FAPWeb Simple Demoparty System // Party administration page frontend module // (C) Copyright 2012-2013 Tecnic Software productions (TNSP) // $sessionType = "admin"; require_once "mconfig.inc.php"; require_once "msite.inc.php"; require_once "msession.inc.php"; require_once "majax.inc.php"; 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 = 1; break; case VT_INT: $type = 2; break; case VT_BOOL: $type = 3; break; } $args[] = "\"".$item["key"]."\":".$type; } } echo "\n". "function updateSettings()\n". "{\n". " var args = jsMakePostArgs({".implode(",", $args)."}, \"st\", \"\");\n". " jsSendPOSTRequest(\"action=update&type=settings&\"+args);\n". " return false;\n". "}\n"; } function stAdminContent() { echo "<div id=\"adminContent\">\n"; } // Switch to https first, if needed if (!stCheckHTTPS()) { header("Location: https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]); exit; } // Start output $pageCSS["admin.css"] = ""; cmLocaleInit(); cmPrintPageHeader("FAPWeb Administration", " <meta http-equiv=\"Pragma\" content=\"no-cache\" />\n", FALSE); // Initiate SQL database connection if (!stConnectSQLDB()) { // Error occured, bail out early cmPrintPageFooter(); exit; } // Fetch non-"hardcoded" settings from SQL database stReloadSettings(); // Check if sessions are enabled if (!stChkSetting("admPassword")) { stAdminContent(); 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"; cmPrintPageFooter(); exit; } else if (!stAdmSessionAuth(FALSE)) { // Perform authentication if we are not in session already stAdminContent(); 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", "", "", "autofocus=\"autofocus\"")."\n". " ".stGetFormSubmitInput("submit", "Login")."\n". " </form>\n"; cmPrintPageFooter(); exit; } else { ?> <script type="text/javascript"> // <? stCreateSettingsData(); stCommonAJAX("admajax.php", "admlogout.php", FALSE, TRUE); ?> var activeAttendee = -1, prevAttendee = -1; var activeTmp = ""; function jsCloseAdminPopup() { var nitem = document.getElementById("adminPopup"); if (nitem) { nitem.innerHTML = ""; nitem.style.display = "none"; } } function jsOpenAdminPopup(txt) { var nitem = document.getElementById("adminPopup"); if (nitem) { nitem.innerHTML = txt; nitem.style.display = "block"; } } function jsRefreshItems(id,name,extra) { var msuccess = function(txt) { var nitem = document.getElementById(id); if (nitem) nitem.innerHTML = txt; } jsSendPOSTRequest("action=get&type="+name+extra, msuccess); } function jsDeleteItem(id,prefix,type,func,dsc) { var msuccess = function(txt) { var item = document.getElementById(prefix+id); item.style.display = "none"; setTimeout(func, 50); } // Clearly mark the element when asking confirmation var item = document.getElementById(prefix+id); var tmp = item.style.background; item.style.background = "red"; // Ask confirmation for deletion var mcb_ok = function (data) { jsSendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess); item.style.background = tmp; } var mcb_cancel = function (data) { item.style.background = tmp; } jsConfirmBox("Are you sure you want to delete "+dsc+" #"+id+"?", mcb_ok, mcb_cancel, 0); } function refreshDispatchCC(id) { switch (id) { case "Settings": jsRefreshItems("tabContCCSettings", "settings", ""); break; case "News": jsRefreshItems("tabContCCNews", "news", ""); break; case "Attendees": jsRefreshItems("tabContCCAttendees", "attendees", ""); break; case "Voting": jsRefreshItems("tabContCCVoting", "voters", ""); break; case "Compos": jsRefreshItems("tabContCCCompos", "compos", ""); break; case "InfoSys": jsRefreshItems("tabContCCInfoSys", "infoMain", ""); break; case "Entries": refreshCCEntries(); break; } } function refreshCCAttendee(id) { jsRefreshItems("attendee"+ id, "attendee", "&id="+ id); } function refreshCCEntries() { var msuccess = function(txt) { var nitem = document.getElementById("tabContCCEntries"); if (nitem) { if (nitem.innerHTML == "") { nitem.innerHTML = "<div id=\"tabHeadersCM\" class=\"tabHeadersSub\"></div>" + "<div id=\"tabContentsCM\" class=\"tabContentsSub\"></div>"; } try { var tmp = JSON.parse("{"+ txt +"}"); registeredTabs["CM"] = tmp; jsUpdateTabList("CM", ""); if (activeTabs["CM"]) jsSwitchActiveTab("CM", activeTabs["CM"]); } catch (err) { jsMessageBox("JSON.parse("+ txt +") failure: "+ err); } } } jsSendPOSTRequest("action=get&type=compolist", msuccess); } function refreshCMEntry(id) { jsRefreshItems("entry"+ id, "entry", "&id="+ id); } function refreshDispatchCM(id) { jsRefreshItems("tabContCM"+ id, "entries", "&id="+ id); } function addNews() { var args = jsMakePostArgs({"title":1,"text":1,"author":1}, "nn", ""); var msuccess = function(txt) { setTimeout("refreshDispatchCC('News');", 50); } if (args != "") jsSendPOSTRequest("action=add&type=news&"+args, msuccess); return false; } function deleteNews(id) { jsDeleteItem(id, "news", "news", "refreshDispatchCC('News');", "news item"); } function updateNews(id) { var args = jsMakePostArgs({"title":1,"text":1,"author":1}, "ne", id); var msuccess = function(txt) { jsRefreshItems("news"+id, "newsitem", "&id="+id); } if (args != "") jsSendPOSTRequest("action=update&type=news&id="+id+"&"+args, msuccess); } function addAttendee() { var args = jsMakePostArgs({"name":1,"groups":1,"oneliner":1,"email":1}, "ne", "x"); var msuccess = function(txt) { setTimeout("refreshDispatchCC('Attendees');", 50); } if (args != "") jsSendPOSTRequest("action=add&type=attendees&"+args, msuccess); return false; } function deleteAttendee(id) { jsDeleteItem(id, "attendee", "attendees", "refreshDispatchCC('Attendees');", "attendee"); } function updateAttendee(id) { var args = jsMakePostArgs({"name":1,"groups":1,"oneliner":1,"email":1}, "at", id); var msuccess = function(txt) { jsRefreshItems("attendee"+id, "attendee", "&id="+id+"&edit=1"); } if (args != "") jsSendPOSTRequest("action=update&type=attendees&id="+id+"&"+args, msuccess); } function activateAttendee(id) { var msuccess1 = function(txt) { var nitem = document.getElementById("attendee"+prevAttendee); if (nitem) { nitem.innerHTML = txt; nitem.style.background = activeTmp; } } var msuccess2 = function(txt) { var nitem = document.getElementById("attendee"+id); if (nitem) { nitem.innerHTML = txt; activeTmp = nitem.style.background; nitem.style.background = "green"; activeAttendee = id; } } if (activeAttendee != id) { prevAttendee = activeAttendee; activeAttendee = id; if (prevAttendee != -1) jsSendPOSTRequest("action=get&type=attendee&id="+prevAttendee+"&edit=0", msuccess1); jsSendPOSTRequest("action=get&type=attendee&id="+id+"&edit=1", msuccess2); } } function addCompo() { var args = jsMakePostArgs({"name":1, "description":1}, "nc", ""); var msuccess = function(txt) { setTimeout("refreshDispatchCC('Compos');", 50); } if (args != "") jsSendPOSTRequest("action=add&type=compo&"+args, msuccess); return false; } function updateCompo(id) { var args = jsMakePostArgs({"name":1, "description":1, "visible":3, "voting":3, "showAuthors":3}, "co", id); var msuccess = function(txt) { jsRefreshItems("compo"+id, "compo", "&id="+id); } if (args != "") jsSendPOSTRequest("action=update&type=compo&id="+id+"&"+args, msuccess); } function addEntry(id) { var args = jsMakePostArgs({"name":1, "author":1, "filename":1, "info":1}, "ne", id); var msuccess = function(txt) { setTimeout("refreshDispatchCM("+ id +");", 50); } if (args != "") jsSendPOSTRequest("action=add&type=entry&compo_id="+id+"&"+args, msuccess); return false; } function updateEntry(cid, id) { var args = jsMakePostArgs({"name":1, "author":1, "filename":1, "info":1, "compo_id":2}, "en", id); var compo_id = lastPostArgs["compo_id"]; var msuccess = function(txt) { if (cid != compo_id) { var nitem = document.getElementById("entry"+ id); if (nitem) nitem.style.display = "none"; } else setTimeout("refreshCMEntry("+ id +");", 50); } if (args != "") jsSendPOSTRequest("action=update&type=entry&id="+id+"&"+args, msuccess); } function deleteEntry(cid, id) { jsDeleteItem(id, "entry", "entries", "refreshDispatchCM("+ cid +");", "entry"); } function voteKeyRefresh(id) { var msuccess2 = function(txt) { var nitem = document.getElementById("vkey"+id); if (nitem) nitem.className = txt; } var msuccess1 = function(txt) { var nitem = document.getElementById("vkey"+id); if (nitem) nitem.innerHTML = txt; } jsSendPOSTRequest("action=get&type=votekey&id="+id, msuccess1); jsSendPOSTRequest("action=get&type=votekeyclass&id="+id, msuccess2); } function voteKeyUpdate(id, type, args) { var msuccess = function(txt) { voteKeyRefresh(id); } jsSendPOSTRequest("action=votekey&type="+type+"&id="+id+"&"+args, msuccess); } function voteKeySetActive(id) { var args = jsMakePostArgs({"active":3}, "vk", id); var mcb_ok = function (data) { voteKeyUpdate(id, "active", args); } var mcb_cancel = function (data) { voteKeyRefresh(id); } if (lastPostArgs["active"] == 0) jsConfirmBox("Are you sure you want to deactivate vote key #"+id+"?", mcb_ok, mcb_cancel, 0); else mcb_ok(0); } function voteKeyAssign(id, mode) { var args = jsMakePostArgs({"key_id":2}, "vk", id); var mcb_ok = function (data) { voteKeyUpdate(id, (mode ? "assign" : "clear"), args); } if (mode == 0) jsConfirmBox("Are you sure you want to clear vote key assign #"+id+"?", mcb_ok, 0, 0); else mcb_ok(0); } function performSystemCheck() { jsSendPOSTRequest("action=check", jsMessageBox); } function generateEntryPositions(id, patch) { var msuccess = function (data) { refreshDispatchCM(id); refreshCurrEntryData(); refreshCurrEntryListData(); } var mcb_ok = function (data) { if (id == 0) jsSendPOSTRequest("action=randomize&type=all&patch="+patch, msuccess); else jsSendPOSTRequest("action=randomize&type=compo&id="+id+"&patch="+patch, msuccess); } if (patch == 0) { jsConfirmBox("Are you <b>sure</b> you want to delete and regenerate entry show positions "+ (id == 0 ? "for ALL compos" : "for this compo") +"? "+ "<b>This will completely annihilate current show position numbers!</b>", mcb_ok, 0, 0); } else mcb_ok(0); } // // Competition control // function setShowMode(mode) { jsSendPOSTRequest("action=ctrl&type=setShowMode&mode="+mode); } function refreshCurrEntryData() { jsRefreshItems("ctrlCurrEntryData", "infoCurrEntryData", ""); } function refreshCurrEntryListData() { jsRefreshItems("ctrlEntryList", "infoCurrEntryList", ""); refreshCurrEntryData(); } function activateCompo() { jsSendPOSTRequest("action=ctrl&type=setCompoID&id="+jsGetValue("ctrlCompoListSel", 4), refreshCurrEntryListData); } function setSelectedEntry() { jsSendPOSTRequest("action=ctrl&type=setEntry&index="+jsGetValue("ctrlEntryListSel", 4), refreshCurrEntryData); } function switchEntry(dir) { jsSendPOSTRequest("action=ctrl&type="+ (dir < 0 ? "prevEntry" : "nextEntry"), refreshCurrEntryListData); } // // Rotation list editing and handling // function refreshRotationListSel() { jsRefreshItems("ctrlRotationListsSel", "infoRotationLists", ""); } function refreshRotationListEdit(id) { jsRefreshItems("ctrlRotationListEdit", "infoRotationListEdit", "&id="+id+"&full=0"); refreshRotationListSel(); } function refreshActiveRotationList() { jsRefreshItems("ctrlActiveRotationList", "infoActiveRotationList", ""); } function setRotateDuration() { var duration = jsGetValue("ctrlRotSlideDuration", 2); jsSendPOSTRequest("action=ctrl&type=setRotateDuration&duration="+duration); } function setActiveRotationList() { var id = jsGetValue("ctrlRotationListsSel", 4); if (id > 0) jsSendPOSTRequest("action=ctrl&type=setActiveRotationList&id="+id, refreshActiveRotationList); else jsMessageBox("No rotation list selected?"); } function updateRotationList(id) { var name = jsGetValue("ctrlEDRotationListName", 1); jsSendPOSTRequest("action=ctrl&type=updateRotationList&id="+id+"&name="+name, refreshRotationListSel); } function moveRotationListSlide(list_id, dir) { var msuccess = function(txt) { refreshRotationListEdit(list_id); } var slide = jsGetValue("ctrlEDRotationListSel", 4); if (slide) { var str = slide.split("_"); jsSendPOSTRequest("action=ctrl&type=moveRotationListSlide&list_id="+list_id+ "&slide_id="+parseInt(str[0])+"&order_num="+parseInt(str[1])+"&dir="+dir, msuccess); } else jsMessageBox("No slide selected?"); } function addRotationListSlide(list_id) { var msuccess = function(txt) { refreshRotationListEdit(list_id); } var slide_id = jsGetValue("ctrlEDDisplaySlidesSel", 4); if (slide_id > 0) jsSendPOSTRequest("action=ctrl&type=addRotationListSlide&list_id="+list_id+"&slide_id="+slide_id, msuccess); else jsMessageBox("No slide selected?"); } function removeRotationListSlide(list_id) { var msuccess = function(txt) { refreshRotationListEdit(list_id); } var slide = jsGetValue("ctrlEDRotationListSel", 4); if (slide) { var str = slide.split("_"); jsSendPOSTRequest("action=ctrl&type=removeRotationListSlide&list_id="+list_id+ "&slide_id="+parseInt(str[0])+"&order_num="+parseInt(str[1]), msuccess); } else jsMessageBox("No slide selected?"); } function editRotationList() { var id = jsGetValue("ctrlRotationListsSel", 4); if (id > 0) jsSendPOSTRequest("action=get&type=infoRotationListEdit&id="+id, jsOpenAdminPopup); else jsMessageBox("No rotation list selected?"); } function newRotationList() { var msuccess = function(txt) { refreshRotationListSel(); jsOpenAdminPopup(txt); } jsSendPOSTRequest("action=ctrl&type=newRotationList", msuccess); } function deleteRotationList() { var mcb_ok = function(txt) { jsSendPOSTRequest("action=ctrl&type=deleteRotationList&id="+id, refreshRotationListSel); } var id = jsGetValue("ctrlRotationListsSel", 4); if (id > 0) { jsConfirmBox("Are you <b>sure</b> you want to delete rotation list #"+id+"?", mcb_ok, 0, 0); } else jsMessageBox("No rotation list selected?"); } // // Display slide editing and handling // function refreshDisplaySlideListSel() { jsRefreshItems("ctrlDisplaySlidesSel", "infoDisplaySlides", ""); } function updateDisplaySlide(id) { var vtitle = jsGetValue("ctrlDisplaySlideTitle", 1); var vtext = jsGetValue("ctrlDisplaySlideText", 1); jsSendPOSTRequest("action=ctrl&type=updateDisplaySlide&id="+id+"&title="+vtitle+"&text="+vtext, refreshDisplaySlideListSel); jsCloseAdminPopup(); return false; } function editDisplaySlide() { var id = jsGetValue("ctrlDisplaySlidesSel", 4); if (id > 0) jsSendPOSTRequest("action=get&type=infoDisplaySlideEdit&id="+id, jsOpenAdminPopup); else jsMessageBox("No display slide selected?"); } function copyDisplaySlide() { var msuccess = function(txt) { refreshDisplaySlideListSel(); jsOpenAdminPopup(txt); } var id = jsGetValue("ctrlDisplaySlidesSel", 4); if (id > 0) jsSendPOSTRequest("action=ctrl&type=copyDisplaySlide&id="+id, msuccess); else jsMessageBox("No display slide selected?"); } function newDisplaySlide() { var msuccess = function(txt) { refreshDisplaySlideListSel(); jsOpenAdminPopup(txt); } jsSendPOSTRequest("action=ctrl&type=newDisplaySlide", msuccess); } function deleteDisplaySlide() { var msuccess = function(txt) { refreshDisplaySlideListSel(); refreshRotationListSel(); } var mcb_ok = function(txt) { jsSendPOSTRequest("action=ctrl&type=deleteDisplaySlide&id="+id, msuccess); } var id = jsGetValue("ctrlDisplaySlidesSel", 4); if (id > 0) { jsConfirmBox("Are you <b>sure</b> you want to delete slide list #"+id+"?", mcb_ok, 0, 0); } else jsMessageBox("No display slide selected?"); } function activateTempSlide() { var id = jsGetValue("ctrlDisplaySlidesSel", 4); var duration = jsGetValue("ctrlTempSlideDuration", 2); if (id > 0) jsSendPOSTRequest("action=ctrl&type=setTempSlide&id="+id+"&duration="+duration, jsMessageBox); else jsMessageBox("No slide selected?"); } function skipToNextSlide() { jsSendPOSTRequest("action=ctrl&type=skipToNextSlide"); } </script> <!-- ========================== --> <div id="adminPopup"></div> <div id="adminContent"> <div id="nstatus">-</div> <div id="tabHeadersCC" class="tabHeaders"></div> <div id="tabContentsCC" class="tabContents"></div> <script type="text/javascript"> jsRegisterTab("CC", "Settings", "Settings"); jsRegisterTab("CC", "News", "News"); jsRegisterTab("CC", "Attendees", "Attendees"); jsRegisterTab("CC", "Voting", "Voting"); jsRegisterTab("CC", "Compos", "Compos"); jsRegisterTab("CC", "Entries", "Entries"); jsRegisterTab("CC", "InfoSys", "Infosystem"); jsUpdateTabList("CC", "<a class=\"admin\" href=\"admlogout.php\">Logout</a> " + "<a class=\"admin\" href=\"about\">Mainpage</a>"); jsSwitchActiveTab("CC", "Settings"); </script> <? } cmPrintPageFooter(); ?>