unit View.UserProfile; interface uses System.SysUtils, System.Classes, JS, Web, WEBLib.Graphics, WEBLib.Controls, WEBLib.Forms, WEBLib.Dialogs, Vcl.Controls, Vcl.StdCtrls, WEBLib.StdCtrls, XData.Web.Client, WEBLib.ExtCtrls, DB, XData.Web.JsonDataset, XData.Web.Dataset, XData.Web.Connection, Vcl.Forms, ConnectionModule; type TFViewUserProfile = class(TWebForm) WebLabel1: TWebLabel; WebLabel3: TWebLabel; edtUsername: TWebEdit; WebLabel2: TWebLabel; edtUserId: TWebEdit; edtFullName: TWebEdit; WebLabel4: TWebLabel; edtPhone: TWebEdit; WebLabel5: TWebLabel; chkAdminUser: TWebCheckBox; edtEmail: TWebEdit; WebLabel6: TWebLabel; btnConfirm: TWebButton; lblResult: TWebLabel; XDataWebClient1: TXDataWebClient; WebButton1: TWebButton; pnlMessage: TWebPanel; lblMessage: TWebLabel; btnCloseNotification: TWebButton; procedure WebFormShow(Sender: TObject); procedure btnConfirmClick(Sender: TObject); [async] procedure EditUser(); [async] procedure GetUser(); procedure WebButton1Click(Sender: TObject); procedure HideNotification(); procedure ShowNotification(Notification: string); procedure btnCloseNotificationClick(Sender: TObject); function CheckInputs(): boolean; end; var FViewUserProfile: TFViewUserProfile; implementation uses Auth.Service, XData.Model.Classes; {$R *.dfm} procedure TFViewUserProfile.btnCloseNotificationClick(Sender: TObject); begin HideNotification; end; procedure TFViewUserProfile.btnConfirmClick(Sender: TObject); var resultString: string; begin asm var messageDiv = document.getElementById('view.login.message'); messageDiv.classList.remove('alert-success'); messageDiv.classList.add('alert-danger'); end; if CheckInputs() then begin EditUser(); end end; procedure TFViewUserProfile.EditUser(); var xdcResponse: TXDataClientResponse; responseString: TJSObject; editOptions: string; begin if(checkInputs()) then begin console.log(edtFullName.Text); editOptions := '&username=' + edtUsername.Text + '&fullname=' + edtFullName.Text + '&phonenumber=' + edtPhone.Text + '&email=' + edtEmail.Text; xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.EditUser', [editOptions])); responseString := TJSObject(xdcResponse.Result); asm var messageDiv = document.getElementById('view.login.message'); messageDiv.classList.remove('alert-danger'); messageDiv.classList.add('alert-success'); end; ShowNotification(string(responseString['value'])); end; end; procedure TFViewUserProfile.WebButton1Click(Sender: TObject); var xdcResponse: TXDataClientResponse; userList: TJSObject; data: TJSArray; user: TJSObject; begin GetUser(); showNotification('Failure:Changes discarded'); end; procedure TFViewUserProfile.WebFormShow(Sender: TObject); var xdcResponse: TXDataClientResponse; userList: TJSObject; data: TJSArray; user: TJSObject; begin HideNotification; GetUser(); //edtJwt.Text := TJSJSON.stringify(AuthService.TokenPayload); chkAdminUser.Checked := JS.toBoolean(AuthService.TokenPayload.Properties['user_admin']); end; procedure TFViewUserProfile.GetUser; var xdcResponse: TXDataClientResponse; userList: TJSObject; data: TJSArray; user: TJSObject; begin xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetUsers', [JS.toString(AuthService.TokenPayload.Properties['user_name'])])); userList := TJSObject(xdcResponse.Result); data := TJSArray(userList['data']); user := TJSObject(data[0]); edtUsername.Text := string(user['username']); edtFullName.Text := string(user['full_name']); edtPhone.Text := string(user['phone_number']); edtEmail.Text := string(user['email_address']); edtUserId.Text := string(user['userID']); chkAdminUser.Checked := boolean(user['admin']); end; procedure TFViewUserProfile.HideNotification; begin pnlMessage.ElementHandle.hidden := True; end; procedure TFViewUserProfile.ShowNotification(Notification: string); var splitNotification: TArray<string>; begin if Notification <> '' then begin splitNotification := Notification.Split([':']); if(splitNotification[0] = 'Success') then begin asm var messageDiv = document.getElementById('view.login.message'); messageDiv.classList.remove('alert-danger'); messageDiv.classList.add('alert-success'); end; end else begin asm var messageDiv = document.getElementById('view.login.message'); messageDiv.classList.remove('alert-success'); messageDiv.classList.add('alert-danger'); end; end; lblMessage.Caption := splitNotification[1]; pnlMessage.ElementHandle.hidden := False; end; end; function TFViewUserProfile.CheckInputs(): boolean; var checkString: string; charIndex: integer; phoneNum: string; begin Result := false; checkString := edtFullName.Text + edtUsername.Text + edtPhone.Text + edtEmail.Text; if string(edtFullName.Text).IsEmpty then begin ShowNotification('Failure:Full Name field is blank!'); exit; end; if string(edtUsername.Text).IsEmpty then begin ShowNotification('Failure:Username field is blank!'); exit; end; if string(edtPhone.Text).IsEmpty then begin ShowNotification('Failure:Phone Number field is blank!'); exit; end; if string(edtEmail.Text).IsEmpty then begin ShowNotification('Failure:Email field is blank!'); exit; end; if checkString.Contains('&') then begin ShowNotification('Failure:No fields may contain "&&"!'); exit; end; if string(edtEmail.Text).Contains('@') = false then begin ShowNotification('Failure:Please enter a valid email address'); exit; end; if (length(string(edtEmail.Text).Split(['@'])) <> 2) or (string(edtEmail.text).CountChar('@') > 1) then begin ShowNotification('Failure:Please enter a valid email address'); exit; end; phoneNum := edtPhone.Text; if (not phoneNum.Contains('(')) or (not phoneNum.Contains(')')) or (not phoneNum.Contains('-')) then begin ShowNotification('Failure:Please enter a valid phone number'); exit; end; if (phoneNum.CountChar('(') <> 1) or (phoneNum.CountChar(')') <> 1) or (phoneNum.CountChar('-') <> 1) or (phoneNum.CountChar(' ') > 1) then begin ShowNotification('Failure:Please enter a valid phone number'); exit; end; phoneNum := phoneNum.Replace('(', ''); phoneNum := phoneNum.Replace(')', ''); phoneNum := phoneNum.Replace('-', ''); phoneNum := phoneNum.Replace(' ', ''); console.log(phoneNum); console.log(length(phoneNum)); if(length(phoneNum) <> 10) then begin ShowNotification('Failure:Please enter a valid phone number'); exit; end; for CharIndex := 1 to Length(phoneNum) do begin if not (phoneNum[CharIndex] in ['0' .. '9']) then begin console.log('here'); ShowNotification('Failure:Please enter a valid phone number'); exit; end; end; result := true; end; end.