From c362ecfec36b4dede4b94af9fe180137cb89f01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Otter?= Date: Sat, 11 May 2024 18:29:24 +0200 Subject: [PATCH] Setup cubeSQL Web Admin Project --- Build Automation.xojo_code | 171 +++ cubesql-webadmin.xojo_project | 87 ++ cubesql-webadmin.xojo_resources | Bin 0 -> 2627916 bytes resources/icon_128.png | Bin 0 -> 20174 bytes resources/icon_128.xojo_image | 43 + resources/icon_256.png | Bin 0 -> 70142 bytes scripts/Dockerfile | 21 + scripts/xojo2docker.sh | 138 ++ styles/colTextKey.xojo_color | 9 + styles/modWebStyles.xojo_code | 98 ++ webapp/App.xojo_code | 29 + webapp/Session.xojo_code | 269 ++++ webapp/containers/cntBase.xojo_code | 268 ++++ webapp/containers/cntClients.xojo_code | 426 ++++++ webapp/containers/cntCommands.xojo_code | 375 ++++++ webapp/containers/cntConsole.xojo_code | 648 ++++++++++ webapp/containers/cntDatabases.xojo_code | 953 ++++++++++++++ webapp/containers/cntGroups.xojo_code | 857 ++++++++++++ webapp/containers/cntLog.xojo_code | 497 +++++++ webapp/containers/cntPrivileges.xojo_code | 1041 +++++++++++++++ webapp/containers/cntRegistration.xojo_code | 426 ++++++ .../cntRegistrationAction.xojo_code | 494 +++++++ webapp/containers/cntStatus.xojo_code | 480 +++++++ webapp/containers/cntUsers.xojo_code | 1065 +++++++++++++++ webapp/dialogs/dlgCommonName.xojo_code | 512 ++++++++ webapp/dialogs/dlgDatabaseCreate.xojo_code | 673 ++++++++++ webapp/dialogs/dlgPrivilegeGrant.xojo_code | 931 ++++++++++++++ webapp/dialogs/dlgRegisterServer.xojo_code | 601 +++++++++ webapp/dialogs/dlgUserCreate.xojo_code | 686 ++++++++++ webapp/dialogs/dlgUserGroups.xojo_code | 688 ++++++++++ webapp/main/CubeSQLAdminPage.xojo_code | 536 ++++++++ webapp/main/LoginPage.xojo_code | 1145 +++++++++++++++++ webapp/modCubeSQLAdmin.xojo_code | 118 ++ 33 files changed, 14285 insertions(+) create mode 100644 Build Automation.xojo_code create mode 100644 cubesql-webadmin.xojo_project create mode 100644 cubesql-webadmin.xojo_resources create mode 100644 resources/icon_128.png create mode 100644 resources/icon_128.xojo_image create mode 100644 resources/icon_256.png create mode 100644 scripts/Dockerfile create mode 100755 scripts/xojo2docker.sh create mode 100644 styles/colTextKey.xojo_color create mode 100644 styles/modWebStyles.xojo_code create mode 100644 webapp/App.xojo_code create mode 100644 webapp/Session.xojo_code create mode 100644 webapp/containers/cntBase.xojo_code create mode 100644 webapp/containers/cntClients.xojo_code create mode 100644 webapp/containers/cntCommands.xojo_code create mode 100644 webapp/containers/cntConsole.xojo_code create mode 100644 webapp/containers/cntDatabases.xojo_code create mode 100644 webapp/containers/cntGroups.xojo_code create mode 100644 webapp/containers/cntLog.xojo_code create mode 100644 webapp/containers/cntPrivileges.xojo_code create mode 100644 webapp/containers/cntRegistration.xojo_code create mode 100644 webapp/containers/cntRegistrationAction.xojo_code create mode 100644 webapp/containers/cntStatus.xojo_code create mode 100644 webapp/containers/cntUsers.xojo_code create mode 100644 webapp/dialogs/dlgCommonName.xojo_code create mode 100644 webapp/dialogs/dlgDatabaseCreate.xojo_code create mode 100644 webapp/dialogs/dlgPrivilegeGrant.xojo_code create mode 100644 webapp/dialogs/dlgRegisterServer.xojo_code create mode 100644 webapp/dialogs/dlgUserCreate.xojo_code create mode 100644 webapp/dialogs/dlgUserGroups.xojo_code create mode 100644 webapp/main/CubeSQLAdminPage.xojo_code create mode 100644 webapp/main/LoginPage.xojo_code create mode 100644 webapp/modCubeSQLAdmin.xojo_code diff --git a/Build Automation.xojo_code b/Build Automation.xojo_code new file mode 100644 index 0000000..2d2333e --- /dev/null +++ b/Build Automation.xojo_code @@ -0,0 +1,171 @@ +#tag BuildAutomation + Begin BuildStepList Linux + Begin BuildProjectStep Build + End + Begin IDEScriptBuildStep DockerImage , AppliesTo = 2, Architecture = 1, Target = 0 + '************************************************************* + 'Xojo Web App 2 Docker - How to use with your Xojo-built .app? + '************************************************************* + '1. copy the folder 'scripts' to your project folder. + '2. Edit the file 'Dockerfile' in your favourite Text Editor. + ' 1. Look for the last line: CMD /app/CRCCalculatorWeb + ' Make sure the App Name is the same as in your Xojo + ' project in Build Settings -> Linux + ' 2. Look for the line: EXPOSE 80 + ' Make sure the App Name is the same as in your Xojo + ' project in Build Settings -> Shared: Build (Port) + '3. Create a PostBuild Copy File Step 'CopyDockerfile' + ' Copy the file 'resources/Dockerfile' to 'App Parent Folder' + '4. create a PostBuild Script, place it after the + ' build step and copy-and-paste this one. + '5. Add/Modify the Constant App.constDockerTag to fit your + ' Company/App + '6. Read the Comments in the PostBuild Script, + ' modify according to your needs. + '************************************************** + + '************************************************** + 'Setup Xojo Web App 2 Docker - Post Build Script + '************************************************** + '1. Read the comments in this PostBuild Script + '2. Edit the values according to your needs + '************************************************** + '3. If it's working for you: Do you like it? Does it help you? Has it saved you time and money? + ' You're welcome - it's free... + ' If you want to say thanks I appreciate a message or a small donation. + ' Contact: xojo@jo-tools.ch + ' PayPal: https://paypal.me/jotools + '************************************************** + + + '************************************************** + 'Requires Docker Installation + '************************************************** + 'Download, install and run Docker.app: + 'https://docs.docker.com/docker-for-mac/install/ + '************************************************** + + 'Configuration + '------------- + 'Docker Tag: will be used from App.constDockerTag + 'Docker Push (to Docker Hub): + Var bDockerPushEnabled As Boolean = False + Select Case PropertyValue("App.StageCode") + Case "0" 'Development + bDockerPushEnabled = False + Case "1" 'Alpha + bDockerPushEnabled = False + Case "2" 'Beta + bDockerPushEnabled = False + Case "3" 'Final + bDockerPushEnabled = True + End Select + + + '******************************************* + 'Xojo Web App 2 Docker - Let's go... + '******************************************* + 'you shouldn't need to modify anything below + '(but feel free to do so :-) + '******************************************* + If (Not TargetMacOS) Then + Print "The Post Build Script 'DockerImage' can only be run on macOS. You need to modify the Shell Commands if you're building on Linux or Windows." + Return + End If + + + 'Check Build Target + Select Case CurrentBuildTarget + Case 17 + 'Linux (Intel, 64Bit) + Else + Print "The only supported Build Target for the Post Build Script 'DockerImage' is: Linux, Intel 64Bit" + Return + End Select + + 'Check Build + If DebugBuild Then + Print "The Post Build Script 'DockerImage' should not be run for Debug Run's." + Return + End If + + 'Xojo Project Settings + Var sPROJECT_PATH As String = Trim(DoShellCommand("echo $PROJECT_PATH", 0)) + If Right(sPROJECT_PATH, 1) = "/" Then + 'no trailing / + sPROJECT_PATH = Mid(sPROJECT_PATH, 1, Len(sPROJECT_PATH)-1) + End If + Var sBUILD_LOCATION As String = ReplaceAll(CurrentBuildLocation, "\", "") 'don't escape Path + Var sBUILD_APPNAME As String = CurrentBuildAppName + + If (sPROJECT_PATH = "") Then + Print "Xojo Web App 2 Docker requires to get the Environment Variable $PROJECT_PATH from the Xojo IDE." + EndOfLine + EndOfLine + "Unfortunately, it's empty.... try again after re-launching the Xojo IDE and/or rebooting your machine." + Return + End If + + 'App Version -> used for Docker Image Tag + Var sAPP_VERSION As String = PropertyValue("App.MajorVersion") + "." + PropertyValue("App.MinorVersion") + "." + PropertyValue("App.BugVersion") + Select Case PropertyValue("App.StageCode") + Case "0" + sAPP_VERSION = sAPP_VERSION + "-dev" + Case "1" + sAPP_VERSION = sAPP_VERSION + "-alpha" + Case "2" + sAPP_VERSION = sAPP_VERSION + "-beta" + End Select + + 'DockerTag + Var sDOCKER_TAG As String = ConstantValue("App.constDockerTag") + If (sDOCKER_TAG = "") Then + Print "Xojo Web App 2 Docker requires the Constant: App.constDockerTag." + Return + End If + sDOCKER_TAG = sDOCKER_TAG + ":" + sAPP_VERSION + + 'Add DockerFile + Call DoShellCommand("cp """ + sPROJECT_PATH + "/scripts/Dockerfile"" """ + sBUILD_LOCATION + "/Dockerfile""", 0) + + + 'The Contents of Array will later be passed to + 'the ShellScript 'xojo2docker.sh', which does all the processing + ' + 'The order is important, so don't change anything here without + 'changing the ShellScript, too. + Var sShellArguments() As String + + 'Parameters required to create the Docker Image + sShellArguments.Add(sPROJECT_PATH) + sShellArguments.Add(sBUILD_LOCATION) + sShellArguments.Add(sBUILD_APPNAME) + sShellArguments.Add(sDOCKER_TAG) + sShellArguments.Add(If(bDockerPushEnabled, "yes", "no")) + + 'Make sure the ShellScript is executable: + Call DoShellCommand("chmod 755 """ + sPROJECT_PATH + "/scripts/xojo2docker.sh""", 0) + + If (Not DebugBuild) Then + 'Automate Terminal: + 'Pass ShellArguments to Script and execute it in Terminal.app + Call DoShellCommand("osascript -e 'tell application ""Terminal"" to activate'", 0) + Call DoShellCommand("osascript -e 'tell application ""Terminal"" to do script ""\""" + sPROJECT_PATH + "/scripts/xojo2docker.sh\"" \""" + Join(sShellArguments, "\"" \""") + "\""""'", 0) + Return 'see progress and errors in Terminal.app + End If + + End + End + Begin BuildStepList Mac OS X + Begin BuildProjectStep Build + End + Begin SignProjectStep Sign + DeveloperID= + End + End + Begin BuildStepList Windows + Begin BuildProjectStep Build + End + End + Begin BuildStepList Xojo Cloud + Begin BuildProjectStep Build + End + End +#tag EndBuildAutomation diff --git a/cubesql-webadmin.xojo_project b/cubesql-webadmin.xojo_project new file mode 100644 index 0000000..03d702c --- /dev/null +++ b/cubesql-webadmin.xojo_project @@ -0,0 +1,87 @@ +Type=Web2 +RBProjectVersion=2024.01 +MinIDEVersion=20200200 +OrigIDEVersion=20240100 +Folder=resources;resources;&h0000000035B107FF;&h0000000000000000;false +Folder=styles;styles;&h00000000139DBFFF;&h0000000000000000;false +Folder=webapp;webapp;&h0000000018D38FFF;&h0000000000000000;false +Folder=main;webapp/main;&h000000001D9447FF;&h0000000018D38FFF;false +WebView=LoginPage;webapp/main/LoginPage.xojo_code;&h000000005492FFFF;&h000000001D9447FF;false +WebView=CubeSQLAdminPage;webapp/main/CubeSQLAdminPage.xojo_code;&h000000004DEBB7FF;&h000000001D9447FF;false +Folder=dialogs;webapp/dialogs;&h0000000054A427FF;&h0000000018D38FFF;false +WebView=dlgRegisterServer;webapp/dialogs/dlgRegisterServer.xojo_code;&h000000000EEC17FF;&h0000000054A427FF;false +WebView=dlgDatabaseCreate;webapp/dialogs/dlgDatabaseCreate.xojo_code;&h0000000045C397FF;&h0000000054A427FF;false +WebView=dlgUserCreate;webapp/dialogs/dlgUserCreate.xojo_code;&h0000000064C14FFF;&h0000000054A427FF;false +WebView=dlgUserGroups;webapp/dialogs/dlgUserGroups.xojo_code;&h00000000347EFFFF;&h0000000054A427FF;false +WebView=dlgPrivilegeGrant;webapp/dialogs/dlgPrivilegeGrant.xojo_code;&h0000000022F4BFFF;&h0000000054A427FF;false +WebView=dlgCommonName;webapp/dialogs/dlgCommonName.xojo_code;&h0000000053B56FFF;&h0000000054A427FF;false +Folder=containers;webapp/containers;&h000000005859EFFF;&h0000000018D38FFF;false +Class=App;webapp/App.xojo_code;&h0000000055A03FFF;&h0000000018D38FFF;false +WebSession=Session;webapp/Session.xojo_code;&h0000000046C87FFF;&h0000000018D38FFF;false +Module=modCubeSQLAdmin;webapp/modCubeSQLAdmin.xojo_code;&h00000000097C9FFF;&h0000000018D38FFF;false +Class=cntBase;webapp/containers/cntBase.xojo_code;&h0000000041D557FF;&h000000005859EFFF;false +WebContainer=cntStatus;webapp/containers/cntStatus.xojo_code;&h000000000A45BFFF;&h000000005859EFFF;false +WebContainer=cntCommands;webapp/containers/cntCommands.xojo_code;&h000000002752C7FF;&h000000005859EFFF;false +WebContainer=cntRegistration;webapp/containers/cntRegistration.xojo_code;&h000000002FA707FF;&h000000005859EFFF;false +WebContainer=cntRegistrationAction;webapp/containers/cntRegistrationAction.xojo_code;&h000000000788EFFF;&h000000005859EFFF;false +WebContainer=cntDatabases;webapp/containers/cntDatabases.xojo_code;&h0000000040B4DFFF;&h000000005859EFFF;false +WebContainer=cntGroups;webapp/containers/cntGroups.xojo_code;&h0000000034036FFF;&h000000005859EFFF;false +WebContainer=cntUsers;webapp/containers/cntUsers.xojo_code;&h00000000700FF7FF;&h000000005859EFFF;false +WebContainer=cntPrivileges;webapp/containers/cntPrivileges.xojo_code;&h0000000018AA4FFF;&h000000005859EFFF;false +WebContainer=cntConsole;webapp/containers/cntConsole.xojo_code;&h000000004BD2DFFF;&h000000005859EFFF;false +WebContainer=cntClients;webapp/containers/cntClients.xojo_code;&h000000002140EFFF;&h000000005859EFFF;false +WebContainer=cntLog;webapp/containers/cntLog.xojo_code;&h000000002B1057FF;&h000000005859EFFF;false +MultiImage=icon_128;resources/icon_128.xojo_image;&h000000007294E7FF;&h0000000035B107FF;false +BuildSteps=Build Automation;Build Automation.xojo_code;&h000000001394FFFF;&h0000000000000000;false +ColorAsset=colTextKey;styles/colTextKey.xojo_color;&h000000005870AFFF;&h00000000139DBFFF;false +Module=modWebStyles;styles/modWebStyles.xojo_code;&h0000000002BE7FFF;&h00000000139DBFFF;false +DefaultWindow=LoginPage +MajorVersion=0 +MinorVersion=0 +SubVersion=1 +NonRelease=0 +Release=0 +InfoVersion=cubeSQL Web Admin +LongVersion=jo-tools.ch +ShortVersion=0.0.1 +WinCompanyName=example.com +WinInternalName=cubesqlwebadmin +WinProductName=cubeSQL Web Admin +WinFileDescription=cubeSQL Web Admin +AutoIncrementVersionInformation=False +BuildFlags=&h180 +BuildLanguage=&h0 +DebugLanguage=&h0 +Region= +WindowsName=cubeSQLWebAdmin.exe +MacCarbonMachName=cubeSQLWebAdmin +LinuxX86Name=cubeSQLWebAdmin +MacCreator= +MDI=0 +MDICaption= +DefaultEncoding=&h0 +AppIcon=cubesql-webadmin.xojo_resources;&h0 +OSXBundleID=ch.jo-tools.cubesqlwebadmin +DebuggerCommandLine=--CubeSQLHostname=localhost --CubeSQLPort=4440 --CubeSQLUsername=admin --CubeSQLPassword=admin +UseGDIPlus=False +UseBuildsFolder=True +HiDPI=True +DarkMode=True +CopyRedistNextToWindowsEXE=False +IncludePDB=False +WinUIFramework=False +IsWebProject=True +WebDebugPort=8080 +WebLivePort=80 +WebSecurePort=443 +WebProtocol=1 +WebHTMLHeader= +WebHostingIdentifier= +WebHostingAppName=cubeSQLWebAdmin +WebHostingDomain= +LinuxBuildArchitecture=1 +MacBuildArchitecture=4 +OptimizationLevel=6 +WindowsVersions={1f676c76-80e1-4239-95bb-83d0f6d0da78}|{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a} +WindowsRunAs=0 +MacOSMinimumVersion= diff --git a/cubesql-webadmin.xojo_resources b/cubesql-webadmin.xojo_resources new file mode 100644 index 0000000000000000000000000000000000000000..ba0197a8286890c8defe067da787fe97647ca90c GIT binary patch literal 2627916 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
  • vnxV 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
    u!T(o`|9u7fT?4$< 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

    7deORx&zmn@y4^XbJ_vP#JBlnZfFU`>})>~*E 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%0D>iN7f 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

    #F=i`?L1v$A0CW{0DaGs?!7X4;K5a z4nPfHb%2AX-CW>4*6?nSoc`}f&cMUcw)z!mQTB{9Edu{tJ^s5u`y=)z z<*$)M#D21$NcMA=V}@rL%<&)JDa?Od$3-I0|AKiQHP-am*CWr_=;z@Y1B=BTALJf)#`PV#NOL0ske3 z5&z$pIB5SS<;NsJxjqH1VHLcdkOXj^fSe!!bwM@c2niL)6VM}IoiGV=0;&Pv8=N+v zMxa(Wt3DvP*LhqoNHTnYSql6>GWbsh`^mjwHJ5R{s-`}mkLv|;@1Tw&Z%WZb)B%R? zM=pteaW45E9E$(OzpekV+@Cc+>-*g+_DAziUCh~c(*g7WTqnT(AnRwWrR_xyK(<4( zy6nesK97c2Y&AKX+il1XMDtJGZ|t7|`)97haP|53eSm2I`VaoU=8LFH*q7vb1!@=e zHMpK<3-<2f{8O0y*R?mooZtK=eZc$`to#3W`FAq_Vg9FLZhyVB@3&Xl_dh6Ys$Q1n zrB6#rVVM6Uu%D>5Rub~oz*fOlIt%!Z*SJsimmuaZmKbH<0_uw;h24F_u1MbEDLy-SJ0{-(~1^dwdjQ=72!G3q-{w0T?0p1rW zI|BZXAqO}qO~5~M0Qv&v15MN~;QN{%@NuXUfcNJ7jT8a7bNw%7}zCTFG*sr%aYjp3clxb0Q&)HSQC^z{JNeeoHz76 zNiW-goN|gJv6L9r_uny4KApAV* z0Q`NNG2-*$d135hXpR3_o9B0Hd8mKr59u2j`;C2GRRgR-4xlxFun%Y~{`)lmodF1D zfRumi&y?I@ik{7#+4pV9>~}y~RlX$6dORh`-L^_1;(ub7b&`<(C=Bc)_Q&U~hOLtL z+?B8uu;pN$M(&qL3`~&wi}Jq^@gDJ?>?{A!@|@?>nZDUz89XzVYdoKhD-BWj{l{Y$tH{HqV37I6Il&JXkKpf2OCqlWaJwC#a; zkxmWsZ=d6P@o(%~?Y}YpnFFW>2<;zyQgZ?I0qhMxQ?sAO{Q5oY%|#vH7!KF#EIxB~ zPh)hDqg$Ld{^>tL{A=6~_~&gHeF6P|>HyRP=qF4Exc>unK*WFM{mf6OQCPdwxgN03 z*TVWHUn^ff{UCe%#=jr`Ee|jaV08fUZ*@Rl|NDIaN0icdJMag3#ckvU(gTk}e?SoT1zI4&%ol+F zCddz{9h$%g&=15Te~7O*-949z!gcYb!&<; z2Va%E(brHzdIz~A=EORZ|G`@SpNsmm#s6R8-|Bv3!18`F!MvZbpZnTd{5Sq>-+*oC zm9aOtBbXB+U+km1n!p|H3y|mI7yqQJDzjkqBpNQSi=kxjZH9%wh zTOYvI{aXIt82^m_#(#70pH}mRq}A?|7UeHWYWE$IR6zdMEC2C%j|S|oktUs2NnGcZ zuobZ75(^XXFB{(Zo&ylge`x*hgU^4@N5F0VZ=n4#15~&dhS*%)bzT~FTPe^fX6@=IA4Hs0JHfs z^bvdw&NTkC+c;^Irk?m;omL)c(pp?k@(@^aIoa%m<402ZqOJe*j-w zkAQUo%>lqabpq-IYV-rh8JvOta_~>vxcZ;t->vy0|GxI854eB+?~eWCpX?j|jQ=$9 z<$SKkJ}%shVH0T1H2Ns)!$7DVd;=e^^xs*TP^ZzgI zy@B`k1+dQ^z*{ir|3b2Eywe}R^!|5o8{aR6m4N;3ftBE~CGZo>1DF?RPC!4uU)8Gfn;RhP>0TluNmCyizC893C8Nt@rQ?&h%i zGX`Pr@73C;UVwTvKezYdpK;Ihe{|p9>HlBHKlQckA@=MmZr@;PZ^mKv+*Av&Hi+Dx zTwnU|Z|Vb-UoS5>fw<3n{_Kr^j^Lfz;lizdQ@i-V-vTZ1SJnOO^RdRq^$E;DxQ8MA z(YBz@M-9W*L~TR<8UM+?@oyTy;(w$3>l}cq0aE|d{P=%Q{s%9X7M;dOLiS{=&si%i zD_@lsRqse@k3EuDxLxAGe+>EW4E{Tj|JBYqA@-B~jx@yoj?n%c5&Ox02eMB?+&A{y z&vWcs?9aMi{t@pP_ss{euBWv<#(1(0Ux1h&lQl)+aE;BHD6!x_hJK*kSV_;ylk)OX zS+r=896NSQe){RB2WtHf*CKuLyWfGC7cm3)Dj25*fDd3DfV}|r18Lm?)A<0f&)82N zz&;^ws~><5(EK3aU+V_&0ioJ~=>YIwhWKBG_^;GB&=lVE{{bb+x z=Nv6HH*;=VLrg8eb#`wY_*C=qL*SKKoqpiFmlH6Tce(z*DBsFEbOL!-gU@i<;cxo0 z%o|v1bTz)4sPA76_Uk&S8fD8QoUx5K_b>w=8`X5e4@1jawLfcXIE0P?Q}?#&1EKps%aT!21+ z7H9zafe`=D0Mr810A;Xp_<(Y-Zx-?cY-*SJ} z#>q`%{D*S?K>L$@##>{b{If4WAHX$rwvQ0&@H#tu5OagU%#f=M{Kbp)|Ela?q&^7j z(ntR;w96m=hsOVtmwtA6egiT8@m+3zZq_U|Za<_oOx7}e{_oBK+}Rz*KjZ)Zlz*E8 zrdMl#9{Y^<8v7aBsRN+%GsffgxWLBhH3s>AY`ZbiqHVTx>X;*S zb#=0F<3_o1<%;~}FMp8-?cYEC@ejFt`LdJ^e-eFw=fV5Smy1rpaE=Nh&2M%476`R9T4~c@?T-J{L1bBqr6`ZxM$p_Uf>J?XL;Y) zALRLn`Bvjoy^pia$v$g+s2^=)L&2SwQRmS^dAU`0w-2HNeJy z9Q1M`_)qEavLu(iCGkbOB&O>Vh)Em4JhlIt2H0PQSPxU~$vzFSKO3<>JDPvw{t@w? zvEPgT+W()9I8K`eW9$#&zr}vd|Ec>C@72J6I@nJi9kxvRg9(z{rclz-+Dbt|fs7h8 zN}hY}Ik|oNw*2RR{^x^+zx?aJ{;PcV-FNchi@%ZF-guw8JO}n)fV~9%%?CgaaD710 zUibrOg^(Yh4?z4^9YFREdItWBVeB7}eKYz3>HyUO@B#D#rJfH^{sSLS3Ll^r_<>UR zfU>}Nn|=WGLG}l^-iYUpGKb{4@PzD%5~KXD`Tw5(TkYTUf0%!#|1Ae#{Aaz*G=O8@ zou5ZO-Fd?9Yyr;UxY~f5A7-zPy+YOksq?RbeHwiL<34o&YXYve|Cz2mV4s1$WykY8 zljAu067DQ+K40VC`2eS5OanB`f8#v>)Bnmp>MC3d(AW&Hum2(_tB70~>>{1IrjCiLHyJb?cUrlanJ=RaG)?-aI*Y@Syzg!w<^Y zgXRF3m;3>F$@S|OWbN8jST{FEV!Av9_Td8x=>uMdy^7n=0>y8Fb?AYR4|p%kKYIfW z@n0PHfV=zveZUFWad$0c>^C$1p#wtvn-4gT`@p>!G(Ze|0M`+4-|^B2 zbp-#<|F`OYjQ^$qEdEFHZ?%8R|Be4p4S@N7Py=w>lYKL)z~|rd0n`Ji6~tF!F9Ga9-n8sx

    RX%AnWM*VN`|K9xb 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 z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X00Aoq3?5cJjVRcP5JtRSyZJx5 zdgB)(E{?r*^Sj?@%%WQqQ0Ef=F4LHWw@BP`^l|m-Ra&*{8!FrUeWKL&h-zKo-$z7M zuTa@$m+6IFUy<R%_1`k#_ZU6vu^I?MDvW%T%v zPMrNtF%drb@)ugQ^(qBEv5DNX-X-t)A5mb#k0_+cCluD~CWSQroctT#Bu|!u>U>O8 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 V5Werwz&gV!t0%iCUiU6VRCq*Lxb<$Um_O2 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 /dev/null +if [ $? -ne 0 ]; then + echo "Xojo2Docker ERROR: 'docker version' failed. Is Docker installed?" + exit 9 +fi + +if [ ! -f "$DOCKER_FILE" ]; then + echo "Xojo2Docker ERROR: Dockerfile doesn't exist: \$DOCKER_FILE" + exit 8 +fi + + +# change to our working directory +echo "" +echo "Xojo2Docker: change to our working directory" +if [ ! -d "${BUILD_LOCATION}" ]; then + echo "Xojo2Docker ERROR: \${BUILD_LOCATION} = ${BUILD_LOCATION} doesn't exist." + exit 8 +fi +cd "${BUILD_LOCATION}" + +echo "" +echo "Xojo2Docker: looking for the built .app" +if [ ! -f "./${BUILD_APPNAME}" ]; then + echo "Xojo2Docker ERROR: \${BUILD_APPNAME} = ${BUILD_APPNAME} doesn't exist." + exit 8 +fi + + +# clear out any old data +echo "" +echo "Xojo2Docker: clear out old data" +rm -rf "${DOCKER_IMAGE_FINAL}" + +sync + +# build docker image +echo "" +echo "Xojo2Docker: Build '$DOCKER_TAG'" + +docker image inspect $DOCKER_TAG > /dev/null 2>&1 +if [ $? -eq 0 ]; then + echo "Xojo2Docker ERROR: Image '$DOCKER_TAG' already exists" + echo "Xojo2Docker won't overwrite your Image. Remove it first yourself or change the Build's Version." + #docker image rm $DOCKER_TAG > /dev/null 2>&1 + exit 10 +fi + +docker build -t $DOCKER_TAG . +if [ $? -ne 0 ]; then + echo "Xojo2Docker ERROR: 'docker build -t $DOCKER_TAG .' failed." + exit 10 +fi + +echo "" +echo "Xojo2Docker: Save Docker Image '$DOCKER_TAG'" + +docker save $DOCKER_TAG | gzip > "${DOCKER_IMAGE_FINAL}" +if [ $? -ne 0 ]; then + echo "Xojo2Docker ERROR: Saving the Image for '$DOCKER_TAG' failed." + exit 10 +fi + +sync +sleep 1 +sync + +if [ "${DOCKER_PUSH_ENABLED}" = "yes" ]; then + echo "" + echo "Xojo2Docker: Push Docker Image '$DOCKER_TAG'" + docker push $DOCKER_TAG + if [ $? -ne 0 ]; then + echo "Xojo2Docker ERROR: 'docker push $DOCKER_TAG' failed." + exit 10 + fi +fi + + + +echo "" +echo "Xojo2Docker: It's all done." +exit 0 \ No newline at end of file diff --git a/styles/colTextKey.xojo_color b/styles/colTextKey.xojo_color new file mode 100644 index 0000000..66ce71c --- /dev/null +++ b/styles/colTextKey.xojo_color @@ -0,0 +1,9 @@ +#tag ColorGroup + CodeName=colTextKey + #tag Color + Type=1 + Platform=3 + Light=5E5E5E00 + Dark=C0C0C000 + #tag EndColor +#tag EndColorGroup diff --git a/styles/modWebStyles.xojo_code b/styles/modWebStyles.xojo_code new file mode 100644 index 0000000..a6aeeda --- /dev/null +++ b/styles/modWebStyles.xojo_code @@ -0,0 +1,98 @@ +#tag Module +Protected Module modWebStyles + #tag Method, Flags = &h0 + Sub ShowWithActionDanger(Extends dialog As WebMessageDialog) + dialog.Show + + Timer.CallLater(1, AddressOf ShowWithActionDangerTimerAction, dialog) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowWithActionDangerTimerAction(dialog As Variant) + If (Not (dialog IsA WebMessageDialog)) Then Return + + Var javaScript() As String + javaScript.Add("(function() {") + javaScript.Add(" let button = document.getElementById('" + WebMessageDialog(dialog).ControlID + "_action');") + javaScript.Add(" button.classList.remove('btn-primary');") + javaScript.Add(" button.classList.add('btn-danger');") + javaScript.Add("})();") + + WebMessageDialog(dialog).ExecuteJavaScript(String.FromArray(javaScript, "")) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Function StyleListboxKeyColumn() As WebStyle + Var style As New WebStyle + style.ForegroundColor = colTextKey + style.Value("text-align") = "right" + Return style + End Function + #tag EndMethod + + #tag Method, Flags = &h0 + Function StyleListboxTextAlignCenter() As WebStyle + Var style As New WebStyle + style.Value("text-align") = "center" + return style + End Function + #tag EndMethod + + #tag Method, Flags = &h0 + Function StyleListboxTextAlignCenterGreen() As WebStyle + Var style As New WebStyle + style.ForegroundColor = Color.Green + style.Value("text-align") = "center" + Return style + End Function + #tag EndMethod + + + #tag ViewBehavior + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag EndViewBehavior +End Module +#tag EndModule diff --git a/webapp/App.xojo_code b/webapp/App.xojo_code new file mode 100644 index 0000000..2569566 --- /dev/null +++ b/webapp/App.xojo_code @@ -0,0 +1,29 @@ +#tag Class +Protected Class App +Inherits WebApplication + #tag Event + Sub Opening(args() As String) + // Store Launch Arguments for later + modCubeSQLAdmin.StoreLaunchArguments(args) + + End Sub + #tag EndEvent + + #tag Event + Function UnhandledException(error As RuntimeException) As Boolean + #Pragma unused error + + Break + + End Function + #tag EndEvent + + + #tag Constant, Name = constDockerTag, Type = String, Dynamic = False, Default = \"jotools/cubesql-webadmin", Scope = Private + #tag EndConstant + + + #tag ViewBehavior + #tag EndViewBehavior +End Class +#tag EndClass diff --git a/webapp/Session.xojo_code b/webapp/Session.xojo_code new file mode 100644 index 0000000..4d35f62 --- /dev/null +++ b/webapp/Session.xojo_code @@ -0,0 +1,269 @@ +#tag Class +Protected Class Session +Inherits WebSession +#tag Session + interruptmessage=The connection to cubeSQL Admin has been interrupted.\r\nPlease wait a moment while attempting to reconnect. + disconnectmessage=You have been disconnected from cubeSQL Admin. + confirmmessage= + AllowTabOrderWrap=True + ColorMode=0 + SendEventsInBatches=False +#tag EndSession + #tag Method, Flags = &h0 + Function Login(loginDB As CubeSQLServer) As Boolean + If (loginDB = Nil) Then Return False + If (loginDB.IsConnected = False) Then Return False + + DB = loginDB + + Try + DB.ExecuteSQL("SET CLIENT TYPE TO 'cubeSQL Web Admin " + App.Version + "'") + + Catch err As DatabaseException + Return False + + Finally + Var cubeSqlAdminPage As New CubeSQLAdminPage + cubeSqlAdminPage.Show() + + Return True + + End Try + + End Function + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Logout() + If (DB <> Nil) Then + DB.Close + End If + + DB = Nil + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h0 + DB As CubeSQLServer + #tag EndProperty + + + #tag ViewBehavior + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Hashtag" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Identifier" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="LanguageCode" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="LanguageRightToLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="RemoteAddress" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScaleFactor" + Visible=false + Group="Behavior" + InitialValue="" + Type="Double" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="UserTimeout" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="URL" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="_baseurl" + Visible=false + Group="Behavior" + InitialValue="" + Type="string" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="DisconnectMessage" + Visible=true + Group="Behavior" + InitialValue="You have been disconnected from this application." + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="InterruptionMessage" + Visible=true + Group="Behavior" + InitialValue="We are having trouble communicating with the server. Please wait a moment while we attempt to reconnect." + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="_LastMessageTime" + Visible=false + Group="Behavior" + InitialValue="" + Type="Double" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="AllowTabOrderWrap" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ConfirmDisconnectMessage" + Visible=true + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Platform" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="IsDarkMode" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ClientHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ClientWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ColorMode" + Visible=false + Group="Behavior" + InitialValue="" + Type="WebSession.ColorModes" + EditorType="Enum" + #tag EnumValues + "0 - Auto" + "1 - Light" + "2 - Dark" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="UserPrefersDarkMode" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="SendEventsInBatches" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag EndViewBehavior +End Class +#tag EndClass diff --git a/webapp/containers/cntBase.xojo_code b/webapp/containers/cntBase.xojo_code new file mode 100644 index 0000000..6561207 --- /dev/null +++ b/webapp/containers/cntBase.xojo_code @@ -0,0 +1,268 @@ +#tag Class +Protected Class cntBase +Inherits WebContainer + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + Self.LockLeft = True + Self.LockRight = True + Self.LockTop = True + self.LockBottom = True + End Sub + #tag EndMethod + + + #tag Property, Flags = &h0 + Title As String + #tag EndProperty + + + #tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="300" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="300" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag EndViewBehavior +End Class +#tag EndClass diff --git a/webapp/containers/cntClients.xojo_code b/webapp/containers/cntClients.xojo_code new file mode 100644 index 0000000..16b2c70 --- /dev/null +++ b/webapp/containers/cntClients.xojo_code @@ -0,0 +1,426 @@ +#tag WebContainerControl +Begin cntBase cntClients + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 7 + ColumnWidths = "5%,15%,15%,15%,15%,18%,17%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 422 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Clients" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnRefresh + AllowAutoDisable= False + Cancel = False + Caption = "Refresh" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.RefreshButtons() + Self.ShowInfos() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Clients" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnRefresh.Enabled = True + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW CONNECTIONS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow(rs.Column("id").StringValue) + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 1) = rs.Column("address").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 2) = rs.Column("username").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 3) = rs.Column("connection_date").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 4) = rs.Column("last_activity").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 5) = rs.Column("database").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 6) = rs.Column("client_type").StringValue + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.HeaderAt(0) = "ID" + Me.HeaderAt(1) = "Address" + Me.HeaderAt(2) = "Username" + Me.HeaderAt(3) = "Connection Date" + Me.HeaderAt(4) = "Last Activity" + Me.HeaderAt(5) = "Database" + Me.HeaderAt(6) = "Client Type" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Descending + + For i As Integer = 1 To 6 + Me.ColumnSortTypeAt(i) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + next + + Me.RemoveAllRows + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRefresh + #tag Event + Sub Pressed() + Self.ShowInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntCommands.xojo_code b/webapp/containers/cntCommands.xojo_code new file mode 100644 index 0000000..30e5bc1 --- /dev/null +++ b/webapp/containers/cntCommands.xojo_code @@ -0,0 +1,375 @@ +#tag WebContainerControl +Begin cntBase cntCommands + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 3 + ColumnWidths = "60%, 20%, 20%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 500 + HighlightSortedColumn= False + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Commands" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Commands" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW COMMANDS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow(rs.Column("command").StringValue) + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 1) = rs.Column("context").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 2) = rs.Column("privilege").StringValue + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.HeaderAt(0) = "Command" + Me.HeaderAt(1) = "Context" + Me.HeaderAt(2) = "Privilege" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Ascending + + Me.ColumnSortTypeAt(1) = WebListBox.SortTypes.Unsortable + Me.ColumnSortDirectionAt(1) = WebListbox.SortDirections.None + + Me.ColumnSortTypeAt(2) = WebListBox.SortTypes.Unsortable + Me.ColumnSortDirectionAt(2) = WebListbox.SortDirections.None + + Me.RemoveAllRows + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntConsole.xojo_code b/webapp/containers/cntConsole.xojo_code new file mode 100644 index 0000000..f004d20 --- /dev/null +++ b/webapp/containers/cntConsole.xojo_code @@ -0,0 +1,648 @@ +#tag WebContainerControl +Begin cntBase cntConsole + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 1 + ColumnWidths = "" + ControlID = "" + Enabled = True + HasHeader = False + Height = 319 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No SQL SELECT executed yet" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnExecute + AllowAutoDisable= False + Cancel = False + Caption = "Execute" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 4 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebLabel labDatabase + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 2 + TabStop = True + Text = "Database:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 442 + Underline = False + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstDatabase + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 128 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 400 + _mPanelIndex = -1 + End + Begin WebTextArea edtCommand + AllowReturnKey = True + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + Height = 100 + Hint = "SQL Command" + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = False + LockVertical = False + MaximumCharactersAllowed= 0 + ReadOnly = False + Scope = 2 + TabIndex = 1 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 334 + Visible = True + Width = 710 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Closed() + Try + Session.DB.ExecuteSQL("CLEAR CURRENT DATABASE") + + Catch err As DatabaseException + + End Try + + End Sub + #tag EndEvent + + #tag Event + Sub Opening() + self.Clear() + Self.RefreshButtons() + + ebOpened = True + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub ActionExecute() + Var isquery As Boolean = False + Var rs As RowSet + + Try + + Var sql As String = edtCommand.Text.Trim + Var fword As String = sql.NthField(" ", 1).Trim.Lowercase + + + If (fword = "select") Or (fword = "show") Then + isquery = True + ElseIf (fword = "engine") Then + If sql.Contains(" select ", ComparisonOptions.CaseInsensitive) Then isquery = True + ElseIf (fword = "pragma") Then + If (sql.IndexOf("=") = 0) Then isquery = True + End If + + If isquery Then + rs = Session.DB.SelectSQL(sql) + lstInfos.NoRowsMessage = "No Records from SELECT SQL" + Else + Session.DB.ExecuteSQL(sql) + lstInfos.NoRowsMessage = "EXECUTE SQL successful" + End If + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = If(isquery, "SELECT SQL", "EXECUTE SQL") + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not execute " + dialog.Title + " command." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + rs = Nil + If isquery Then + lstInfos.NoRowsMessage = "SELECT SQL Error" + Else + lstInfos.NoRowsMessage = "EXECUTE SQL Error" + End If + + Finally + Me.ShowInfos(rs) + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Clear() + lstInfos.RemoveAllRows + lstInfos.HasHeader = False + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Console" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnExecute.Enabled = (edtCommand.Text.Trim <> "") + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos(rs As RowSet) + Me.Clear + + Try + If (rs = Nil) Then Return + + lstInfos.HasHeader = True + + lstInfos.ColumnCount = rs.ColumnCount + For i As Integer = rs.ColumnCount - 1 DownTo 0 + lstInfos.HeaderAt(i) = rs.ColumnAt(i).Name + lstInfos.ColumnSortTypeAt(i) = WebListBox.SortTypes.Sortable + lstInfos.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + Next + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow("") + + For i As Integer = rs.ColumnCount - 1 DownTo 0 + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, i) = rs.ColumnAt(i).StringValue + Next + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private ebOpened As Boolean + #tag EndProperty + + +#tag EndWindowCode + +#tag Events btnExecute + #tag Event + Sub Pressed() + Self.ActionExecute() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstDatabase + #tag Event + Sub Opening() + Me.RemoveAllRows + Me.AddRow "- NONE -" + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW DATABASES") + + If (rs <> Nil) Then + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + Me.AddRow(rs.Column("databasename").StringValue) + Me.RowTagAt(Me.LastAddedRowIndex) = rs.Column("databasename").StringValue + rs.MoveToNextRow + Wend + End If + + rs.Close + End If + + Catch DatabaseException + + Finally + Me.SelectedRowIndex = 0 + + End Try + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebOpened) Then Return + + Try + If (Me.SelectedRowIndex < 1) Then + Session.DB.ExecuteSQL("CLEAR CURRENT DATABASE") + Else + Session.DB.ExecuteSQL("USE DATABASE '" + Me.SelectedRowText + "'") + End If + + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Change database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not change database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Self.Clear() + + End Try + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtCommand + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntDatabases.xojo_code b/webapp/containers/cntDatabases.xojo_code new file mode 100644 index 0000000..127af69 --- /dev/null +++ b/webapp/containers/cntDatabases.xojo_code @@ -0,0 +1,953 @@ +#tag WebContainerControl +Begin cntBase cntDatabases + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 5 + ColumnWidths = "10%,50%,10%,20%,10%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 422 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Databases" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 1 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnDrop + AllowAutoDisable= False + Cancel = False + Caption = "Drop" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 4 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnStop + AllowAutoDisable= False + Cancel = False + Caption = "Stop" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 5 + Left = 522 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 4 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCreate + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnStart + AllowAutoDisable= False + Cancel = False + Caption = "Start" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 3 + Left = 414 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgDatabaseCreate dlgCreate + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebButton btnRename + AllowAutoDisable= False + Cancel = False + Caption = "Rename" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 2 + Left = 306 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgCommonName dlgRename + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 60 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 7 + TabStop = True + Tooltip = "" + Top = 60 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebMessageDialog dlgDrop + ControlID = "" + Enabled = True + Explanation = "" + Index = -2147483648 + Indicator = 0 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Message = "" + Scope = 2 + Title = "" + Tooltip = "" + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub ActionCreate() + dlgCreate.Show() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionCreateButtonPressed(Name As String, Key As String, Encoding As String) As Boolean + If (Name = "") Then Return False + + Try + + Var sqlCreateDb As String = "CREATE DATABASE " + "'" + Name + "'" + If (Key <> "") Then sqlCreateDb = sqlCreateDb + " WITH KEY " + "'" + Key + "'" + If (Encoding <> "UTF-8") Then sqlCreateDb = sqlCreateDb + " WITH ENCODING " + Encoding + + Session.DB.ExecuteSQL(sqlCreateDb) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Create Database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not create database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDrop() + Var dbRowTag As Dictionary = Me.GetSelectedDbRowTag() + If (dbRowTag = Nil) Or (dbRowTag.Lookup("databasename", "") = "") Then Return + + + dlgDrop.Title = "Drop Database" + dlgDrop.Indicator = Indicators.Danger + dlgDrop.ActionButton.Caption = "Drop" + dlgDrop.CancelButton.Visible = True + dlgDrop.Message = "Are you sure you want to drop database '" + dbRowTag.Lookup("databasename", "") + "'?" + dlgDrop.Explanation = "This action cannot be undone." + + esActionDatabasename = dbRowTag.Lookup("databasename", "") + + dlgDrop.ShowWithActionDanger() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDropButtonPressed(obj As WebMessageDialog, button As WebMessageDialogButton) + Var sDropDatabasename As String = esActionDatabasename + esActionDatabasename = "" + + If (button <> obj.ActionButton) Then Return + If (sDropDatabasename = "") Then Return + + Try + Session.DB.ExecuteSQL("DROP DATABASE '" + sDropDatabasename + "' IF EXISTS") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Drop Database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not drop database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionRename() + Var dbRowTag As Dictionary = Me.GetSelectedDbRowTag() + If (dbRowTag = Nil) Or (dbRowTag.Lookup("databasename", "") = "") Then Return + + Var databasename As String = dbRowTag.Lookup("databasename", "") + esActionDatabasename = databasename + + dlgRename.Show("Rename Database", "Name", "Rename", Indicators.Primary, databasename) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionRenameButtonPressed(Name As String) As Boolean + If (esActionDatabasename = "") Then Return False + If (Name = "") Then Return False + If (esActionDatabasename = Name) Then Return False + + Try + + Session.DB.ExecuteSQL("RENAME DATABASE '" + esActionDatabasename + "' TO " + "'" + Name + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Rename Database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not rename database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionStart() + Var dbRowTag As Dictionary = Me.GetSelectedDbRowTag() + If (dbRowTag = Nil) Then Return + + Try + Session.DB.ExecuteSQL("START DATABASE '" + dbRowTag.Lookup("databasename", "") + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Start database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not start database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionStop() + Var dbRowTag As Dictionary = Me.GetSelectedDbRowTag() + If (dbRowTag = Nil) Then Return + + Try + Session.DB.ExecuteSQL("STOP DATABASE '" + dbRowTag.Lookup("databasename", "") + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Stop database" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not stop database." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Databases" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetSelectedDbRowTag() As Dictionary + If (lstInfos.SelectedRowIndex < 0) Then Return Nil + + If (lstInfos.RowTagAt(lstInfos.SelectedRowIndex) IsA Dictionary) Then + Var dbRowTag As Dictionary = lstInfos.RowTagAt(lstInfos.SelectedRowIndex) + Return dbRowTag + End If + + Return Nil + + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var bRename, bStart, bStop, bDrop As Boolean + + If (lstInfos.SelectedRowIndex >= 0) Then + If (lstInfos.RowTagAt(lstInfos.SelectedRowIndex) IsA Dictionary) Then + Var dbRowTag As Dictionary = lstInfos.RowTagAt(lstInfos.SelectedRowIndex) + + bRename = True + bStart = dbRowTag.Lookup("stopped", False) = True + bStop = (Not bStart) + bDrop = True + + End If + End If + + If (btnRename.Enabled <> bRename) Then btnRename.Enabled = bRename + If (btnStart.Enabled <> bStart) Then btnStart.Enabled = bStart + If (btnStop.Enabled <> bStop) Then btnStop.Enabled = bStop + If (btnDrop.Enabled <> bDrop) Then btnDrop.Enabled = bDrop + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshInfos(selectDatabasename As String = "") + If (selectDatabasename = "") Then + Var dbRowTag As Dictionary = Me.GetSelectedDbRowTag() + If (dbRowTag <> Nil) Then + selectDatabasename = dbRowTag.Lookup("databasename", "") + End If + End If + + Me.ShowInfos() + + If (selectDatabasename = "") Then + Me.RefreshButtons() + Return + End If + + For i As Integer = lstInfos.LastRowIndex DownTo 0 + If (lstInfos.CellTextAt(i, 1) <> selectDatabasename) Then Continue + + lstInfos.SelectedRowIndex = i + Exit 'Loop + Next + + Me.RefreshButtons() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW DATABASES WITH DETAILS") + If (rs = Nil) Then Return + + Var styleCenter As WebStyle = StyleListboxTextAlignCenter() + Var styleCenterGreen As WebStyle = StyleListboxTextAlignCenterGreen() + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow("") + + Var icon As WebPicture + If rs.Column("stopped").BooleanValue Then + icon = WebPicture.BootstrapIcon("stop-circle-fill", Color.Orange) + Else + If rs.Column("available").BooleanValue Then + icon = WebPicture.BootstrapIcon("check-circle-fill", Color.Green) + Else + icon = WebPicture.BootstrapIcon("exclamation-circle-fill", Color.Red) + End If + End If + + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 0) = New WebListboxImageRenderer(icon.URL, True) + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 1) = rs.Column("databasename").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 2) = New WebListBoxStyleRenderer(styleCenter, If(rs.Column("locked").IntegerValue > 0, "yes", "no")) + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 3) = rs.Column("lockowner").StringValue + If rs.Column("encrypted").BooleanValue Then + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 4) = New WebListBoxStyleRenderer(styleCenterGreen, "yes") + Else + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 4) = New WebListBoxStyleRenderer(styleCenter, "no") + End If + + Var dbRowTag As New Dictionary + dbRowTag.Value("stopped") = rs.Column("stopped").BooleanValue + dbRowTag.Value("available") = rs.Column("available").BooleanValue + dbRowTag.Value("databasename") = rs.Column("databasename").StringValue + + lstInfos.RowTagAt(lstInfos.LastAddedRowIndex) = dbRowTag + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private esActionDatabasename As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.ExecuteJavaScript("$('#" + Me.ControlID + "').addClass('listboxDbHeaderAlignment')") + + Me.HeaderAt(0) = "Status" + Me.HeaderAt(1) = "Name" + Me.HeaderAt(2) = "Locked" + Me.HeaderAt(3) = "Lock Owner" + Me.HeaderAt(4) = "Encrypted" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Unsortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.None + + Me.ColumnSortTypeAt(1) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(1) = WebListbox.SortDirections.Ascending + + Me.ColumnSortTypeAt(2) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(2) = WebListbox.SortDirections.None + Me.ColumnSortTypeAt(3) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(3) = WebListbox.SortDirections.None + Me.ColumnSortTypeAt(4) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(4) = WebListbox.SortDirections.None + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(rows() As Integer) + #Pragma unused rows + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnDrop + #tag Event + Sub Pressed() + Self.ActionDrop() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnStop + #tag Event + Sub Pressed() + Self.ActionStop() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCreate + #tag Event + Sub Pressed() + Self.ActionCreate() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnStart + #tag Event + Sub Pressed() + Self.ActionStart() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgCreate + #tag Event + Function DatabaseCreateAction(Name As String, Key As String, Encoding As String) As Boolean + Return Self.ActionCreateButtonPressed(Name, Key, Encoding) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events btnRename + #tag Event + Sub Pressed() + Self.ActionRename() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgRename + #tag Event + Function NameAction(Name As String) As Boolean + Return Self.ActionRenameButtonPressed(Name) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events dlgDrop + #tag Event + Sub ButtonPressed(button As WebMessageDialogButton) + Self.ActionDropButtonPressed(Me, button) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntGroups.xojo_code b/webapp/containers/cntGroups.xojo_code new file mode 100644 index 0000000..ae8c3a9 --- /dev/null +++ b/webapp/containers/cntGroups.xojo_code @@ -0,0 +1,857 @@ +#tag WebContainerControl +Begin cntBase cntGroups + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 3 + ColumnWidths = "30%, 10%, 60%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 422 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Groups" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 1 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnDrop + AllowAutoDisable= False + Cancel = False + Caption = "Drop" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 4 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnRename + AllowAutoDisable= False + Cancel = False + Caption = "Rename" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 2 + Left = 522 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCreate + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgCommonName dlgCreate + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin dlgCommonName dlgRename + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 6 + TabStop = True + Tooltip = "" + Top = 40 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebThread thrDetails + DebugIdentifier = "" + Index = -2147483648 + LockedInPosition= False + Priority = 5 + Scope = 2 + StackSize = 0 + ThreadID = 0 + ThreadState = 0 + End + Begin WebMessageDialog dlgDrop + ControlID = "" + Enabled = True + Explanation = "" + Index = -2147483648 + Indicator = 0 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Message = "" + Scope = 2 + Title = "" + Tooltip = "" + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub ActionCreate() + dlgCreate.Show("Create Group", "Name", "Create") + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionCreateButtonPressed(Name As String) As Boolean + If (Name = "") Then Return False + + Try + + Session.DB.ExecuteSQL("CREATE GROUP " + "'" + Name + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Create Group" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not create group." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDrop() + Var groupname As String = Me.GetSelectedGroupname() + If (groupname = "") Then Return + + dlgDrop.Title = "Drop Group" + dlgDrop.Indicator = Indicators.Danger + dlgDrop.ActionButton.Caption = "Drop" + dlgDrop.CancelButton.Visible = True + dlgDrop.Message = "Are you sure you want to drop group '" + groupname + "'?" + dlgDrop.Explanation = "This action cannot be undone." + + esActionGroupname = groupname + + dlgDrop.ShowWithActionDanger() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDropButtonPressed(obj As WebMessageDialog, button As WebMessageDialogButton) + Var sDropGroupname As String = esActionGroupname + esActionGroupname = "" + + If (button <> obj.ActionButton) Then Return + If (sDropGroupname = "") Then Return + + Try + Session.DB.ExecuteSQL("DROP GROUP '" + sDropGroupname) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Drop Group" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not drop group." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionRename() + Var groupname As String = Me.GetSelectedGroupname() + If (groupname = "") Then Return + + esActionGroupname = groupname + + dlgRename.Show("Rename Group", "Name", "Rename", Indicators.Primary, groupname) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionRenameButtonPressed(Name As String) As Boolean + If (esActionGroupname = "") Then Return False + If (Name = "") Then Return False + If (esActionGroupname = Name) Then Return False + + Try + + Session.DB.ExecuteSQL("RENAME GROUP '" + esActionGroupname + "' TO " + "'" + Name + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Rename Group" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not rename group." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Close() + Try + thrDetails.Stop + Catch err As RuntimeException + + End Try + + Super.Close() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Groups" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetSelectedGroupname() As String + If (lstInfos.SelectedRowIndex < 0) Then Return "" + return lstInfos.CellTextAt(lstInfos.SelectedRowIndex, 0) + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var bRename, bDrop As Boolean + + Var groupname As String = Me.GetSelectedGroupname() + If (groupname <> "admin") And (groupname <> "") Then + bRename = True + bDrop = True + End If + + If (btnRename.Enabled <> bRename) Then btnRename.Enabled = bRename + If (btnDrop.Enabled <> bDrop) Then btnDrop.Enabled = bDrop + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshInfos(selectGroupname As String = "") + If (selectGroupname = "") Then + selectGroupname = me.GetSelectedGroupname() + End If + + Me.ShowInfos() + + If (selectGroupname = "") Then + Me.RefreshButtons() + Return + End If + + For i As Integer = lstInfos.LastRowIndex DownTo 0 + If (lstInfos.CellTextAt(i, 0) <> selectGroupname) Then Continue + + lstInfos.SelectedRowIndex = i + Exit 'Loop + Next + + Me.RefreshButtons() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowDetails() + Var styleCenter As WebStyle = StyleListboxTextAlignCenter() + + Var iLast As Integer = lstInfos.LastRowIndex + For i As Integer = 0 To iLast + Var groupname As String = lstInfos.CellTextAt(i, 0) + If (groupname = "") Then Continue + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW USERS IN GROUP '" + groupname + "'") + + Var iCount As Integer = 0 + Var sUsers() As String + + If (rs <> Nil) Then + iCount = rs.RowCount + + If (iCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + sUsers.Add(rs.Column("username").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + End If + + lstInfos.CellTextAt(i, 1) = New WebListBoxStyleRenderer(styleCenter, iCount.ToString) + lstInfos.CellTextAt(i, 2) = String.FromArray(sUsers, ", ") + + Catch DatabaseException + + End Try + + Next + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Try + thrDetails.Stop + Catch err As RuntimeException + + End Try + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow(rs.Column("groupname").StringValue) + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + Finally + + Try + thrDetails.Start + Catch err As RuntimeException + + End Try + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private esActionGroupname As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.ExecuteJavaScript("$('#" + Me.ControlID + "').addClass('listboxGroupsHeaderAlignment')") + + Me.HeaderAt(0) = "Groupname" + Me.HeaderAt(1) = "#" + Me.HeaderAt(2) = "Users" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Ascending + + For i As Integer = 1 To 2 + Me.ColumnSortTypeAt(i) = WebListBox.SortTypes.Unsortable + Me.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + Next + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(rows() As Integer) + #Pragma unused rows + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnDrop + #tag Event + Sub Pressed() + Self.ActionDrop() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRename + #tag Event + Sub Pressed() + Self.ActionRename() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCreate + #tag Event + Sub Pressed() + Self.ActionCreate() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgCreate + #tag Event + Function NameAction(Name As String) As Boolean + Return Self.ActionCreateButtonPressed(Name) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events dlgRename + #tag Event + Function NameAction(Name As String) As Boolean + Return Self.ActionRenameButtonPressed(Name) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events thrDetails + #tag Event + Sub Run() + Try + Self.ShowDetails() + Catch err As RuntimeException + End Try + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgDrop + #tag Event + Sub ButtonPressed(button As WebMessageDialogButton) + Self.ActionDropButtonPressed(Me, button) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntLog.xojo_code b/webapp/containers/cntLog.xojo_code new file mode 100644 index 0000000..07f24a0 --- /dev/null +++ b/webapp/containers/cntLog.xojo_code @@ -0,0 +1,497 @@ +#tag WebContainerControl +Begin cntBase cntLog + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 6 + ColumnWidths = "15%,10%,25%,15%,18%,17%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 422 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Log entries" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnRefresh + AllowAutoDisable= False + Cancel = False + Caption = "Refresh" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebLabel labLogNumberOfEntries + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 1 + TabStop = True + Text = "Number of Log entries:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 442 + Underline = False + Visible = True + Width = 197 + _mPanelIndex = -1 + End + Begin WebTextField edtLogNumberOfEntries + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 3 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + Left = 225 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + MaximumCharactersAllowed= 0 + ReadOnly = False + Scope = 2 + TabIndex = 2 + TabStop = True + Text = "50" + TextAlignment = 3 + Tooltip = "" + Top = 442 + Visible = True + Width = 120 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.RefreshButtons() + Self.ShowInfos() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Log" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnRefresh.Enabled = (edtLogNumberOfEntries.Text.ToInteger > 0) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + Var numLogEntries As Integer = edtLogNumberOfEntries.Text.ToInteger + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW LAST " + numLogEntries.ToString + " ROWS FROM Log ORDER DESC") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow(rs.Column("datetime").StringValue) + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 1) = rs.Column("operation").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 2) = rs.Column("description").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 3) = rs.Column("address").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 4) = rs.Column("username").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 5) = rs.Column("database").StringValue + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.HeaderAt(0) = "DateTime" + Me.HeaderAt(1) = "Operation" + Me.HeaderAt(2) = "Description" + Me.HeaderAt(3) = "Address" + Me.HeaderAt(4) = "Username" + Me.HeaderAt(5) = "Database" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Descending + + For i As Integer = 1 To 5 + Me.ColumnSortTypeAt(i) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + next + + Me.RemoveAllRows + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRefresh + #tag Event + Sub Pressed() + Self.ShowInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtLogNumberOfEntries + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntPrivileges.xojo_code b/webapp/containers/cntPrivileges.xojo_code new file mode 100644 index 0000000..10e4a9a --- /dev/null +++ b/webapp/containers/cntPrivileges.xojo_code @@ -0,0 +1,1041 @@ +#tag WebContainerControl +Begin cntBase cntPrivileges + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 4 + ColumnWidths = "30%, 15%, 25%, 30%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 292 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Privileges" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 1 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnRevoke + AllowAutoDisable= False + Cancel = False + Caption = "Revoke" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 4 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnGrant + AllowAutoDisable= False + Cancel = False + Caption = "Grant" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgPrivilegeGrant dlgGrant + ControlCount = 0 + ControlID = "" + Enabled = True + esPreSelectGroup= "" + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebRectangle rctFilter + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 125 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 300 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labFilter + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFilter" + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + Parent = "rctFilter" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Filter" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 320 + Underline = False + Visible = True + Width = 60 + _mPanelIndex = -1 + End + Begin WebLabel labFilterGroup + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFilter" + Italic = False + Left = 151 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFilter" + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "Group(s):" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 320 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebLabel labFilterDatabase + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFilter" + Italic = False + Left = 151 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFilter" + Scope = 2 + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Text = "Database(s):" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 366 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstFilterGroup + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFilter" + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 299 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Parent = "rctFilter" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 320 + Visible = True + Width = 400 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstFilterDatabase + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFilter" + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 299 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + PanelIndex = 0 + Parent = "rctFilter" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 4 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 366 + Visible = True + Width = 400 + _mPanelIndex = -1 + End + End + Begin WebMessageDialog dlgRevoke + ControlID = "" + Enabled = True + Explanation = "" + Index = -2147483648 + Indicator = 0 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Message = "" + Scope = 2 + Title = "" + Tooltip = "" + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.Load() + + Self.ShowInfos() + Self.RefreshButtons() + + ebOpened = True + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub ActionGrant() + dlgGrant.Show(lstFilterGroup.SelectedRowText) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionGrantButtonPressed(Group As String, Privilege As String, Database As String, Table As String) As Boolean + If (Group = "") Or (Group = "*") Or (Group = "admin") Then Return False + If (Privilege = "") Or (Privilege = "*") Then Return False + If (Database = "") Then Return False + If (Table = "") Then Return False + + Try + + Var sql As String = "GRANT '" + Privilege + "' TO GROUP '" + Group + "'" + If (Database <> "*") And (Table <> "*") Then sql = sql + " FOR TABLE '" + Table + "' IN DATABASE '" + Database + "'" + If (Database <> "*") And (Table = "*") Then sql = sql + " FOR DATABASE '" + Database + "'" + + Session.DB.ExecuteSQL(sql) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Grant Privilege" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not grant privilege." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Var selectRowTag As New Dictionary + selectRowTag.Value("groupname") = Group + selectRowTag.Value("privilege") = Privilege + selectRowTag.Value("databasename") = Database + selectRowTag.Value("tablename") = Table + + Self.RefreshInfos(selectRowTag) + Return True + + + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionRevoke() + Var privilege As Dictionary = Me.GetSelectedPrivilege() + If (privilege = Nil) Then Return + + Var privGroup As String = privilege.Lookup("groupname", "") + Var privName As String = privilege.Lookup("privilege", "") + Var privDB As String = privilege.Lookup("databasename", "") + Var privTable As String = privilege.Lookup("tablename", "") + + Var privilegeCaption As String = privName + " privilege" + If (privDB = "*" And privTable = "*") Then privilegeCaption = privilegeCaption + " on the entire server" + If (privDB <> "*" And privTable = "*") Then privilegeCaption = privilegeCaption + " on database " + privDB + If (privDB <> "*" And privTable <> "*") Then privilegeCaption = privilegeCaption + " on database " + privDB + " on table " + privTable + If (privDB = "*" And privTable <> "*") Then privilegeCaption = privilegeCaption + " on table " + privTable + + + dlgRevoke.Title = "Revoke Privilege" + dlgRevoke.Indicator = Indicators.Danger + dlgRevoke.ActionButton.Caption = "Revoke" + dlgRevoke.CancelButton.Visible = True + dlgRevoke.Message = "Are you sure you want to revoke the " + privilegeCaption + " for group " + privGroup + "?" + dlgRevoke.Explanation = "This action cannot be undone." + + edictActionPrivilege = privilege + + dlgRevoke.ShowWithActionDanger() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionRevokeButtonPressed(obj As WebMessageDialog, button As WebMessageDialogButton) + Var dictRevokePrivilege As Dictionary = edictActionPrivilege + edictActionPrivilege = Nil + + If (button <> obj.ActionButton) Then Return + If (dictRevokePrivilege = Nil) Then Return + + Try + Var privGroup As String = dictRevokePrivilege.Lookup("groupname", "") + Var privName As String = dictRevokePrivilege.Lookup("privilege", "") + Var privDB As String = dictRevokePrivilege.Lookup("databasename", "") + Var privTable As String = dictRevokePrivilege.Lookup("tablename", "") + + Var sql As String = "REVOKE " + privName + " FROM GROUP '" + privGroup + "'" + If (privDB <> "*" And privTable = "*") Then sql = sql + " FOR DATABASE '" + privDB + "'" + If (privDB <> "*" And privTable <> "*") Then sql = sql + " FOR TABLE '" + privTable + "' IN DATABASE '" + privDB + "'" + + Session.DB.ExecuteSQL(sql) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Drop Privilege" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not drop privilege." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Privileges" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetSelectedPrivilege() As Dictionary + If (lstInfos.SelectedRowIndex >= 0) And (lstInfos.RowTagAt(lstInfos.SelectedRowIndex) IsA Dictionary) Then + Return lstInfos.RowTagAt(lstInfos.SelectedRowIndex) + End If + + Return Nil + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Load() + Me.LoadGroups() + me.LoadDatabases() + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadDatabases() + lstFilterDatabase.RemoveAllRows + lstFilterDatabase.AddRow("(ALL)", "*") + lstFilterDatabase.AddRow("-", "*") + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW DATABASES") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstFilterDatabase.AddRow(rs.Column("databasename").StringValue, rs.Column("databasename").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Catch DatabaseException + + Finally + If (lstFilterDatabase.RowCount > 0) Then lstFilterDatabase.SelectedRowIndex = 0 + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadGroups() + lstFilterGroup.RemoveAllRows + lstFilterGroup.AddRow("(ALL)", "*") + lstFilterGroup.AddRow("-", "*") + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + + If (rs.Column("groupname").StringValue <> "admin") Then + lstFilterGroup.AddRow(rs.Column("groupname").StringValue, rs.Column("groupname").StringValue) + End If + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Catch DatabaseException + + Finally + If (lstFilterGroup.RowCount > 0) Then lstFilterGroup.SelectedRowIndex = 0 + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var bRevoke As Boolean + + Var selectedPrivilege As Dictionary = me.GetSelectedPrivilege() + + If (selectedPrivilege <> Nil) And (selectedPrivilege.Lookup("groupname", "*") <> "admin") Then + bRevoke = True + End If + + If (btnRevoke.Enabled <> bRevoke) Then btnRevoke.Enabled = bRevoke + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshInfos(selectRowTag As Dictionary = nil) + If (selectRowTag = Nil) And (lstInfos.SelectedRowIndex >= 0) Then + selectRowTag = Me.GetSelectedPrivilege() + End If + + Me.ShowInfos() + + If (selectRowTag = Nil) Then + Me.RefreshButtons() + Return + End If + + For i As Integer = lstInfos.LastRowIndex DownTo 0 + Var rowTag As Dictionary + If (lstInfos.RowTagAt(i) IsA Dictionary) Then + rowTag = lstInfos.RowTagAt(i) + End If + If (rowTag = Nil) Then Continue + + + If (rowTag.Lookup("groupname", "").StringValue = selectRowTag.Lookup("groupname", "-").StringValue) And _ + (rowTag.Lookup("privilege", "").StringValue = selectRowTag.Lookup("privilege", "-").StringValue) And _ + (rowTag.Lookup("databasename", "").StringValue = selectRowTag.Lookup("databasename", "-").StringValue) And _ + (rowTag.Lookup("tablename", "").StringValue = selectRowTag.Lookup("tablename", "-").StringValue) Then + + lstInfos.SelectedRowIndex = i + Exit 'Loop + End If + Next + + Me.RefreshButtons() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Var filterGroupname As String = lstFilterGroup.RowTagAt(lstFilterGroup.SelectedRowIndex) + Var filterDatabasename As String = lstFilterDatabase.RowTagAt(lstFilterDatabase.SelectedRowIndex) + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW ALL PRIVILEGES") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + Var dictRowTag As New Dictionary + dictRowTag.Value("groupname") = rs.Column("groupname").StringValue + dictRowTag.Value("privilege") = rs.Column("privilege").StringValue + dictRowTag.Value("databasename") = rs.Column("databasename").StringValue + dictRowTag.Value("tablename") = rs.Column("tablename").StringValue + + 'Filter + If (filterGroupname <> "") And (filterGroupname <> "*") Then + If (dictRowTag.Lookup("groupname", "").StringValue <> filterGroupname) Then + rs.MoveToNextRow + Continue + End If + End If + + If (filterDatabasename <> "") And (filterDatabasename <> "*") Then + If (dictRowTag.Lookup("databasename", "").StringValue <> "*") And _ + (dictRowTag.Lookup("databasename", "").StringValue <> filterDatabasename) Then + rs.MoveToNextRow + Continue + End If + End If + + lstInfos.AddRow("") + lstInfos.RowTagAt(lstInfos.LastAddedRowIndex) = dictRowTag + + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 0) = dictRowTag.Lookup("groupname", "").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 1) = dictRowTag.Lookup("privilege", "").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 2) = dictRowTag.Lookup("databasename", "").StringValue + lstInfos.CellTextAt(lstInfos.LastAddedRowIndex, 3) = dictRowTag.Lookup("tablename", "").StringValue + + rs.MoveToNextRow + Wend + End If + + rs.Close + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private ebOpened As Boolean + #tag EndProperty + + #tag Property, Flags = &h21 + Private edictActionPrivilege As Dictionary + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.HeaderAt(0) = "Groupname" + Me.HeaderAt(1) = "Privilege" + Me.HeaderAt(2) = "Databasename" + Me.HeaderAt(3) = "Tablename" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Ascending + + For i As Integer = 1 To 3 + Me.ColumnSortTypeAt(i) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + Next + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(rows() As Integer) + #Pragma unused rows + + If (Not ebOpened) Then Return + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRevoke + #tag Event + Sub Pressed() + Self.ActionRevoke() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnGrant + #tag Event + Sub Pressed() + Self.ActionGrant() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgGrant + #tag Event + Function PrivilegeGrantAction(Group As String, Privilege As String, Database As String, Table As String) As Boolean + Return Self.ActionGrantButtonPressed(Group, Privilege, Database, Table) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events lstFilterGroup + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebOpened) Then Return + + Self.RefreshInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstFilterDatabase + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebOpened) Then Return + + Self.RefreshInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgRevoke + #tag Event + Sub ButtonPressed(button As WebMessageDialogButton) + Self.ActionRevokeButtonPressed(Me, button) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntRegistration.xojo_code b/webapp/containers/cntRegistration.xojo_code new file mode 100644 index 0000000..95d940b --- /dev/null +++ b/webapp/containers/cntRegistration.xojo_code @@ -0,0 +1,426 @@ +#tag WebContainerControl +Begin cntBase cntRegistration + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 2 + ColumnWidths = "50%,50%" + ControlID = "" + Enabled = True + HasHeader = False + Height = 422 + HighlightSortedColumn= False + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Registration Information" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin cntRegistrationAction cntServerRegistration + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 78 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + ScrollDirection = 0 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 422 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Registration" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + lstInfos.AddRow "Server Name" + lstInfos.AddRow "" + lstInfos.AddRow "Registered to" + lstInfos.AddRow "Registration type" + lstInfos.AddRow "Upgrade plan expiration date" + lstInfos.AddRow "Max allowed connections" + + Var styleKeyColumn As WebStyle = StyleListboxKeyColumn + For i As Integer = 0 To lstInfos.LastRowIndex + lstInfos.CellTextAt(i, 0) = New WebListBoxStyleRenderer(styleKeyColumn, lstInfos.CellTextAt(i, 0)) + Next + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW PREFERENCES") + If (rs = Nil) Then Return + + Var infos As New Dictionary + For Each row As DatabaseRow In rs + infos.Value(row.ColumnAt(0).StringValue) = row.ColumnAt(1).StringValue + Next + + rs.Close + + + rs = Session.DB.SelectSQL("SHOW INFO") + If (rs <> Nil) Then + + For Each row As DatabaseRow In rs + infos.Value(row.ColumnAt(0).StringValue) = row.ColumnAt(1).StringValue + Next + + rs.Close + End If + + + lstInfos.CellTextAt(0, 1) = infos.Lookup("SERVER_NAME", "cubeSQL").StringValue + + Var keyName As String = infos.Lookup("KEY_NAME", "").StringValue + If (keyName = "") Or (keyName = "0") Then keyName = "N/A" + lstInfos.CellTextAt(2, 1) = keyName + + lstInfos.CellTextAt(3, 1) = infos.Lookup("KEY_STATUS", "N/A").StringValue + + If (infos.Lookup("KEY_EXPIRATION", "") <> "") Then + lstInfos.CellTextAt(4, 0) = New WebListBoxStyleRenderer(styleKeyColumn, "Key expiration") + lstInfos.CellTextAt(4, 1) = infos.Lookup("server_license", "").StringValue + Else + lstInfos.CellTextAt(4, 0) = New WebListBoxStyleRenderer(styleKeyColumn, "Upgrade plan expiration date") + lstInfos.CellTextAt(4, 1) = infos.Lookup("KEY_EXPIRATION_PLAN", "").StringValue + End If + + lstInfos.CellTextAt(5, 1) = infos.Lookup("max_allowed_connections", "").StringValue + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + +#tag EndWindowCode + +#tag Events cntServerRegistration + #tag Event + Sub NeedsRefresh() + Self.ShowInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntRegistrationAction.xojo_code b/webapp/containers/cntRegistrationAction.xojo_code new file mode 100644 index 0000000..151bf3d --- /dev/null +++ b/webapp/containers/cntRegistrationAction.xojo_code @@ -0,0 +1,494 @@ +#tag WebContainerControl +Begin WebContainer cntRegistrationAction + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 78 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebButton btnGetServerKey + AllowAutoDisable= False + Cancel = False + Caption = "Get a Server Key" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 266 + _mPanelIndex = -1 + End + Begin WebButton btnRegisterServer + AllowAutoDisable= False + Cancel = False + Caption = "Register Server" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 464 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 266 + _mPanelIndex = -1 + End + Begin dlgRegisterServer dlgRegistration + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 272 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebMessageDialog dlgGetServerKey + ControlID = "" + Enabled = True + Explanation = "" + Index = -2147483648 + Indicator = 0 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Message = "" + Scope = 2 + Title = "" + Tooltip = "" + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Method, Flags = &h21 + Private Sub GetServerKeyAction(obj As WebMessageDialog, button As WebMessageDialogButton) + If (button = obj.ActionButton) Then + Self.GoToURL(constUrl_DeveloperKey, True) + End If + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function RegistrationAction(Name As String, Key As String) As Boolean + If (Name = "") Or (Key = "") Then Return False + + Try + If Name.Contains("'", ComparisonOptions.CaseInsensitive) Then + Session.DB.ExecuteSQL("SET BASE64 REGISTRATION TO '" + EncodeBase64(Name) + "' WITH KEY '" + Key + "'") + Else + Session.DB.ExecuteSQL("SET REGISTRATION TO '" + Name + "' WITH KEY '" + Key + "'") + End If + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Registration" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not register cubeSQL." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + NeedsRefresh + Return False + + End Try + + Var dialog As New WebMessageDialog + dialog.Title = "Registration" + dialog.Indicator = Indicators.Success + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Thanks for registering cubeSQL Server!" + dialog.Explanation = "" + dialog.Show + NeedsRefresh + + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowGetServerKeyDialog() + dlgGetServerKey.Title = "Server Key" + dlgGetServerKey.Indicator = Indicators.Default + dlgGetServerKey.ActionButton.Caption = "Get a Key" + dlgGetServerKey.CancelButton.Visible = True + dlgGetServerKey.Message = "Get a Server Key from SQlabs." + dlgGetServerKey.Explanation = "Open this URL in a new Browser Window: " + constUrl_DeveloperKey + + dlgGetServerKey.Show() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowRegistrationDialog() + Var Name, Key As String + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW PREFERENCES") + If (rs <> Nil) Then + Var infos As New Dictionary + For Each row As DatabaseRow In rs + infos.Value(row.ColumnAt(0).StringValue) = row.ColumnAt(1).StringValue + Next + + rs.Close + + Name = infos.Lookup("KEY_NAME", "").StringValue + Key = infos.Lookup("KEY_VALUE", "").StringValue + End If + + + Catch DatabaseException + + Finally + dlgRegistration.Show(Name, Key) + + End Try + + + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event NeedsRefresh() + #tag EndHook + + +#tag EndWindowCode + +#tag Events btnGetServerKey + #tag Event + Sub Pressed() + self.ShowGetServerKeyDialog() + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRegisterServer + #tag Event + Sub Pressed() + self.ShowRegistrationDialog() + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgRegistration + #tag Event + Function RegistrationAction(Name As String, Key As String) As Boolean + Return Self.RegistrationAction(Name, Key) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events dlgGetServerKey + #tag Event + Sub ButtonPressed(button As WebMessageDialogButton) + Self.GetServerKeyAction(Me, button) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntStatus.xojo_code b/webapp/containers/cntStatus.xojo_code new file mode 100644 index 0000000..6c4e1c7 --- /dev/null +++ b/webapp/containers/cntStatus.xojo_code @@ -0,0 +1,480 @@ +#tag WebContainerControl +Begin cntBase cntStatus + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 2 + ColumnWidths = "50%,50%" + ControlID = "" + Enabled = True + HasHeader = False + Height = 500 + HighlightSortedColumn= False + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Status Information" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 0 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebTimer timRefresh + ControlID = "" + Enabled = True + Index = -2147483648 + Location = 1 + LockedInPosition= True + Period = 5000 + RunMode = 2 + Scope = 2 + _mPanelIndex = -1 + End + Begin cntRegistrationAction cntServerRegistration + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 78 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + ScrollDirection = 0 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 422 + Visible = False + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + #tag Event + Sub Shown() + ebShown = True + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h0 + Sub Close() + timRefresh.RunMode = WebTimer.RunModes.Off + timRefresh.Enabled = False + + Super.Close() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Status" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW DETAILED STATISTICS") + If (rs = Nil) Then Return + + Var infos As New Dictionary + For Each row As DatabaseRow In rs + infos.Value(row.ColumnAt(0).StringValue) = row.ColumnAt(1).StringValue + Next + + rs.Close + + + lstInfos.CellTextAt(0, 1) = infos.Lookup("server_release", "") + " (" + infos.Lookup("server_mode", "") + ")" + lstInfos.CellTextAt(1, 1) = infos.Lookup("engine_version", "").StringValue + lstInfos.CellTextAt(2, 1) = infos.Lookup("server_license", "").StringValue + + lstInfos.CellTextAt(4, 1) = infos.Lookup("ip_address", "").StringValue + lstInfos.CellTextAt(5, 1) = infos.Lookup("server_port", "").StringValue + lstInfos.CellTextAt(6, 1) = infos.Lookup("os_version", "").StringValue + + lstInfos.CellTextAt(8, 1) = "Current: " + infos.Lookup("current_connections", "") + " | Total: " + infos.Lookup("total_connections", "") + " | Max: " + infos.Lookup("max_connections", "") + lstInfos.CellTextAt(9, 1) = "Sent: " + infos.Lookup("bytes_sent", "") + " | Received: " + infos.Lookup("bytes_received", "") + lstInfos.CellTextAt(10, 1) = "Query: " + infos.Lookup("query_count", "") + " | Exec: " + infos.Lookup("exec_count", "") + " | Custom Commands: " + infos.Lookup("commands_count", "") + lstInfos.CellTextAt(11, 1) = "Current: " + infos.Lookup("memory_usage", "") + " | Max: " + infos.Lookup("max_memory_usage", "") + lstInfos.CellTextAt(12, 1) = infos.Lookup("server_startup_datetime", "").StringValue + + If ebShown Then + ' Don't change Height before shown... + Var serverLicenseIsNotRegistered As Boolean = infos.Lookup("server_license", "").StringValue.Contains("NOT REGISTERED", ComparisonOptions.CaseInsensitive) + Var isNotRegistered As Boolean = infos.Lookup("registered", "").StringValue.Contains("NOT REGISTERED", ComparisonOptions.CaseInsensitive) + + If serverLicenseIsNotRegistered Or isNotRegistered Then + If (cntServerRegistration.Visible <> True) Then cntServerRegistration.Visible = True + If (lstInfos.Height <> Self.Height - cntServerRegistration.Height) Then lstInfos.Height = Self.Height - cntServerRegistration.Height + Else + If (cntServerRegistration.Visible <> False) Then cntServerRegistration.Visible = False + If (lstInfos.Height <> Self.Height) Then lstInfos.Height = Self.Height + End If + End If + + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private ebShown As Boolean + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.RemoveAllRows + + Me.AddRow "Version" + Me.AddRow "Engine version" + Me.AddRow "License" + Me.AddRow "" + Me.AddRow "Address" + Me.AddRow "Port" + Me.AddRow "Host OS" + Me.AddRow "" + Me.AddRow "Connections" + Me.AddRow "Bytes" + Me.AddRow "Counters" + Me.AddRow "Memory Usage" + Me.AddRow "Up since" + + Var styleKeyColumn As WebStyle = StyleListboxKeyColumn + + For i As Integer = 0 To Me.LastRowIndex + Me.CellTextAt(i, 0) = New WebListBoxStyleRenderer(styleKeyColumn, Me.CellTextAt(i, 0)) + Next + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events timRefresh + #tag Event + Sub Run() + self.ShowInfos() + End Sub + #tag EndEvent +#tag EndEvents +#tag Events cntServerRegistration + #tag Event + Sub NeedsRefresh() + Self.ShowInfos() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/containers/cntUsers.xojo_code b/webapp/containers/cntUsers.xojo_code new file mode 100644 index 0000000..1e3d4c7 --- /dev/null +++ b/webapp/containers/cntUsers.xojo_code @@ -0,0 +1,1065 @@ +#tag WebContainerControl +Begin cntBase cntUsers + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 500 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + ScrollDirection = 0 + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebListBox lstInfos + ColumnCount = 3 + ColumnWidths = "30%, 10%, 60%" + ControlID = "" + Enabled = True + HasHeader = True + Height = 422 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Users" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 1 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 0 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebButton btnDrop + AllowAutoDisable= False + Cancel = False + Caption = "Drop" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 4 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 4 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnRename + AllowAutoDisable= False + Cancel = False + Caption = "Rename" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 2 + Left = 522 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCreate + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgUserCreate dlgCreate + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin dlgCommonName dlgRename + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 6 + TabStop = True + Tooltip = "" + Top = 40 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebThread thrDetails + DebugIdentifier = "" + Index = -2147483648 + LockedInPosition= True + Priority = 5 + Scope = 2 + StackSize = 0 + ThreadID = 0 + ThreadState = 0 + End + Begin WebButton btnPassword + AllowAutoDisable= False + Cancel = False + Caption = "Set Password" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 5 + Left = 374 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin dlgUserCreate dlgPassword + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 40 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 7 + TabStop = True + Tooltip = "" + Top = 40 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebButton btnGroups + AllowAutoDisable= False + Cancel = False + Caption = "Groups" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 6 + Left = 266 + LockBottom = True + LockedInPosition= False + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 8 + TabStop = True + Tooltip = "" + Top = 442 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin dlgUserGroups dlgGroups + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 40 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 9 + TabStop = True + Tooltip = "" + Top = 40 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + End + Begin WebMessageDialog dlgDrop + ControlID = "" + Enabled = True + Explanation = "" + Index = -2147483648 + Indicator = 0 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Message = "" + Scope = 2 + Title = "" + Tooltip = "" + _mPanelIndex = -1 + End +End +#tag EndWebContainerControl + +#tag WindowCode + #tag Event + Sub Opening() + Self.ShowInfos() + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub ActionCreate() + dlgCreate.Show() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionCreateButtonPressed(Name As String, Password As String) As Boolean + If (Name = "") Then Return False + + Try + + Session.DB.ExecuteSQL("CREATE USER " + "'" + Name + "' WITH PASSWORD '" + Password + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Create User" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not create user." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDrop() + Var username As String = Me.GetSelectedUsername() + If (username = "") Then Return + + dlgDrop.Title = "Drop User" + dlgDrop.Indicator = Indicators.Danger + dlgDrop.ActionButton.Caption = "Drop" + dlgDrop.CancelButton.Visible = True + dlgDrop.Message = "Are you sure you want to drop user '" + username + "'?" + dlgDrop.Explanation = "This action cannot be undone." + + esActionUsername = username + + dlgDrop.ShowWithActionDanger() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionDropButtonPressed(obj As WebMessageDialog, button As WebMessageDialogButton) + Var sDropUsername As String = esActionUsername + esActionUsername = "" + + If (button <> obj.ActionButton) Then Return + If (sDropUsername = "") Then Return + + Try + Session.DB.ExecuteSQL("DROP USER '" + sDropUsername) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Drop User" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not drop user." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + + Finally + Me.RefreshInfos() + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionGroups() + Var username As String = Me.GetSelectedUsername() + If (username = "") Then Return + + esActionUsername = username + + dlgGroups.Show(username) + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionGroupsButtonPressed() + Var sUsername As String = esActionUsername + esActionUsername = "" + + Self.RefreshInfos(sUsername) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionPassword() + Var username As String = Me.GetSelectedUsername() + If (username = "") Then Return + + dlgPassword.ShowSetPassword(username) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionPasswordButtonPressed(Name As String, Password As String) As Boolean + If (Name = "") Then Return False + + Try + + Session.DB.ExecuteSQL("SET PASSWORD '" + Password + "' FOR USER " + "'" + Name) + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Set User Password" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not set user password." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ActionRename() + Var username As String = Me.GetSelectedUsername() + If (username = "") Then Return + + esActionUsername = username + + dlgRename.Show("Rename User", "Name", "Rename", Indicators.Primary, username) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function ActionRenameButtonPressed(Name As String) As Boolean + If (esActionUsername = "") Then Return False + If (Name = "") Then Return False + If (esActionUsername = Name) Then Return False + + Try + + Session.DB.ExecuteSQL("RENAME USER '" + esActionUsername + "' TO " + "'" + Name + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Rename User" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not rename user." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return False + + End Try + + 'Success - no dialog + Self.RefreshInfos(Name) + Return True + + End Function + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Close() + Try + thrDetails.Stop + Catch err As RuntimeException + + End Try + + Super.Close() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Constructor() + Super.Constructor + + me.Title = "Users" + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetSelectedUsername() As String + If (lstInfos.SelectedRowIndex < 0) Then Return "" + return lstInfos.CellTextAt(lstInfos.SelectedRowIndex, 0) + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var bGroups, bPassword, bRename, bDrop As Boolean + + Var username As String = Me.GetSelectedUsername() + If (username <> "admin") And (username <> "") Then + bGroups = True + bPassword = True + bRename = (username <> Session.DB.UserName) + bDrop = (username <> Session.DB.UserName) + End If + + If (btnGroups.Enabled <> bGroups) Then btnGroups.Enabled = bGroups + If (btnPassword.Enabled <> bPassword) Then btnPassword.Enabled = bPassword + If (btnRename.Enabled <> bRename) Then btnRename.Enabled = bRename + If (btnDrop.Enabled <> bDrop) Then btnDrop.Enabled = bDrop + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshInfos(selectUsername As String = "") + If (selectUsername = "") Then + selectUsername = Me.GetSelectedUsername() + End If + + Me.ShowInfos() + + If (selectUsername = "") Then + Me.RefreshButtons() + Return + End If + + For i As Integer = lstInfos.LastRowIndex DownTo 0 + If (lstInfos.CellTextAt(i, 0) <> selectUsername) Then Continue + + lstInfos.SelectedRowIndex = i + Exit 'Loop + Next + + Me.RefreshButtons() + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowDetails() + Var styleCenter As WebStyle = StyleListboxTextAlignCenter() + + Var iLast As Integer = lstInfos.LastRowIndex + For i As Integer = 0 To iLast + Var username As String = lstInfos.CellTextAt(i, 0) + If (username = "") Then Continue + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS FOR USER '" + username + "'") + + Var iCount As Integer = 0 + Var sUsers() As String + + If (rs <> Nil) Then + iCount = rs.RowCount + + If (iCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + sUsers.Add(rs.Column("groupname").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + End If + + lstInfos.CellTextAt(i, 1) = New WebListBoxStyleRenderer(styleCenter, iCount.ToString) + lstInfos.CellTextAt(i, 2) = String.FromArray(sUsers, ", ") + + Catch DatabaseException + + End Try + + Next + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowInfos() + lstInfos.RemoveAllRows + + Try + thrDetails.Stop + Catch err As RuntimeException + + End Try + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW USERS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstInfos.AddRow(rs.Column("username").StringValue) + + rs.MoveToNextRow + Wend + End If + + + rs.Close + + + Catch DatabaseException + + Finally + + Try + thrDetails.Start + Catch err As RuntimeException + + End Try + + End Try + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private esActionUsername As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstInfos + #tag Event + Sub Opening() + Me.ExecuteJavaScript("$('#" + Me.ControlID + "').addClass('listboxUsersHeaderAlignment')") + + Me.HeaderAt(0) = "Username" + Me.HeaderAt(1) = "#" + Me.HeaderAt(2) = "Groups" + + Me.ColumnSortTypeAt(0) = WebListBox.SortTypes.Sortable + Me.ColumnSortDirectionAt(0) = WebListbox.SortDirections.Ascending + + For i As Integer = 1 To 2 + Me.ColumnSortTypeAt(i) = WebListBox.SortTypes.Unsortable + Me.ColumnSortDirectionAt(i) = WebListbox.SortDirections.None + Next + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(rows() As Integer) + #Pragma unused rows + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnDrop + #tag Event + Sub Pressed() + Self.ActionDrop() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRename + #tag Event + Sub Pressed() + Self.ActionRename() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCreate + #tag Event + Sub Pressed() + Self.ActionCreate() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgCreate + #tag Event + Function UserCreateAction(Name As String, Password As String) As Boolean + Return Self.ActionCreateButtonPressed(Name, Password) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events dlgRename + #tag Event + Function NameAction(Name As String) As Boolean + Return Self.ActionRenameButtonPressed(Name) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events thrDetails + #tag Event + Sub Run() + Try + Self.ShowDetails() + Catch err As RuntimeException + End Try + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnPassword + #tag Event + Sub Pressed() + Self.ActionPassword() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgPassword + #tag Event + Function UserCreateAction(Name As String, Password As String) As Boolean + Return Self.ActionPasswordButtonPressed(Name, Password) + + End Function + #tag EndEvent +#tag EndEvents +#tag Events btnGroups + #tag Event + Sub Pressed() + Self.ActionGroups() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgGroups + #tag Event + Sub NeedsRefresh() + self.ActionGroupsButtonPressed() + End Sub + #tag EndEvent +#tag EndEvents +#tag Events dlgDrop + #tag Event + Sub ButtonPressed(button As WebMessageDialogButton) + Self.ActionDropButtonPressed(Me, button) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=true + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="ScrollDirection" + Visible=true + Group="Behavior" + InitialValue="ScrollDirections.None" + Type="WebContainer.ScrollDirections" + EditorType="Enum" + #tag EnumValues + "0 - None" + "1 - Horizontal" + "2 - Vertical" + "3 - Both" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="View" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="View" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=false + Group="" + InitialValue="250" + Type="Integer" + EditorType="" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgCommonName.xojo_code b/webapp/dialogs/dlgCommonName.xojo_code new file mode 100644 index 0000000..010b143 --- /dev/null +++ b/webapp/dialogs/dlgCommonName.xojo_code @@ -0,0 +1,512 @@ +#tag WebPage +Begin WebDialog dlgCommonName + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 230 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "Title" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 560 + _mPanelIndex = -1 + End + Begin WebRectangle rctFormContent + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 80 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = True + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 560 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labName + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Name:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 86 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebTextField edtName + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 86 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + End + Begin WebButton btnName + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 480 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 172 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCancel + AllowAutoDisable= False + Cancel = True + Caption = "Cancel" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 172 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + edtName.SetFocus() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnName.Enabled = (edtName.Text.Trim <> "") and (esNameInitialValue <> edtName.Text.Trim) + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show(DialogTitle As String, LabelCaption As String, ButtonCaption As String, ButtonIndicator As Indicators = Indicators.Primary, NameInitialValue As String = "") + labTitle.Text = DialogTitle + labName.Text = LabelCaption + ":" + btnName.Caption = ButtonCaption + btnName.Indicator = ButtonIndicator + edtName.Text = NameInitialValue + esNameInitialValue = NameInitialValue + + Me.RefreshButtons() + Super.Show() + + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event NameAction(Name As String) As Boolean + #tag EndHook + + + #tag Property, Flags = &h21 + Private esNameInitialValue As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events edtName + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnName + #tag Event + Sub Pressed() + If NameAction(edtName.Text.Trim) Then + Self.Close() + End If + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCancel + #tag Event + Sub Pressed() + Self.Close() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgDatabaseCreate.xojo_code b/webapp/dialogs/dlgDatabaseCreate.xojo_code new file mode 100644 index 0000000..0185489 --- /dev/null +++ b/webapp/dialogs/dlgDatabaseCreate.xojo_code @@ -0,0 +1,673 @@ +#tag WebPage +Begin WebDialog dlgDatabaseCreate + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "Create Database" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 560 + _mPanelIndex = -1 + End + Begin WebRectangle rctFormContent + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 171 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 560 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labKey + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Text = "Encryption Key:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 132 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebLabel labName + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Name:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 86 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebTextField edtKey + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 132 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + Begin WebTextField edtName + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 86 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + Begin WebLabel labEncoding + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 4 + TabPanelIndex = 0 + TabStop = True + Text = "Encoding:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 178 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstEncoding + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Parent = "rctFormContent" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 5 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 178 + Visible = True + Width = 150 + _mPanelIndex = -1 + End + End + Begin WebButton btnCreate + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 480 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 256 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCancel + AllowAutoDisable= False + Cancel = True + Caption = "Cancel" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 256 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + edtName.SetFocus() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnCreate.Enabled = (edtName.Text.Trim <> "") And (Not edtKey.Text.Contains("'")) + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show() + edtName.Text = "" + edtKey.Text = "" + lstEncoding.SelectedRowIndex = 0 + + Super.Show() + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event DatabaseCreateAction(Name As String, Key As String, Encoding As String) As Boolean + #tag EndHook + + +#tag EndWindowCode + +#tag Events edtKey + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtName + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstEncoding + #tag Event + Sub Opening() + Me.RemoveAllRows + + Me.AddRow "UTF-8" + Me.AddRow "UTF-16" + Me.AddRow "UTF-16le" + Me.AddRow "UTF-16be" + + Me.SelectedRowIndex = 0 + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCreate + #tag Event + Sub Pressed() + If DatabaseCreateAction(edtName.Text.Trim, edtKey.Text.Trim, lstEncoding.SelectedRowText.Trim) Then + Self.Close() + End If + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCancel + #tag Event + Sub Pressed() + Self.Close() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgPrivilegeGrant.xojo_code b/webapp/dialogs/dlgPrivilegeGrant.xojo_code new file mode 100644 index 0000000..7c5f1e5 --- /dev/null +++ b/webapp/dialogs/dlgPrivilegeGrant.xojo_code @@ -0,0 +1,931 @@ +#tag WebPage +Begin WebDialog dlgPrivilegeGrant + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 372 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "Grant Privilege" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 560 + _mPanelIndex = -1 + End + Begin WebRectangle rctFormContent + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 222 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 580 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labPrivilege + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Text = "Privilege:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 132 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebLabel labGroup + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Group:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 86 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebLabel labDatabase + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 4 + TabPanelIndex = 0 + TabStop = True + Text = "Database:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 178 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstGroup + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Parent = "rctFormContent" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 86 + Visible = True + Width = 392 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstPrivilege + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + PanelIndex = 0 + Parent = "rctFormContent" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 132 + Visible = True + Width = 392 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstDatabase + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + PanelIndex = 0 + Parent = "rctFormContent" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 5 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 178 + Visible = True + Width = 392 + _mPanelIndex = -1 + End + Begin WebLabel labTable + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 6 + TabPanelIndex = 0 + TabStop = True + Text = "Table:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 224 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstTable + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + PanelIndex = 0 + Parent = "rctFormContent" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 7 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 224 + Visible = True + Width = 392 + _mPanelIndex = -1 + End + End + Begin WebButton btnGrant + AllowAutoDisable= False + Cancel = False + Caption = "Grant" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 480 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 314 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCancel + AllowAutoDisable= False + Cancel = True + Caption = "Cancel" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 314 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + ebShown = true + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub Load() + Me.LoadGroup() + Me.LoadPrivileges() + Me.LoadDatabases() + Me.LoadTables() + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadDatabases() + lstDatabase.RemoveAllRows + lstDatabase.AddRow("(ALL)", "*") + lstDatabase.AddRow("-", "*") + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW DATABASES") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstDatabase.AddRow(rs.Column("databasename").StringValue, rs.Column("databasename").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Catch DatabaseException + + Finally + If (lstDatabase.RowCount > 0) Then lstDatabase.SelectedRowIndex = 0 + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadGroup() + lstGroup.RemoveAllRows + + Var iPreSelectGroup As Integer = -1 + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + + If (rs.Column("groupname").StringValue <> "admin") Then + lstGroup.AddRow(rs.Column("groupname").StringValue, rs.Column("groupname").StringValue) + If (esPreSelectGroup <> "") And (esPreSelectGroup = rs.Column("groupname").StringValue) Then + iPreSelectGroup = lstGroup.LastAddedRowIndex + End If + End If + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Catch DatabaseException + + Finally + If (iPreSelectGroup >= 0) And (lstGroup.LastRowIndex >= iPreSelectGroup) Then + lstGroup.SelectedRowIndex = iPreSelectGroup + Else + If (lstGroup.RowCount > 0) Then lstGroup.SelectedRowIndex = 0 + End If + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadPrivileges() + lstPrivilege.RemoveAllRows + + Var privileges() As String + + Try + + Var rs As RowSet = Session.DB.SelectSQL("SHOW PRIVILEGES TABLE") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + Var priv As String = rs.Column("name").StringValue + If (priv <> "") And (privileges.IndexOf(priv) < 0) Then + privileges.Add(priv) + End If + + rs.MoveToNextRow + Wend + End If + + rs.Close + + + Catch DatabaseException + + Finally + + privileges.Sort() + + For Each sAddPrivilege As String In privileges + lstPrivilege.AddRow(sAddPrivilege, sAddPrivilege) + Next + + If (lstPrivilege.RowCount > 0) Then lstPrivilege.SelectedRowIndex = 0 + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadTables() + lstTable.RemoveAllRows + lstTable.AddRow("(ALL)", "*") + + Var databaseName As String = lstDatabase.RowTagAt(lstDatabase.SelectedRowIndex).StringValue + If (databaseName = "") Or (databaseName = "*") Then + If (lstTable.RowCount > 0) Then lstTable.SelectedRowIndex = 0 + Return + End If + + lstTable.AddRow("-", "*") + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW TABLES FOR DATABASE '" + databaseName + "'") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstTable.AddRow(rs.Column("tablename").StringValue, rs.Column("tablename").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Catch DatabaseException + + Finally + If (lstTable.RowCount > 0) Then lstTable.SelectedRowIndex = 0 + + End Try + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var Group As String = lstGroup.RowTagAt(lstGroup.SelectedRowIndex).StringValue + Var Privilege As String = lstPrivilege.RowTagAt(lstPrivilege.SelectedRowIndex).StringValue + + btnGrant.Enabled = (Group <> "admin") And (Group <> "*") And (Group <> "") _ + And (Privilege <> "*") And (Privilege <> "") + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show(PreSelectGroup As String) + esPreSelectGroup = PreSelectGroup + + Me.Load() + Me.RefreshButtons() + + Super.Show() + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event PrivilegeGrantAction(Group As String, Privilege As String, Database As String, Table As String) As Boolean + #tag EndHook + + + #tag Property, Flags = &h21 + Private ebShown As Boolean + #tag EndProperty + + #tag Property, Flags = &h0 + esPreSelectGroup As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstGroup + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebShown) Then Return + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstPrivilege + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebShown) Then Return + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstDatabase + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebShown) Then Return + + Self.LoadTables() + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstTable + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + If (Not ebShown) Then Return + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnGrant + #tag Event + Sub Pressed() + If PrivilegeGrantAction( _ + lstGroup.RowTagAt(lstGroup.SelectedRowIndex).StringValue, _ + lstPrivilege.RowTagAt(lstPrivilege.SelectedRowIndex).StringValue, _ + lstDatabase.RowTagAt(lstDatabase.SelectedRowIndex).StringValue, _ + lstTable.RowTagAt(lstTable.SelectedRowIndex).StringValue _ + ) Then + Self.Close() + End If + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCancel + #tag Event + Sub Pressed() + Self.Close() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="esPreSelectGroup" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgRegisterServer.xojo_code b/webapp/dialogs/dlgRegisterServer.xojo_code new file mode 100644 index 0000000..7f009d5 --- /dev/null +++ b/webapp/dialogs/dlgRegisterServer.xojo_code @@ -0,0 +1,601 @@ +#tag WebPage +Begin WebDialog dlgRegisterServer + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 272 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "cubeSQL Server Registration" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 560 + _mPanelIndex = -1 + End + Begin WebRectangle rctFormContent + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 120 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 560 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labKey + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Text = "Key:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 132 + Underline = False + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebLabel labName + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Name:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 86 + Underline = False + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebTextField edtKey + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 148 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 132 + Visible = True + Width = 412 + _mPanelIndex = -1 + End + Begin WebTextField edtName + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 148 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 86 + Visible = True + Width = 412 + _mPanelIndex = -1 + End + End + Begin WebButton btnRegister + AllowAutoDisable= False + Cancel = False + Caption = "Register" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 480 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 214 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCancel + AllowAutoDisable= False + Cancel = True + Caption = "Cancel" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 214 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + edtName.SetFocus() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var isInitialValues As Boolean = (edtName.Text.Trim = esInitialName) And (edtKey.Text.Trim = esInitialKey) + Var isEmpty As Boolean = (edtName.Text.Trim = "") Or (edtKey.Text.Trim = "") + + btnRegister.Enabled = (Not isInitialValues) And (Not isEmpty) + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show() + me.Show("", "") + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show(Name As String, Key As String) + edtName.Text = Name.Trim + edtKey.Text = Key.Trim + + esInitialName = edtName.Text + esInitialKey = edtKey.Text + + Super.Show() + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event RegistrationAction(Name As String, Key As String) As Boolean + #tag EndHook + + + #tag Property, Flags = &h21 + Private esInitialKey As String + #tag EndProperty + + #tag Property, Flags = &h21 + Private esInitialName As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events edtKey + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtName + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRegister + #tag Event + Sub Pressed() + If RegistrationAction(edtName.Text.Trim, edtKey.Text.Trim) Then + Self.Close() + End If + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCancel + #tag Event + Sub Pressed() + Self.Close() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgUserCreate.xojo_code b/webapp/dialogs/dlgUserCreate.xojo_code new file mode 100644 index 0000000..1be6bb0 --- /dev/null +++ b/webapp/dialogs/dlgUserCreate.xojo_code @@ -0,0 +1,686 @@ +#tag WebPage +Begin WebDialog dlgUserCreate + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 314 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 600 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "Create User" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 560 + _mPanelIndex = -1 + End + Begin WebRectangle rctFormContent + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 171 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 560 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labPassword + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Text = "Password:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 132 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebLabel labName + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Text = "Name:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 86 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebTextField edtPassword + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 1 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 132 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + Begin WebTextField edtName + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 86 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + Begin WebLabel labPasswordRepeat + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rctFormContent" + Scope = 2 + TabIndex = 4 + TabPanelIndex = 0 + TabStop = True + Text = "Repeat:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 178 + Underline = False + Visible = True + Width = 140 + _mPanelIndex = -1 + End + Begin WebTextField edtPasswordRepeat + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 1 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rctFormContent" + Left = 188 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rctFormContent" + ReadOnly = False + Scope = 2 + TabIndex = 5 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 178 + Visible = True + Width = 372 + _mPanelIndex = -1 + End + End + Begin WebButton btnCreate + AllowAutoDisable= False + Cancel = False + Caption = "Create" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 480 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 256 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnCancel + AllowAutoDisable= False + Cancel = True + Caption = "Cancel" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 256 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + If edtName.Enabled Then + edtName.SetFocus() + Return + End If + + If edtPassword.Enabled Then + edtPassword.SetFocus() + End If + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + btnCreate.Enabled = (edtName.Text.Trim <> "") _ + And (edtPassword.Text.Trim <> "") _ + And (edtPassword.Text.Trim.Compare(edtPasswordRepeat.Text.Trim, ComparisonOptions.Binary) = 0) _ + And (Not edtName.Text.Contains("'")) _ + And (Not edtPassword.Text.Contains("'")) + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show() + edtName.Text = "" + edtPassword.Text = "" + edtPasswordRepeat.Text = "" + + Super.Show() + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub ShowSetPassword(Name As String) + edtName.Text = Name + edtPassword.Text = "" + edtPasswordRepeat.Text = "" + + labTitle.Text = "Set User Password" + edtName.Enabled = False + + Super.Show() + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event UserCreateAction(Name As String, Password As String) As Boolean + #tag EndHook + + +#tag EndWindowCode + +#tag Events edtPassword + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtName + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events edtPasswordRepeat + #tag Event + Sub TextChanged() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCreate + #tag Event + Sub Pressed() + If UserCreateAction(edtName.Text.Trim, edtPassword.Text.Trim) Then + Self.Close() + End If + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnCancel + #tag Event + Sub Pressed() + Self.Close() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/dialogs/dlgUserGroups.xojo_code b/webapp/dialogs/dlgUserGroups.xojo_code new file mode 100644 index 0000000..98fd282 --- /dev/null +++ b/webapp/dialogs/dlgUserGroups.xojo_code @@ -0,0 +1,688 @@ +#tag WebPage +Begin WebDialog dlgUserGroups + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = True + Height = 346 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = False + LockRight = False + LockTop = False + LockVertical = False + TabIndex = 0 + Top = 0 + Visible = True + Width = 750 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebLabel labTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 24.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Scope = 2 + TabIndex = 0 + TabStop = True + Text = "Groups for User" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 20 + Underline = False + Visible = True + Width = 710 + _mPanelIndex = -1 + End + Begin WebButton btnAdd + AllowAutoDisable= False + Cancel = False + Caption = "Add" + ControlID = "" + Default = True + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 1 + Left = 414 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 3 + TabStop = True + Tooltip = "" + Top = 288 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebButton btnClose + AllowAutoDisable= False + Cancel = True + Caption = "Close" + ControlID = "" + Default = False + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + Left = 630 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Scope = 2 + TabIndex = 5 + TabStop = True + Tooltip = "" + Top = 288 + Visible = True + Width = 100 + _mPanelIndex = -1 + End + Begin WebListBox lstUserGroups + ColumnCount = 1 + ColumnWidths = "" + ControlID = "" + Enabled = True + HasHeader = False + Height = 200 + HighlightSortedColumn= True + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastColumnIndex = 0 + LastRowIndex = 0 + Left = 0 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + NoRowsMessage = "No Groups" + ProcessingMessage= "" + RowCount = 0 + RowSelectionType= 1 + Scope = 2 + SearchCriteria = "" + SelectedRowColor= &c0d6efd + SelectedRowIndex= 0 + TabIndex = 1 + TabStop = True + Tooltip = "" + Top = 66 + Visible = True + Width = 750 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstAddGroups + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 20 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = False + LockVertical = False + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 2 + TabStop = True + Tooltip = "" + Top = 288 + Visible = True + Width = 386 + _mPanelIndex = -1 + End + Begin WebButton btnRemove + AllowAutoDisable= False + Cancel = False + Caption = "Remove" + ControlID = "" + Default = False + Enabled = False + Height = 38 + Index = -2147483648 + Indicator = 4 + Left = 522 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + PanelIndex = 0 + Scope = 2 + TabIndex = 4 + TabStop = True + Tooltip = "" + Top = 288 + Visible = True + Width = 100 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Shown() + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Function GetSelectedAddGroup() As String + If (lstAddGroups.SelectedRowIndex < 0) Then Return "" + return lstAddGroups.SelectedRowText + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetSelectedUserGroup() As String + If (lstUserGroups.SelectedRowIndex < 0) Then Return "" + Return lstUserGroups.CellTextAt(lstUserGroups.SelectedRowIndex, 0) + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Load() + Me.LoadUserGroups() + Me.LoadAddGroups() + + labTitle.Text = lstUserGroups.RowCount.ToString + " Groups for User " + esUsername + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadAddGroups() + lstAddGroups.RemoveAllRows + + Var sUserGroups() As String + For i As Integer = lstUserGroups.LastRowIndex DownTo 0 + sUserGroups.Add(lstUserGroups.CellTextAt(i, 0)) + Next + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + If (sUserGroups.IndexOf(rs.Column("groupname").StringValue) >= 0) Then + 'user already added to this group + rs.MoveToNextRow + Continue + End If + + lstAddGroups.AddRow(rs.Column("groupname").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + + If (lstAddGroups.LastRowIndex >= 0) Then lstAddGroups.SelectedRowIndex = 0 + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub LoadUserGroups() + lstUserGroups.RemoveAllRows + + Try + Var rs As RowSet = Session.DB.SelectSQL("SHOW GROUPS FOR USER '" + esUsername + "'") + If (rs = Nil) Then Return + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + lstUserGroups.AddRow(rs.Column("groupname").StringValue) + + rs.MoveToNextRow + Wend + End If + + rs.Close + + lstUserGroups.SelectedRowIndex = -1 + + Catch DatabaseException + + End Try + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub RefreshButtons() + Var sAddGroup As String = Me.GetSelectedAddGroup + Var bAddGroupSelected As Boolean = (sAddGroup <> "") + + Var bAddGroupAlreadyAssigned As Boolean = False + + If (sAddGroup <> "") Then + For i As Integer = lstUserGroups.LastRowIndex DownTo 0 + If (lstUserGroups.CellTextAt(i, 0) = sAddGroup) Then + bAddGroupAlreadyAssigned = True + Exit 'Loop + End If + Next + End If + + btnAdd.Enabled = bAddGroupSelected And (Not bAddGroupAlreadyAssigned) + + Var sRemoveGroup As String = Me.GetSelectedUserGroup() + Var bLoggedInUserRemovingAdminGroup As Boolean = (Session.DB.UserName = esUsername) And (sRemoveGroup = "admin") + btnRemove.Enabled = (sRemoveGroup <> "") And (Not bLoggedInUserRemovingAdminGroup) + + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub Show(Username As String) + esUsername = Username + + Me.Load() + + Me.RefreshButtons() + + Super.Show() + End Sub + #tag EndMethod + + + #tag Hook, Flags = &h0 + Event NeedsRefresh() + #tag EndHook + + + #tag Property, Flags = &h21 + Private ebNeedsRefresh As Boolean + #tag EndProperty + + #tag Property, Flags = &h21 + Private esUsername As String + #tag EndProperty + + +#tag EndWindowCode + +#tag Events btnAdd + #tag Event + Sub Pressed() + Var group As String = Self.GetSelectedAddGroup() + If (group = "") Then Return + + Try + + Session.DB.ExecuteSQL("ADD USER " + "'" + esUsername + "' TO GROUP '" + group + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Add User to Group" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not add user to group." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return + + End Try + + 'Success - no dialog + ebNeedsRefresh = True + Self.Load() + + For i As Integer = lstUserGroups.LastRowIndex DownTo 0 + If (lstUserGroups.CellTextAt(i, 0) = group) Then + lstUserGroups.SelectedRowIndex = i + Exit 'Loop + End If + Next + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnClose + #tag Event + Sub Pressed() + If ebNeedsRefresh Then NeedsRefresh + + Self.Close() + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstUserGroups + #tag Event + Sub SelectionChanged(rows() As Integer) + #Pragma unused rows + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events lstAddGroups + #tag Event + Sub SelectionChanged(item As WebMenuItem) + #Pragma unused item + + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnRemove + #tag Event + Sub Pressed() + Var group As String = Self.GetSelectedUserGroup() + If (group = "") Then Return + + Try + + Session.DB.ExecuteSQL("REMOVE USER " + "'" + esUsername + "' FROM GROUP '" + group + "'") + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Remove User from Group" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not remove user from group." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return + + End Try + + 'Success - no dialog + ebNeedsRefresh = True + Self.Load() + Self.RefreshButtons() + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=false + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/main/CubeSQLAdminPage.xojo_code b/webapp/main/CubeSQLAdminPage.xojo_code new file mode 100644 index 0000000..c68ff87 --- /dev/null +++ b/webapp/main/CubeSQLAdminPage.xojo_code @@ -0,0 +1,536 @@ +#tag WebPage +Begin WebPage CubeSQLAdminPage + AllowTabOrderWrap= True + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = False + Height = 400 + ImplicitInstance= False + Index = -2147483648 + Indicator = 0 + IsImplicitInstance= False + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + MinimumHeight = 400 + MinimumWidth = 600 + TabIndex = 0 + Title = "cubeSQL Admin" + Top = 0 + Visible = True + Width = 600 + _ImplicitInstance= False + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebToolbar tbrCubeSQLAdmin + ControlID = "" + Enabled = True + FullWidth = False + Height = 56 + Index = -2147483648 + Indicator = 8 + Left = 0 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Position = 0 + Scope = 2 + TabIndex = 0 + TabStop = True + Title = "" + Tooltip = "" + Top = 0 + Visible = True + Width = 600 + _mPanelIndex = -1 + End + Begin WebLabel labContainerTitle + Bold = True + ControlID = "" + Enabled = True + FontName = "" + FontSize = 18.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rctContainer" + Italic = False + Left = 0 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + Multiline = False + Parent = "nil" + Scope = 2 + TabIndex = 1 + TabStop = True + Text = "Container Title" + TextAlignment = 2 + TextColor = &c000000FF + Tooltip = "" + Top = 64 + Underline = False + Visible = True + Width = 600 + _mPanelIndex = -1 + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Opening() + Me.Title = "cubeSQL Admin - " + Session.DB.Host + ":" + Session.DB.Port.ToString + + me.ShowContainer(ContainerKey.Status) + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Sub CloseContainer() + If (Me.CurrentContainer <> Nil) Then + Me.CurrentContainer.Close + Me.CurrentContainer = Nil + me.CurrentContainerKey = ContainerKey.None + End If + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ShowContainer(containerItem As ContainerKey) + If (Me.CurrentContainer <> Nil) And (Me.CurrentContainerKey = containerItem) Then Return + + Var showContainer As cntBase + + Select Case containerItem + Case ContainerKey.Status + showContainer = New cntStatus + + Case ContainerKey.Registration + showContainer = New cntRegistration + + Case ContainerKey.Databases + showContainer = New cntDatabases + + Case ContainerKey.Groups + showContainer = New cntGroups + + Case ContainerKey.Users + showContainer = New cntUsers + + Case ContainerKey.Privileges + showContainer = new cntPrivileges + + Case ContainerKey.Console + showContainer = new cntConsole + + Case ContainerKey.Commands + showContainer = New cntCommands + + Case ContainerKey.Clients + showContainer = New cntClients + + Case ContainerKey.Log + showContainer = New cntLog + + End Select + + If (showContainer = Nil) Then Return + + Me.CloseContainer() + + labContainerTitle.Text = showContainer.Title + + Var top As Integer = labContainerTitle.Top + labContainerTitle.Height + showContainer.EmbedWithin(Self, 0, top, Self.Width, Self.Height - top) + + Me.CurrentContainer = showContainer + Me.CurrentContainerKey = containerItem + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private CurrentContainer As cntBase + #tag EndProperty + + #tag Property, Flags = &h21 + Private CurrentContainerKey As ContainerKey + #tag EndProperty + + +#tag EndWindowCode + +#tag Events tbrCubeSQLAdmin + #tag Event + Sub Opening() + Me.Indicator = WebUIControl.Indicators.Dark + Me.Style.BackgroundColor = Color.RGB(0,51,102) + Me.Style.ForegroundColor = Color.White + + Me.Title = "cubeSQL Admin" + Me.Icon = icon_128 + + Var btn As WebToolbarButton + + btn = New WebToolbarButton + btn.Style = WebToolbarButton.ButtonStyles.Menu + btn.Caption = "Server" + btn.Menu.AddMenuItem(New WebMenuItem("Registration", ContainerKey.Registration)) + btn.Menu.AddMenuItem(New WebMenuItem("Databases", ContainerKey.Databases)) + btn.Menu.AddMenuItem(New WebMenuItem("Console", ContainerKey.Console)) + Me.AddItem(btn) + + btn = New WebToolbarButton + btn.Style = WebToolbarButton.ButtonStyles.Menu + btn.Caption = "Security" + btn.Menu.AddMenuItem(New WebMenuItem("Groups", ContainerKey.Groups)) + btn.Menu.AddMenuItem(New WebMenuItem("Users", ContainerKey.Users)) + btn.Menu.AddMenuItem(New WebMenuItem("Privileges", ContainerKey.Privileges)) + Me.AddItem(btn) + + btn = New WebToolbarButton + btn.Style = WebToolbarButton.ButtonStyles.Menu + btn.Caption = "Information" + btn.Menu.AddMenuItem(New WebMenuItem("Commands", ContainerKey.Commands)) + btn.Menu.AddMenuItem(New WebMenuItem("Clients", ContainerKey.Clients)) + btn.Menu.AddMenuItem(New WebMenuItem("Log", ContainerKey.Log)) + Me.AddItem(btn) + + btn = New WebToolbarButton + btn.Style = WebToolbarButton.ButtonStyles.FlexibleSpace + Me.AddItem(btn) + + + btn = New WebToolbarButton + btn.Tag = "Logout" + 'btn.Icon = WebPicture.BootstrapIcon("escape", Color.White) + btn.Style = WebToolbarButton.ButtonStyles.PushButton + btn.Caption = "Logout" + Me.AddItem(btn) + + + End Sub + #tag EndEvent + #tag Event + Sub TitlePressed() + self.ShowContainer(ContainerKey.Status) + End Sub + #tag EndEvent + #tag Event + Sub Pressed(item As WebToolbarButton) + Select Case item.Tag + + Case "Logout" + Self.CloseContainer() + Session.Logout + Self.Close() + Return + + End Select + + + + End Sub + #tag EndEvent + #tag Event + Sub MenuSelected(item As WebToolbarButton, hitItem As WebMenuItem) + #Pragma unused item + + Self.ShowContainer(hitItem.Tag) + + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MinimumHeight" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MinimumWidth" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=true + Group="Behavior" + InitialValue="Untitled" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_ImplicitInstance" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="IsImplicitInstance" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="AllowTabOrderWrap" + Visible=false + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/main/LoginPage.xojo_code b/webapp/main/LoginPage.xojo_code new file mode 100644 index 0000000..4ffae30 --- /dev/null +++ b/webapp/main/LoginPage.xojo_code @@ -0,0 +1,1145 @@ +#tag WebPage +Begin WebPage LoginPage + AllowTabOrderWrap= True + Compatibility = "" + ControlCount = 0 + ControlID = "" + Enabled = False + Height = 518 + ImplicitInstance= False + Index = -2147483648 + Indicator = 0 + IsImplicitInstance= False + LayoutDirection = 0 + LayoutType = 0 + Left = 0 + LockBottom = False + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + MinimumHeight = 400 + MinimumWidth = 600 + TabIndex = 0 + Title = "cubeSQL Admin - Login" + Top = 0 + Visible = True + Width = 600 + _ImplicitInstance= False + _mDesignHeight = 0 + _mDesignWidth = 0 + _mName = "" + _mPanelIndex = -1 + Begin WebRectangle rectLogin + BackgroundColor = &cFFFFFF + ControlCount = 0 + ControlID = "" + Enabled = True + HasBackgroundColor= False + Height = 478 + Index = -2147483648 + Indicator = 0 + LayoutDirection = 0 + LayoutType = 0 + Left = 20 + LockBottom = False + LockedInPosition= True + LockHorizontal = True + LockLeft = False + LockRight = False + LockTop = True + LockVertical = False + Scope = 2 + TabIndex = 0 + TabStop = True + Tooltip = "" + Top = 20 + Visible = True + Width = 560 + _mDesignHeight = 0 + _mDesignWidth = 0 + _mPanelIndex = -1 + Begin WebLabel labHostname + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + Parent = "rectLogin" + Scope = 2 + TabIndex = 2 + TabPanelIndex = 0 + TabStop = True + Text = "Hostname:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 207 + Underline = False + Visible = True + Width = 166 + _mPanelIndex = -1 + End + Begin WebLabel labUsername + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rectLogin" + Scope = 2 + TabIndex = 4 + TabPanelIndex = 0 + TabStop = True + Text = "Username:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 253 + Underline = False + Visible = True + Width = 166 + _mPanelIndex = -1 + End + Begin WebLabel labPassword + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rectLogin" + Scope = 2 + TabIndex = 6 + TabPanelIndex = 0 + TabStop = True + Text = "Password:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 299 + Underline = False + Visible = True + Width = 166 + _mPanelIndex = -1 + End + Begin WebLabel labPort + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rectLogin" + Scope = 2 + TabIndex = 8 + TabPanelIndex = 0 + TabStop = True + Text = "Port:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 345 + Underline = False + Visible = True + Width = 166 + _mPanelIndex = -1 + End + Begin WebLabel labEncryption + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 0.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + PanelIndex = 0 + Parent = "rectLogin" + Scope = 2 + TabIndex = 10 + TabPanelIndex = 0 + TabStop = True + Text = "Encryption:" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 391 + Underline = False + Visible = True + Width = 166 + _mPanelIndex = -1 + End + Begin WebTextField edtHostname + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + Parent = "rectLogin" + ReadOnly = False + Scope = 2 + TabIndex = 3 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 207 + Visible = True + Width = 346 + _mPanelIndex = -1 + End + Begin WebTextField edtUsername + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 0 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rectLogin" + ReadOnly = False + Scope = 2 + TabIndex = 5 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 253 + Visible = True + Width = 346 + _mPanelIndex = -1 + End + Begin WebTextField edtPassword + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 1 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + Parent = "rectLogin" + ReadOnly = False + Scope = 2 + TabIndex = 7 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 299 + Visible = True + Width = 346 + _mPanelIndex = -1 + End + Begin WebTextField edtPort + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 3 + Height = 38 + Hint = "" + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rectLogin" + ReadOnly = False + Scope = 2 + TabIndex = 9 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 345 + Visible = True + Width = 150 + _mPanelIndex = -1 + End + Begin WebPopupMenu lstEncryption + ControlID = "" + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + InitialValue = "" + LastAddedRowIndex= 0 + LastRowIndex = 0 + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Parent = "rectLogin" + RowCount = 0 + Scope = 2 + SelectedRowIndex= 0 + SelectedRowText = "" + TabIndex = 11 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 391 + Visible = True + Width = 150 + _mPanelIndex = -1 + End + Begin WebImageViewer imgCubeSQL + ControlID = "" + DisplayMode = 0 + Enabled = True + Height = 128 + Image = 1922361343 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Left = 40 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Parent = "rectLogin" + Scope = 2 + SVGData = "" + TabIndex = 0 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 40 + URL = "" + Visible = True + Width = 128 + _mPanelIndex = -1 + _ProtectImage = False + End + Begin WebLabel labCubeSQL + Bold = False + ControlID = "" + Enabled = True + FontName = "" + FontSize = 32.0 + Height = 38 + Index = -2147483648 + Indicator = 0 + InitialParent = "rectLogin" + Italic = False + Left = 214 + LockBottom = False + LockedInPosition= True + LockHorizontal = False + LockLeft = True + LockRight = False + LockTop = True + LockVertical = False + Multiline = False + Parent = "rectLogin" + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Text = "cubeSQL Admin" + TextAlignment = 0 + TextColor = &c000000FF + Tooltip = "" + Top = 81 + Underline = False + Visible = True + Width = 346 + _mPanelIndex = -1 + End + Begin WebButton btnConnect + AllowAutoDisable= False + Cancel = False + Caption = "Connect" + ControlID = "" + Default = True + Enabled = True + Height = 38 + Index = -2147483648 + Indicator = 1 + InitialParent = "rectLogin" + Left = 410 + LockBottom = True + LockedInPosition= True + LockHorizontal = False + LockLeft = False + LockRight = True + LockTop = False + LockVertical = False + Parent = "rectLogin" + Scope = 2 + TabIndex = 12 + TabPanelIndex = 0 + TabStop = True + Tooltip = "" + Top = 437 + Visible = True + Width = 150 + _mPanelIndex = -1 + End + Begin WebTextField edtSSLPemPwd + AllowAutoComplete= False + AllowSpellChecking= False + Caption = "" + ControlID = "" + Enabled = True + FieldType = 1 + Height = 38 + Hint = "SSL Cert: PEM Pwd" + Index = -2147483648 + Indicator = 0 + Left = 372 + LockBottom = False + LockedInPosition= False + LockHorizontal = False + LockLeft = True + LockRight = True + LockTop = True + LockVertical = False + MaximumCharactersAllowed= 0 + PanelIndex = 0 + Parent = "rectLogin" + ReadOnly = False + Scope = 2 + TabIndex = 13 + TabPanelIndex = 0 + TabStop = True + Text = "" + TextAlignment = 0 + Tooltip = "" + Top = 391 + Visible = False + Width = 188 + _mPanelIndex = -1 + End + End +End +#tag EndWebPage + +#tag WindowCode + #tag Event + Sub Opening() + Self.Prefill() + + End Sub + #tag EndEvent + + #tag Event + Sub Shown() + Self.Prefill() + ebShown = True + + End Sub + #tag EndEvent + + + #tag Method, Flags = &h21 + Private Function CheckAdmin(db As CubeSQLServer) As Boolean + If (db.UserName = "admin") Then Return True + + Try + Var rs As RowSet = db.SelectSQL("SHOW MY PRIVILEGES") + + If (rs = Nil) Then Return False + + If (rs.RowCount > 0) Then + rs.MoveToFirstRow + While (Not rs.AfterLastRow) + If (rs.Column("privilege").StringValue = "ADMIN") Then Return True + + rs.MoveToNextRow + Wend + End If + + rs.Close + + Return False + + Catch err As DatabaseException + Return False + + Finally + Return False + + End Try + + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Connect() + #Pragma BreakOnExceptions off + + Var db As New CubeSQLServer + + db.Host = edtHostname.Text.Trim + db.UserName = edtUsername.Text.Trim + db.Password = edtPassword.Text.Trim + db.Port = edtPort.Text.ToInteger + db.Encryption = lstEncryption.RowTagAt(lstEncryption.SelectedRowIndex) + db.Timeout = 10 + + Me.ConnectSSL(db) + + Try + If (Not db.Connect) Or (Not db.IsConnected) Then + Raise New DatabaseException(db.ErrMsg, db.ErrCode) + End If + + Catch err As DatabaseException + Var dialog As New WebMessageDialog + dialog.Title = "Connect" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Could not connect to cubeSQL." + dialog.Explanation = "Error" + If(err.ErrorNumber > 0, " " + err.ErrorNumber.ToString, "") + ": " + err.Message + dialog.Show + Return + + End Try + + If (Not Self.CheckAdmin(db)) Then + Var dialog As New WebMessageDialog + dialog.Title = "cubeSQL Admin Login" + dialog.Indicator = Indicators.Warning + dialog.ActionButton.Caption = "OK" + dialog.CancelButton.Visible = False + dialog.Message = "Insufficient privileges." + dialog.Explanation = "This application requires Admin privileges in order to function properly." + dialog.Show + Return + End If + + + If Session.Login(db) Then + 'Clear Password for next Login + 'Except if prefilled password + Var setUsername As String + Var setPassword As String + Me.Prefill_UserAndPwd(setUsername, setPassword) + If (edtUsername.Text.Trim <> setUsername) Or (edtPassword.Text.Trim <> setPassword) Then + edtPassword.Text = "" + End If + End If + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub ConnectSSL(db As CubeSQLServer) + #Pragma BreakOnExceptions off + + If (db.Encryption <> CubeSQLPlugin.kSSL) Then + db.SSLCertificate = Nil + db.RootCertificate = Nil + db.SSLCipherList = "" + Return + End If + + Var setSSLCertificate As String + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLCertificate", "CUBESQL_SSL_CERTIFICATE", setSSLCertificate) Then + Try + Var fileSSLCertificate As New FolderItem(setSSLCertificate, FolderItem.PathModes.Native) + If (fileSSLCertificate <> Nil) And fileSSLCertificate.Exists Then + db.SSLCertificate = fileSSLCertificate + End If + Catch err As IOException + Catch err As UnsupportedFormatException + End Try + End If + + Var setSSLCertificatePassword As String + If edtSSLPemPwd.Visible Then + setSSLCertificatePassword = edtSSLPemPwd.Text + db.SSLCertificatePassword = setSSLCertificatePassword.Trim + Else + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLCertificatePassword", "CUBESQL_SSL_CERTIFICATEPASSWORD", setSSLCertificatePassword) Then + Try + If setSSLCertificatePassword.EndsWith(".txt", ComparisonOptions.CaseInsensitive) Then + 'read from .txt file + Var fileSSLCertificatePassword As FolderItem = New FolderItem(setSSLCertificatePassword, FolderItem.PathModes.Native) + If (fileSSLCertificatePassword <> Nil) And fileSSLCertificatePassword.Exists Then + Try + Dim stream As TextInputStream = TextInputStream.Open(fileSSLCertificatePassword) + Dim s As String = stream.ReadAll(Encodings.UTF8) + stream.Close + + If (s.Trim <> "") Then db.SSLCertificatePassword = s.Trim + Catch e As IOException + End Try + End If + Else + 'use value + db.SSLCertificatePassword = setSSLCertificatePassword.Trim + End If + Catch err As IOException + Catch err As UnsupportedFormatException + End Try + End If + End If + + Var setRootCertificate As String + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLRootCertificate", "CUBESQL_SSL_ROOTCERTIFICATE", setRootCertificate) Then + Try + Var fileRootCertificate As New FolderItem(setRootCertificate, FolderItem.PathModes.Native) + If (fileRootCertificate <> Nil) And fileRootCertificate.Exists Then + db.RootCertificate = fileRootCertificate + End If + Catch err As IOException + Catch err As UnsupportedFormatException + End Try + End If + + + Var setSSLCipherList As String + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLCipherList", "CUBESQL_SSL_CIPHERLIST", setSSLCipherList) Then + Try + If setSSLCipherList.EndsWith(".txt", ComparisonOptions.CaseInsensitive) Then + 'read from .txt file + Var fileSSLCipherList As FolderItem = New FolderItem(setSSLCipherList, FolderItem.PathModes.Native) + If (fileSSLCipherList <> Nil) And fileSSLCipherList.Exists Then + Try + Dim stream As TextInputStream = TextInputStream.Open(fileSSLCipherList) + Dim s As String = stream.ReadAll(Encodings.UTF8) + stream.Close + + If (s.Trim <> "") Then db.SSLCipherList = s.Trim + Catch e As IOException + End Try + End If + Else + 'use value + db.SSLCipherList = setSSLCipherList.Trim + End If + Catch err As IOException + Catch err As UnsupportedFormatException + End Try + End If + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Prefill() + If ebShown Then Return + + Var setHostname As String + If (Not modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLHostname", "CUBESQL_HOSTNAME", setHostname)) Then + setHostname = "localhost" + End If + + Var setPort As String + If (Not modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLPort", "CUBESQL_PORT", setPort)) Then + setPort = "4430" + End If + If (setPort.ToInteger < 1) Then setPort = "4430" + + Var setEncryption As String + If (Not modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLEncryption", "CUBESQL_ENCRYPTION", setEncryption)) Then + setEncryption = "AES256" + End If + + Var setUsername As String + Var setPassword As String + Me.Prefill_UserAndPwd(setUsername, setPassword) + + edtHostname.Text = setHostname + edtPort.Text = setPort + edtUsername.Text = setUsername + edtPassword.Text = setPassword + + Select Case setEncryption + + Case "NONE" + lstEncryption.SelectRowWithTag(CubeSQLPlugin.kAESNONE) + + Case "AES128" + lstEncryption.SelectRowWithTag(CubeSQLPlugin.kAES128) + + Case "AES256" + lstEncryption.SelectRowWithTag(CubeSQLPlugin.kAES256) + + Case "SSL" + lstEncryption.SelectRowWithTag(CubeSQLPlugin.kSSL) + + End Select + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Prefill_UserAndPwd(ByRef setUsername As String, ByRef setPassword As String) + setUsername = "" + setPassword = "" + + Var bUsernameIsSet As Boolean = True + If (Not modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLUsername", "CUBESQL_USERNAME", setUsername)) Then + bUsernameIsSet = False + setUsername = "admin" + End If + + If bUsernameIsSet Then + If (Not modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLPassword", "CUBESQL_PASSWORD", setPassword)) Then + 'never prefill a default password + 'except in DebugBuild - see above + End If + End If + + End Sub + #tag EndMethod + + + #tag Property, Flags = &h21 + Private ebShown As Boolean + #tag EndProperty + + +#tag EndWindowCode + +#tag Events lstEncryption + #tag Event + Sub Opening() + Me.RemoveAllRows + + Me.AddRow("NONE", CubeSQLPlugin.kAESNONE) + Me.AddRow("AES128", CubeSQLPlugin.kAES128) + Me.AddRow("AES256", CubeSQLPlugin.kAES256) + Me.AddRow("SSL", CubeSQLPlugin.kSSL) + + Me.SelectRowWithTag(CubeSQLPlugin.kAES256) + + End Sub + #tag EndEvent + #tag Event + Sub SelectionChanged(item As WebMenuItem) + Dim bSSLPemPwdVisible As Boolean = False + + If (Me.RowTagAt(Me.SelectedRowIndex) = CubeSQLPlugin.kSSL) Then + Var setSSLCertificate As String + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLCertificate", "CUBESQL_SSL_CERTIFICATE", setSSLCertificate) Then + bSSLPemPwdVisible = True + + Var setSSLCertificatePassword As String + If modCubeSQLAdmin.LaunchArgumentGetValue("--CubeSQLSSLCertificatePassword", "CUBESQL_SSL_CERTIFICATEPASSWORD", setSSLCertificatePassword) Then + bSSLPemPwdVisible = False + End If + End If + End If + + edtSSLPemPwd.Visible = bSSLPemPwdVisible + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events btnConnect + #tag Event + Sub Pressed() + self.Connect() + End Sub + #tag EndEvent +#tag EndEvents +#tag ViewBehavior + #tag ViewProperty + Name="ControlCount" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mPanelIndex" + Visible=false + Group="Behavior" + InitialValue="-1" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ControlID" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Enabled" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Height" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LayoutType" + Visible=true + Group="Behavior" + InitialValue="LayoutTypes.Fixed" + Type="LayoutTypes" + EditorType="Enum" + #tag EnumValues + "0 - Fixed" + "1 - Flex" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LockBottom" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockHorizontal" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockLeft" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockRight" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockTop" + Visible=true + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="LockVertical" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MinimumHeight" + Visible=true + Group="Behavior" + InitialValue="400" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MinimumWidth" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Title" + Visible=true + Group="Behavior" + InitialValue="Untitled" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Visible" + Visible=false + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Width" + Visible=true + Group="Behavior" + InitialValue="600" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_ImplicitInstance" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignHeight" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mDesignWidth" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="_mName" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="IsImplicitInstance" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="AllowTabOrderWrap" + Visible=false + Group="Behavior" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="TabIndex" + Visible=true + Group="Visual Controls" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Indicator" + Visible=false + Group="Visual Controls" + InitialValue="" + Type="WebUIControl.Indicators" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Primary" + "2 - Secondary" + "3 - Success" + "4 - Danger" + "5 - Warning" + "6 - Info" + "7 - Light" + "8 - Dark" + "9 - Link" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="LayoutDirection" + Visible=true + Group="WebView" + InitialValue="LayoutDirections.LeftToRight" + Type="LayoutDirections" + EditorType="Enum" + #tag EnumValues + "0 - LeftToRight" + "1 - RightToLeft" + "2 - TopToBottom" + "3 - BottomToTop" + #tag EndEnumValues + #tag EndViewProperty +#tag EndViewBehavior diff --git a/webapp/modCubeSQLAdmin.xojo_code b/webapp/modCubeSQLAdmin.xojo_code new file mode 100644 index 0000000..f2a7672 --- /dev/null +++ b/webapp/modCubeSQLAdmin.xojo_code @@ -0,0 +1,118 @@ +#tag Module +Protected Module modCubeSQLAdmin + #tag Method, Flags = &h1 + Protected Function LaunchArgumentGetValue(argKey As String, envKey As String, ByRef argValue As String) As Boolean + // Gets the Launch Argument from + // 1. Launch Argument + // 2. Environment Variable + + argValue = dictArgs.Lookup(argKey, "").StringValue.Trim + If (argValue = "") Then argValue = System.EnvironmentVariable(envKey).Trim + + Return (argValue <> "") + + End Function + #tag EndMethod + + #tag Method, Flags = &h1, Description = 436F6E766572747320636F6D6D616E64206C696E6520617267756D656E747320746F20612064696374696F6E6172792E2045616368206B657920697320616E20617267756D656E74206E616D6520616E642074686520636F72726573706F6E64696E672076616C75652069732074686520617267756D656E742076616C75652E + Protected Sub StoreLaunchArguments(args() As String) + dictArgs = New Dictionary + + If (args = Nil) Then Return + + For Each argument As String In args + Var argParts() As String = argument.Split("=") + Var name As String = argParts(0) + Var value As String = If(argParts.LastIndex = 1, argParts(1), "") + + dictArgs.value(Name) = value + Next + + End Sub + #tag EndMethod + + + #tag ComputedProperty, Flags = &h21 + #tag Getter + Get + If (mdictArgs = Nil) Then Return New Dictionary + + Return mdictArgs + End Get + #tag EndGetter + #tag Setter + Set + mdictArgs = value + End Set + #tag EndSetter + Private dictArgs As Dictionary + #tag EndComputedProperty + + #tag Property, Flags = &h21 + Private mdictArgs As Dictionary + #tag EndProperty + + + #tag Constant, Name = constUrl_DeveloperKey, Type = String, Dynamic = False, Default = \"https://www.sqlabs.com/cubesql_devkey.php", Scope = Public + #tag EndConstant + + + #tag Enum, Name = ContainerKey, Type = Integer, Flags = &h0 + Status = 0 + Databases = 2 + Groups = 11 + Console = 3 + Registration=1 + None = -1 + Privileges = 13 + Commands = 21 + Log = 23 + Users = 12 + Clients = 22 + #tag EndEnum + + + #tag ViewBehavior + #tag ViewProperty + Name="Name" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Index" + Visible=true + Group="ID" + InitialValue="-2147483648" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Super" + Visible=true + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Left" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Top" + Visible=true + Group="Position" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag EndViewBehavior +End Module +#tag EndModule

    ~Dbo!2K-b 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↱<| z^qcuKa{kAW^FNH7{{iVe_I}j)?}OieuX4XDxj&fPMV0b;%X$p7g9v_w5X`~T7ZXa2w5r^8)-Ju%-`v_~43r}*Ef&wk|oJ4Jee z|J^r$|HzM&|0|sDPySmd^U3|+!G8AoU6KEu{kq?`KK4@w82>}&+jD)n|G$C#WWL5k zfBM(d0h;?$FW~F47NP&f;bebvht3iEb8>QY=C81@P+0dLJ9exrUAk15`?K%=%{Ska zufF<9=lZjHt+ymBg_woJb{N@UjX^v5Dk!Ie%fo~|3wJZ0^q-KzrHi<3%J^|>H_Zx z#I%5E0Q;D|zRGFL4^Pzt_;vIVYz_grzusxYoyHaPH|{~+fq!?{Z)E(>#^0d~{(l<( zGid}e-+X{PWj?u|46g%B1K{IbCcz(o2Iz_?pbkJ^0KI@- z(=VVm;A1JCdkOu4pQ;AvkG_CGtGiy{RTlKosE_q1?&N~hEKLz%m0{b75qHzyMFLHmxQOxw+ zt-(6KWB&p0e;?Q%aDU)lus=P>|D2Hhd?x=<>v!Sver5k|@ZbCWJd?RU^MCaKb|L>a z_VWzbkLPxk#(th5|H1t76#KRJ@2dRIkpCyVf5(2#{bk~RV)ifKKL$|*|EC6zQ2%G& z8Sm2r{~Lk-jllm#WhbRkIsUDJ|4IIf^8Yr+{{ry8%PPe3IREQozj^@7_bu?X>aF{O z{a56F$bLQ>|HHiBvtRjdybn*${;2kEx&QBFKYo3uAm@*`KLPKP{fQv|Sr1_S-|GGN zx2kD$< zw1w6i@VXRVkD>g348I5dTzl=rzf0@zZ_QGtjkEE0DaL>7{=uDr5&yjo;7p(krva4z)Bs)wIQE+ccoQDL8$RF%U@wph`2WxX9U0aK=+90# zO$YGIW{k0Len1X8JppKi&fvaAP#d5Y zU{DKm_kMuZ1h7M}Y(9K|MeqTZ!3Tf_7>1qz)&l4Q%-Hs`EVvWB{J2xF?&v=vzn?V$ zMjd^B)csc;{7Dw<`ch`x_OVP_|DKFq{e}!(dRA)YKPOeQo|cMfp8aD_fc?iD`?a_4 zkmL_K2amLN3EZsJ^wtl=P#N2 z2Q&Xx^T%%Amb%~9bKm&yeSh`-b@vZv|6T8YbKKcy`F|S!F<++reBC$W-?2OK_YnVf zk^lTV*n1yxfBZe{ek*c+u6<37)j z{mA*reT|U$_8hQZd-09^zr*+MMDAOJxjwm{f&I*3s12C=v)_>H$Ll6p<(azW*yTKm4e90PF+c+$3iKUVQOI)m57|ZIXox z7iynHzy5xU20oDd=ZXnbF^aH}40QLv|yEOp)fg)&t zFqH4q1>kH$B4R#1KlbbyAL@Wi&q@9l1)9M4Pn|*T+gXb5uk0~=fA}-)wZqjL*<-}N z(*ggT|L^$U20ei3{C7Ga;y>pAp#d`U-|~N+p8fv3BL7(vNO}OO0jL8~S|HQ_%Kw-K zcn5U=W4}Mi{4mC!2j|nnbb)GsdUe2i=m%h!25>!tQEvb|fxPkWOa27*3gAA0$?yW; z2lS*5F!Q1m&!Gl@4*(6I^8wfyG~%XjWZW&^;Vz+{aEHK;vS_c}Cy09gJ&yZzV1J$V z{QXsysPBJCrfmFB@ADn8{1wdiy&(N(KP{Eh9+%Qd4@n=gA6|bC>%m0)7=N`1Ohwyh0{4d-q(gS}FmH+s)UBUl+za#liz8m}PMgY}T^r0bK9<3kiSqXX+*H z1Liz{)d8M<`e`|I=#b79031y7{*&*K^9Zd41gG+!9}6`AIGa`@;CsI%paJ>>k%|B2 z1K7v-`P2XmzDMS#1-{?XQ}`V4zo+Lv^9}=z$^>Y0aE!te1ItbPx%1O12F!(vlFyH{T=|lfF%F% zI^@540Q3RUH9(p!NcaGuFW@x5M_@eyH2`uy3h8GT8GT1-vgcObf`-k5x-G|;KU5AkU`@sG^(i!Z}s|MGr?{qQXPOyJZ zod5Ly1NO)Bf6M)MBkxD_N3L&S?60~q|HFKr&nffUe|10xW z1p68E0}8zkD1vU*pbkjX1gHTb9pE*<6}^BY?~|{|cpsq#u=n%~G(Z~v@v-{&Uv!PS zz&M}j47CEE^>aM`BX0rUO9|uD)%nl;f3->er)z*Vp8uu++QJ9WsK@_rNB$$)GdK%i z?6=c2z^F|8_c}mx|C9zG|FcJ@LhArg4Iotuh-v`i$bT2PIHLgn8>9iK6Jk0b)g!=u zz&z|6iny;D0PH9K5!40j52Odc`G8)yQ?LkifM`B&Den*X8g&5d4c_=YdI5ew9RNFm za97`Q?DScCd9b{*(9MKO+bHXJil9oyz}JA9#&mA4i_goZp4x zKKZYCKlyLZWWVx%7rg&4-%mZ)&wsB4lHNZ&|5V?<&;6DCseV7r{f+x}`kud5CCKe# z^M2g*=llI5{%6YlHzL1xVf=4V==%PQ|1Ep3i|7Aj5!ss$rg!uFXFoIdpGWz>=YK&a z{s-*mF2AVG&*!VLKNJ72lJ_@+{md0&{5SUV40C_{?AO}wAF&@fy!Q7ar_Y%8ll{~I zKIg}t1tI@CjghA9iz4oab^b8t=YC)I`mx^6UjG#0n`EB3+Ro%Q|1K}oy6xOtR_JIhfzfSg<;I+d-fcjp$5SF)B!R6^Yw4g0ObE4 zp#hTYSN`Moj<|2nWIw*wYvKRk=Y#y;@jvMUkp0)nf7JjZr~zI}<^R+G#((w!)TaSP zy#<>hh=Bc(4j2PHkU;}vM|}X^6A1Zl&*R?(zr)Dn3xvG^&il{RU*q3b?j!#P^BG~! zU>B_D_5YFo2;)CB0=<6!Ihy-N%qRan_w7vc`yKz2_5OJN z5B}@ypVj`see3)4JAPfge=G8S7uxTSUjH`6{NS{n|5nC+p2mGUz3-pd`w#i=YX5&M z|Dhe!|F`^qF&Mwd#UI6f?)KOGKZEC=#(sJLV0|+FZR}6v{Pl7_$oqAl4|GSzvC^nR zg|yAeiM)R1``qVG?sw_ZMSAq;q4)YR$K>5U^qslizpk!MJ%8r?WdBDWeWW=nxqsdF zZy4jR_F2?V^iWI#m=EyGGtcN;Aa^YDe}{SV=0#or^%-?qyMj@!H>L>eR~>+pUO=JM z1fT9U{aoPS)t}3Vx-ZcS z@TE-M@{P>d`91FN`w<%8C+zqA5j}rj$n;y$@2|f9D`5Zg@co~Xelx)S$qz~i*k3f} zUex{J`wu@P-QfFo9kNHdfc?ta{egqkM;X`_LKV-0r%UK-i97P)csNOcj3JMR>jGA zf9(1}&EF#K|AYOg`CI<4d;ie;r~L0(=lp-x0PtR{{@>92zuRWli%b4@LGK@Xa%|4e zcKB=Vzo3D6KR++@{=xl!EBnLT{~GiDWX|7_xxab*;b}QPPkat`E3-!MA6WyVS$^jG z=Jk{P?Cm$NpE)ISOXir&H96x)|Ct{3qmMo+=gyteyq|uxv7fwR{(Akt-}fiLKjWkZ z;9ZKmQ-QS>{`qsy^5)H(wFiT{7rBFpI*od*dr`Tx=z{;ww4)fEU1d zLGBNT`~dF-M0EjZfFkMu?+F<5dmH=1Gvs}y=Oq96I-vosqys|!htEl!aK+bTeg{(Y$)898_}^ptMbrVH0cNou@S>XuSp2CBT>hEVuD*<2 z!C%OPP3Z5x{TtjB@PpR;m+nFCzm+|I=W*9BXZ_B|K-B!JW}cFYDW3hK?@{*m1pB)W z-4Finm4d2L?=f7ovt?EeShuurw0J; zr`R8_^{4v%Q+~ho{3mmNt@X3s?`!_7`?uE}zsCM;@cpgV56my~!Q9`tuetwi$p0Pl z$$e$N^8Z%w-(nM{q9N?h!2GLmzae>lEazv>A9-)_8$JJIeP6jxwlm0md$!Yi{kT&}`}=TTZ?mi( z@cP@Q)%ZJi?koib1=`cZz=9tViw{PFBxhH*S-t9|1@!s0&?EihNukTlf z8i2Eu{BvfFg@5jxv*0}etiRlO=bf@)!v>uZ3~K`H)9l)_68F_W%l1Owtj-7=OxFQA zGYB0(FCfwZ@C3q|K&S!8ehbqB(V2<+;d{SP1BATSXX*xUnvsd;^}g2-{^R$)R{qEG z|8)K{|2GdH;{Q<80TAizC;xqT_EQ72AHm3=0Yd(VIv|bzP7@gW?Tq;VF%1yc0dWoB z>j4qVLr;MDz4-%Vf0Fy}YyO`H4f2;MUYXD;A6SPq`1DzrFYRne)5IzY;smOiY{Uvqx4Kj6Ra{qgtyu;;%y^8RK$*XY?2 z{QwQl|0DiybG-pt|G&}Y|DBWkzgG5B2Q(n(&&d9S@84kdQwKC8_eb8&y?j@#?;H1d zlKuEKR^!hq!ksro~D(G6Z%A$tSh1F$X-)dWxvPz}KT0D1w?0oEHp4G{GQq6eopd;pF5 zG(gDu`kou00b;d)fc3`w$T#>c8X$vah~@vkjsNXy(fc3E|1l3Zgf)P89f0=&ss`}< zcN)O!0OP)$!=VE#|EC6sdI7B$!1n`W(g3622V~FyQ5`^g0?-#&Zyg}cf9(%|50Kr! zngF?-%%eXWri#Ils&M>HTvbkedP2{9o$<*b9K&00omjknU4H zfCl(Lde8V!N@jl~6$?I=0ZTrSA*(LR$hyli@s`Wz1^fd0{lArYxZ{^~|Iw>olc9@W zkb$WAS5A9a$|f9_K4XqZFVy>c4BdyEe-C)S8=SvGqwC;1l>gKK?tOfW`9J)9i@fSx z=mkU!xC8um5qSWr0d~UMcaeQn_J?_Yiv2q4hn+rI2 zF87Du&zirnpZquWC;6Ywe$M(`h5Zr#S@&n~&L6k)-}uk`|JwP#2cD+!e;wGr8s0zr z{}})OK=yO5ADM3vo9`$0EqvYon%LhE{*(Ri?isA_U$MrIkCXe>*N^8$9V(?w$Gm!L z{N#R7QIXE{)zs9;=+UFKzmHx&clvPu9P9kdHJS6X$DjNmj~L8Jue1O6@x39xn%XL? z2k_6G-V1jHb3TB&j5Psz23xjl(VcirsS-rv|CazA4K zMEl(LqzmQ=3MQS01~@OhroAV9W`2M=z(>+|(FLhl{)r5~@sf<&@G0){y)5&0eXZXA zr1jYGyW(XTya2gBeE;&v==U3U4E=t0f&K9NYnk7J`vZ4L{=l6YU21lD9k4s_0d}Jf z01coz;11}3J6tUQ{5K6i{yPn@3tm40K7eTeeT|QYeg5qAw{W?CYQ8_p`{DCvncp9I z{>FdDd*i-if6DW3NA7#}x5Zpv#D2~FUCtllzt8uL{i)pF>itRn`<&l$|Dp}>{9QQy zr*{53{@gk78$QqJ1$8Y_8nQHv(>u1i$*|K%()@gqqy=Ct7VUEcjKjxfdJ$w8u7bTO( zoa_Jn`~L*29zfki&xLcAoDbmtCe&rD39vtqI|J$0uvddKnwfe7Zs-ENN*%3U0Q>;e z0Y`8iMI>~9?h9a#V9*;7@t=Nx_X7Sf4G{PPWO0o5)Bu^@^V%TE^((y&YX@okrv^Y= zL;ruoe|P|`bq4_M0f_kTeE`pY=K&-%fU>_K{11EpXaL85oFf^&4}hoj0;cHz*Atl1 z0l{7X?gog>2d1;%<^*yQeF3@f1#-vn^XVHP@8`$$bBz6A&!4fJIX~tBIP0(Zz3chw zqMkpz0KAt^?oT`qo$#)79{&!!gLkAeB7gkb(sklH(tYx~(tFx@DVg)WRLuVn9>4{u zU3pPPufHf$Hh+fP{|lLknLm2}!8=kCC>i#Yo|_v!olTt8%god36L&d-{^*8MH-_r8C~{Wc}=`56iR^G?4g zwC67~|67v#0sCFupSAyF{(qx1)BL{i<*!Kbil-|L5)>-Tl`P{)g(^^k81pL>Tfh6xUy*6*)8gxKZOTe$m$bWnv_3|G*J;DBe-TyPh`~M04$234K zbbvR=vIw0b|?F29lP#^!fCnz}+5O@H(A1I~)!1J(10H(XW!JhNV zefR9xpUC_9@v*G=V=h2*{~+)8?6>{@dJho%eYX>s8iAinzrbmWJgq0ZEj&AqdsDhj zcw4$neoJ~zc~^>NotLt??@QI94`k5tk5L2oL?+#GNoJ!4Favx3$E|r&YT^A4z^s1- z`u&T?-s@`qsQ1(7&mXv5@&?>4x&61ez_Zf<&;!&0_;^0N0p|&@Mqsr7YJgoDd4UIz z>vaJ6pY7RC{%gR;@6dM}JOEc0V9rl}AjN$?$Jw7%xgGhx3)cFhi1B|be18|(@8^5{ zjQwq`-fyR`_d5-+2{nLp{zu$54UoqFAouqWpMC$j@2}TdU;lUf=X(%~zm5N0 z>Hi!5E&sn#?*Cia5C1>%`OWXQGn4Nh=KWX7{geDh-X7)rU^;XD81u=0%lG*)JoCN; z?(V}Jf3x-_sPSi>=etskpF8~6M^3JsJb6-1pFXYg=43p%!hDmt=Jh&%CK~_0doQdB zSbrdO8utaTH-PgQyo;GT19*o(I4>CW24G&WQ@26r4Ok6!AA%nM{zo-|qtFJ3uqHqq zU_FApQ4^pB;NAf00Mi4U709Rq;1k&Uy-^onM74q>^E189#QjX~HBbYD{5PL~Ilub< zIEzF6!yD!TCJ@#(V$P-m7X?J@s_Agy3LLab4@GdO|jSV} zz^3ujui^rU_Q>ksq)ZU*J*G0_cFX_yO|%%@@!S4FLbw?ERXK zUz3K29>7ZT|G%buUpc>+PK=}&hUYuKnsk7UdJnJV?B_l9KIi}TN5uXzEbmue-|{SC zuYWb~ADI1etoLt~-%nK7&tuQ~A5i|UaNg_KKXboDUia^txlernd9PpT`Ir2c@2?(z zBJcfMG9msePK^Kh4w9>E{JYryx9*-)|0n+!|832Go&P!W{XFIUbFJ&QK0mnMjr~pB z*FB-=@lP7S_Vlgi{5kh)K7V7rpEFVSDB80`HB0gW2`vu zy-KV;_Ffpf@b_WECGUq#mw%u>fIo#D*Zp(YchkRyLw9Pv|Goc1`~3WW;j;VxJ)HNs zch&d*vU&eo)bnrs{s)!&?-$F(_SLX|=a*7^SsEaP=>T~G(gLOjqy<(NT0lRG7VuCX z;2MSTzt8|N|2O`d@BfIjz$2Fb;{imr|6Ldo(_@c-c<&k@v442S!^-^?a9{a;9tHPR z->1&+QRMvQ`+r$||MdDN_Sg9@zkgZb`Ir26?)$Oef5v|E{ENKbH9%VLm)LI_K;2^Xgy;Lt`ioNT z?~l{bditd;$oW;{?;EPl>UZ|nYy5ln?zP!{UgN*#o_lP+UiR#xf1DaWIU_ZG`uf`% z|6IiVFK05fF92)ue`FD8-PCCFtsf#8Iva6L`@+10lrSa zbwDvgP+owq6R;iu`UCI;k>jAWYbO2%X0cn9X6;D9@g8O36;2IqXG{9>41*_!$uiX9B z7{>qT1B^%mjO_e7v0m)okpjNMe7(=Lfw5oD!~RbGKUC)Z8T+l@&$+L>Kj!`!`wRX@ z?su?1<^Rroj>dktpV$xgJ-pY?^Zw}lm$`q>CY{^5|G4(=BjJC?ydUR2$HabH+n+Jt zH9%MP*ZF@U>=&bpx__PfJWlL4pFih3?04R~F3@{nKA(rzKQu0{e?`YS{-&9|beLfvXxo z%x5-GWj#Qt0|u=I0RQud%rAQa@BmUc`~BFU0a!0MngyD`^L~zSpBUBiglPl!{Z$(% z>jGjpdA#cV<=j8muShk2J2#I%`TXSkna{sc{{G6N%J&Jee)PQGiTg1|4!>jPE6;l; ztU30(u{HOT;Kf@*W{v{l~{db!AqdopE z`TwR{2$)&kTif|dyGNV@XZ5o@4sOGL(2Wjuv$O9e~tai6Z7G| zMV|Z1=f~?WqR9PI-e0i4^!@vt`vv=>_urZO$GU&Pf4J{q{Ac#xar6E={Qncp|JUDL z`u{fj?|N~b$hlu^1ZFc`gh0{qy4q`v0;2AO8PF{r@@tmHWef<3Bz? zoCU0EuY8t&-(qu|JVl*^L_LAo%whS)b_>w$o%*8dt$B+_eTyB@5DG) z{6GA5fd8wH{w|DN@NU?6$?wCY_`mh)KZRY_|FiM`=so`tE`RX<372TUpToDkZS#Ja z_cwFwDfRt-Tl4+o*Q@Ri&sXde@3-BjxWA0;_ly5T=?lafL9PR+4aE9D(I>zf0?zUU03NQe9~}^T{YuY&`L-|XIfZlIk43&8 z>-=^0FN67cbgTKR-cQZHsQXj@FTDSf{mk_%_WJG0|2tLx7sI{(Z%+Q>D?VAR{}=pM zp3=zwJm-h|r-1#H^?lvy{hs%C<38+HKJPhx(c_nNKwjUs-oA@9vv+q`I$W;f_rCt7 z8h<{s_vV{#w%Kss_{KNP`=!QDe|S@k-~0N}2h2FF+c=*9n*gNM68X>J2~#c%NXgRv>4; zpJzUR=>T}1hxZWV&*^-M$FMzrK4X2(eLr``e<=Pd7s&hnw`k9m1FvcCpI0sB=6_iW z7(fHK4p9BSk^hbB0!v?DP%{E@9Z>Qg9k4(R;GRI%8-Ndh?>>T0a9DZ2hxosOApds_ zkm~-n2GHyMMX!J4zv%$-eQAW~@zXPqJbtSs#NRin8b910k&Y?3FZPT1Bj>)YcqH#cQfdI!0EqoWng4%9K7c|w{h&Pj<%&U_SN;Dc z_Dctd_Z|bYUsBCKMz!Csp8G$b+JEH#(#`7g)A`b-em|S}Q}Vwv_gC#->-;?8n!hst zU*h@y_+2soAHUQ30X`J}*WRJJKm5Nj<^I=a`G4YnH}2=&f06Ik{eE))Zk~TP{?Et# z)VuF9dwr&laUV}0dHwVl4et*=aH#L4{!1>HxX2aEM{Jx&g*N?U9 z`TjO|-}JBWngHzQe{Y`~@W1}o|1up&ZvgY1yf=WJPH&C9Jpk{A%~yU9 zc7FEH;Vkk02>ica>j3Wgb2xa*Tei>dwo9H1Q%Aq2Ilo!$eG06EFBKiKX-}rAi|3cVb ztNUlnFWFym-~E5~{I!7pV*iryJCy$)FZ2J=3v@1acI^MFoMKBo|9?Qfq`U*;zk2@* z{%3x_alcE>@9aNm?q}?;`2BVElj|#dc5jjMXSqK0fA0lYt(pPcSB;-_{DXth>-T)0 zb^P7c>zDx`{e~#Z{W{#lm?hn2P8kB zn+CumaQ6GL;sGo`1HgZe`S?F|68yIsKx9Asj~bx17BH;~Fb$x&0A3GRuKqxaTn7|B zz```Zkop3Ou$n;D4@gfyp#gMWC3`hrbYJpTA5c{3~Wi0>=5cxkUA7L2w=V3ko8bJI<1EicDPr#$n z>z{F-{C{rt%L@?q337gqqTi34zoF(|=Kf{AAKA|yf64pjn7scbTIc_v`Okjl#rnT_ z_&+cEy}q9xz0RNI{2jG^xbNY0{wBXaao>FY-0M%=H|8tXckbi!!~K<)hBJn?YG!Zu zS^d=bnc3_6^5!*u`np-?#SA!V{Pgzu%wE>>`8xi##{aj?`nmpfUK2nExDLb*%6kK- z2{1Q+UQv2RnGaQ&CA@Vu46Z*ruEU-Dj#!>_K;Z?T1Ckb~>@O%CVD$iL0P_TLFF<*A z(I1fbU+D?R@_*yMzelWh4ZyKO2V{A^*8n&=`#BbQKj-?4dj5YB{O^bV%mMUSfW<5T zG(c4c3>f?2f0G8l1CSo5@V}}7N)I6U0jVdj;D1F6q<%ot0Oa{GhQwm_7@}q{!fWT2 zHUAN@Klc6QzQ5RSYxLs0A6Revw>5wC0Fdjae4m zy=gHd*4JYg{-67%Y7uX%2LS&6&iFqA|F8X%@&E8${}wJ${vY}OruO_1|1bJ+Y3~1$2_p6WpKSi0^M7L({;yL0U$DPh?w>QC^PKw``&Y{2 zD_HN$_oK7F-s4y2zI*-7eI4EB&wKl%13oppFZ2&~ukri7ym+zo8b34Myv9#|H#L4{ z!7&q#{%_Cu+8X~{Wc=^*ntK8Kf5T@9qXl?OEr{MwdIOjT#e2K$Gd#U{HY`~uealP^ zGypw?e_slP#hhN=<4`9vF-x~kNFL^IaUlIAg?z-t82 z4=^3z>j#)MV4>cFLIc2m{D1iWWefa&3w(d&|5gL2X@F(Y0Y%@R-f#ZD=>W04$p2H# z-?^VWf6x7y^^@oRaNncM|KmB)j`Wbs(=gxl5|2OM*Ze9rgwfEWq_5Ppb{C};J|E2-n&^iEx z<^RtA=mk_YK*oR505u(eCMdK(*$+_h0W>pkFvXCLg%?0>Pmu2y?@6_S^x6=|J3gv*Zjv^zv$t&eBX2Zrd~eP`187c;qRwhKWBZ@`N20D`2Vi>|9;r6 zHGuH{+&lj@TrB<{yZcY!>>J_#FU9|7Bmd8V|M>snzxw>0|IYpLc#m`d{EtU}KGy-I zSI|WZSbczA0qO(v526WT&)`bs{T}51#EAL-V!w2N^M45bTg3by4=YL%9U$Wow|7@LqC;zMLw>iH#`_TY-?qBf#4(R~Z|Mi$! z_uTXURYQdT^x(MvZ~WKKjMK%M=W zF6gQSTsOe|T6EJ2Gy0iA1HgV_F8&`)`G4a7{*3?H2OxR?SskFz0AhYo52*D57PWx5 zM?hyU09wF<+CUc41cOCnwE)Zc-xc>2%Ds*I);Ab60NNnt`_cO^&ovJK{#))}djI9V zzIgw50qW;Frq|{3{HiIHT~%A%ipJmU%9?}`gr-n;`!i#g~yQIJ96j^ z>j7AG-dkba1@CAL;JcauApT$dhp_j?e+~!l_)EC(i~kXh-u0)j|Asfhu226`d;UFR z`~9xh%zxJGv!;qckj|L#_SH1s% z)FTjU1k?!zY`uTZe!VZN_c!JK`23a7O#i+#*Wc#+6n%e516Zv;=KOKi|L1MKZ_)R^ zNqv9J{iXMBqx1i+X8yzV4G$`x_@=&(HU5u3tk)h;|DX83mi+%__5a-v`v!B~bKW@D zC-?iaoWIEXo7kUopPV1w!+m+51@rTKAD`bt@8NxLf3>^=_5Ghdv@`S%H`n;b#>PTZ zjh|UjgXN0%CE&diMwN=jJ)jHNc$w*XNiH z(D6k0&+NamUY7U&iny;Dz#RN%Hc-KTbU@Y*Q0)bHEA{~v9)NSde#|t0^gz@Ak@J@K zC;l%NhdVt2Gywe1H9)NWJNqkZ{h0G(`vB0xPoNK^6D;%@=JAX9SwCO3reAV@NX#cr zg!}&9p#!gn5&bMZ0IQCO|L6ZUY`o}qVfxd*53}(9hRFX5zVIL6yu1D={=Xh}T=5Iz z|HQeEYwbV$*Lr;B{-oajlKCb7bM`l%qXnuFbwsQm3~r^T@Lr3!wjgQ&TURKiM^7MX zfzch(BK$q#zn$wbwSedYd`X}2pv9ng@3CCmA8_^?|Dy&l?kD!c{{iU&w81j1@w4dQ ze>Ly#pK<<+`_qyARsLtWzu4cK{QjK%oJanv_Mh{A{Bx!OdZh;%^ZyS1|3vo@&;Q~7 z{o=oVb}s(s?6=%M=RW5(_80sYqbqfPcu&B40`||x{oL!54+{A?h^A+>pXYdT*|4Q+HZQ}pb zuw*Ie)|McKcU)-4Zzb@zh_0|0Ul(0X~`4jtB z&gb)|TpxXaR-mV!oL@actm7X{v-|S(d`uHkH35$F2hvl@{3zdNn7IM;p5A-!y|&M=_XeO}=?xg0+7V7)e?!?DP|OcP12pJ> z!V8e*&*uirsRJ5VUw8$z*U$i`n*W>S|DPl8-}8U?j|Y(Y0Bs%+-hcA{WB%W)0S4p+ zSQK@D*b}&1k1Y=B*r)>%`%_;)toietxSwhSgYFHaxti=DB^TmJd`?tty+4L)fPut*_`hs38X)rBa{r9~&V4^R z_sRP$_s{un`G4eo2m4j;C-;vLJ^xY%Wc+vUUv>Y2|C{a%r&;}fA^cbVKs}(~zx;oz z|KB9WX8f8vlw5tj6!__?u?- zvOga)d#Uj=bIoh~%wo%H{OsfAHGXEe;mfj~ubtKZVM*8i{9IQ6pNTaA@IT*Yn7IMo z8$j^3n!NHu|q4!{c_p4My6=$Lr{zFx4>A4pA} z+&_;R=ezOWp08;D_XXVd_hVQ8U-t@||93Rj|Hc1-M*gb@KpG(OzsUnY17tcN^#v9h zAkzX>{-XhM9U#sZ{eXD<_yN)p2Vno(!MN}2_jy710*U{n_n+4MS$?k^Kl%IUfT#(S z>sudxlfVCV#(VGKtNQz=g8R$QmTpjOWl%9J4Kb=7fR#ty)C{1v!iEdq36qy8|G)Bm zn*n(Ct$z;3KL79G$Q|PUXI~53mH)&4@k8ISegD?%RqtJm|7Gqj9ni#mo~v;`K0Y1> zHy;lJoA0*p_Y6n}5UvHRR#5Z}s78?H4Gdb103E^%!srQ@FF?;=3ey0o22lC{@c%y5 z{9_F0=?M=I7Dq{p0y3{+svD%pZc>KSr;f zkN*Ec_}?Y}UrqgA{HOPCWnS}7>|YT7YwXYce&@b<{?z#Eb^grjckZjkf7<_gtcaF!+m8{nHRRg%^pN=r!djDeIps^qRD+bX3 z_L}zuQXh!kf64y1-p_OYipOvJ@8IvNpU>9qt9M`de$mgD<@$rt9eItOygvH-uPNWp zLi~o~jlui6y_TLIJo{Di5a8xxU(6T7muAtgTt3$S^&V*eUiX~ekJ0;= z??01j{|n%Mne)2`;Oy6$zfG+DgZ=dV<@~?1%Kw$}%$ff;r~m&@tpBe|`M=NpukgPc z`}KTB-Cyjt**nVli*;nC*X&nve(8WB=a)YK`_T$Evv*xbUqAcwr8j^cL3#tI2{4BW9oy6! zuwiO@=vgEGY}41ob9n(%k7YfAVr{)Qz;yuifT^D~=zzKg=%xd@Jul6G2AI+71ZxfP z06hP9{%`nvTyKP*$ajC_Xv+T|iTVGTFNLLNy(Ip>8v4xthyNa8eoX@`Q!X3B`JayG z=%}dr0L%$M1Bmlh3&^?8xn4^-f5HCb`{Vx`|H=1L-tV42N1ydm%=pvVKl1!o(--%} z{9*0AW4u>gKl=Le`1SiZcjlX?-{9*Hh}owqmW%s@@n1S&^x*4Z#kp^22Edz|0q|Sx z0q{=PdgbrK&g=dV_TTm=?E&y_;qd3)5BsirHEg>~`TxzCty?pL2vAQ#0zHxs>?6ZehiL%$|K10H2LS(@`C|D}ML(fF{(i0Fj~;;QgZP^D`r-E% zQOo_Ol=~Bt;=G6Y{38GF)-i_F{o%gHMC|!rGJd->K#bV`cfQvDrTpLdPhVf9|6jF0 z>i?|&8-FPAU*5r5trIZ*-yr^8tGFim{p9?WyuXX*Z~3}={fYVB=cieG_8qSuHU)EmIu zDZGOEKEv!qRqqX0JFzF6v0mTXsmH`zc>t5r0_F$E3z(D-U~2~D1=uWM)dYOKAT