SEBSERV-139 added GUI in Exam-Config

This commit is contained in:
anhefti 2020-08-24 12:52:45 +02:00
parent 2bea1f25c6
commit 9923e06029
3 changed files with 141 additions and 33 deletions

View file

@ -0,0 +1,65 @@
/*
* Copyright (c) 2020 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package ch.ethz.seb.sebserver.gui.service.examconfig.impl.rules;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationAttribute;
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationValue;
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
import ch.ethz.seb.sebserver.gui.service.examconfig.ValueChangeRule;
import ch.ethz.seb.sebserver.gui.service.examconfig.impl.ViewContext;
@Lazy
@Service
@GuiProfile
public class ProcotringViewRules implements ValueChangeRule {
public static final String KEY_ENABLE_AI = "proctoringAIEnable";
public static final String KEY_ENABLE_JITSI = "jitsiMeetEnable";
public static final String JITSI_GROUP_FEATURES = "jitsiMeetFeatureFlagChat";
public static final String JITSI_GROUP_CONTROLS = "jitsiMeetAudioMuted";
public static final String AI_GROUP_FACE_NUMBER = "proctoringDetectFaceCount";
public static final String AI_GROUP_FACE_ANGLE = "proctoringDetectFaceYaw";
@Override
public boolean observesAttribute(final ConfigurationAttribute attribute) {
return KEY_ENABLE_AI.equals(attribute.name) || KEY_ENABLE_JITSI.equals(attribute.name);
}
@Override
public void applyRule(
final ViewContext context,
final ConfigurationAttribute attribute,
final ConfigurationValue value) {
if (KEY_ENABLE_JITSI.equals(attribute.name)) {
if (BooleanUtils.toBoolean(value.value)) {
context.enableGroup(JITSI_GROUP_FEATURES);
context.enableGroup(JITSI_GROUP_CONTROLS);
} else {
context.disableGroup(JITSI_GROUP_FEATURES);
context.disableGroup(JITSI_GROUP_CONTROLS);
}
} else if (KEY_ENABLE_AI.equals(attribute.name)) {
if (BooleanUtils.toBoolean(value.value)) {
context.enableGroup(AI_GROUP_FACE_NUMBER);
context.enableGroup(AI_GROUP_FACE_ANGLE);
} else {
context.disableGroup(AI_GROUP_FACE_NUMBER);
context.disableGroup(AI_GROUP_FACE_ANGLE);
}
}
}
}

View file

@ -41,4 +41,33 @@ INSERT IGNORE INTO configuration_attribute VALUES
;
INSERT INTO orientation (config_attribute_id, template_id, view_id, group_id, x_position, y_position, width, height, title) VALUES
(1102, 0, @proct_view_id, null, 1, 1, 2, 1, 'NONE');
(1129, 0, @proct_view_id, null, 3, 1, 3, 1, 'LEFT_SPAN'),
(1130, 0, @proct_view_id, null, 0, 2, 6, 1, 'NONE'),
(1131, 0, @proct_view_id, null, 0, 3, 6, 1, 'NONE'),
(1132, 0, @proct_view_id, null, 0, 4, 6, 1, 'NONE'),
(1133, 0, @proct_view_id, null, 0, 5, 6, 1, 'NONE'),
(1102, 0, @proct_view_id, null, 6, 1, 6, 1, 'NONE'),
(1103, 0, @proct_view_id, 'jitsi_features', 6, 2, 6, 1, 'NONE'),
(1106, 0, @proct_view_id, 'jitsi_features', 6, 3, 6, 1, 'NONE'),
(1108, 0, @proct_view_id, 'jitsi_features', 6, 4, 6, 1, 'NONE'),
(1104, 0, @proct_view_id, 'jitsi_features', 6, 5, 6, 1, 'NONE'),
(1105, 0, @proct_view_id, 'jitsi_features', 6, 6, 6, 1, 'NONE'),
(1100, 0, @proct_view_id, 'jitsi_controls', 6, 8, 6, 1, 'NONE'),
(1116, 0, @proct_view_id, 'jitsi_controls', 6, 9, 6, 1, 'NONE'),
(1101, 0, @proct_view_id, 'jitsi_controls', 6, 10, 6, 1, 'NONE'),
(1120, 0, @proct_view_id, null, 0, 7, 6, 1, 'NONE'),
(1122, 0, @proct_view_id, 'ai_faces_number', 0, 8, 6, 1, 'NONE'),
(1123, 0, @proct_view_id, 'ai_faces_number', 0, 9, 6, 1, 'NONE'),
(1125, 0, @proct_view_id, 'ai_faces_angle', 0, 11, 6, 1, 'NONE'),
(1124, 0, @proct_view_id, 'ai_faces_angle', 0, 12, 6, 1, 'NONE'),
(1121, 0, @proct_view_id, 'ai_faces_angle', 0, 13, 6, 1, 'NONE')
;

View file

@ -1246,72 +1246,86 @@ sebserver.examconfig.props.label.enableF10=Enable F10
sebserver.examconfig.props.label.enableF11=Enable F11
sebserver.examconfig.props.label.enableF12=Enable F12
sebserver.examconfig.props.group.jitsi_features=Jitsi Meet Features
sebserver.examconfig.props.group.jitsi_features.tooltip=
sebserver.examconfig.props.group.jitsi_controls=Jitsi Meet User Controls
sebserver.examconfig.props.group.jitsi_controls.tooltip=When the proctoring view is disabled (see its display policy on left), users can mute and unmute audio and video manually.<br/>Audio and video streams can be disabled globally with the settings below.
sebserver.examconfig.props.label.jitsiMeetAudioMuted=Audio Initially Muted
sebserver.examconfig.props.label.jitsiMeetAudioMuted.tooltip
sebserver.examconfig.props.label.jitsiMeetAudioMuted.tooltip=
sebserver.examconfig.props.label.jitsiMeetAudioOnly=Audio Only
sebserver.examconfig.props.label.jitsiMeetAudioOnly.tooltip
sebserver.examconfig.props.label.jitsiMeetAudioOnly.tooltip=
sebserver.examconfig.props.label.jitsiMeetEnable=Enable Jitsi Meet
sebserver.examconfig.props.label.jitsiMeetEnable.tooltip
sebserver.examconfig.props.label.jitsiMeetEnable.tooltip=
sebserver.examconfig.props.label.jitsiMeetFeatureFlagChat=Enable Chat
sebserver.examconfig.props.label.jitsiMeetFeatureFlagChat.tooltip
sebserver.examconfig.props.label.jitsiMeetFeatureFlagChat.tooltip=
sebserver.examconfig.props.label.jitsiMeetFeatureFlagCloseCaptions=Enable Close Captions
sebserver.examconfig.props.label.jitsiMeetFeatureFlagCloseCaptions.tooltip
sebserver.examconfig.props.label.jitsiMeetFeatureFlagCloseCaptions.tooltip=
sebserver.examconfig.props.label.jitsiMeetFeatureFlagDisplayMeetingName=Display Meeting Name
sebserver.examconfig.props.label.jitsiMeetFeatureFlagDisplayMeetingName.tooltip
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRaiseHand=Enable Raise Hand
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRaiseHand.tooltip
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRaiseHand.tooltip=
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRecording=Allow Recording
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRecording.tooltip
sebserver.examconfig.props.label.jitsiMeetFeatureFlagRecording.tooltip=
sebserver.examconfig.props.label.jitsiMeetFeatureFlagTileView=Allow Tile View
sebserver.examconfig.props.label.jitsiMeetFeatureFlagTileView.tooltip=Note: Disabling Allow Tile View is not yet functional in this version.
sebserver.examconfig.props.label.jitsiMeetRoom=Room
sebserver.examconfig.props.label.jitsiMeetRoom.tooltip
sebserver.examconfig.props.label.jitsiMeetRoom.tooltip=
sebserver.examconfig.props.label.jitsiMeetServerURL=Server URL
sebserver.examconfig.props.label.jitsiMeetServerURL.tooltip
sebserver.examconfig.props.label.jitsiMeetServerURL.tooltip=
sebserver.examconfig.props.label.jitsiMeetSubject=Subject
sebserver.examconfig.props.label.jitsiMeetSubject.tooltip
sebserver.examconfig.props.label.jitsiMeetSubject.tooltip=
sebserver.examconfig.props.label.jitsiMeetToken=Token
sebserver.examconfig.props.label.jitsiMeetToken.tooltip
sebserver.examconfig.props.label.jitsiMeetToken.tooltip=
sebserver.examconfig.props.label.jitsiMeetUserInfoAvatarURL=Avatar URL
sebserver.examconfig.props.label.jitsiMeetUserInfoAvatarURL.tooltip
sebserver.examconfig.props.label.jitsiMeetUserInfoAvatarURL.tooltip=
sebserver.examconfig.props.label.jitsiMeetUserInfoDisplayName=Display Name
sebserver.examconfig.props.label.jitsiMeetUserInfoDisplayName.tooltip
sebserver.examconfig.props.label.jitsiMeetUserInfoDisplayName.tooltip=
sebserver.examconfig.props.label.jitsiMeetUserInfoEMail=Info Mail
sebserver.examconfig.props.label.jitsiMeetUserInfoEMail.tooltip
sebserver.examconfig.props.label.jitsiMeetUserInfoEMail.tooltip=
sebserver.examconfig.props.label.jitsiMeetVideoMuted=Video Initially Muted
sebserver.examconfig.props.label.jitsiMeetVideoMuted.tooltip
sebserver.examconfig.props.label.jitsiMeetReceiveAudio=Receive Audio
sebserver.examconfig.props.label.jitsiMeetReceiveAudio.tooltip
sebserver.examconfig.props.label.jitsiMeetReceiveVideo=Receive Video
sebserver.examconfig.props.label.jitsiMeetReceiveVideo.tooltip
sebserver.examconfig.props.label.jitsiMeetSendAudio=Send Audio
sebserver.examconfig.props.label.jitsiMeetSendAudio.tooltip
sebserver.examconfig.props.label.jitsiMeetSendVideo=Send Video
sebserver.examconfig.props.label.jitsiMeetSendVideo.tooltip
sebserver.examconfig.props.label.proctoringAIEnable=Enable AI Proctoring
sebserver.examconfig.props.label.proctoringAIEnable.tooltip
sebserver.examconfig.props.label.jitsiMeetVideoMuted.tooltip=
sebserver.examconfig.props.label.jitsiMeetReceiveAudio=Receive Audio
sebserver.examconfig.props.label.jitsiMeetReceiveAudio.tooltip=Global settings for receiving and sending audio/video streams.<br/>Streams can also be enabled/disabled by SEB Server during the exam session.
sebserver.examconfig.props.label.jitsiMeetReceiveVideo=Receive Video
sebserver.examconfig.props.label.jitsiMeetReceiveVideo.tooltip=Global settings for receiving and sending audio/video streams.<br/>Streams can also be enabled/disabled by SEB Server during the exam session.
sebserver.examconfig.props.label.jitsiMeetSendAudio=Send Audio
sebserver.examconfig.props.label.jitsiMeetSendAudio.tooltip=Global settings for receiving and sending audio/video streams.<br/>Streams can also be enabled/disabled by SEB Server during the exam session.
sebserver.examconfig.props.label.jitsiMeetSendVideo=Send Video
sebserver.examconfig.props.label.jitsiMeetSendVideo.tooltip=Global settings for receiving and sending audio/video streams.<br/>Streams can also be enabled/disabled by SEB Server during the exam session.
sebserver.examconfig.props.label.proctoringAIEnable=Enable AI Proctoring
sebserver.examconfig.props.label.proctoringAIEnable.tooltip=AI proctoring features use computer vision algorithms, which are performed on the video frames on-device not in any cloud and not in SEB Server.<br/>If one of the events enabled below is detected, then it is logged in text form and send to SEB Server instance (if connected to one).
sebserver.examconfig.props.group.ai_faces_number=Detect Number of Faces
sebserver.examconfig.props.group.ai_faces_number.tooltip=SEB is using the iOS Vision framework running on device for this detection.<br/>No face recognition is performed, only face and face features detection and tracking (looking for faces, not for faces of particular people).
sebserver.examconfig.props.group.ai_faces_angle=Detect Face Angle
sebserver.examconfig.props.group.ai_faces_angle.tooltip=SEB is using the iOS Vision framework running on device for this detection.<br/>No face recognition is performed, only face and face features detection and tracking (looking for faces, not for faces of particular people).
sebserver.examconfig.props.label.proctoringDetectFaceCount=Number of Faces
sebserver.examconfig.props.label.proctoringDetectFaceCount.tooltip
sebserver.examconfig.props.label.proctoringDetectFaceCount.tooltip=
sebserver.examconfig.props.label.proctoringDetectFaceCountDisplay=Feedback for Candidate
sebserver.examconfig.props.label.proctoringDetectFaceCountDisplay.tooltip
sebserver.examconfig.props.label.proctoringDetectFaceCountDisplay.tooltip=
sebserver.examconfig.props.label.proctoringDetectFacePitch=Face Movement Up & Down (Pitch)
sebserver.examconfig.props.label.proctoringDetectFacePitch.tooltip
sebserver.examconfig.props.label.proctoringDetectFacePitch.tooltip=
sebserver.examconfig.props.label.proctoringDetectFaceYaw=Face Movement Sideways (Yaw)
sebserver.examconfig.props.label.proctoringDetectFaceYaw.tooltip
sebserver.examconfig.props.label.proctoringDetectFaceYaw.tooltip=
sebserver.examconfig.props.label.proctoringDetectFaceAngleDisplay=Feedback for Candidate
sebserver.examconfig.props.label.proctoringDetectFaceAngleDisplay.tooltip
sebserver.examconfig.props.label.proctoringDetectFaceAngleDisplay.tooltip=
sebserver.examconfig.props.label.proctoringDetectTalking=Detect Talking
sebserver.examconfig.props.label.proctoringDetectTalking.tooltip
sebserver.examconfig.props.label.proctoringDetectTalking.tooltip=
sebserver.examconfig.props.label.proctoringDetectTalkingDisplay=Feedback for Candidate
sebserver.examconfig.props.label.proctoringDetectTalkingDisplay.tooltips
sebserver.examconfig.props.label.proctoringDetectTalkingDisplay.tooltips=
sebserver.examconfig.props.label.remoteProctoringViewShow=Proctoring View Display Policy
sebserver.examconfig.props.label.remoteProctoringViewShow.tooltip=
sebserver.examconfig.props.label.remoteProctoringViewShow.0=Never
sebserver.examconfig.props.label.remoteProctoringViewShow.0.tooltip=
sebserver.examconfig.props.label.remoteProctoringViewShow.1=Allow to Show
sebserver.examconfig.props.label.remoteProctoringViewShow.1.tooltip=
sebserver.examconfig.props.label.remoteProctoringViewShow.2=Allow to Hide
sebserver.examconfig.props.label.remoteProctoringViewShow.2.tooltip=
sebserver.examconfig.props.label.remoteProctoringViewShow.3=Always
sebserver.examconfig.props.label.remoteProctoringViewShow.3.tooltip=
sebserver.examconfig.props.label.showProctoringViewButton=Show Proctoring Button
sebserver.examconfig.props.label.showProctoringViewButton