dev fixed with none edit right on different institution

This commit is contained in:
anhefti 2020-03-31 13:23:13 +02:00
parent a5f9ebc161
commit 0d4a0fe1b8
10 changed files with 41 additions and 12 deletions

View file

@ -6,10 +6,14 @@ Exam Configuration
Overview
--------
An exam configuration defines all the SEB settings for an exam and can be applied to an exam. A SEB client that is connecting to SEB Server
An exam configuration defines all the SEB settings for an exam. A SEB client that is connecting to SEB Server
and an exam defined by the SEB Server is downloading this exam configuration from SEB Server and reconfigure itself before accessing the
exam on the learning management system (LMS) and present it to the user.
.. note::
For more information and detailed description of the SEB exam settings, see `SEB Configuration <https://www.safeexambrowser.org/windows/win_usermanual_en.html#configuration>`_.
Currently not all settings are available and some has different uses. For details about differences see :ref:`setting-dif-label`
An exam administrator is able to create, modify and maintain exam configurations while the SEB Server administrator and the institutional administrator
role have only read access either for all exam configurations or for the exam configurations of the institution.
A exam supporter role is able to see and modify only the exam configurations to which the user-account is assigned as supporter.
@ -76,6 +80,17 @@ Use Cases
**Create new Exam Configuration**
For the upcoming semester you have to create several new exam configurations for the different kind of exams your institution is going to provide
during the semester.
- Sign into SEB Server with your exam administrator role account
- Navigate to the "Exam Configuration" menu within the SEB Configuration section on the left hand side.
- You see a list of all available exam configuration.
- Use the "Add Exam Configuration" action on the action pane on the right hand side to create a new exam configuration
- The creation form at least needs a unique name for the exam configuration. You can also add a description or hint to recognize and find this configuration more easily later on.
- In the "Status" field you are able to choose if the configuration is still under construction and cannot be added to exams yet, or if it is ready to use.
- Save the form with the "Save Exam Configuration" action at the right action pane to create the configuration.
**Edit SEB Settings and prepare for Use**
**Export an Exam Configuration**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View file

@ -38,6 +38,7 @@ of all institution within a SEB Server instance. The filter above the list can b
- "Institution" filter to select a certain institution and show only the user-accounts that belongs to this institution.
- "First Name" filter to search for user-accounts with the given occurrence of text in the First Name.
- "Surname" filter to search for user-accounts with the given occurrence of text in the Surname.
- "User Name" filter to search for user-accounts with the given occurrence of text in the Username.
- "Mail" filter to find an user-account by e-mail address
- "Status" filter to select the either and see either only active, only inactive or all user-accounts

View file

@ -178,10 +178,13 @@ public class LmsSetupList implements TemplateComposer {
.publishIf(() -> userGrant.im() && table.hasAnyContent(), false)
.newAction(ActionDefinition.LMS_SETUP_TOGGLE_ACTIVITY)
.withExec(this.pageService.activationToggleActionFunction(
table,
EMPTY_SELECTION_TEXT_KEY,
action -> LmsSetupForm.testLmsSetup(action, null, restService)))
.withSelect(
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
this.pageService.activationToggleActionFunction(
table,
EMPTY_SELECTION_TEXT_KEY,
action -> LmsSetupForm.testLmsSetup(action, null, restService)),
EMPTY_SELECTION_TEXT_KEY)
.withConfirm(this.pageService.confirmDeactivation(table))
.publishIf(() -> userGrant.im() && table.hasAnyContent(), false);

View file

@ -181,12 +181,13 @@ public class SebClientConfigList implements TemplateComposer {
.publishIf(() -> clientConfigGrant.im() && table.hasAnyContent(), false)
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_TOGGLE_ACTIVITY)
.withExec(this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY))
.withSelect(
table.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY),
EMPTY_SELECTION_TEXT_KEY)
.withConfirm(this.pageService.confirmDeactivation(table))
.publishIf(() -> clientConfigGrant.im() && table.hasAnyContent(), false);
}
private static Function<SebClientConfig, String> clientConfigInstitutionNameFunction(

View file

@ -219,7 +219,7 @@ public class SebExamConfigForm implements TemplateComposer {
.publishIf(() -> modifyGrant && isReadonly)
.newAction( (!modifyGrant || examConfig.status == ConfigurationStatus.IN_USE)
.newAction((!modifyGrant || examConfig.status == ConfigurationStatus.IN_USE)
? ActionDefinition.SEB_EXAM_CONFIG_VIEW
: ActionDefinition.SEB_EXAM_CONFIG_MODIFY)
.withEntityKey(entityKey)

View file

@ -170,7 +170,10 @@ public class SebExamConfigList implements TemplateComposer {
.publishIf(() -> examConfigGrant.im() && configTable.hasAnyContent(), false)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_IMPORT_TO_NEW_CONFIG)
.withExec(SebExamConfigImportPopup.importFunction(this.pageService, true))
.withSelect(
configTable.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
SebExamConfigImportPopup.importFunction(this.pageService, true),
EMPTY_SELECTION_TEXT_KEY)
.noEventPropagation()
.publishIf(examConfigGrant::im);
}

View file

@ -172,7 +172,7 @@ public interface PageService {
return () -> confirmDeactivation(table
.getSelectedROWData()
.stream()
.filter(Activatable::isActive) // NOTE: Activatable::isActive leads to an error here!?
.filter(entity -> entity.isActive()) // NOTE: Activatable::isActive leads to an error here!?
.collect(Collectors.toSet()))
.get();
}

View file

@ -26,6 +26,12 @@ public class ActionActivationEvent implements PageEvent {
this.decoration = null;
}
public ActionActivationEvent(final boolean activation, final Collection<ActionDefinition> actions) {
this.activation = activation;
this.actions = Utils.immutableCollectionOf(actions);
this.decoration = null;
}
public ActionActivationEvent(
final boolean activation,
final Tuple<ActionDefinition> decoration,

View file

@ -146,7 +146,7 @@ public abstract class ActivatableEntityController<T extends GrantEntity, M exten
(active) ? BulkActionType.ACTIVATE : BulkActionType.DEACTIVATE,
entityType,
new EntityName(modelId, entityType, entity.getName())));
this.notifySaved(entity);
this.notifySaved(this.entityDAO.byModelId(entity.getModelId()).getOrThrow());
return createReport;
});
}