diff --git a/EnvelopeGenerator.Common/Entities/EmailData.vb b/EnvelopeGenerator.Common/Entities/EmailData.vb index 54f115a9..79afc476 100644 --- a/EnvelopeGenerator.Common/Entities/EmailData.vb +++ b/EnvelopeGenerator.Common/Entities/EmailData.vb @@ -31,7 +31,7 @@ Public Class EmailData EmailSubject = String.Empty EmailType = pStatus - Message = pEnvelope.Message + Message = TextToHtml(pEnvelope.Message) ReferenceID = pEnvelope.Id ReferenceString = pEnvelope.Uuid ReceiverName = pReceiver.Name @@ -40,6 +40,22 @@ Public Class EmailData SenderName = pEnvelope.User.FullName EnvelopeTitle = pEnvelope.Title End Sub + Public Function TextToHtml(input As String) As String + If String.IsNullOrEmpty(input) Then Return "" + + ' HTML-Encodierung der Sonderzeichen + Dim encoded As String = System.Net.WebUtility.HtmlEncode(input) + + ' Tabs in   umwandeln (z.B. 4 non-breaking spaces) + encoded = encoded.Replace(vbTab, "    ") + + ' Zeilenumbrüche in
umwandeln + encoded = encoded.Replace(vbCrLf, "
") ' Windows + encoded = encoded.Replace(vbCr, "
") ' Mac alt + encoded = encoded.Replace(vbLf, "
") ' Unix/Linux + + Return encoded + End Function ''' ''' Constructor for sending email to creator diff --git a/EnvelopeGenerator.Common/Models/ReceiverModel.vb b/EnvelopeGenerator.Common/Models/ReceiverModel.vb index d969c415..6630b3ef 100644 --- a/EnvelopeGenerator.Common/Models/ReceiverModel.vb +++ b/EnvelopeGenerator.Common/Models/ReceiverModel.vb @@ -57,7 +57,8 @@ Public Class ReceiverModel Public Function Insert(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Try - Dim oCheck = $"SELECT COUNT(GUID) FROM [dbo].[TBSIG_RECEIVER] WHERE SIGNATURE = '{pReceiver.GetSignature()}'" + Dim oSignature As String = pReceiver.GetSignature() + Dim oCheck = $"SELECT COUNT(GUID) FROM [dbo].[TBSIG_RECEIVER] WHERE SIGNATURE = '{oSignature}'" Dim oExists = Database.GetScalarValue(oCheck) If oExists = 0 Then @@ -77,7 +78,7 @@ Public Class ReceiverModel Return False End If Else - Logger.Warn($"Receiver [{pReceiver.Email}] already existing! Check collecting not existing Receivers!") + Logger.Warn($"Receiver [{pReceiver.Email}] already existing! SignatureID: {oSignature} Check SQL {oCheck}") Return True End If Catch ex As Exception diff --git a/EnvelopeGenerator.Common/Models/UserModel.vb b/EnvelopeGenerator.Common/Models/UserModel.vb index 04f64995..99469b1e 100644 --- a/EnvelopeGenerator.Common/Models/UserModel.vb +++ b/EnvelopeGenerator.Common/Models/UserModel.vb @@ -70,9 +70,9 @@ Public Class UserModel End Try End Function - Public Function SelectUserId() As Integer + Public Function SelectUserId(oUserName As String) As Integer Try - Dim oUserId As Integer = Database.GetScalarValue($"SELECT GUID FROM TBDD_USER WHERE USERNAME = '{Environment.UserName}'") + Dim oUserId As Integer = Database.GetScalarValue($"SELECT GUID FROM TBDD_USER WHERE USERNAME = '{oUserName}'") Return oUserId Catch ex As Exception diff --git a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb index cadf8f09..be0af8bd 100644 --- a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb +++ b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' indem Sie "*" wie unten gezeigt eingeben: ' - - + + diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj index 789eba38..d499ac6c 100644 --- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj +++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj @@ -337,6 +337,12 @@ Form + + frmGhostMode.vb + + + Form + frmMain.vb @@ -397,6 +403,18 @@ frmFieldEditor.vb Designer + + frmGhostMode.vb + + + frmGhostMode.vb + + + frmGhostMode.vb + + + frmGhostMode.vb + frmMain.vb diff --git a/EnvelopeGenerator.Form/ModuleSettings.vb b/EnvelopeGenerator.Form/ModuleSettings.vb index 12a3caa6..fa1a810b 100644 --- a/EnvelopeGenerator.Form/ModuleSettings.vb +++ b/EnvelopeGenerator.Form/ModuleSettings.vb @@ -17,4 +17,9 @@ Module ModuleSettings Public SQL_REP_ENV_USER_Y As String = "" Public SQL_REP_ENV_USER_ALL As String = "" Public DT_CHARTS As DataTable + Public MyLogger As Logger + Public USER_GHOST_MODE_USRNAME As String = "" + Public USER_GHOST_MODE_ACTIVE As Boolean = False + Public MyUserModel As UserModel + Public MyState As State End Module diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb index 9023d016..c0e90966 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb @@ -122,7 +122,7 @@ Partial Public Class frmEnvelopeEditor Catch ex As Exception MsgBox("File might already be open?", MsgBoxStyle.Exclamation) Me.Cursor = Cursors.Default - Exit Sub + Exit For End Try @@ -421,29 +421,7 @@ Partial Public Class frmEnvelopeEditor MsgBox(Resources.Envelope.Envelope_could_not_be_sent, MsgBoxStyle.Critical, Text) Else If MsgBox(Resources.Envelope.Envelope_Invitations_Sent, MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, Text) = MsgBoxResult.Ok Then - 'If DOCUMENT_PATH_MOVE_AFTSEND <> String.Empty Then - ' If My.Settings.NetUse_PW <> String.Empty And My.Settings.NetUse_Usr <> String.Empty Then - ' Dim oDecrypted = Decryption.Decrypt(My.Settings.NetUse_PW) - ' For Each odoc In Controller.Envelope.Documents 'envelope ist leer! - ' Directory2Delete = "" - ' If CopyFileWithNetUse(odoc.Filepath, DOCUMENT_PATH_MOVE_AFTSEND, My.Settings.NetUse_Usr, My.Settings.NetUse_PW) = False Then - ' BarStaticItem1.Caption = "ERROR while copying files to DMZ! Check Your log!" - ' End If - ' If Directory2Delete <> String.Empty Then - ' Logger.Debug("Now Deleting SourcePath: {0} ...", Directory2Delete) - ' Try - ' System.IO.Directory.Delete(Directory2Delete, True) - ' Logger.Debug("Successfully deleted Sourcepath!") - ' Catch ex As Exception - ' Logger.Warn("Unexpected Error while deleting SourcePath {0}", Directory2Delete) - ' Logger.Warn("ErrorMessage: {0}", ex.Message) - ' End Try - ' End If - ' Next - ' End If - - 'End If Me.Close() End If End If diff --git a/EnvelopeGenerator.Form/frmGhostMode.Designer.vb b/EnvelopeGenerator.Form/frmGhostMode.Designer.vb new file mode 100644 index 00000000..50ad2c1b --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.Designer.vb @@ -0,0 +1,125 @@ + +Partial Class frmGhostMode + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Windows Form-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. + 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmGhostMode)) + Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() + Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() + Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() + Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() + Me.GridControl1 = New DevExpress.XtraGrid.GridControl() + Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView() + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'RibbonControl1 + ' + Me.RibbonControl1.ExpandCollapseItem.Id = 0 + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1}) + resources.ApplyResources(Me.RibbonControl1, "RibbonControl1") + Me.RibbonControl1.MaxItemId = 2 + Me.RibbonControl1.Name = "RibbonControl1" + Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) + Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] + Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1 + ' + 'BarButtonItem1 + ' + resources.ApplyResources(Me.BarButtonItem1, "BarButtonItem1") + Me.BarButtonItem1.Id = 1 + Me.BarButtonItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.BarButtonItem1.Name = "BarButtonItem1" + ' + 'RibbonPage1 + ' + Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1}) + Me.RibbonPage1.Name = "RibbonPage1" + resources.ApplyResources(Me.RibbonPage1, "RibbonPage1") + ' + 'RibbonPageGroup1 + ' + Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1) + Me.RibbonPageGroup1.Name = "RibbonPageGroup1" + resources.ApplyResources(Me.RibbonPageGroup1, "RibbonPageGroup1") + ' + 'RibbonStatusBar1 + ' + resources.ApplyResources(Me.RibbonStatusBar1, "RibbonStatusBar1") + Me.RibbonStatusBar1.Name = "RibbonStatusBar1" + Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1 + ' + 'GridControl1 + ' + resources.ApplyResources(Me.GridControl1, "GridControl1") + Me.GridControl1.MainView = Me.GridView1 + Me.GridControl1.Name = "GridControl1" + Me.GridControl1.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridView1}) + ' + 'GridView1 + ' + Me.GridView1.Appearance.EvenRow.BackColor = System.Drawing.Color.LightBlue + Me.GridView1.Appearance.EvenRow.Options.UseBackColor = True + Me.GridView1.GridControl = Me.GridControl1 + Me.GridView1.Name = "GridView1" + Me.GridView1.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False] + Me.GridView1.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[False] + Me.GridView1.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.[True] + Me.GridView1.OptionsBehavior.AllowGroupExpandAnimation = DevExpress.Utils.DefaultBoolean.[True] + Me.GridView1.OptionsBehavior.Editable = False + Me.GridView1.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.[False] + Me.GridView1.OptionsView.ColumnAutoWidth = False + Me.GridView1.OptionsView.EnableAppearanceEvenRow = True + Me.GridView1.OptionsView.ShowAutoFilterRow = True + Me.GridView1.OptionsView.ShowErrorPanel = DevExpress.Utils.DefaultBoolean.[True] + Me.GridView1.OptionsView.ShowViewCaption = True + resources.ApplyResources(Me.GridView1, "GridView1") + ' + 'frmGhostMode + ' + resources.ApplyResources(Me, "$this") + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.Controls.Add(Me.GridControl1) + Me.Controls.Add(Me.RibbonStatusBar1) + Me.Controls.Add(Me.RibbonControl1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow + Me.Name = "frmGhostMode" + Me.TopMost = True + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.GridView1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl + Friend WithEvents RibbonPage1 As DevExpress.XtraBars.Ribbon.RibbonPage + Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup + Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar + Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents GridControl1 As DevExpress.XtraGrid.GridControl + Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView +End Class diff --git a/EnvelopeGenerator.Form/frmGhostMode.en-US.resx b/EnvelopeGenerator.Form/frmGhostMode.en-US.resx new file mode 100644 index 00000000..08655b78 --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.en-US.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Activate ghost mode + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAIEAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntkaXNwbGF5Om5vbmU7fQoJLnN0M3tk + aXNwbGF5OmlubGluZTtmaWxsOiNGRkIxMTU7fQoJLnN0NHtkaXNwbGF5OmlubGluZTt9Cgkuc3Q1e2Rp + c3BsYXk6aW5saW5lO29wYWNpdHk6MC43NTt9Cgkuc3Q2e2Rpc3BsYXk6aW5saW5lO29wYWNpdHk6MC41 + O30KCS5zdDd7ZGlzcGxheTppbmxpbmU7ZmlsbDojMDM5QzIzO30KCS5zdDh7ZGlzcGxheTppbmxpbmU7 + ZmlsbDojRDExQzFDO30KCS5zdDl7ZGlzcGxheTppbmxpbmU7ZmlsbDojMTE3N0Q3O30KCS5zdDEwe2Rp + c3BsYXk6aW5saW5lO2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+DQogIDxnIGlkPSJSb2xlIj4NCiAgICA8 + cGF0aCBkPSJNNCwydjE2YzAsNi42LDUuNCwxMiwxMiwxMnMxMi01LjQsMTItMTJWMkg0eiBNMTEsOWMx + LjcsMCwzLDEuMywzLDNIOEM4LDEwLjMsOS4zLDksMTEsOXogTTE2LDI0ICAgYy0zLjMsMC02LTIuNy02 + LTZjMCwxLjEsMi43LDIsNiwyczYtMC45LDYtMkMyMiwyMS4zLDE5LjMsMjQsMTYsMjR6IE0xOCwxMmMw + LTEuNywxLjMtMywzLTNzMywxLjMsMywzSDE4eiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0KPC9z + dmc+Cw== + + + + Actions + + + + 965, 146 + + + 0, 146 + + + Please choose a ghost user + + + 965, 341 + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmGhostMode.en.resx b/EnvelopeGenerator.Form/frmGhostMode.en.resx new file mode 100644 index 00000000..dfaf29a7 --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Please select a ghost user + + + Activate ghost mode + + + Start + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmGhostMode.fr.resx b/EnvelopeGenerator.Form/frmGhostMode.fr.resx new file mode 100644 index 00000000..bcbe5cd4 --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Veuillez sélectionner un utilisateur fantôme + + + Activer le Mode Fantôme + + + Démarrer + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmGhostMode.resx b/EnvelopeGenerator.Form/frmGhostMode.resx new file mode 100644 index 00000000..86b5d401 --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.resx @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ghost Modus aktivieren + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAIEAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntkaXNwbGF5Om5vbmU7fQoJLnN0M3tk + aXNwbGF5OmlubGluZTtmaWxsOiNGRkIxMTU7fQoJLnN0NHtkaXNwbGF5OmlubGluZTt9Cgkuc3Q1e2Rp + c3BsYXk6aW5saW5lO29wYWNpdHk6MC43NTt9Cgkuc3Q2e2Rpc3BsYXk6aW5saW5lO29wYWNpdHk6MC41 + O30KCS5zdDd7ZGlzcGxheTppbmxpbmU7ZmlsbDojMDM5QzIzO30KCS5zdDh7ZGlzcGxheTppbmxpbmU7 + ZmlsbDojRDExQzFDO30KCS5zdDl7ZGlzcGxheTppbmxpbmU7ZmlsbDojMTE3N0Q3O30KCS5zdDEwe2Rp + c3BsYXk6aW5saW5lO2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+DQogIDxnIGlkPSJSb2xlIj4NCiAgICA8 + cGF0aCBkPSJNNCwydjE2YzAsNi42LDUuNCwxMiwxMiwxMnMxMi01LjQsMTItMTJWMkg0eiBNMTEsOWMx + LjcsMCwzLDEuMywzLDNIOEM4LDEwLjMsOS4zLDksMTEsOXogTTE2LDI0ICAgYy0zLjMsMC02LTIuNy02 + LTZjMCwxLjEsMi43LDIsNiwyczYtMC45LDYtMkMyMiwyMS4zLDE5LjMsMjQsMTYsMjR6IE0xOCwxMmMw + LTEuNywxLjMtMywzLTNzMywxLjMsMywzSDE4eiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0KPC9z + dmc+Cw== + + + + + 0, 0 + + + Aktionen + + + Start + + + 965, 146 + + + 0, 487 + + + 965, 22 + + + RibbonStatusBar1 + + + DevExpress.XtraBars.Ribbon.RibbonStatusBar, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 1 + + + RibbonControl1 + + + DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 2 + + + + Fill + + + 0, 146 + + + Bitte wählen Sie einen Ghost User + + + 965, 341 + + + + 9 + + + GridControl1 + + + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 0 + + + True + + + 6, 13 + + + 965, 509 + + + Calibri, 8.25pt + + + CenterParent + + + BarButtonItem1 + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + RibbonPage1 + + + DevExpress.XtraBars.Ribbon.RibbonPage, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + RibbonPageGroup1 + + + DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + GridView1 + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + frmGhostMode + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmGhostMode.vb b/EnvelopeGenerator.Form/frmGhostMode.vb new file mode 100644 index 00000000..04bcb107 --- /dev/null +++ b/EnvelopeGenerator.Form/frmGhostMode.vb @@ -0,0 +1,59 @@ +Public Class frmGhostMode + Private Sub frmGhostMode_Load(sender As Object, e As EventArgs) Handles Me.Load + Dim oSQL = "SELECT T.USERNAME,T.NAME, T.[PRENAME],T.EMAIL FROM TBDD_USER T ORDER BY USERNAME" + Dim DT_USER = DB_DD_ECM.GetDatatable(oSQL) + + Try + If Not IsNothing(DT_USER) Then + GridControl1.DataSource = DT_USER + MyLogger.Info($"Received [{DT_USER.Rows.Count}] Ghost-Users to select!") + End If + + + Catch ex As Exception + MsgBox("Error Load_Users:" & vbNewLine & ex.Message) + End Try + End Sub + + Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick + + Set_GhostUser() + End Sub + + Private Sub GridView1_DoubleClick(sender As Object, e As EventArgs) Handles GridView1.DoubleClick + Set_GhostUser() + End Sub + + Sub Set_GhostUser() + Dim oFocusedUserName + Try + oFocusedUserName = GridView1.GetFocusedRowCellValue(GridView1.Columns("UserName")) + If IsNothing(oFocusedUserName) Then + oFocusedUserName = GridView1.GetFocusedRowCellValue(GridView1.Columns("USERNAME")) + End If + If IsNothing(oFocusedUserName) Then + oFocusedUserName = GridView1.GetFocusedRowCellValue(GridView1.Columns("USER_NAME")) + End If + If IsNothing(oFocusedUserName) Then + oFocusedUserName = GridView1.GetFocusedRowCellValue(GridView1.Columns("USER")) + End If + Catch ex As Exception + oFocusedUserName = GridView1.GetFocusedRowCellValue(GridView1.Columns("UserName")) + If IsNothing(oFocusedUserName) Then + MsgBox(ex.Message, MsgBoxStyle.Critical) + Exit Sub + End If + End Try + If oFocusedUserName <> String.Empty Then + Dim result As MsgBoxResult = MsgBox("Do You really want to activate the Ghost-Mode?", MsgBoxStyle.YesNo, "") + 'wenn Speichern ja + If result = MsgBoxResult.Yes Then + USER_GHOST_MODE_USRNAME = oFocusedUserName + USER_GHOST_MODE_ACTIVE = True + Me.Close() + End If + Else + MsgBox("Please choose an user for ghostmode!", MsgBoxStyle.Information) + End If + End Sub +End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmMain.Designer.vb b/EnvelopeGenerator.Form/frmMain.Designer.vb index 7d92b57f..e5262c8c 100644 --- a/EnvelopeGenerator.Form/frmMain.Designer.vb +++ b/EnvelopeGenerator.Form/frmMain.Designer.vb @@ -102,6 +102,7 @@ Partial Class frmMain Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components) Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog() Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components) + Me.BarStaticItemGhost = New DevExpress.XtraBars.BarStaticItem() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainerControl1.Panel1.SuspendLayout() @@ -321,9 +322,9 @@ Partial Class frmMain Me.RibbonControl.ExpandCollapseItem.Id = 0 Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer) Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer) - Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2, Me.BarButtonItem3, Me.BarButtonItem4}) + Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.BarButtonItem2, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarStaticItemGhost}) resources.ApplyResources(Me.RibbonControl, "RibbonControl") - Me.RibbonControl.MaxItemId = 19 + Me.RibbonControl.MaxItemId = 20 Me.RibbonControl.Name = "RibbonControl" Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2}) Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] @@ -515,6 +516,7 @@ Partial Class frmMain ' 'RibbonStatusBar ' + Me.RibbonStatusBar.ItemLinks.Add(Me.BarStaticItemGhost) Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel) Me.RibbonStatusBar.ItemLinks.Add(Me.txtEnvelopeIdLabel) Me.RibbonStatusBar.ItemLinks.Add(Me.bsitmInfo) @@ -753,6 +755,19 @@ Partial Class frmMain ' Me.XtraSaveFileDialog1.FileName = "XtraSaveFileDialog1" ' + 'BarStaticItemGhost + ' + resources.ApplyResources(Me.BarStaticItemGhost, "BarStaticItemGhost") + Me.BarStaticItemGhost.Id = 19 + Me.BarStaticItemGhost.ItemAppearance.Normal.BackColor = System.Drawing.Color.Yellow + Me.BarStaticItemGhost.ItemAppearance.Normal.Font = CType(resources.GetObject("BarStaticItemGhost.ItemAppearance.Normal.Font"), System.Drawing.Font) + Me.BarStaticItemGhost.ItemAppearance.Normal.ForeColor = System.Drawing.Color.Black + Me.BarStaticItemGhost.ItemAppearance.Normal.Options.UseBackColor = True + Me.BarStaticItemGhost.ItemAppearance.Normal.Options.UseFont = True + Me.BarStaticItemGhost.ItemAppearance.Normal.Options.UseForeColor = True + Me.BarStaticItemGhost.Name = "BarStaticItemGhost" + Me.BarStaticItemGhost.Visibility = DevExpress.XtraBars.BarItemVisibility.Never + ' 'frmMain ' resources.ApplyResources(Me, "$this") @@ -878,4 +893,5 @@ Partial Class frmMain Friend WithEvents XtraSaveFileDialog1 As DevExpress.XtraEditors.XtraSaveFileDialog Friend WithEvents RibbonPageGroupFunctions As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents BarButtonItem4 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents BarStaticItemGhost As DevExpress.XtraBars.BarStaticItem End Class diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx index c83fef0d..8d2b9ef6 100644 --- a/EnvelopeGenerator.Form/frmMain.resx +++ b/EnvelopeGenerator.Form/frmMain.resx @@ -123,7 +123,7 @@ - 0, 160 + 0, 158 Fill @@ -850,6 +850,12 @@ R3JlZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + GhostMode active + + + Tahoma, 8.25pt, style=Bold + 0, 0 @@ -872,7 +878,7 @@ Einstellungen - 1090, 160 + 1090, 158 0, 660 @@ -905,7 +911,7 @@ 2 - 1088, 467 + 1088, 469 2 @@ -923,7 +929,7 @@ 0 - 1088, 467 + 1088, 469 Offene Umschläge @@ -941,7 +947,7 @@ 0 - 1090, 490 + 1090, 492 3 @@ -1202,7 +1208,7 @@ 17, 37 - 131, 13 + 120, 13 0 @@ -1451,7 +1457,7 @@ 1 - 1090, 500 + 1090, 502 5 @@ -1469,16 +1475,16 @@ 0 - 17, 54 + 193, 17 - 17, 91 + 316, 17 PDF Files|*.pdf - 17, 128 + 452, 17 True @@ -1927,6 +1933,12 @@ DevExpress.XtraEditors.XtraSaveFileDialog, DevExpress.XtraDialogs.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + BarStaticItemGhost + + + DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + frmMain diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index 31b22f28..5e3cf9cf 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -512,6 +512,21 @@ Public Class frmMain End If bbtnitmEB.Enabled = False RefreshTimer.Start() + If USER_GHOST_MODE_ACTIVE Then + frmGhostMode.ShowDialog() + If USER_GHOST_MODE_USRNAME <> "" Then + MyUserModel = New UserModel(MyState) + MyState.UserId = MyUserModel.SelectUserId(USER_GHOST_MODE_USRNAME) + Dim oUser = MyUserModel.SelectUser() + If oUser IsNot Nothing Then + MyUserModel.CheckUserLogin(oUser) + BarStaticItemGhost.Caption = $"GhostMode active: {USER_GHOST_MODE_USRNAME} - End signFLOW to quit mode" + BarStaticItemGhost.Visibility = DevExpress.XtraBars.BarItemVisibility.Always + LoadEnvelopeData() + End If + MYUSER = oUser + End If + End If End Sub Private Sub bbtnitmInfoMail_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmInfoMail.ItemClick diff --git a/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb index 21d62435..bee7ff51 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb +++ b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb @@ -28,6 +28,7 @@ Partial Class frmSplashScreen Me.lblVersion = New System.Windows.Forms.Label() Me.pbStatus = New System.Windows.Forms.ProgressBar() Me.lblStatus = New System.Windows.Forms.Label() + Me.lblGhostMode = New DevExpress.XtraEditors.LabelControl() CType(Me.PictureEdit1.Properties, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' @@ -88,17 +89,30 @@ Partial Class frmSplashScreen Me.lblStatus.Text = "{Status}" Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ' + 'lblGhostMode + ' + Me.lblGhostMode.Appearance.BackColor = System.Drawing.Color.Yellow + Me.lblGhostMode.Appearance.Options.UseBackColor = True + Me.lblGhostMode.Location = New System.Drawing.Point(654, 243) + Me.lblGhostMode.Name = "lblGhostMode" + Me.lblGhostMode.Size = New System.Drawing.Size(92, 13) + Me.lblGhostMode.TabIndex = 10 + Me.lblGhostMode.Text = "GhostModus active" + Me.lblGhostMode.Visible = False + ' 'frmSplashScreen ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(800, 303) + Me.Controls.Add(Me.lblGhostMode) Me.Controls.Add(Me.lblCopyright) Me.Controls.Add(Me.lblVersion) Me.Controls.Add(Me.lblStatus) Me.Controls.Add(Me.pbStatus) Me.Controls.Add(Me.PictureEdit1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None + Me.KeyPreview = True Me.Name = "frmSplashScreen" Me.ShowIcon = False Me.ShowInTaskbar = False @@ -115,4 +129,5 @@ Partial Class frmSplashScreen Friend WithEvents lblVersion As Label Friend WithEvents pbStatus As ProgressBar Friend WithEvents lblStatus As Label + Friend WithEvents lblGhostMode As DevExpress.XtraEditors.LabelControl End Class diff --git a/EnvelopeGenerator.Form/frmSplashScreen.resx b/EnvelopeGenerator.Form/frmSplashScreen.resx index 8487129c..3b8d22e1 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.resx +++ b/EnvelopeGenerator.Form/frmSplashScreen.resx @@ -121,7 +121,7 @@ iVBORw0KGgoAAAANSUhEUgAAAyAAAADICAYAAAAQj4UaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - DwAACw8BkvkDpQAASudJREFUeF7tvWusZNd5nukfcpSOmmre3Wp2s3lrdpNUk01RPxIk6iBBIjFxMBPZ + DQAACw0B7QfALAAASudJREFUeF7tvWusZNd5nukfcpSOmmre3Wp2s3lrdpNUk01RPxIk6iBBIjFxMBPZ DGxLEyB2M8ggkegAsSRElikHEsnBJFZrRjZtxZIpZaIZRy2AloGxrAHIRKIQRIqVGJ6AsJEAAwgDOzNJ HCBSLsqfynmq+HV9tepd+1KnLnufen88OKf2rfa67HPed3/rW+t7PnffoxNjjDHGGLNb/n4L/9t9l6b8 vXsX+ewBn1ngkSkvCH79hy9NXr5yafKbz1yavHr10uRfv/jo5Pe//Ohk8uoMfmcb+ziGYznnc4/q663C diff --git a/EnvelopeGenerator.Form/frmSplashScreen.vb b/EnvelopeGenerator.Form/frmSplashScreen.vb index fd957a63..e8545a40 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.vb +++ b/EnvelopeGenerator.Form/frmSplashScreen.vb @@ -25,7 +25,7 @@ Public Class frmSplashScreen Dim oLogPath = IO.Path.Combine(Application.LocalUserAppDataPath, "Log") CurrLogConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, CompanyName:="Digital Data", ProductName:="Envelope Generator") Logger = CurrLogConfig.GetLogger() - + MyLogger = Logger Try ConfigManager = New ConfigManager(Of Config)(CurrLogConfig, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath) @@ -60,25 +60,25 @@ Public Class frmSplashScreen End Sub Private Sub Worker_DoWork(sender As Object, e As DoWorkEventArgs) Handles Worker.DoWork - Dim oState As State = DirectCast(e.Argument, State) + MyState = DirectCast(e.Argument, State) Worker.ReportProgress(20, "Initializing Database") Thread.Sleep(300) - Dim oConnectionString = MSSQLServer.DecryptConnectionString(oState.Config.ConnectionString) - oState.Database = New MSSQLServer(oState.LogConfig, oConnectionString) + Dim oConnectionString = MSSQLServer.DecryptConnectionString(MyState.Config.ConnectionString) + MyState.Database = New MSSQLServer(MyState.LogConfig, oConnectionString) - If oState.Database?.DBInitialized = False Then + If MyState.Database?.DBInitialized = False Then Throw New ApplicationException("Could not connect to the database. Application will close!") Else - DB_DD_ECM = oState.Database + DB_DD_ECM = MyState.Database End If Worker.ReportProgress(40, "Initializing Configuration") Thread.Sleep(300) Dim oSQl = "SELECT * FROM TBDD_SQL_COMMANDS" - Dim oDT = oState.Database.GetDatatable(oSQl) + Dim oDT = MyState.Database.GetDatatable(oSQl) For Each oROW As DataRow In oDT.Rows If oROW.Item("TITLE") = "REPORT ENV USER THIS_MONTH" Then SQL_REP_ENV_USER_TM = oROW.Item("SQL_COMMAND") @@ -92,39 +92,39 @@ Public Class frmSplashScreen Next oSQl = "SELECT * FROM TBSIG_CHART" - DT_CHARTS = oState.Database.GetDatatable(oSQl) + DT_CHARTS = MyState.Database.GetDatatable(oSQl) - Dim ConfigModel = New ConfigModel(oState) - oState.DbConfig = ConfigModel.LoadConfiguration() - DEF_TF_ENABLED = oState.DbConfig.Default_TFA_Enabled - DEF_TF_ENABLED_WITH_PHONE = oState.DbConfig.Default_TFA_WithPhone + Dim ConfigModel = New ConfigModel(MyState) + MyState.DbConfig = ConfigModel.LoadConfiguration() + DEF_TF_ENABLED = MyState.DbConfig.Default_TFA_Enabled + DEF_TF_ENABLED_WITH_PHONE = MyState.DbConfig.Default_TFA_WithPhone ' DOCUMENT_PATH_MOVE_AFTSEND = oState.DbConfig.DOCUMENT_PATH_MOVE_AFTSEND Worker.ReportProgress(60, "Initializing User") - Dim oKey = oState.Database.GetScalarValue("SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE' and ACTIVE = 1") - Thread.Sleep(300) + Dim oKey = MyState.Database.GetScalarValue("SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE' and ACTIVE = 1") + Thread.Sleep(300) If oKey.ToString <> String.Empty Then MS_GDPICTUREKEY = oKey End If - Dim oUserModel = New UserModel(oState) - oState.UserId = oUserModel.SelectUserId() + MyUserModel = New UserModel(MyState) + MyState.UserId = MyUserModel.SelectUserId(Environment.UserName) - Dim oUser = oUserModel.SelectUser() + Dim oUser = MyUserModel.SelectUser() Worker.ReportProgress(80, "Initializing Rights") Thread.Sleep(300) ' This checks for module access and admin rights If oUser IsNot Nothing Then - oUserModel.CheckUserLogin(oUser) + MyUserModel.CheckUserLogin(oUser) End If MYUSER = oUser Worker.ReportProgress(100, "Starting Application") Thread.Sleep(300) - oState.User = oUser + MyState.User = oUser - e.Result = oState + e.Result = MyState End Sub Private Sub Worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles Worker.ProgressChanged @@ -174,4 +174,14 @@ Public Class frmSplashScreen End Try End Sub + Private Sub frmSplashScreen_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown + If Not IsNothing(MYUSER) Then + If MYUSER.IsAdmin Then + If e.KeyCode = Keys.Escape Then + USER_GHOST_MODE_ACTIVE = True + lblGhostMode.Visible = True + End If + End If + End If + End Sub End Class \ No newline at end of file