| 1 | { ************************************************************** | 
|---|
| 2 | Package: XWB - Kernel RPCBroker | 
|---|
| 3 | Date Created: Sept 18, 1997 (Version 1.1) | 
|---|
| 4 | Site Name: Oakland, OI Field Office, Dept of Veteran Affairs | 
|---|
| 5 | Developers: Danila Manapsal, Don Craven, Joel Ivey | 
|---|
| 6 | Description: Verify Code edit dialog. | 
|---|
| 7 | Current Release: Version 1.1 Patch 40 (January 7, 2005)) | 
|---|
| 8 | *************************************************************** } | 
|---|
| 9 |  | 
|---|
| 10 | unit VCEdit; | 
|---|
| 11 |  | 
|---|
| 12 | interface | 
|---|
| 13 |  | 
|---|
| 14 | uses | 
|---|
| 15 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, | 
|---|
| 16 | StdCtrls, Buttons, | 
|---|
| 17 | {Broker units} | 
|---|
| 18 | Trpcb, Hash; | 
|---|
| 19 |  | 
|---|
| 20 | type | 
|---|
| 21 | TVCEdit = class(TComponent) | 
|---|
| 22 | private | 
|---|
| 23 | FRPCBroker : TRPCBroker; | 
|---|
| 24 | FOldVC     : string; | 
|---|
| 25 | FConfirmFailCnt : integer;  //counts failed confirms. | 
|---|
| 26 | FHelp      : string; | 
|---|
| 27 | FOldVCSet: Boolean;  // Shows whether old code was passed in, even if NULL | 
|---|
| 28 | procedure NoChange(reason : string); | 
|---|
| 29 | protected | 
|---|
| 30 | public | 
|---|
| 31 | constructor Create(AOwner: TComponent); override; | 
|---|
| 32 | destructor Destroy; override; | 
|---|
| 33 | function ChangeVCKnowOldVC(strOldVC : string) : Boolean; | 
|---|
| 34 | function ChangeVC : Boolean; | 
|---|
| 35 | published | 
|---|
| 36 | property RPCBroker : TRPCBroker read FRPCBroker write FRPCBroker; | 
|---|
| 37 | end; | 
|---|
| 38 |  | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 | TfrmVCEdit = class(TForm) | 
|---|
| 42 | lblOldVC: TLabel; | 
|---|
| 43 | lblNewVC: TLabel; | 
|---|
| 44 | lblConfirmVC: TLabel; | 
|---|
| 45 | edtOldVC: TEdit; | 
|---|
| 46 | edtNewVC: TEdit; | 
|---|
| 47 | edtConfirmVC: TEdit; | 
|---|
| 48 | btnOK: TBitBtn; | 
|---|
| 49 | btnCancel: TBitBtn; | 
|---|
| 50 | btnHelp: TBitBtn; | 
|---|
| 51 | procedure btnOKClick(Sender: TObject); | 
|---|
| 52 | procedure btnHelpClick(Sender: TObject); | 
|---|
| 53 | procedure edtNewVCExit(Sender: TObject); | 
|---|
| 54 | procedure edtOldVCChange(Sender: TObject); | 
|---|
| 55 | protected | 
|---|
| 56 | { Private declarations } | 
|---|
| 57 | FVCEdit : TVCEdit;   //Links form to instance of VCEdit. | 
|---|
| 58 | public | 
|---|
| 59 | { Public declarations } | 
|---|
| 60 | end; | 
|---|
| 61 |  | 
|---|
| 62 | function ChangeVerify(RPCBroker: TRPCBroker): Boolean; | 
|---|
| 63 | function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean; | 
|---|
| 64 |  | 
|---|
| 65 | var | 
|---|
| 66 | frmVCEdit: TfrmVCEdit; | 
|---|
| 67 |  | 
|---|
| 68 | const | 
|---|
| 69 | MAX_CONFIRM_FAIL : integer = 3; | 
|---|
| 70 | U = '^'; | 
|---|
| 71 |  | 
|---|
| 72 | {procedure Register;} | 
|---|
| 73 |  | 
|---|
| 74 | implementation | 
|---|
| 75 |  | 
|---|
| 76 | {$R *.DFM} | 
|---|
| 77 |  | 
|---|
| 78 | function ChangeVerify(RPCBroker: TRPCBroker): Boolean; | 
|---|
| 79 | var | 
|---|
| 80 | VCEdit1: TVCEdit; | 
|---|
| 81 | begin | 
|---|
| 82 | //  Str := ''; | 
|---|
| 83 | VCEdit1 := TVCEdit.Create(Application); | 
|---|
| 84 | try | 
|---|
| 85 | VCEdit1.RPCBroker := RPCBroker; | 
|---|
| 86 | if VCEdit1.ChangeVC then  //invoke VCEdit form.                                              //VC changed. | 
|---|
| 87 | Result := True | 
|---|
| 88 | else | 
|---|
| 89 | Result := False; | 
|---|
| 90 | finally | 
|---|
| 91 | VCEdit1.Free; | 
|---|
| 92 | end; | 
|---|
| 93 | end; | 
|---|
| 94 |  | 
|---|
| 95 | function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean; | 
|---|
| 96 | var | 
|---|
| 97 | OrigContext: String; | 
|---|
| 98 | begin | 
|---|
| 99 | Result := False; | 
|---|
| 100 | Reason := ''; | 
|---|
| 101 | if UpperCase(OldVerify) = UpperCase(NewVerify1) then | 
|---|
| 102 | Reason := 'The new code is the same as the current one.' | 
|---|
| 103 | else | 
|---|
| 104 | if UpperCase(NewVerify1) <> UpperCase(NewVerify2) then | 
|---|
| 105 | Reason := 'The confirmation code does not match.'; | 
|---|
| 106 | if Reason = '' then | 
|---|
| 107 | try | 
|---|
| 108 | with RPCBroker do | 
|---|
| 109 | begin | 
|---|
| 110 | OrigContext := CurrentContext; | 
|---|
| 111 | CreateContext('XUS SIGNON'); | 
|---|
| 112 | RemoteProcedure := 'XUS CVC'; | 
|---|
| 113 | Param[0].PType := literal; | 
|---|
| 114 | Param[0].Value := Encrypt(UpperCase(OldVerify)) | 
|---|
| 115 | + U + Encrypt(UpperCase(NewVerify1)) | 
|---|
| 116 | + U + Encrypt(UpperCase(NewVerify2)) ; | 
|---|
| 117 | Call; | 
|---|
| 118 | Reason := ''; | 
|---|
| 119 | if Results[0] = '0' then | 
|---|
| 120 | Result := True | 
|---|
| 121 | else if Results.Count > 1 then | 
|---|
| 122 | Reason := Results[1]; | 
|---|
| 123 | CreateContext(OrigContext); | 
|---|
| 124 | end; | 
|---|
| 125 | except | 
|---|
| 126 | on E: Exception do | 
|---|
| 127 | begin | 
|---|
| 128 | RPCBroker.RPCBError := E.Message; | 
|---|
| 129 | if Assigned(RPCBroker.OnRPCBFailure) then | 
|---|
| 130 | RPCBroker.OnRPCBFailure(RPCBroker) | 
|---|
| 131 | else if RPCBroker.ShowErrorMsgs = semRaise then | 
|---|
| 132 | Raise; | 
|---|
| 133 | end; | 
|---|
| 134 | end; | 
|---|
| 135 | end; | 
|---|
| 136 |  | 
|---|
| 137 | {------------------TVCEdit component------------------------------------} | 
|---|
| 138 |  | 
|---|
| 139 | constructor TVCEDit.Create(AOwner: TComponent); | 
|---|
| 140 | begin | 
|---|
| 141 | inherited Create(AOwner); | 
|---|
| 142 | FOldVCSet := False; | 
|---|
| 143 | end; | 
|---|
| 144 |  | 
|---|
| 145 | destructor TVCEDit.Destroy; | 
|---|
| 146 | begin | 
|---|
| 147 | inherited Destroy; | 
|---|
| 148 | end; | 
|---|
| 149 |  | 
|---|
| 150 |  | 
|---|
| 151 | function TVCEdit.ChangeVCKnowOldVC(strOldVC : string) : Boolean; | 
|---|
| 152 | begin | 
|---|
| 153 | FOldVC := strOldVC; | 
|---|
| 154 | FOldVCSet := True; | 
|---|
| 155 | Result := ChangeVC; | 
|---|
| 156 | FOldVCSet := False;  // set it back to false in case we come in again | 
|---|
| 157 | end; | 
|---|
| 158 |  | 
|---|
| 159 | {--------------------------ChangeVC function---------------------------} | 
|---|
| 160 | function TVCEdit.ChangeVC : Boolean; | 
|---|
| 161 | var | 
|---|
| 162 | OldHandle: THandle; | 
|---|
| 163 | begin | 
|---|
| 164 | Result := False; | 
|---|
| 165 | try | 
|---|
| 166 | frmVCEDit := TfrmVCEDit.Create(application); | 
|---|
| 167 | with frmVCEDit do | 
|---|
| 168 | begin | 
|---|
| 169 | FVCEdit := Self;      //To link form to VCEdit instance. | 
|---|
| 170 | if FOldVCSet then      //If old VC known, stuff it & disable editing. | 
|---|
| 171 | begin | 
|---|
| 172 | edtOldVC.Color := clBtnFace; | 
|---|
| 173 | edtOldVC.Enabled := False; | 
|---|
| 174 | edtOldVC.Text := FOldVC; | 
|---|
| 175 | end{if}; | 
|---|
| 176 | //          ShowApplicationAndFocusOK(Application); | 
|---|
| 177 | OldHandle := GetForegroundWindow; | 
|---|
| 178 | SetForegroundWindow(frmVCEdit.Handle); | 
|---|
| 179 | if ShowModal = mrOK then    //outcome of form. | 
|---|
| 180 | Result := True; | 
|---|
| 181 | SetForegroundWindow(OldHandle); | 
|---|
| 182 | end{with}; | 
|---|
| 183 | frmVCEDit.Free; | 
|---|
| 184 | except | 
|---|
| 185 | on E: Exception do | 
|---|
| 186 | begin | 
|---|
| 187 | FRPCBroker.RPCBError := E.Message; | 
|---|
| 188 | if Assigned(FRPCBroker.OnRPCBFailure) then | 
|---|
| 189 | FRPCBroker.OnRPCBFailure(FRPCBroker) | 
|---|
| 190 | else if FRPCBroker.ShowErrorMsgs = semRaise then | 
|---|
| 191 | Raise; | 
|---|
| 192 | end; | 
|---|
| 193 | end{except}; | 
|---|
| 194 | end; | 
|---|
| 195 |  | 
|---|
| 196 | {------------------TVCEdit.NoChange------------------------------------- | 
|---|
| 197 | -----------Displays error messages when change fails.-------------------} | 
|---|
| 198 | procedure TVCEdit.NoChange(reason : string); | 
|---|
| 199 | begin | 
|---|
| 200 | ShowMessage('Your VERIFY code was not changed.' + #13 + | 
|---|
| 201 | reason + #13 ); | 
|---|
| 202 | end; | 
|---|
| 203 |  | 
|---|
| 204 |  | 
|---|
| 205 | {-------------------------TfrmVCEdit methods-------------------------------} | 
|---|
| 206 | procedure TfrmVCEdit.btnOKClick(Sender: TObject); | 
|---|
| 207 | begin | 
|---|
| 208 | with FVCEdit do | 
|---|
| 209 | begin | 
|---|
| 210 | if edtOldVC.Text = edtNewVC.Text then | 
|---|
| 211 | begin | 
|---|
| 212 | NoChange('The new code is the same as the current one.'); | 
|---|
| 213 | edtNewVC.Text := ''; | 
|---|
| 214 | edtConfirmVC.Text := ''; | 
|---|
| 215 | edtNewVC.SetFocus; | 
|---|
| 216 | end | 
|---|
| 217 | else | 
|---|
| 218 | if edtNewVC.Text <> edtConfirmVC.Text then | 
|---|
| 219 | begin | 
|---|
| 220 | inc(FConfirmFailCnt); | 
|---|
| 221 | if FConfirmFailCnt > MAX_CONFIRM_FAIL then | 
|---|
| 222 | begin | 
|---|
| 223 | edtNewVC.Text := ''; | 
|---|
| 224 | edtConfirmVC.Text := ''; | 
|---|
| 225 | NoChange('The confirmation code does not match.'); | 
|---|
| 226 | edtNewVC.SetFocus; | 
|---|
| 227 | end | 
|---|
| 228 | else | 
|---|
| 229 | begin | 
|---|
| 230 | edtConfirmVC.text := ''; | 
|---|
| 231 | NoChange('The confirmation code does not match.  Try again.'); | 
|---|
| 232 | edtConfirmVC.SetFocus; | 
|---|
| 233 | end; | 
|---|
| 234 | end | 
|---|
| 235 | else | 
|---|
| 236 | with FRPCBroker do | 
|---|
| 237 | begin | 
|---|
| 238 | RemoteProcedure := 'XUS CVC'; | 
|---|
| 239 | Param[0].PType := literal; | 
|---|
| 240 | Param[0].Value := Encrypt(UpperCase(edtOldVC.Text)) | 
|---|
| 241 | + U + Encrypt(UpperCase(edtNewVC.Text)) | 
|---|
| 242 | + U + Encrypt(UpperCase(edtConfirmVC.Text)) ; | 
|---|
| 243 | Call; | 
|---|
| 244 | if Results[0] = '0' then | 
|---|
| 245 | begin | 
|---|
| 246 | ShowMessage('Your VERIFY CODE has been changed'); | 
|---|
| 247 | ModalResult := mrOK;  //Close form. | 
|---|
| 248 | end | 
|---|
| 249 | else | 
|---|
| 250 | begin | 
|---|
| 251 | if Results.Count > 1 then | 
|---|
| 252 | NoChange(Results[1]) | 
|---|
| 253 | else | 
|---|
| 254 | NoChange(''); | 
|---|
| 255 | edtNewVC.Text := ''; | 
|---|
| 256 | edtConfirmVC.Text := ''; | 
|---|
| 257 | edtNewVC.SetFocus; | 
|---|
| 258 | end; | 
|---|
| 259 | end; | 
|---|
| 260 | end{with}; | 
|---|
| 261 | end; | 
|---|
| 262 |  | 
|---|
| 263 | procedure TfrmVCEdit.btnHelpClick(Sender: TObject); | 
|---|
| 264 | begin | 
|---|
| 265 | with FVCEdit do | 
|---|
| 266 | begin | 
|---|
| 267 | if FHelp = '' then | 
|---|
| 268 | begin | 
|---|
| 269 | with FRPCBroker do | 
|---|
| 270 | begin | 
|---|
| 271 | RemoteProcedure := 'XUS AV HELP'; | 
|---|
| 272 | Call; | 
|---|
| 273 | if Results.Count > 0 then | 
|---|
| 274 | FHelp := Results[0]; | 
|---|
| 275 | FHelp := 'Enter a new verify code and then confirm it.' | 
|---|
| 276 | + #13#13 + FHelp; | 
|---|
| 277 | if FOldVC = '' then | 
|---|
| 278 | FHelp := 'Enter your current verify code first.' + #13#10 + FHelp; | 
|---|
| 279 | end{with}; | 
|---|
| 280 | end{if}; | 
|---|
| 281 | ShowMessage(FHelp); | 
|---|
| 282 | end{with}; | 
|---|
| 283 | end; | 
|---|
| 284 |  | 
|---|
| 285 | procedure TfrmVCEdit.edtNewVCExit(Sender: TObject); | 
|---|
| 286 | begin | 
|---|
| 287 | if edtNewVC.Modified then | 
|---|
| 288 | begin | 
|---|
| 289 | FVCEdit.FConfirmFailCnt := 0;                //Reset counter. | 
|---|
| 290 | edtNewVC.Modified := False; | 
|---|
| 291 | end; | 
|---|
| 292 | end; | 
|---|
| 293 |  | 
|---|
| 294 | procedure TfrmVCEdit.edtOldVCChange(Sender: TObject); //Also NewVC and ConfirmVC | 
|---|
| 295 | begin | 
|---|
| 296 | btnOk.Default := ((edtNewVC.Text <> '') and        //Update status of OK btn. | 
|---|
| 297 | (edtOldVC.Text <> '') and | 
|---|
| 298 | (edtConfirmVC.Text <> '') ); | 
|---|
| 299 | end; | 
|---|
| 300 |  | 
|---|
| 301 | end. | 
|---|