* 
* 
* COMPONENT:  STD_FORM                             
* 
* 
FUNCTION OPTIONS(*DIRECT)

BEGIN_COM ROLE(*EXTENDS #PRIM_FORM) BORDERICONS(None) CAPTION('Change password') CLIENTHEIGHT(181) CLIENTWIDTH(492) FORMSTYLE(StayOnTop) FRAMESTYLE(Dialog) HEIGHT(215) LEFT(291) TOP(147)

DEFINE_COM CLASS(#USER.Visual) NAME(#USER) CAPTION('User') DISPLAYPOSITION(1) HEIGHT(25) LABELTYPE(Caption) LEFT(16) PARENT(#GPBX_CHGPWD) READONLY(True) TABPOSITION(1) TOP(16) USEPICKLIST(False) VISUALSTYLE(#UF_VS005) WIDTH(280)
DEFINE_COM CLASS(#PWD_CUR.Visual) NAME(#PWD_CUR) CAPTION('Current password') DISPLAYPOSITION(2) HEIGHT(25) LABELTYPE(Caption) LEFT(16) PARENT(#GPBX_CHGPWD) TABPOSITION(2) TOP(56) WIDTH(280)
DEFINE_COM CLASS(#PWD_NEW.Visual) NAME(#PWD_NEW) CAPTION('New password') DISPLAYPOSITION(3) HEIGHT(25) LABELTYPE(Caption) LEFT(16) PARENT(#GPBX_CHGPWD) TABPOSITION(3) TOP(83) WIDTH(280)
DEFINE_COM CLASS(#PWD_CNF.Visual) NAME(#PWD_CNF) CAPTION('Confirm new password') DISPLAYPOSITION(4) HEIGHT(25) LABELTYPE(Caption) LEFT(16) PARENT(#GPBX_CHGPWD) TABPOSITION(4) TOP(110) WIDTH(280)
DEFINE_COM CLASS(#PRIM_GPBX) NAME(#GPBX_CHGPWD) DISPLAYPOSITION(1) HEIGHT(153) LEFT(2) PARENT(#COM_OWNER) TABPOSITION(1) TABSTOP(False) TOP(0) WIDTH(487)
DEFINE_COM CLASS(#PRIM_PHBN) NAME(#PHBN_LogOn) BUTTONDEFAULT(True) CAPTION('&Log On') DISPLAYPOSITION(5) ELLIPSES(End) ENABLED(False) LEFT(336) PARENT(#GPBX_CHGPWD) TABPOSITION(5) TOP(16) WIDTH(137)
DEFINE_COM CLASS(#PRIM_STBR) NAME(#STBR_1) DISPLAYPOSITION(2) HEIGHT(24) LEFT(0) MESSAGEPOSITION(1) PARENT(#COM_OWNER) TABPOSITION(2) TABSTOP(False) TOP(157) WIDTH(492)
DEFINE_COM CLASS(#PRIM_PHBN) NAME(#PHBN_Cancel) BUTTONCANCEL(True) CAPTION('&Cancel') DISPLAYPOSITION(6) LEFT(336) PARENT(#GPBX_CHGPWD) TABPOSITION(6) TOP(42) WIDTH(137)
DEFINE_COM CLASS(#DSPUSRINF) NAME(#DSPUSRINF) COMPONENTVERSION(1)
DEFINE_COM CLASS(#VF_FP001) NAME(#uFramework)

DEFINE FIELD(#EXPIRED) REFFLD(#STD_BOOL)
DEFINE FIELD(#MAXSIGN) REFFLD(#STD_CODE6)

DEFINE_PTY NAME(upConnectionResult) DESC('Connection with iSeries') GET(*AUTO #RETCODE)
DEFINE_PTY NAME(upPassword) DESC('New Password') GET(*AUTO #PWD_NEW)

EVTROUTINE HANDLING(#com_owner.Initialize)
ENDROUTINE

MTHROUTINE NAME(umOpenForm)
DEFINE_MAP FOR(*INPUT) CLASS(#VF_ELSRVN) NAME(#uServerLUName)
DEFINE_MAP FOR(*INPUT) CLASS(#VF_ELUSER) NAME(#uUserProfile)
DEFINE_MAP FOR(*INPUT) CLASS(#MSGT) NAME(#uMessage)
DEFINE_MAP FOR(*INPUT) CLASS(#STD_BOOL) NAME(#uExpired)
DEFINE_MAP FOR(*INPUT) CLASS(#STD_CODE6) NAME(#uMaxSignOnAttempts)

#PWD_CUR.ShowError #PWD_NEW.ShowError #PWD_CNF.ShowError := false

#SERVERNME := #uServerLUName
#USER := #uUserProfile
#MSGT := #uMessage
#EXPIRED := #uExpired
#MAXSIGN := #uMaxSignOnAttempts

#PWD_CUR := *blanks
#PWD_NEW := *blanks
#PWD_CNF := *blanks

#COM_OWNER.Left := 280
#COM_OWNER.Top := 150

IF (#EXPIRED = TRUE)
#COM_OWNER.Caption := 'Change password (expired)'
ELSE
#COM_OWNER.Caption := 'Change password'
ENDIF

#PWD_CUR.Setfocus

#COM_OWNER.ShowModalForm

ENDROUTINE

EVTROUTINE HANDLING(#PHBN_LOGON.Click)

DEFINE FIELD(#SAV_MSGT) REFFLD(#MSGT)
DEFINE FIELD(#SAV_MSGID) REFFLD(#MSGID)

GROUP_BY NAME(#PWD_PARMS) FIELDS(#USER #PWD_CUR #PWD_NEW #MSGID #MSGT)

DEFINE FIELD(#PRVSIGNON) TYPE(*CHAR) LENGTH(13)
DEFINE FIELD(#ATTEMPTS) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#USRSTATUS) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#PWDCHGDTE) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#PWDEXPITV) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#PWDEXPDTE) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#PWDREMDAY) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#USERNAME) TYPE(*CHAR) LENGTH(50)

GROUP_BY NAME(#UI_PARMS) FIELDS(#USER #PRVSIGNON #ATTEMPTS #USRSTATUS #PWDCHGDTE #PWDEXPITV #PWDEXPDTE #PWDREMDAY #USERNAME #MSGID)

USE BUILTIN(CLR_MESSAGES)
#RETCODE := ER

IF COND(#PWD_CNF *NE #PWD_NEW)
MESSAGE MSGTXT('New password and confirmed password are not the same')
#PWD_NEW.ShowError #PWD_CNF.ShowError := true
RETURN
ENDIF

* Connect with iSeries - Superuser
USE BUILTIN(DISCONNECT_SERVER) WITH_ARGS(#SERVERNME) TO_GET(#RETCODE)
USE BUILTIN(DEFINE_ANY_SERVER) WITH_ARGS(#SERVERNME #SERVERNME Y *default Y Y '20' QEBCDIC QASCII) TO_GET(#RETCODE)
USE BUILTIN(SET_SESSION_VALUE) WITH_ARGS('USER=' SUPERUSER)
USE BUILTIN(CONNECT_SERVER) WITH_ARGS(#SERVERNME SUPERPASWOORD) TO_GET(#retcode #STD_DESCS #STD_NUM10)

USE BUILTIN(CLR_MESSAGES)

IF COND(#RETCODE *EQ ER)

* Connection not established
MESSAGE MSGTXT('Connection failed. Contact Helpdesk.')

ELSE

* Change password
EXCHANGE FIELDS(#PWD_PARMS)
USE BUILTIN(CALL_SERVER_FUNCTION) WITH_ARGS(#SERVERNME CHGPWD Y Y) TO_GET(#IO$STS)

IF (#MSGID *EQ *blanks)

* Connect with iSeries - Normal User (new password)
USE BUILTIN(DISCONNECT_SERVER) WITH_ARGS(#SERVERNME) TO_GET(#RETCODE)
USE BUILTIN(DEFINE_ANY_SERVER) WITH_ARGS(#SERVERNME #SERVERNME Y *default Y Y '20' QEBCDIC QASCII) TO_GET(#RETCODE)
USE BUILTIN(SET_SESSION_VALUE) WITH_ARGS('USER=' #USER)
USE BUILTIN(CONNECT_SERVER) WITH_ARGS(#SERVERNME #PWD_NEW) TO_GET(#retcode #STD_DESCS #STD_NUM10)

USE BUILTIN(CLR_MESSAGES)

IF COND(#RETCODE *EQ OK)
#COM_OWNER.CloseForm
RETURN
ELSE
* Connection not established
MESSAGE MSGTXT('Connection failed. Contact Helpdesk.')
#PWD_CUR.ShowError #PWD_NEW.ShowError #PWD_CNF.ShowError := true
ENDIF

ELSE

#SAV_MSGT := #MSGT
#SAV_MSGID := #MSGID

* Retrieve user information
EXCHANGE FIELDS(#UI_PARMS)
USE BUILTIN(CALL_SERVER_FUNCTION) WITH_ARGS(#SERVERNME RTVUSRI Y Y) TO_GET(#IO$STS)

#MSGT := #SAV_MSGT
#MSGID := #SAV_MSGID

IF (#USRSTATUS = '*DISABLED')

#MSGT := 'User profile ' + #USER.Trim + ' is disabled. Contact Helpdesk.'

ELSE

* Overwrite Message Text
CASE OF_FIELD(#MSGID)

WHEN VALUE_IS('= CPF22E2')

#MSGT := 'Current password not correct.'
IF ((#ATTEMPTS.AsNumber + 1) = #MAXSIGN.AsNumber)
#MSGT := #MSGT + ' Next not valid password disables user.'
ENDIF

WHEN VALUE_IS('= CPF9801')

#MSGT := 'User profile ' + #USER.Trim + ' does not exist.'

OTHERWISE
ENDCASE

ENDIF

MESSAGE MSGTXT(#MSGT)
#RETCODE := ER
#PWD_CUR.ShowError #PWD_NEW.ShowError #PWD_CNF.ShowError := true

* Disconnect server
USE BUILTIN(DISCONNECT_SERVER) WITH_ARGS(#SERVERNME) TO_GET(#RETCODE)

ENDIF

ENDIF

#USER := #USER.Trim
#PWD_CUR := #PWD_CUR.Trim
#PWD_NEW := #PWD_NEW.Trim
#PWD_CNF := #PWD_CNF.Trim

ENDROUTINE

EVTROUTINE HANDLING(#PHBN_Cancel.Click)
#RETCODE := ER
#COM_OWNER.CloseForm
ENDROUTINE

EVTROUTINE HANDLING(#PWD_CUR.Changed #PWD_NEW.Changed #PWD_CNF.Changed) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)

IF ((#USER = *blanks) *Or (#PWD_CUR = *blanks) *Or (#PWD_NEW = *blanks) *Or (#PWD_CNF = *blanks))
#PHBN_LOGON.Enabled := false
ELSE
#PHBN_LOGON.Enabled := true
ENDIF

ENDROUTINE

EVTROUTINE HANDLING(#COM_OWNER.Activate) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
USE BUILTIN(CLR_MESSAGES)
MESSAGE MSGTXT(#MSGT)
ENDROUTINE

END_COM
