KF2-Server-Extension/ServerExtMut/Classes/ExtWebApp.uc
2020-11-28 23:04:55 +03:00

281 lines
9.6 KiB
Ucode

Class ExtWebApp extends Object implements(IQueryHandler);
var WebAdmin webadmin;
var string ExtWebURL;
var int EditPageIndex;
var ExtWebAdmin_UI ExtAdminUI;
var ServerExtMut MyMutator;
function cleanup()
{
webadmin = None;
MyMutator = None;
if(ExtAdminUI!=None)
{
ExtAdminUI.Cleanup();
ExtAdminUI = None;
}
}
function init(WebAdmin webapp)
{
webadmin = webapp;
}
function registerMenuItems(WebAdminMenu menu)
{
menu.addMenu(ExtWebURL, "ExtServer Mod", self, "Modify settings of Extended Server Mod.", -44);
}
function bool handleQuery(WebAdminQuery q)
{
switch (q.request.URI)
{
case ExtWebURL:
handleExtMod(q);
return true;
}
return false;
}
final function IncludeFile(WebAdminQuery q, string file)
{
local string S;
if(webadmin.HTMLSubDirectory!="")
{
S = webadmin.Path $ "/" $ webadmin.HTMLSubDirectory $ "/" $ file;
if (q.response.FileExists(S))
{
q.response.IncludeUHTM(S);
return;
}
}
q.response.IncludeUHTM(webadmin.Path $ "/" $ file);
}
final function SendHeader(WebAdminQuery q, string Title)
{
local IQueryHandler handler;
q.response.Subst("page.title", Title);
q.response.Subst("page.description", "");
foreach webadmin.handlers(handler)
{
handler.decoratePage(q);
}
q.response.Subst("messages", webadmin.renderMessages(q));
if (q.session.getString("privilege.log") != "")
{
q.response.Subst("privilege.log", webadmin.renderPrivilegeLog(q));
}
IncludeFile(q,"header.inc");
q.response.SendText("<div id=\"content\"><h2>"$Title$"</h2></div><div class=\"section\">");
}
final function SendFooter(WebAdminQuery q)
{
IncludeFile(q,"navigation.inc");
IncludeFile(q,"footer.inc");
q.response.ClearSubst();
}
final function AddConfigEditbox(WebAdminQuery q, string InfoStr, string CurVal, int MaxLen, string ResponseVar, string Tooltip, optional bool bSkipTrail)
{
local string S;
S = "<TR><TD><abbr title=\""$Tooltip$"\">"$InfoStr$":</abbr></TD><TD><input class=\"textbox\" class=\"text\" name=\""$ResponseVar$"\" value=\""$CurVal$"\"></TD>";
if(!bSkipTrail)
S $= "</TR>";
q.response.SendText(S);
}
final function AddConfigCheckbox(WebAdminQuery q, string InfoStr, bool bCur, string ResponseVar, string Tooltip)
{
local string S;
S = bCur ? " checked" : "";
S = "<TR><TD><abbr title=\""$Tooltip$"\">"$InfoStr$":</abbr></TD><TD><input type=\"checkbox\" name=\""$ResponseVar$"\" value=\"1\" "$S$"></TD></TR>";
q.response.SendText(S);
}
final function AddConfigTextbox(WebAdminQuery q, string InfoStr, string CurVal, int Rows, string ResponseVar, string Tooltip)
{
local string S;
S = "<TR><TD><abbr title=\""$Tooltip$"\">"$InfoStr$":</abbr></TD><TD>";
S $= "<textarea name=\""$ResponseVar$"\" rows=\""$Rows$"\" cols=\"80\">"$CurVal$"</textarea></TD></TR>";
q.response.SendText(S);
}
function handleExtMod(WebAdminQuery q)
{
local int i,j,z;
local string S;
local delegate<ExtWebAdmin_UI.OnGetValue> GetV;
local delegate<ExtWebAdmin_UI.OnSetValue> SetV;
local bool bEditArray;
if(ExtAdminUI==None)
{
ExtAdminUI = new (None) class'ExtWebAdmin_UI';
MyMutator.InitWebAdmin(ExtAdminUI);
}
// First check if user is trying to get to another page.
S = q.request.getVariable("GoToPage");
if(S!="")
{
if(S=="Main Menu")
EditPageIndex = -1;
else EditPageIndex = ExtAdminUI.ConfigList.Find('PageName',S);
}
if(EditPageIndex<0 || EditPageIndex>=ExtAdminUI.ConfigList.Length)
{
// Show main links page.
SendHeader(q,"Ext Server Links page");
q.response.SendText("<table id=\"settings\" class=\"grid\"><thead><tr><th>Links</th></tr></thead><tbody>");
for(i=0; i<ExtAdminUI.ConfigList.Length; ++i)
q.response.SendText("<tr><td><form action=\""$webadmin.Path$ExtWebURL$"\"><input class=\"button\" name=\"GoToPage\" type=\"submit\" value=\""$ExtAdminUI.ConfigList[i].PageName$"\"></form></td></tr>");
q.response.SendText("</tbody></table></div></div></body></html>");
}
else
{
S = q.request.getVariable("edit"$EditPageIndex);
bEditArray = false;
if(S=="Submit")
{
// Read setting values.
for(i=0; i<ExtAdminUI.ConfigList[EditPageIndex].Configs.Length; ++i)
{
S = q.request.getVariable("PR"$i,"#NULL");
if(S!="#NULL")
{
SetV = ExtAdminUI.ConfigList[EditPageIndex].SetValue;
SetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,0,S);
}
else if(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropType==1) // Checkboxes return nothing if unchecked.
{
SetV = ExtAdminUI.ConfigList[EditPageIndex].SetValue;
SetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,0,"0");
}
}
}
else if(Left(S,5)=="Edit ")
{
i = ExtAdminUI.ConfigList[EditPageIndex].Configs.Find('UIName',Mid(S,5));
if(i!=-1 && ExtAdminUI.ConfigList[EditPageIndex].Configs[i].NumElements==-1) // Check if valid.
{
// Edit dynamic array.
bEditArray = true;
}
}
else if(Left(S,7)=="Submit ")
{
i = ExtAdminUI.ConfigList[EditPageIndex].Configs.Find('UIName',Mid(S,7));
if(i!=-1 && ExtAdminUI.ConfigList[EditPageIndex].Configs[i].NumElements==-1) // Check if valid.
{
// Submitted dynamic array values.
GetV = ExtAdminUI.ConfigList[EditPageIndex].GetValue;
SetV = ExtAdminUI.ConfigList[EditPageIndex].SetValue;
z = int(GetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,-1));
for(j=z; j>=0; --j)
{
if(q.request.getVariable("DEL"$j)=="1")
SetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,j,"#DELETE");
else
{
S = q.request.getVariable("PR"$j,"New Line");
if(S!="New Line")
SetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,j,S);
}
}
}
}
// Show settings page
SendHeader(q,ExtAdminUI.ConfigList[EditPageIndex].PageName$" ("$PathName(ExtAdminUI.ConfigList[EditPageIndex].ObjClass)$")");
q.response.SendText("<form method=\"post\" action=\""$webadmin.Path$ExtWebURL$"\"><table id=\"settings\" class=\"grid\">");
if(bEditArray)
{
q.response.SendText("<table id=\"settings\" class=\"grid\"><thead><tr><th><abbr title=\""$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc$"\">Edit Array "$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName$"</abbr></th><th></th><th>Delete Line</th></tr></thead><tbody>");
GetV = ExtAdminUI.ConfigList[EditPageIndex].GetValue;
z = int(GetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,-1));
for(j=0; j<=z; ++j)
{
if(j<z)
S = GetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,j);
else S = "New Line";
switch(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropType)
{
case 0: // int
AddConfigEditbox(q,"["$j$"]",S,8,"PR"$j,"",true);
if(j<z)
q.response.SendText("<TD><input type=\"checkbox\" name=\"DEL"$j$"\" value=\"1\" "$S$"></TD></TR>");
else q.response.SendText("<TD></TD></TR>");
break;
case 2: // string
AddConfigEditbox(q,"["$j$"]",S,80,"PR"$j,"",true);
if(j<z)
q.response.SendText("<TD><input type=\"checkbox\" name=\"DEL"$j$"\" value=\"1\" "$S$"></TD></TR>");
else q.response.SendText("<TD></TD></TR>");
break;
}
}
q.response.SendText("<tr><td></td><td><input class=\"button\" type=\"submit\" name=\"edit"$EditPageIndex$"\" value=\"Submit "$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName$"\"></td></tr></form>");
}
else
{
q.response.SendText("<table id=\"settings\" class=\"grid\"><thead><tr><th>Settings</th></tr></thead><tbody>");
for(i=0; i<ExtAdminUI.ConfigList[EditPageIndex].Configs.Length; ++i)
{
if(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].NumElements==-1) // Dynamic array.
{
GetV = ExtAdminUI.ConfigList[EditPageIndex].GetValue;
j = int(GetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,-1));
q.response.SendText("<TR><TD><abbr title=\""$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc$"\">"$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName$"["$j$"]:</abbr></TD><TD><input class=\"button\" type=\"submit\" name=\"edit"$EditPageIndex$"\" value=\"Edit "$ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName$"\"></TD></TR>");
}
else
{
GetV = ExtAdminUI.ConfigList[EditPageIndex].GetValue;
S = GetV(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropName,0);
switch(ExtAdminUI.ConfigList[EditPageIndex].Configs[i].PropType)
{
case 0: // Int
AddConfigEditbox(q,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName,S,8,"PR"$i,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc);
break;
case 1: // Bool
AddConfigCheckbox(q,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName,bool(S),"PR"$i,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc);
break;
case 2: // String
AddConfigEditbox(q,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName,S,80,"PR"$i,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc);
break;
case 3: // Text field
AddConfigTextbox(q,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIName,S,25,"PR"$i,ExtAdminUI.ConfigList[EditPageIndex].Configs[i].UIDesc);
break;
}
}
}
// Submit button
q.response.SendText("<tr><td></td><td><input class=\"button\" type=\"submit\" name=\"edit"$EditPageIndex$"\" value=\"Submit\"></td></tr></form>");
}
// Return to main menu button.
q.response.SendText("<tr><td><form action=\""$webadmin.Path$ExtWebURL$"\"><input class=\"button\" name=\"GoToPage\" type=\"submit\" value=\"Main Menu\"></form></td></tr>");
q.response.SendText("</tbody></table></div></div></body></html>");
}
SendFooter(q);
}
function bool producesXhtml()
{
return true;
}
function bool unhandledQuery(WebAdminQuery q);
function decoratePage(WebAdminQuery q);
defaultproperties
{
ExtWebURL="/settings/ExtServerMod"
EditPageIndex=-1
}