KF2-Server-Extension/ServerExtMut/Classes/ExtWebApp.uc
2017-10-19 21:00:49 -05: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
}