SEBWIN-448: Implemented disclaimer for remote proctoring.

This commit is contained in:
Damian Büchel 2021-02-09 23:07:09 +01:00
parent f4a00beebb
commit b27bf24eea
16 changed files with 84 additions and 19 deletions

View file

@ -161,6 +161,7 @@ namespace SafeExamBrowser.I18n.Contracts
OperationStatus_TerminateShell,
OperationStatus_ValidateRemoteSessionPolicy,
OperationStatus_ValidateVirtualMachinePolicy,
OperationStatus_WaitDisclaimerConfirmation,
OperationStatus_WaitExplorerStartup,
OperationStatus_WaitExplorerTermination,
OperationStatus_WaitRuntimeDisconnection,

View file

@ -252,6 +252,12 @@
<Entry key="MessageBox_OkButton">
OK
</Entry>
<Entry key="MessageBox_ProctoringDisclaimer">
Die aktuelle Sitzung wird mithilfe eines Live-Video- und Audiostreams fernüberwacht, der an einen individuell konfigurierten Server gesendet wird. Fragen Sie Ihren Prüfer nach dessen Datenschutzbestimmungen. SEB selbst stellt keine Verbindung zu einem zentralen SEB-Überwachungsserver her. Ihr Prüfungsanbieter entscheidet, welcher Überwachungsdienst/-server verwendet werden soll.
</Entry>
<Entry key="MessageBox_ProctoringDisclaimerTitle">
Starte Fernüberwachung
</Entry>
<Entry key="MessageBox_Quit">
Möchten Sie SEB beenden?
</Entry>
@ -435,6 +441,9 @@
<Entry key="OperationStatus_ValidateVirtualMachinePolicy">
Validiere Richtlinie für virtuelle Maschinen
</Entry>
<Entry key="OperationStatus_WaitDisclaimerConfirmation">
Warte auf die Bestätigung des Hinweises zur Fernüberwachung
</Entry>
<Entry key="OperationStatus_WaitExplorerStartup">
Warte bis Windows Explorer gestartet ist
</Entry>

View file

@ -441,6 +441,9 @@
<Entry key="OperationStatus_ValidateVirtualMachinePolicy">
Validating virtual machine policy
</Entry>
<Entry key="OperationStatus_WaitDisclaimerConfirmation">
Waiting for confirmation of the disclaimer
</Entry>
<Entry key="OperationStatus_WaitExplorerStartup">
Waiting for Windows explorer to start up
</Entry>

View file

@ -252,6 +252,12 @@
<Entry key="MessageBox_OkButton">
OK
</Entry>
<Entry key="MessageBox_ProctoringDisclaimer">
La session en cours sera surveillée à distance à l'aide d'un flux vidéo et audio en direct, qui est envoyé à un serveur configuré individuellement. Demandez à votre examinateur sa politique de confidentialité. SEB lui-même ne se connecte à aucun serveur de surveillance SEB centralisé, votre fournisseur d'examen décide du service / serveur de surveillance à utiliser.
</Entry>
<Entry key="MessageBox_ProctoringDisclaimerTitle">
Démarrage de la surveillance à distance
</Entry>
<Entry key="MessageBox_Quit">
Voulez-vous quitter SEB ?
</Entry>
@ -435,6 +441,9 @@
<Entry key="OperationStatus_ValidateVirtualMachinePolicy">
Validation de la directive sur les machines virtuelles
</Entry>
<Entry key="OperationStatus_WaitDisclaimerConfirmation">
En attente de confirmation de la clause de non-responsabilité
</Entry>
<Entry key="OperationStatus_WaitExplorerStartup">
Attente du démarrage de lexplorateur Windows
</Entry>

View file

@ -252,6 +252,12 @@
<Entry key="MessageBox_OkButton">
OK
</Entry>
<Entry key="MessageBox_ProctoringDisclaimer">
La sessione corrente verrà controllata in remoto utilizzando un flusso video e audio dal vivo, che viene inviato a un server configurato individualmente. Chiedi al tuo esaminatore la sua politica sulla privacy. SEB stesso non si connette a nessun server di proctoring SEB centralizzato, il fornitore dell'esame decide quale servizio / server di proctoring utilizzare.
</Entry>
<Entry key="MessageBox_ProctoringDisclaimerTitle">
Avvio del proctoring remoto
</Entry>
<Entry key="MessageBox_Quit">
Vuoi uscire da SEB?
</Entry>
@ -435,6 +441,9 @@
<Entry key="OperationStatus_ValidateVirtualMachinePolicy">
Convalida dei criteri della macchina virtuale
</Entry>
<Entry key="OperationStatus_WaitDisclaimerConfirmation">
In attesa di conferma del disclaimer
</Entry>
<Entry key="OperationStatus_WaitExplorerStartup">
In attesa dell'avvio di Esplora risorse di Windows
</Entry>

