SEBSERV-408
This commit is contained in:
parent
d100a50e1e
commit
4ceaf50385
5 changed files with 57 additions and 25 deletions
|
@ -60,6 +60,7 @@ public class LoginPage implements TemplateComposer {
|
|||
final PageService pageService,
|
||||
final DefaultRegisterPage defaultRegisterPage,
|
||||
@Value("${sebserver.gui.registering:false}") final boolean guiRegEnabled,
|
||||
@Value("${sebserver.gui.self-registering:false}") final boolean guiRegEnabledOld,
|
||||
@Value("${sebserver.feature.admin.user.account.self.registering:true}") final boolean webRegEnabled) {
|
||||
|
||||
this.pageService = pageService;
|
||||
|
@ -67,7 +68,7 @@ public class LoginPage implements TemplateComposer {
|
|||
this.widgetFactory = pageService.getWidgetFactory();
|
||||
this.i18nSupport = pageService.getI18nSupport();
|
||||
this.defaultRegisterPage = defaultRegisterPage;
|
||||
this.registeringEnabled = webRegEnabled && guiRegEnabled;
|
||||
this.registeringEnabled = webRegEnabled && (guiRegEnabled || guiRegEnabledOld);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -137,6 +137,7 @@ public class ExamFormConfigs implements TemplateComposer {
|
|||
|
||||
.withSelectionListener(this.pageService.getSelectionPublisher(
|
||||
pageContext,
|
||||
ActionDefinition.EXAM_CONFIGURATION_MODIFY_FROM_LIST,
|
||||
ActionDefinition.EXAM_CONFIGURATION_EXAM_CONFIG_VIEW_PROP,
|
||||
ActionDefinition.EXAM_CONFIGURATION_DELETE_FROM_LIST,
|
||||
ActionDefinition.EXAM_CONFIGURATION_EXPORT,
|
||||
|
@ -144,7 +145,7 @@ public class ExamFormConfigs implements TemplateComposer {
|
|||
|
||||
.compose(pageContext.copyOf(content));
|
||||
|
||||
final EntityKey configMapKey = (configurationTable.hasAnyContent())
|
||||
final EntityKey configKey = (configurationTable.hasAnyContent())
|
||||
? new EntityKey(
|
||||
configurationTable.getFirstRowData().configurationNodeId,
|
||||
EntityType.CONFIGURATION_NODE)
|
||||
|
@ -162,9 +163,18 @@ public class ExamFormConfigs implements TemplateComposer {
|
|||
.noEventPropagation()
|
||||
.publishIf(() -> examConfigEnabled && editable && !configurationTable.hasAnyContent())
|
||||
|
||||
.newAction(ActionDefinition.EXAM_CONFIGURATION_MODIFY_FROM_LIST)
|
||||
.withParentEntityKey(entityKey)
|
||||
.withSelect(
|
||||
getConfigMappingSelection(configurationTable),
|
||||
this.examToConfigBindingForm.bindFunction(),
|
||||
CONFIG_EMPTY_SELECTION_TEXT_KEY)
|
||||
.noEventPropagation()
|
||||
.publishIf(() -> examConfigEnabled && editable && configurationTable.hasAnyContent(), false)
|
||||
|
||||
.newAction(ActionDefinition.EXAM_CONFIGURATION_EXAM_CONFIG_VIEW_PROP)
|
||||
.withParentEntityKey(entityKey)
|
||||
.withEntityKey(configMapKey)
|
||||
.withEntityKey(configKey)
|
||||
.publishIf(() -> examConfigEnabled && readGrant && configurationTable.hasAnyContent(), false)
|
||||
|
||||
.newAction(ActionDefinition.EXAM_CONFIGURATION_DELETE_FROM_LIST)
|
||||
|
@ -179,7 +189,7 @@ public class ExamFormConfigs implements TemplateComposer {
|
|||
}
|
||||
return null;
|
||||
})
|
||||
.publishIf(() -> examConfigEnabled && editable && configurationTable.hasAnyContent() && editable, false)
|
||||
.publishIf(() -> examConfigEnabled && editable && configurationTable.hasAnyContent(), false)
|
||||
|
||||
.newAction(ActionDefinition.EXAM_CONFIGURATION_GET_CONFIG_KEY)
|
||||
.withSelect(
|
||||
|
|
|
@ -82,7 +82,7 @@ public class ExamToConfigBindingForm {
|
|||
return action -> {
|
||||
|
||||
final PageContext pageContext = action.pageContext();
|
||||
final EntityKey entityKey = pageContext.getEntityKey();
|
||||
final EntityKey entityKey = action.getSingleSelection();
|
||||
final boolean isNew = entityKey == null;
|
||||
|
||||
if (isNew) {
|
||||
|
@ -103,11 +103,12 @@ public class ExamToConfigBindingForm {
|
|||
|
||||
final BindFormContext bindFormContext = new BindFormContext(
|
||||
this.pageService,
|
||||
action.pageContext());
|
||||
action.pageContext()
|
||||
.withEntityKey(entityKey));
|
||||
|
||||
final Predicate<FormHandle<ExamConfigurationMap>> doBind = formHandle -> doCreate(
|
||||
this.pageService,
|
||||
pageContext,
|
||||
bindFormContext.pageContext,
|
||||
formHandle);
|
||||
|
||||
// the default page layout
|
||||
|
@ -181,14 +182,13 @@ public class ExamToConfigBindingForm {
|
|||
final EntityKey parentEntityKey = this.pageContext.getParentEntityKey();
|
||||
final boolean isNew = entityKey == null;
|
||||
|
||||
final Exam exam = (isNew)
|
||||
? restService
|
||||
.getBuilder(GetExam.class)
|
||||
.withURIVariable(API.PARAM_MODEL_ID, parentEntityKey.modelId)
|
||||
.call()
|
||||
.onError(error -> this.pageContext.notifyLoadError(EntityType.EXAM, error))
|
||||
.getOrThrow()
|
||||
: null;
|
||||
final Exam exam = restService
|
||||
.getBuilder(GetExam.class)
|
||||
.withURIVariable(API.PARAM_MODEL_ID, parentEntityKey.modelId)
|
||||
.call()
|
||||
.onError(error -> this.pageContext.notifyLoadError(EntityType.EXAM, error))
|
||||
.getOrThrow();
|
||||
|
||||
|
||||
// get data or create new. Handle error if happen
|
||||
final ExamConfigurationMap examConfigurationMap = (isNew)
|
||||
|
@ -217,8 +217,13 @@ public class ExamToConfigBindingForm {
|
|||
.putStaticValue(
|
||||
Domain.EXAM_CONFIGURATION_MAP.ATTR_EXAM_ID,
|
||||
String.valueOf(examConfigurationMap.examId))
|
||||
.putStaticValueIf(
|
||||
() -> !isNew,
|
||||
Domain.EXAM_CONFIGURATION_MAP.ATTR_CONFIGURATION_NODE_ID,
|
||||
String.valueOf(examConfigurationMap.configurationNodeId))
|
||||
|
||||
.addField(FormBuilder.singleSelection(
|
||||
.addFieldIf( () -> isNew,
|
||||
() -> FormBuilder.singleSelection(
|
||||
Domain.EXAM_CONFIGURATION_MAP.ATTR_CONFIGURATION_NODE_ID,
|
||||
CONFIG_MAPPING_NAME_TEXT_KEY,
|
||||
String.valueOf(examConfigurationMap.configurationNodeId),
|
||||
|
@ -226,6 +231,13 @@ public class ExamToConfigBindingForm {
|
|||
.withSelectionListener(form -> updateFormValuesFromConfigSelection(form, resourceService))
|
||||
.mandatory())
|
||||
|
||||
.addFieldIf( () -> !isNew,
|
||||
() -> FormBuilder.text(
|
||||
Domain.EXAM_CONFIGURATION_MAP.ATTR_CONFIGURATION_NODE_ID,
|
||||
CONFIG_MAPPING_NAME_TEXT_KEY,
|
||||
examConfigurationMap.configName)
|
||||
.readonly(true))
|
||||
|
||||
.addField(FormBuilder.text(
|
||||
Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION,
|
||||
FORM_DESCRIPTION_TEXT_KEY,
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
package ch.ethz.seb.sebserver.webservice.servicelayer.dao.impl;
|
||||
|
||||
import static ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.ExamConfigurationMapRecordDynamicSqlSupport.*;
|
||||
import static org.mybatis.dynamic.sql.SqlBuilder.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -23,6 +24,7 @@ import java.util.stream.Collectors;
|
|||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mybatis.dynamic.sql.SqlBuilder;
|
||||
import org.mybatis.dynamic.sql.update.UpdateDSL;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -260,15 +262,17 @@ public class ExamConfigurationMapDAOImpl implements ExamConfigurationMapDAO {
|
|||
public Result<ExamConfigurationMap> save(final ExamConfigurationMap data) {
|
||||
return Result.tryCatch(() -> {
|
||||
|
||||
final ExamConfigurationMapRecord newRecord = new ExamConfigurationMapRecord(
|
||||
data.id,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
getEncryptionPassword(data),
|
||||
data.clientGroupId);
|
||||
final String p = (StringUtils.isNotBlank(data.encryptSecret))
|
||||
? getEncryptionPassword(data)
|
||||
: null;
|
||||
|
||||
UpdateDSL.updateWithMapper(examConfigurationMapRecordMapper::update, examConfigurationMapRecord)
|
||||
.set(encryptSecret).equalTo(p )
|
||||
.set(clientGroupId).equalToWhenPresent(data.clientGroupId)
|
||||
.where(id, isEqualTo(data.id))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
this.examConfigurationMapRecordMapper.updateByPrimaryKeySelective(newRecord);
|
||||
return this.examConfigurationMapRecordMapper.selectByPrimaryKey(data.id);
|
||||
})
|
||||
.flatMap(this::toDomainModel)
|
||||
|
|
|
@ -133,6 +133,12 @@ public class ExamConfigurationMappingController extends EntityController<ExamCon
|
|||
.map(this::checkNoActiveClientConnections);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Result<ExamConfigurationMap> validForSave(final ExamConfigurationMap entity) {
|
||||
return super.validForSave(entity)
|
||||
.map(this::checkPasswordMatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
@RequestMapping(
|
||||
method = RequestMethod.POST,
|
||||
|
@ -154,7 +160,6 @@ public class ExamConfigurationMappingController extends EntityController<ExamCon
|
|||
final ExamConfigurationMap requestModel = this.createNew(postMap);
|
||||
return this.checkCreateAccess(requestModel)
|
||||
.flatMap(this::validForCreate)
|
||||
.map(this::checkPasswordMatch)
|
||||
.flatMap(entity -> this.examConfigUpdateService.processExamConfigurationMappingChange(
|
||||
entity,
|
||||
this.entityDAO::createNew))
|
||||
|
|
Loading…
Reference in a new issue