SEBSERV-139 added GUI in Exam-Config
This commit is contained in:
parent
2bea1f25c6
commit
9923e06029
3 changed files with 141 additions and 33 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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')
|
||||
;
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue