281 lines
9.6 KiB
Ucode
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
|
||
|
}
|