View file

@ -216,6 +216,12 @@
<Entry key="MessageBox_OkButton">
确定
</Entry>
<Entry key="MessageBox_ProctoringDisclaimer">
当前会话将使用实时视频和音频流进行远程管理,并将其发送到单独配置的服务器。 向考官询问他们的隐私政策。 SEB本身不连接到任何集中式SEB代理服务器您的考试提供商决定要使用哪个代理服务/服务器。
</Entry>
<Entry key="MessageBox_ProctoringDisclaimerTitle">
启动远程代理
</Entry>
<Entry key="MessageBox_Quit">
您想要退出防作弊考试专用浏览器吗?
</Entry>
@ -387,6 +393,9 @@
<Entry key="OperationStatus_ValidateVirtualMachinePolicy">
验证虚拟机策略
</Entry>
<Entry key="OperationStatus_WaitDisclaimerConfirmation">
等待确认免责声明
</Entry>
<Entry key="OperationStatus_WaitExplorerStartup">
等待Windows资源管理器启动
</Entry>

View file

@ -306,7 +306,7 @@ namespace SafeExamBrowser.Runtime.UnitTests
messageBox.Verify(m => m.Show(
It.IsAny<string>(),
It.IsAny<string>(),
It.Is<MessageBoxAction>(a => a == MessageBoxAction.Confirm),
It.Is<MessageBoxAction>(a => a == MessageBoxAction.Ok),
It.Is<MessageBoxIcon>(i => i == args.Icon),
It.IsAny<IWindow>()), Times.Once);
clientProxy.VerifyAdd(p => p.ConnectionLost += It.IsAny<CommunicationEventHandler>());
@ -330,7 +330,7 @@ namespace SafeExamBrowser.Runtime.UnitTests
clientProxy.Setup(c => c.ShowMessage(
It.IsAny<string>(),
It.IsAny<string>(),
It.Is<int>(a => a == (int) MessageBoxAction.Confirm),
It.Is<int>(a => a == (int) MessageBoxAction.Ok),
It.IsAny<int>(),
It.IsAny<Guid>()))
.Callback<string, string, int, int, Guid>((m, t, a, i, id) =>
@ -345,7 +345,7 @@ namespace SafeExamBrowser.Runtime.UnitTests
clientProxy.Verify(c => c.ShowMessage(
It.IsAny<string>(),
It.IsAny<string>(),
It.Is<int>(a => a == (int) MessageBoxAction.Confirm),
It.Is<int>(a => a == (int) MessageBoxAction.Ok),
It.Is<int>(i => i == (int) args.Icon),
It.IsAny<Guid>()), Times.Once);
}

View file

@ -46,11 +46,13 @@ namespace SafeExamBrowser.Runtime.Operations
{
var args = new MessageEventArgs
{
Icon = MessageBoxIcon.Question,
Action = MessageBoxAction.OkCancel,
Icon = MessageBoxIcon.Information,
Message = TextKey.MessageBox_ProctoringDisclaimer,
Title = TextKey.MessageBox_ProctoringDisclaimerTitle
};
StatusChanged?.Invoke(TextKey.OperationStatus_WaitDisclaimerConfirmation);
ActionRequired?.Invoke(args);
if (args.Result == MessageBoxResult.Ok)

View file

@ -25,7 +25,7 @@ namespace SafeExamBrowser.Runtime.Operations.Events
public MessageEventArgs()
{
Action = MessageBoxAction.Confirm;
Action = MessageBoxAction.Ok;
MessagePlaceholders = new Dictionary<string, string>();
TitlePlaceholders = new Dictionary<string, string>();
}

View file

@ -468,11 +468,11 @@ namespace SafeExamBrowser.Runtime
if (isStartup || isRunningOnDefaultDesktop)
{
args.Result = messageBox.Show(message, title, MessageBoxAction.Confirm, args.Icon, runtimeWindow);
args.Result = messageBox.Show(message, title, args.Action, args.Icon, runtimeWindow);
}
else
{
args.Result = ShowMessageBoxViaClient(message, title, MessageBoxAction.Confirm, args.Icon);
args.Result = ShowMessageBoxViaClient(message, title, args.Action, args.Icon);
}
}

