Function NDW_Web_Accounts_Events(CtrlEntId, Event, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15) /*********************************************************************************************************************** This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written permission from SRP Computer Solutions, Inc. Name : NDW_Web_Accounts_Events Description : This function acts as a commuter module for all events related to this window. Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the application-specific promoted event handler. This makes it possible to add QuickEvents that need to execute Basic+ logic without having use the Form Designer to make the association, although this is limited to the events which are currently promoted. If the form needs to call the commuter module directly then the QuickEvent parameters should be formatted like this: '@SELF','@EVENT',['@PARAM1','@PARAMx'] Parameters : CtrlEntId [in] -- The fully qualified name of the control calling the promoted event Event [in] -- The event being executed. See the Notes section regarding "PRE" events Param1-15 [in] -- Additional event parameter holders EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in EVENT_SETUP insert History (Date, Initials, Notes) 10/24/18 dmb Initial development. 11/21/18 dmb [SRPFW-257] Finish core functionality. ***********************************************************************************************************************/ #pragma precomp SRP_PreCompiler #window NDW_WEB_ACCOUNTS $insert LOGICAL $insert MSG_EQUATES $insert WEB_ACCOUNTS_EQUATES Equ EVENT_CONTINUE$ to 1 Equ EVENT_STOP$ to 0 Equ SetupTable$ to 'SYSENV' Declare subroutine WebAccounts_Services, Set_Property, PlaceDialog, End_Dialog, Msg, Send_Event, Send_Message Declare subroutine Error_Services, HTTP_Authentication_Services Declare function WebAccounts_Services, Get_Property, Memory_Services, HTTP_Authentication_Services, Error_Services Declare function RTI_CreateGUID, Popup // Get the design time name of the window in case this is a multi-instance window. Window = @Window[1, 'F*'] // Always get the CtrlClassID since we are not passing it through the event parameters. CtrlClassId = Get_Property(CtrlEntId, 'TYPE') // Get the name of the control on the window based on the CtrlClassId. Begin Case Case CtrlClassId EQ 'WINDOW' Control = Window Case CtrlClassId EQ 'RADIOBUTTON' Debug * Control = Field(CtrlEntId, '.', 2, 2) Control = Field(CtrlEntId, '.', 2, 1) Case CtrlClassId EQ 'MENU' Control = CtrlEntId[-1, 'B.'] Case 1 Control = Field(CtrlEntId, '.', 2, 1) End Case If Event EQ 'OLE' then GoSub TransferParams GoToEvent Event for CtrlEntID If Event EQ 'OLE' then GoSub RestoreParams Return EventFlow OR EVENT_CONTINUE$ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Events //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Event WINDOW.CREATE(CreateParam) GoSub SetupOLEControls PlaceDialog(-2, -2) end event Event EDL_ID.LOSTFOCUS(Flag, FocusID) GotFocusID = Get_Property(CtrlEntId, 'GOTFOCUS_VALUE') ID = Get_Property(CtrlEntId, 'TEXT') If GotFocusID NE ID then WebAccountRow = WebAccounts_Services('GetWebAccounts', ID) If Error_Services('NoError') then GoSub UpdateForm end end end event Event EDL_ID.OPTIONS() ID = Popup(@Window, '', 'WEB_ACCOUNTS') If ID NE '' AND ID NE Char(27) then Set_Property(CtrlEntId, 'GOTFOCUS_VALUE', '') Set_Property(CtrlEntId, 'TEXT', ID) Send_Event(CtrlEntId, 'LOSTFOCUS') end end event Event OLE_ACTION_BAR.OnClick(Group, Item, Point, Button, Shift, Ctrl) ResetAttempts = False$ Begin Case Case Group EQ 1 Begin Case Case Item EQ 1 // Clear Form ID = '' WebAccountRow = '' GoSub UpdateForm Set_Property('SYSTEM', 'FOCUS', @Window : '.EDL_ID') Set_Property(@Window : '.EDL_ID', 'GOTFOCUS_VALUE', '') Case Item EQ 2 // Close Form Set_Property(@Window, 'TIMER', 1 : @FM : 1) End Case Case Group EQ 2 Begin Case Case Item EQ 1 // New Account GoSub CreateNewWebAccount Case Item EQ 2 // Save Account GoSub UpdateWebAccount End Case Case Group EQ 3 Begin Case Case Item EQ 1 // Reset Password ID = Get_Property(@Window : '.EDL_ID', 'TEXT') If ID NE '' then CurrentPassword = HTTP_Authentication_Services('GetWebAccountPassword', ID, False$) Password = HTTP_Authentication_Services('ResetWebAccountPassword', ID, CurrentPassword) If Error_Services('NoError') then WebAccountRow = WebAccounts_Services('GetWebAccounts', ID) If Error_Services('NoError') then GoSub UpdateForm end end else MsgStruct = '' MsgStruct = Error_Services('GetMessage') MsgStruct = 'BO' MsgStruct = 'H' MsgStruct = 'SRP HTTP Framework' Msg(@Window, MsgStruct) end end Case Item EQ 2 // Reset Attempts ResetAttempts = True$ GoSub UpdateWebAccount If Error_Services('NoError') then Set_Property(@Window : '.EDL_INVALID_PASSWORD_ATTEMPTS', 'INVALUE', 0) end Case Item EQ 3 // Copy to Clipboard AccountID = Get_Property(@Window : '.EDL_ID', 'INVALUE') Name = Get_Property(@Window : '.EDL_NAME', 'INVALUE') Password = Get_Property(@Window : '.EDL_CURRENT_PASSWORD', 'INVALUE') Clipboard = 'Account ID: ' : AccountID : \0D0A\ : 'Name: ' : Name : \0D0A\ : 'Password: ' : Password Set_Property('CLIPBOARD', 'TEXT', Clipboard) End Case End Case end event Event OLE_SUBCLASS.OnOptionClick(CtrlId) Send_Event(CtrlId, 'OPTIONS') end event //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal Gosubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SetupOLEControls: // All OLE controls can use this qualify configuration. Qualify = '' Qualify<1> = 1 Qualify<3> = '' Qualify<4> = 0 //------------------------------------------------------------------------------------------------------------------ // // SRP ShortcutBar Control // //------------------------------------------------------------------------------------------------------------------ Ctrl = @Window : '.OLE_ACTION_BAR' Set_Property(Ctrl, 'OLE.Border', 'XP Flat') Set_Property(Ctrl, 'OLE.Animation', 'Never') Set_Property(Ctrl, 'OLE.Theme', 'Office2007Blue') Set_Property(Ctrl, 'OLE.GroupFont', 'Segoe UI' : @SVM : 11 : @SVM : 400) Set_Property(Ctrl, 'OLE.ItemFont', 'Segoe UI' : @SVM : 9 : @SVM : 400) Set_Property(Ctrl, 'OLE.GroupCount', 3) Set_Property(Ctrl, 'OLE.GroupCaption[1]', 'Form Actions') Set_Property(Ctrl, 'OLE.GroupCaption[2]', 'Account Actions') Set_Property(Ctrl, 'OLE.GroupCaption[3]', 'Password Actions') Set_Property(Ctrl, 'OLE.GroupExpandable[All]', False$) Set_Property(Ctrl, 'OLE.GroupSpecial[All]', True$) Set_Property(Ctrl, 'OLE.GroupItemCount[1]', 2) Set_Property(Ctrl, 'OLE.ItemCaption[1;1]', 'Clear Form') Set_Property(Ctrl, 'OLE.ItemCaption[1;2]', 'Close Form') Set_Property(Ctrl, 'OLE.GroupItemCount[2]', 2) Set_Property(Ctrl, 'OLE.ItemCaption[2;1]', 'New Account') Set_Property(Ctrl, 'OLE.ItemCaption[2;2]', 'Save Account') Set_Property(Ctrl, 'OLE.GroupItemCount[3]', 3) Set_Property(Ctrl, 'OLE.ItemCaption[3;1]', 'Reset Password') Set_Property(Ctrl, 'OLE.ItemCaption[3;2]', 'Reset Attempts') Set_Property(Ctrl, 'OLE.ItemCaption[3;3]', 'Copy to Clipboard') Margins = 0 : @FM : 0 : @FM : 0 : @FM : 0 : @FM : 0 Set_Property(Ctrl, 'OLE.HotTrackStyle', 'Item') Set_Property(Ctrl, 'OLE.ItemBold[All; All]', True$) Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualify) //------------------------------------------------------------------------------------------------------------------ // // SRP Subclass Control // //------------------------------------------------------------------------------------------------------------------ Ctrl = @Window : '.OLE_SUBCLASS' EditCtrls = 'EDL_ID' NumCtrls = DCount(EditCtrls, ',') For EditCnt = 1 to NumCtrls EditCtrl = Field(EditCtrls, ',', EditCnt, 1) Handle = Get_Property(@Window : '.' : EditCtrl, 'HANDLE') Send_Message(Ctrl, 'OLE.Subclass', Handle, @Window : '.' : EditCtrl) Set_Property(Ctrl, 'OLE.OptionButton[' : @Window : ';' : EditCtrl : ']', True$) Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnOptionClick', Qualify) Next EditCnt return TransferParams: // ActiveX controls pass their own event names through Param1. Modify the parameter values so they conform to // OpenInsight event parameter values. This will allow commuter modules to be structured the same for OpenInsight // event and ActiveX (OLE) events. Transfer Param1 to Event Transfer Param2 to Param1 Transfer Param3 to Param2 Transfer Param4 to Param3 Transfer Param5 to Param4 Transfer Param6 to Param5 Transfer Param7 to Param6 Transfer Param8 to Param7 Transfer Param9 to Param8 Transfer Param10 to Param9 Transfer Param11 to Param10 Transfer Param12 to Param11 Transfer Param13 to Param12 Transfer Param14 to Param13 Transfer Param15 to Param14 return RestoreParams: // Restore the event parameters so the rest of the event chain will see the parameter values as they were originally // created by OpenInsight. This will also prevent the parameter values from being transferred multiple times in case // there are multiple OLE promoted event handlers (e.g. APPNAME*..OIWIN* and APPNAME*OLE..OIWIN*). Transfer Param14 to Param15 Transfer Param13 to Param14 Transfer Param12 to Param13 Transfer Param11 to Param12 Transfer Param10 to Param11 Transfer Param9 to Param10 Transfer Param8 to Param9 Transfer Param7 to Param8 Transfer Param6 to Param7 Transfer Param5 to Param6 Transfer Param4 to Param5 Transfer Param3 to Param4 Transfer Param2 to Param3 Transfer Param1 to Param2 Transfer Event to Param1 Event = 'OLE' return UpdateForm: Set_Property(@Window : '.EDL_ID', 'INVALUE', ID) Set_Property(@Window : '.EDL_NAME', 'INVALUE', WebAccountRow) Set_Property(@Window : '.COB_ACCOUNT_ENABLED', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_CURRENT_PASSWORD', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_DATE', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_TIME', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_DATE', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_TIME', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_OLD_PASSWORD', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_DATE', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_TIME', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_DATE', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_TIME', 'INVALUE', WebAccountRow) Set_Property(@Window : '.EDL_INVALID_PASSWORD_ATTEMPTS', 'INVALUE', WebAccountRow) return CreateNewWebAccount: Send_Event(@Window : '.OLE_ACTION_BAR', 'OLE', 'OnClick', 1, 1) ID = RTI_CreateGUID('B') Convert '.,' to '' in ID ID = ID[1, 6] WebAccountRow = '' WebAccountRow = True$ WebAccountRow = 0 WebAccounts_Services('SetWebAccounts', ID, WebAccountRow) If Error_Services('NoError') then HTTP_Authentication_Services('ResetWebAccountPassword', ID) If Error_Services('NoError') then Set_Property(@Window : '.EDL_ID', 'INVALUE', ID) WebAccountRow = WebAccounts_Services('GetWebAccounts', ID) If Error_Services('NoError') then GoSub UpdateForm Set_Property(@Window : '.EDL_NAME', 'FOCUS', True$) end else MsgStruct = '' MsgStruct = Error_Services('GetMessage') MsgStruct = 'BO' MsgStruct = 'H' MsgStruct = 'SRP HTTP Framework' Msg(@Window, MsgStruct) end end else MsgStruct = '' MsgStruct = Error_Services('GetMessage') MsgStruct = 'BO' MsgStruct = 'H' MsgStruct = 'SRP HTTP Framework' Msg(@Window, MsgStruct) end end else MsgStruct = '' MsgStruct = Error_Services('GetMessage') MsgStruct = 'BO' MsgStruct = 'H' MsgStruct = 'SRP HTTP Framework' Msg(@Window, MsgStruct) end return UpdateWebAccount: ID = Get_Property(@Window : '.EDL_ID', 'INVALUE') WebAccountRow = '' WebAccountRow = Get_Property(@Window : '.EDL_NAME', 'INVALUE') WebAccountRow = Get_Property(@Window : '.COB_ACCOUNT_ENABLED', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_CURRENT_PASSWORD', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_DATE', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_TIME', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_DATE', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_TIME', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_OLD_PASSWORD', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_DATE', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_TIME', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_DATE', 'INVALUE') WebAccountRow = Get_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_TIME', 'INVALUE') If ResetAttempts EQ True$ then Attempts = 0 end else Attempts = Get_Property(@Window : '.EDL_INVALID_PASSWORD_ATTEMPTS', 'INVALUE') end WebAccountRow = Attempts WebAccounts_Services('SetWebAccounts', ID, WebAccountRow) If Error_Services('HasError') then MsgStruct = '' MsgStruct = Error_Services('GetMessage') MsgStruct = 'BO' MsgStruct = 'H' MsgStruct = 'SRP HTTP Framework' Msg(@Window, MsgStruct) end return