open-insight/FRAMEWORKS/STPROC/NDW_WEB_ACCOUNTS_EVENTS.txt
2024-03-25 15:15:48 -07:00

404 lines
18 KiB
Plaintext

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<MTEXT$> = Error_Services('GetMessage')
MsgStruct<MTYPE$> = 'BO'
MsgStruct<MICON$> = 'H'
MsgStruct<MCAPTION$> = '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<WEB_ACCOUNTS.NAME$>)
Set_Property(@Window : '.COB_ACCOUNT_ENABLED', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.ACCOUNT_ENABLED$>)
Set_Property(@Window : '.EDL_CURRENT_PASSWORD', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD$>)
Set_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_DATE', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_CREATE_DATE$>)
Set_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_TIME', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_CREATE_TIME$>)
Set_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_DATE', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_EXPIRE_DATE$>)
Set_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_TIME', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_EXPIRE_TIME$>)
Set_Property(@Window : '.EDL_OLD_PASSWORD', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD$>)
Set_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_DATE', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_CREATE_DATE$>)
Set_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_TIME', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_CREATE_TIME$>)
Set_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_DATE', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_EXPIRE_DATE$>)
Set_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_TIME', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_EXPIRE_TIME$>)
Set_Property(@Window : '.EDL_INVALID_PASSWORD_ATTEMPTS', 'INVALUE', WebAccountRow<WEB_ACCOUNTS.INVALID_PASSWORD_ATTEMPTS$>)
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<WEB_ACCOUNTS.ACCOUNT_ENABLED$> = True$
WebAccountRow<WEB_ACCOUNTS.INVALID_PASSWORD_ATTEMPTS$> = 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<MTEXT$> = Error_Services('GetMessage')
MsgStruct<MTYPE$> = 'BO'
MsgStruct<MICON$> = 'H'
MsgStruct<MCAPTION$> = 'SRP HTTP Framework'
Msg(@Window, MsgStruct)
end
end else
MsgStruct = ''
MsgStruct<MTEXT$> = Error_Services('GetMessage')
MsgStruct<MTYPE$> = 'BO'
MsgStruct<MICON$> = 'H'
MsgStruct<MCAPTION$> = 'SRP HTTP Framework'
Msg(@Window, MsgStruct)
end
end else
MsgStruct = ''
MsgStruct<MTEXT$> = Error_Services('GetMessage')
MsgStruct<MTYPE$> = 'BO'
MsgStruct<MICON$> = 'H'
MsgStruct<MCAPTION$> = 'SRP HTTP Framework'
Msg(@Window, MsgStruct)
end
return
UpdateWebAccount:
ID = Get_Property(@Window : '.EDL_ID', 'INVALUE')
WebAccountRow = ''
WebAccountRow<WEB_ACCOUNTS.NAME$> = Get_Property(@Window : '.EDL_NAME', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.ACCOUNT_ENABLED$> = Get_Property(@Window : '.COB_ACCOUNT_ENABLED', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD$> = Get_Property(@Window : '.EDL_CURRENT_PASSWORD', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_CREATE_DATE$> = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_DATE', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_CREATE_TIME$> = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_CREATE_TIME', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_EXPIRE_DATE$> = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_DATE', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.CURRENT_PASSWORD_EXPIRE_TIME$> = Get_Property(@Window : '.EDL_CURRENT_PASSWORD_EXPIRE_TIME', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD$> = Get_Property(@Window : '.EDL_OLD_PASSWORD', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_CREATE_DATE$> = Get_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_DATE', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_CREATE_TIME$> = Get_Property(@Window : '.EDL_OLD_PASSWORD_CREATE_TIME', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_EXPIRE_DATE$> = Get_Property(@Window : '.EDL_OLD_PASSWORD_EXPIRE_DATE', 'INVALUE')
WebAccountRow<WEB_ACCOUNTS.OLD_PASSWORD_EXPIRE_TIME$> = 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<WEB_ACCOUNTS.INVALID_PASSWORD_ATTEMPTS$> = Attempts
WebAccounts_Services('SetWebAccounts', ID, WebAccountRow)
If Error_Services('HasError') then
MsgStruct = ''
MsgStruct<MTEXT$> = Error_Services('GetMessage')
MsgStruct<MTYPE$> = 'BO'
MsgStruct<MICON$> = 'H'
MsgStruct<MCAPTION$> = 'SRP HTTP Framework'
Msg(@Window, MsgStruct)
end
return