View file

@ -19,11 +19,11 @@ namespace SafeExamBrowser.UserInterface.Contracts.MessageBox
/// <summary>
/// Shows a message box according to the specified parameters and returns the result chosen by the user.
/// </summary>
MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null);
MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null);
/// <summary>
/// Shows a message box according to the specified parameters and returns the result chosen by the user.
/// </summary>
MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null);
MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null);
}
}

View file

@ -13,8 +13,8 @@ namespace SafeExamBrowser.UserInterface.Contracts.MessageBox
/// </summary>
public enum MessageBoxAction
{
Confirm,
ConfirmAbort,
Ok,
OkCancel,
YesNo
}
}

View file

@ -23,9 +23,9 @@ namespace SafeExamBrowser.UserInterface.Desktop
this.text = text;
}
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
{
var result = System.Windows.MessageBoxResult.None;
var result = default(System.Windows.MessageBoxResult);
if (parent is Window window)
{
@ -39,7 +39,7 @@ namespace SafeExamBrowser.UserInterface.Desktop
return ToResult(result);
}
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
{
return Show(text.Get(message), text.Get(title), action, icon, parent);
}
@ -48,6 +48,8 @@ namespace SafeExamBrowser.UserInterface.Desktop
{
switch (action)
{
case MessageBoxAction.OkCancel:
return MessageBoxButton.OKCancel;
case MessageBoxAction.YesNo:
return MessageBoxButton.YesNo;
default:

View file

@ -24,9 +24,9 @@ namespace SafeExamBrowser.UserInterface.Mobile
this.text = text;
}
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
{
var result = MessageBoxResult.None;
var result = default(MessageBoxResult);
if (parent is Window window)
{
@ -40,7 +40,7 @@ namespace SafeExamBrowser.UserInterface.Mobile
return result;
}
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Ok, MessageBoxIcon icon = MessageBoxIcon.Information, IWindow parent = null)
{
return Show(text.Get(message), text.Get(title), action, icon, parent);
}

View file

@ -34,6 +34,7 @@
<Grid Grid.Row="2" Background="{StaticResource BackgroundBrush}">
<WrapPanel Orientation="Horizontal" Margin="50,25" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button x:Name="OkButton" Cursor="Hand" Padding="20,10" MinWidth="100" />
<Button x:Name="CancelButton" Cursor="Hand" Margin="20,0,0,0" Padding="20,10" MinWidth="100" />
<Button x:Name="YesButton" Cursor="Hand" Margin="0,0,20,0" Padding="20,10" MinWidth="100" />
<Button x:Name="NoButton" Cursor="Hand" Padding="20,10" MinWidth="100" />
</WrapPanel>

View file

@ -53,13 +53,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
{
switch (action)
{
case MessageBoxAction.Confirm:
case MessageBoxAction.Ok:
CancelButton.Visibility = Visibility.Collapsed;
OkButton.Visibility = Visibility.Visible;
OkButton.Focus();
YesButton.Visibility = Visibility.Collapsed;
NoButton.Visibility = Visibility.Collapsed;
break;
case MessageBoxAction.OkCancel:
CancelButton.Visibility = Visibility.Visible;
CancelButton.Focus();
OkButton.Visibility = Visibility.Visible;
YesButton.Visibility = Visibility.Collapsed;
NoButton.Visibility = Visibility.Collapsed;
break;
case MessageBoxAction.YesNo:
CancelButton.Visibility = Visibility.Collapsed;
OkButton.Visibility = Visibility.Collapsed;
YesButton.Visibility = Visibility.Visible;
NoButton.Visibility = Visibility.Visible;
@ -109,6 +118,9 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
{
InitializeBounds();
CancelButton.Content = text.Get(TextKey.MessageBox_CancelButton);
CancelButton.Click += CancelButton_Click;
NoButton.Content = text.Get(TextKey.MessageBox_NoButton);
NoButton.Click += NoButton_Click;
@ -125,8 +137,10 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
{
switch (action)
{
case MessageBoxAction.Confirm:
case MessageBoxAction.Ok:
return DialogResult == true ? MessageBoxResult.Ok : MessageBoxResult.None;
case MessageBoxAction.OkCancel:
return DialogResult == true ? MessageBoxResult.Ok : MessageBoxResult.Cancel;
case MessageBoxAction.YesNo:
return DialogResult == true ? MessageBoxResult.Yes : MessageBoxResult.No;
default:
@ -134,6 +148,12 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
}
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
Close();
}
private void NoButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;