3207 Dubblett - POST finalseminar

This commit is contained in:
Wayne Westmoreland 2024-04-08 15:44:51 +02:00
parent 3a530879a7
commit 0474b18911
3 changed files with 47 additions and 1 deletions
core/src/main/java/se/su/dsv/scipro/finalseminar
view/src/main/java/se/su/dsv/scipro

@ -71,6 +71,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
}
@Override
@Transactional
public Either<SchedulingError, FinalSeminar> schedule(Project project, LocalDateTime when, FinalSeminarDetails details) {
if (project.isFinalSeminarRuleExempted()) {
return createSeminar(project, when, details);
@ -86,7 +87,14 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
return Either.left(new RoughDraftNotApproved());
}
return createSeminar(project, when, details);
final FinalSeminar current = findByProject(project);
if (current == null) {
return createSeminar(project, when, details);
}
else {
// Assume double click sends the same data so no need to change anything
return Either.right(current);
}
}
private MovingError validateSchedulingRules(LocalDate date) {

@ -5,6 +5,7 @@ import org.apache.wicket.*;
import org.apache.wicket.authorization.strategies.CompoundAuthorizationStrategy;
import org.apache.wicket.csp.CSPDirective;
import org.apache.wicket.csp.CSPDirectiveSrcValue;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;
import org.apache.wicket.resource.JQueryResourceReference;
@ -24,6 +25,7 @@ import se.su.dsv.scipro.checklists.AdminChecklistPage;
import se.su.dsv.scipro.checklists.AdminEditChecklistTemplatePage;
import se.su.dsv.scipro.checklists.ProjectViewChecklistPage;
import se.su.dsv.scipro.checklists.SupervisorViewChecklistPage;
import se.su.dsv.scipro.components.DisableSubmitButtonsOnSubmit;
import se.su.dsv.scipro.examiner.pages.ExaminerStartPage;
import se.su.dsv.scipro.finalseminar.*;
import se.su.dsv.scipro.finalthesis.SupervisorFinalThesisListingPage;
@ -157,6 +159,12 @@ public class SciProApplication extends LifecycleManagedWebApplication {
.add(CSPDirective.IMG_SRC, "data:");
WicketWebjars.install(this);
getComponentInstantiationListeners().add(component -> {
if (component instanceof Form) {
component.add(new DisableSubmitButtonsOnSubmit());
}
});
}
private void mountForumPage() {

@ -0,0 +1,30 @@
package se.su.dsv.scipro.components;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnEventHeaderItem;
import org.apache.wicket.markup.html.form.Form;
/**
* Disables all elements with {@code [type=submit]}
*/
public class DisableSubmitButtonsOnSubmit extends Behavior {
@Override
public void bind(Component component) {
super.bind(component);
if (!(component instanceof Form<?>)) {
throw new RuntimeException("Can only be used on Form components");
}
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
final String javaScript = "const submitButtons = event.target.querySelectorAll(\"[type=submit]\");\n" +
"for (const button of submitButtons) {\n" +
" button.disabled = true;\n" +
"}\n";
response.render(OnEventHeaderItem.forComponent(component, "submit", javaScript));
}
}