Skip to content
Snippets Groups Projects
Commit f48e6926 authored by srosse's avatar srosse
Browse files

OO-2329: add validation and confirmation to the evaluation form

parent 56635352
No related branches found
No related tags found
No related merge requests found
Showing
with 325 additions and 63 deletions
...@@ -56,6 +56,10 @@ public interface SingleSelection extends SelectionElement { ...@@ -56,6 +56,10 @@ public interface SingleSelection extends SelectionElement {
* @param width * @param width
*/ */
public void setWidthInPercent(int width); public void setWidthInPercent(int width);
public boolean isAllowNoSelection();
public void setAllowNoSelection(boolean allowNoSelection);
/** /**
......
...@@ -49,6 +49,7 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect ...@@ -49,6 +49,7 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect
private String original = null; private String original = null;
private boolean originalSelect = false; private boolean originalSelect = false;
private int selectedIndex = -1; private int selectedIndex = -1;
private boolean allowNoSelection = false;
private final SelectboxComponent component; private final SelectboxComponent component;
...@@ -155,6 +156,16 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect ...@@ -155,6 +156,16 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect
public String getValue(int which) { public String getValue(int which) {
return values[which]; return values[which];
} }
@Override
public boolean isAllowNoSelection() {
return allowNoSelection;
}
@Override
public void setAllowNoSelection(boolean allowNoSelection) {
this.allowNoSelection = allowNoSelection;
}
/** /**
* @see org.olat.core.gui.components.form.flexible.elements.SelectionContainer#isSelected(int) * @see org.olat.core.gui.components.form.flexible.elements.SelectionContainer#isSelected(int)
...@@ -227,7 +238,7 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect ...@@ -227,7 +238,7 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect
@Override @Override
public void validate(List<ValidationStatus> validationResults) { public void validate(List<ValidationStatus> validationResults) {
if (isVisible() && !isOneSelected()) { if (!allowNoSelection && isVisible() && !isOneSelected()) {
validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR)); validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR));
return; return;
} }
......
...@@ -50,6 +50,7 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection ...@@ -50,6 +50,7 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection
private String original = null; private String original = null;
private boolean originalSelect = false; private boolean originalSelect = false;
private int selectedIndex = -1; private int selectedIndex = -1;
private boolean allowNoSelection = false;
private final Layout layout; private final Layout layout;
private final SingleSelectionComponent component; private final SingleSelectionComponent component;
...@@ -163,6 +164,16 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection ...@@ -163,6 +164,16 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection
component.setWidthInPercent(width); component.setWidthInPercent(width);
} }
@Override
public boolean isAllowNoSelection() {
return allowNoSelection;
}
@Override
public void setAllowNoSelection(boolean allowNoSelection) {
this.allowNoSelection = allowNoSelection;
}
/** /**
* @see org.olat.core.gui.components.form.flexible.elements.SelectionContainer#isSelected(int) * @see org.olat.core.gui.components.form.flexible.elements.SelectionContainer#isSelected(int)
*/ */
...@@ -230,7 +241,7 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection ...@@ -230,7 +241,7 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection
@Override @Override
public void validate(List<ValidationStatus> validationResults) { public void validate(List<ValidationStatus> validationResults) {
if (isVisible() && !isOneSelected()) { if (!allowNoSelection && isVisible() && !isOneSelected()) {
validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR)); validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR));
return; return;
} }
......
...@@ -31,9 +31,11 @@ import org.olat.core.util.CodeHelper; ...@@ -31,9 +31,11 @@ import org.olat.core.util.CodeHelper;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.modules.forms.model.xml.HTMLRaw; import org.olat.modules.forms.model.xml.HTMLRaw;
import org.olat.modules.forms.ui.HTMLRawEditorController; import org.olat.modules.forms.ui.HTMLRawEditorController;
import org.olat.modules.portfolio.ui.editor.PageRunComponent;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementEditorController; import org.olat.modules.portfolio.ui.editor.PageElementEditorController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
/** /**
...@@ -55,12 +57,13 @@ public class HTMLRawHandler implements PageElementHandler, SimpleAddPageElementH ...@@ -55,12 +57,13 @@ public class HTMLRawHandler implements PageElementHandler, SimpleAddPageElementH
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
String content = ""; String content = "";
if(element instanceof HTMLRaw) { if(element instanceof HTMLRaw) {
content = ((HTMLRaw)element).getContent(); content = ((HTMLRaw)element).getContent();
} }
return TextFactory.createTextComponentFromString("htmlraw_" + CodeHelper.getRAMUniqueID(), content, null, false, null); Component cmp = TextFactory.createTextComponentFromString("htmlraw_" + CodeHelper.getRAMUniqueID(), content, null, false, null);
return new PageRunComponent(cmp);
} }
@Override @Override
......
...@@ -23,7 +23,6 @@ import java.util.Locale; ...@@ -23,7 +23,6 @@ import java.util.Locale;
import java.util.UUID; import java.util.UUID;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.modules.forms.model.xml.Rubric; import org.olat.modules.forms.model.xml.Rubric;
...@@ -31,8 +30,10 @@ import org.olat.modules.forms.model.xml.Rubric.SliderType; ...@@ -31,8 +30,10 @@ import org.olat.modules.forms.model.xml.Rubric.SliderType;
import org.olat.modules.forms.model.xml.Slider; import org.olat.modules.forms.model.xml.Slider;
import org.olat.modules.forms.ui.RubricController; import org.olat.modules.forms.ui.RubricController;
import org.olat.modules.forms.ui.RubricEditorController; import org.olat.modules.forms.ui.RubricEditorController;
import org.olat.modules.portfolio.ui.editor.PageRunControllerElement;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
/** /**
...@@ -60,9 +61,10 @@ public class RubricHandler implements PageElementHandler, SimpleAddPageElementHa ...@@ -60,9 +61,10 @@ public class RubricHandler implements PageElementHandler, SimpleAddPageElementHa
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Rubric) { if(element instanceof Rubric) {
return new RubricController(ureq, wControl, (Rubric)element).getInitialComponent(); Controller ctrl = new RubricController(ureq, wControl, (Rubric)element);
return new PageRunControllerElement(ctrl);
} }
return null; return null;
} }
......
...@@ -29,9 +29,11 @@ import org.olat.core.gui.components.form.flexible.impl.elements.SpacerElementCom ...@@ -29,9 +29,11 @@ import org.olat.core.gui.components.form.flexible.impl.elements.SpacerElementCom
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.modules.forms.model.xml.Spacer; import org.olat.modules.forms.model.xml.Spacer;
import org.olat.modules.forms.ui.SpacerEditorController; import org.olat.modules.forms.ui.SpacerEditorController;
import org.olat.modules.portfolio.ui.editor.PageRunComponent;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementEditorController; import org.olat.modules.portfolio.ui.editor.PageElementEditorController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
/** /**
...@@ -55,9 +57,10 @@ public class SpacerHandler implements PageElementHandler, SimpleAddPageElementHa ...@@ -55,9 +57,10 @@ public class SpacerHandler implements PageElementHandler, SimpleAddPageElementHa
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Spacer) { if(element instanceof Spacer) {
return new SpacerElementComponent("spacer_" + idGenerator.incrementAndGet()); Component cmp = new SpacerElementComponent("spacer_" + idGenerator.incrementAndGet());
return new PageRunComponent(cmp);
} }
return null; return null;
} }
......
...@@ -23,14 +23,16 @@ import java.util.Locale; ...@@ -23,14 +23,16 @@ import java.util.Locale;
import java.util.UUID; import java.util.UUID;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.modules.forms.model.xml.TextInput; import org.olat.modules.forms.model.xml.TextInput;
import org.olat.modules.forms.ui.TextInputController; import org.olat.modules.forms.ui.TextInputController;
import org.olat.modules.forms.ui.TextInputEditorController; import org.olat.modules.forms.ui.TextInputEditorController;
import org.olat.modules.portfolio.ui.editor.PageRunControllerElement;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementEditorController; import org.olat.modules.portfolio.ui.editor.PageElementEditorController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
/** /**
...@@ -52,9 +54,10 @@ public class TextInputHandler implements PageElementHandler, SimpleAddPageElemen ...@@ -52,9 +54,10 @@ public class TextInputHandler implements PageElementHandler, SimpleAddPageElemen
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof TextInput) { if(element instanceof TextInput) {
return new TextInputController(ureq, wControl, (TextInput)element).getInitialComponent(); Controller ctrl = new TextInputController(ureq, wControl, (TextInput)element);
return new PageRunControllerElement(ctrl);
} }
return null; return null;
} }
......
...@@ -31,9 +31,11 @@ import org.olat.core.gui.translator.Translator; ...@@ -31,9 +31,11 @@ import org.olat.core.gui.translator.Translator;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.modules.forms.model.xml.Title; import org.olat.modules.forms.model.xml.Title;
import org.olat.modules.forms.ui.TitleEditorController; import org.olat.modules.forms.ui.TitleEditorController;
import org.olat.modules.portfolio.ui.editor.PageRunComponent;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementEditorController; import org.olat.modules.portfolio.ui.editor.PageElementEditorController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
/** /**
...@@ -57,12 +59,13 @@ public class TitleHandler implements PageElementHandler, SimpleAddPageElementHan ...@@ -57,12 +59,13 @@ public class TitleHandler implements PageElementHandler, SimpleAddPageElementHan
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
String content = ""; String content = "";
if(element instanceof Title) { if(element instanceof Title) {
content = ((Title)element).getContent(); content = ((Title)element).getContent();
} }
return TextFactory.createTextComponentFromString("title_" + idGenerator.incrementAndGet(), content, null, false, null); Component cmp = TextFactory.createTextComponentFromString("title_" + idGenerator.incrementAndGet(), content, null, false, null);
return new PageRunComponent(cmp);
} }
@Override @Override
......
...@@ -43,6 +43,8 @@ import org.olat.core.gui.components.link.Link; ...@@ -43,6 +43,8 @@ import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.core.util.xml.XStreamHelper; import org.olat.core.util.xml.XStreamHelper;
...@@ -63,6 +65,9 @@ import org.olat.modules.forms.ui.model.EvaluationFormElementWrapper; ...@@ -63,6 +65,9 @@ import org.olat.modules.forms.ui.model.EvaluationFormElementWrapper;
import org.olat.modules.forms.ui.model.SliderWrapper; import org.olat.modules.forms.ui.model.SliderWrapper;
import org.olat.modules.forms.ui.model.TextInputWrapper; import org.olat.modules.forms.ui.model.TextInputWrapper;
import org.olat.modules.portfolio.PageBody; import org.olat.modules.portfolio.PageBody;
import org.olat.modules.portfolio.ui.editor.ValidatingController;
import org.olat.modules.portfolio.ui.editor.ValidationMessage;
import org.olat.modules.portfolio.ui.editor.ValidationMessage.Level;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -72,7 +77,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -72,7 +77,7 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
* *
*/ */
public class EvaluationFormController extends FormBasicController { public class EvaluationFormController extends FormBasicController implements ValidatingController {
private int count = 0; private int count = 0;
private final Form form; private final Form form;
...@@ -83,10 +88,13 @@ public class EvaluationFormController extends FormBasicController { ...@@ -83,10 +88,13 @@ public class EvaluationFormController extends FormBasicController {
private final RepositoryEntry formEntry; private final RepositoryEntry formEntry;
private EvaluationFormSession session; private EvaluationFormSession session;
private List<EvaluationFormElementWrapper> elementWrapperList = new ArrayList<>();
private final Map<String, EvaluationFormResponse> identifierToResponses = new HashMap<>(); private final Map<String, EvaluationFormResponse> identifierToResponses = new HashMap<>();
private FormSubmit saveAsDoneButton; private FormSubmit saveAsDoneButton;
private DialogBoxController confirmDoneCtrl;
@Autowired @Autowired
private DB dbInstance; private DB dbInstance;
@Autowired @Autowired
...@@ -155,7 +163,7 @@ public class EvaluationFormController extends FormBasicController { ...@@ -155,7 +163,7 @@ public class EvaluationFormController extends FormBasicController {
elementWrappers.add(wrapper); elementWrappers.add(wrapper);
} }
} }
elementWrapperList = elementWrappers;
flc.contextPut("elements", elementWrappers); flc.contextPut("elements", elementWrappers);
} }
...@@ -303,6 +311,7 @@ public class EvaluationFormController extends FormBasicController { ...@@ -303,6 +311,7 @@ public class EvaluationFormController extends FormBasicController {
radioEl.setDomReplacementWrapperRequired(false); radioEl.setDomReplacementWrapperRequired(false);
radioEl.addActionListener(FormEvent.ONCHANGE); radioEl.addActionListener(FormEvent.ONCHANGE);
radioEl.setEnabled(!readOnly); radioEl.setEnabled(!readOnly);
radioEl.setAllowNoSelection(true);
int widthInPercent = EvaluationFormElementWrapper.getWidthInPercent(element); int widthInPercent = EvaluationFormElementWrapper.getWidthInPercent(element);
radioEl.setWidthInPercent(widthInPercent); radioEl.setWidthInPercent(widthInPercent);
if(response != null && response.getNumericalResponse() != null) { if(response != null && response.getNumericalResponse() != null) {
...@@ -326,15 +335,71 @@ public class EvaluationFormController extends FormBasicController { ...@@ -326,15 +335,71 @@ public class EvaluationFormController extends FormBasicController {
//super.propagateDirtinessToContainer(fiSrc, fe); //super.propagateDirtinessToContainer(fiSrc, fe);
} }
@Override
public boolean validate(UserRequest ureq, List<ValidationMessage> messages) {
boolean allFiled = true;
for(EvaluationFormElementWrapper elementWrapper:elementWrapperList) {
if(elementWrapper.isTextInput()) {
TextInputWrapper wrapper = elementWrapper.getTextInputWrapper();
if(wrapper != null && !hasResponse(wrapper.getId())) {
allFiled &= false;
}
} else if(elementWrapper.getSliders() != null && elementWrapper.getSliders().size() > 0) {
for(SliderWrapper slider:elementWrapper.getSliders()) {
if(slider != null && !hasResponse(slider.getId())) {
allFiled &= false;
}
}
}
}
if(!allFiled) {
String msg = translate("warning.form.not.completed");
messages.add(new ValidationMessage(Level.warning, msg));
}
return validateFormLogic(ureq);
}
private boolean hasResponse(String id) {
if(id == null) return true;//not a field
if(!identifierToResponses.containsKey(id)) {
return false;
}
EvaluationFormResponse response = identifierToResponses.get(id);
if(response == null ||
(response.getNumericalResponse() == null && !StringHelper.containsNonWhitespace(response.getStringuifiedResponse()))) {
return false;
}
return true;
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
return allOk & super.validateFormLogic(ureq);
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(confirmDoneCtrl == source) {
if(DialogBoxUIFactory.isYesEvent(event)) {
saveAsDone(ureq);
}
}
super.event(ureq, source, event);
}
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
doSaveAsDone(ureq); doConfirmDone(ureq);
} }
@Override @Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if(saveAsDoneButton == source) { if(saveAsDoneButton == source) {
doSaveAsDone(ureq); doConfirmDone(ureq);
} else if(source instanceof SingleSelection) { } else if(source instanceof SingleSelection) {
SingleSelection radioEl = (SingleSelection)source; SingleSelection radioEl = (SingleSelection)source;
Object uobject = radioEl.getUserObject(); Object uobject = radioEl.getUserObject();
...@@ -379,10 +444,8 @@ public class EvaluationFormController extends FormBasicController { ...@@ -379,10 +444,8 @@ public class EvaluationFormController extends FormBasicController {
} }
} }
private void doSaveAsDone(UserRequest ureq) { private void doConfirmDone(UserRequest ureq) {
@SuppressWarnings("unchecked") for(EvaluationFormElementWrapper elementWrapper:elementWrapperList) {
List<EvaluationFormElementWrapper> elementWrappers = (List<EvaluationFormElementWrapper>)flc.contextGet("elements");
for(EvaluationFormElementWrapper elementWrapper:elementWrappers) {
if(elementWrapper.isTextInput()) { if(elementWrapper.isTextInput()) {
TextInputWrapper wrapper = elementWrapper.getTextInputWrapper(); TextInputWrapper wrapper = elementWrapper.getTextInputWrapper();
String value = wrapper.getTextEl().getValue(); String value = wrapper.getTextEl().getValue();
...@@ -390,6 +453,20 @@ public class EvaluationFormController extends FormBasicController { ...@@ -390,6 +453,20 @@ public class EvaluationFormController extends FormBasicController {
} }
} }
StringBuilder sb = new StringBuilder();
sb.append("<p>").append(translate("confirm.done")).append("</p>");
List<ValidationMessage> messages = new ArrayList<>();
validate(ureq, messages);
if(messages.size() > 0) {
for(ValidationMessage message:messages) {
sb.append("<p class='o_warning'>").append(message.getMessage()).append("</p>");
}
}
confirmDoneCtrl = activateYesNoDialog(ureq, null, sb.toString(), confirmDoneCtrl);
}
private void saveAsDone(UserRequest ureq) {
//save text inputs //save text inputs
session = evaluationFormManager.changeSessionStatus(session, EvaluationFormSessionStatus.done); session = evaluationFormManager.changeSessionStatus(session, EvaluationFormSessionStatus.done);
readOnly = true; readOnly = true;
...@@ -398,7 +475,6 @@ public class EvaluationFormController extends FormBasicController { ...@@ -398,7 +475,6 @@ public class EvaluationFormController extends FormBasicController {
updateElements(); updateElements();
saveAsDoneButton.setVisible(false); saveAsDoneButton.setVisible(false);
dbInstance.commit(); dbInstance.commit();
fireEvent(ureq, Event.DONE_EVENT); fireEvent(ureq, Event.DONE_EVENT);
} }
......
...@@ -4,6 +4,7 @@ add.formhtitle=Titel ...@@ -4,6 +4,7 @@ add.formhtitle=Titel
add.formrubric=Rubrik add.formrubric=Rubrik
add.slider=Slider addieren add.slider=Slider addieren
end.label=End end.label=End
confirm.done=Wollen Sie die Einsch\u00E4tzung abgeben? Sobald sie abgegeben ist, kann sie nicht mehr bearbeitet werden\!
evaluation.form.in.use=Die Ressource wird bereits f\u00FCr Einsch\u00E4tzung verwendet. Die Bearbeitung ist begrenzt. evaluation.form.in.use=Die Ressource wird bereits f\u00FCr Einsch\u00E4tzung verwendet. Die Bearbeitung ist begrenzt.
evaluation.in.progress=Die Einsch\u00E4tzung ist gerade in Bearbeitung evaluation.in.progress=Die Einsch\u00E4tzung ist gerade in Bearbeitung
evaluator=Benutzer {0} evaluator=Benutzer {0}
...@@ -27,3 +28,4 @@ slider.type=Typ ...@@ -27,3 +28,4 @@ slider.type=Typ
start.label=Beginn start.label=Beginn
textinput.rows=Zeile textinput.rows=Zeile
title.example=<h1>Anklicken um Titel zu bearbeiten</h1> title.example=<h1>Anklicken um Titel zu bearbeiten</h1>
warning.form.not.completed=Achtung! Sie haben nicht alle Felder ausgefüllt.
...@@ -4,6 +4,7 @@ add.formhtitle=Title ...@@ -4,6 +4,7 @@ add.formhtitle=Title
add.formrubric=Rubric add.formrubric=Rubric
add.slider=Add slider add.slider=Add slider
end.label=End end.label=End
confirm.done=Do want to submit your evaluation? Once it is submitted, it cannot be edited anymore\!
evaluation.form.in.use=The resource is already used for assessment purpose. Editing is limited. evaluation.form.in.use=The resource is already used for assessment purpose. Editing is limited.
evaluation.in.progress=The evaluation is in progress evaluation.in.progress=The evaluation is in progress
evaluator=User {0} evaluator=User {0}
...@@ -27,3 +28,4 @@ slider.type=Type ...@@ -27,3 +28,4 @@ slider.type=Type
start.label=Start start.label=Start
textinput.rows=Rows textinput.rows=Rows
title.example=<h1>Click to edit title</h1> title.example=<h1>Click to edit title</h1>
warning.form.not.completed=Achtung! Sie haben nicht alle Felder ausgefllt.
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
package org.olat.modules.portfolio.handler; package org.olat.modules.portfolio.handler;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.modules.portfolio.Media; import org.olat.modules.portfolio.Media;
...@@ -28,8 +27,10 @@ import org.olat.modules.portfolio.MediaHandler; ...@@ -28,8 +27,10 @@ import org.olat.modules.portfolio.MediaHandler;
import org.olat.modules.portfolio.MediaInformations; import org.olat.modules.portfolio.MediaInformations;
import org.olat.modules.portfolio.MediaLight; import org.olat.modules.portfolio.MediaLight;
import org.olat.modules.portfolio.model.MediaPart; import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.PageRunControllerElement;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
/** /**
* *
...@@ -56,13 +57,13 @@ public abstract class AbstractMediaHandler implements MediaHandler, PageElementH ...@@ -56,13 +57,13 @@ public abstract class AbstractMediaHandler implements MediaHandler, PageElementH
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Media) { if(element instanceof Media) {
return getMediaController(ureq, wControl, (Media)element).getInitialComponent(); return new PageRunControllerElement(getMediaController(ureq, wControl, (Media)element));
} }
if(element instanceof MediaPart) { if(element instanceof MediaPart) {
MediaPart mediaPart = (MediaPart)element; MediaPart mediaPart = (MediaPart)element;
return getMediaController(ureq, wControl, mediaPart.getMedia()).getInitialComponent(); return new PageRunControllerElement(getMediaController(ureq, wControl, mediaPart.getMedia()));
} }
return null; return null;
} }
......
...@@ -28,10 +28,8 @@ import java.util.List; ...@@ -28,10 +28,8 @@ import java.util.List;
import org.olat.core.CoreSpringFactory; import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.messages.MessageController;
import org.olat.core.gui.control.generic.messages.MessageUIFactory; import org.olat.core.gui.control.generic.messages.MessageUIFactory;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
...@@ -48,8 +46,10 @@ import org.olat.modules.portfolio.model.AccessRights; ...@@ -48,8 +46,10 @@ import org.olat.modules.portfolio.model.AccessRights;
import org.olat.modules.portfolio.model.EvaluationFormPart; import org.olat.modules.portfolio.model.EvaluationFormPart;
import org.olat.modules.portfolio.ui.MultiEvaluationFormController; import org.olat.modules.portfolio.ui.MultiEvaluationFormController;
import org.olat.modules.portfolio.ui.PortfolioHomeController; import org.olat.modules.portfolio.ui.PortfolioHomeController;
import org.olat.modules.portfolio.ui.editor.PageRunControllerElement;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
/** /**
...@@ -71,7 +71,8 @@ public class EvaluationFormHandler implements PageElementHandler { ...@@ -71,7 +71,8 @@ public class EvaluationFormHandler implements PageElementHandler {
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
Controller ctrl = null;
if(element instanceof EvaluationFormPart) { if(element instanceof EvaluationFormPart) {
PortfolioService portfolioService = CoreSpringFactory.getImpl(PortfolioService.class); PortfolioService portfolioService = CoreSpringFactory.getImpl(PortfolioService.class);
...@@ -87,24 +88,23 @@ public class EvaluationFormHandler implements PageElementHandler { ...@@ -87,24 +88,23 @@ public class EvaluationFormHandler implements PageElementHandler {
List<AccessRights> accessRights = portfolioService.getAccessRights(page); List<AccessRights> accessRights = portfolioService.getAccessRights(page);
boolean anonym = assignment.isAnonymousExternalEvaluation(); boolean anonym = assignment.isAnonymousExternalEvaluation();
if(pageStatus == null || pageStatus == PageStatus.draft) { if(pageStatus == null || pageStatus == PageStatus.draft) {
if(hasRole(PortfolioRoles.owner, ureq.getIdentity(), accessRights)) { if(hasRole(PortfolioRoles.owner, ureq.getIdentity(), accessRights)) {
return new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, false, false).getInitialComponent(); ctrl = new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, false, false);
} }
} else if (assignment.isOnlyAutoEvaluation()) { } else if (assignment.isOnlyAutoEvaluation()) {
// only the auto evaluation is shown // only the auto evaluation is shown
if(hasRole(PortfolioRoles.owner, ureq.getIdentity(), accessRights)) { if(hasRole(PortfolioRoles.owner, ureq.getIdentity(), accessRights)) {
boolean readOnly = (pageStatus == PageStatus.published) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted); boolean readOnly = (pageStatus == PageStatus.published) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted);
return new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, false).getInitialComponent(); ctrl = new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, false);
} else if(hasRole(PortfolioRoles.coach, ureq.getIdentity(), accessRights)) { } else if(hasRole(PortfolioRoles.coach, ureq.getIdentity(), accessRights)) {
Identity owner = getOwner(accessRights); Identity owner = getOwner(accessRights);
return new EvaluationFormController(ureq, wControl, owner, body, re, true, false).getInitialComponent(); ctrl = new EvaluationFormController(ureq, wControl, owner, body, re, true, false);
} else if(hasRole(PortfolioRoles.reviewer, ureq.getIdentity(), accessRights) } else if(hasRole(PortfolioRoles.reviewer, ureq.getIdentity(), accessRights)
|| hasRole(PortfolioRoles.invitee, ureq.getIdentity(), accessRights)) { || hasRole(PortfolioRoles.invitee, ureq.getIdentity(), accessRights)) {
if(assignment.isReviewerSeeAutoEvaluation()) { if(assignment.isReviewerSeeAutoEvaluation()) {
Identity owner = getOwner(accessRights); Identity owner = getOwner(accessRights);
return new EvaluationFormController(ureq, wControl, owner, body, re, true, false).getInitialComponent(); ctrl = new EvaluationFormController(ureq, wControl, owner, body, re, true, false);
} }
} }
} else { } else {
...@@ -113,33 +113,36 @@ public class EvaluationFormHandler implements PageElementHandler { ...@@ -113,33 +113,36 @@ public class EvaluationFormHandler implements PageElementHandler {
Identity owner = getOwner(accessRights); Identity owner = getOwner(accessRights);
List<Identity> coachesAndReviewers = getCoachesAndReviewers(accessRights); List<Identity> coachesAndReviewers = getCoachesAndReviewers(accessRights);
if(coachesAndReviewers.size() > 0) { if(coachesAndReviewers.size() > 0) {
return new MultiEvaluationFormController(ureq, wControl, owner, coachesAndReviewers, body, re, false, readOnly, anonym).getInitialComponent(); ctrl = new MultiEvaluationFormController(ureq, wControl, owner, coachesAndReviewers, body, re, false, readOnly, anonym);
} else {
ctrl = new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, false);
} }
return new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, false).getInitialComponent();
} else if(hasRole(PortfolioRoles.coach, ureq.getIdentity(), accessRights)) { } else if(hasRole(PortfolioRoles.coach, ureq.getIdentity(), accessRights)) {
Identity owner = getOwner(accessRights); Identity owner = getOwner(accessRights);
List<Identity> coachesAndReviewers = getCoachesAndReviewers(accessRights); List<Identity> coachesAndReviewers = getCoachesAndReviewers(accessRights);
boolean readOnly = (pageStatus == PageStatus.draft) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted); boolean readOnly = (pageStatus == PageStatus.draft) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted);
return new MultiEvaluationFormController(ureq, wControl, owner, coachesAndReviewers, body, re, false, readOnly, anonym).getInitialComponent(); ctrl = new MultiEvaluationFormController(ureq, wControl, owner, coachesAndReviewers, body, re, false, readOnly, anonym);
} else if(hasRole(PortfolioRoles.reviewer, ureq.getIdentity(), accessRights) } else if(hasRole(PortfolioRoles.reviewer, ureq.getIdentity(), accessRights)
|| hasRole(PortfolioRoles.invitee, ureq.getIdentity(), accessRights)) { || hasRole(PortfolioRoles.invitee, ureq.getIdentity(), accessRights)) {
boolean readOnly = (pageStatus == PageStatus.draft) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted); boolean readOnly = (pageStatus == PageStatus.draft) || (pageStatus == PageStatus.closed) || (pageStatus == PageStatus.deleted);
if(assignment.isReviewerSeeAutoEvaluation()) { if(assignment.isReviewerSeeAutoEvaluation()) {
Identity owner = getOwner(accessRights); Identity owner = getOwner(accessRights);
List<Identity> reviewers = Collections.singletonList(ureq.getIdentity()); List<Identity> reviewers = Collections.singletonList(ureq.getIdentity());
return new MultiEvaluationFormController(ureq, wControl, owner, reviewers, body, re, true, readOnly, anonym).getInitialComponent(); ctrl = new MultiEvaluationFormController(ureq, wControl, owner, reviewers, body, re, true, readOnly, anonym);
} else { } else {
return new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, !readOnly).getInitialComponent(); ctrl = new EvaluationFormController(ureq, wControl, ureq.getIdentity(), body, re, readOnly, !readOnly);
} }
} }
} }
} }
Translator translator = Util.createPackageTranslator(PortfolioHomeController.class, ureq.getLocale()); if(ctrl == null) {
String title = translator.translate("warning.evaluation.not.visible.title"); Translator translator = Util.createPackageTranslator(PortfolioHomeController.class, ureq.getLocale());
String text = translator.translate("warning.evaluation.not.visible.text"); String title = translator.translate("warning.evaluation.not.visible.title");
MessageController msg = MessageUIFactory.createWarnMessage(ureq, wControl, title, text); String text = translator.translate("warning.evaluation.not.visible.text");
return msg.getInitialComponent(); ctrl = MessageUIFactory.createWarnMessage(ureq, wControl, title, text);
}
return new PageRunControllerElement(ctrl);
} }
private Identity getOwner(List<AccessRights> accessRights) { private Identity getOwner(List<AccessRights> accessRights) {
......
...@@ -29,7 +29,6 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo; ...@@ -29,7 +29,6 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
import org.olat.core.commons.services.image.Size; import org.olat.core.commons.services.image.Size;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.image.ImageComponent; import org.olat.core.gui.components.image.ImageComponent;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
...@@ -48,9 +47,11 @@ import org.olat.modules.portfolio.PortfolioLoggingAction; ...@@ -48,9 +47,11 @@ import org.olat.modules.portfolio.PortfolioLoggingAction;
import org.olat.modules.portfolio.manager.MediaDAO; import org.olat.modules.portfolio.manager.MediaDAO;
import org.olat.modules.portfolio.manager.PortfolioFileStorage; import org.olat.modules.portfolio.manager.PortfolioFileStorage;
import org.olat.modules.portfolio.model.MediaPart; import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.PageRunComponent;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementAddController; import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.media.CollectImageMediaController; import org.olat.modules.portfolio.ui.media.CollectImageMediaController;
import org.olat.modules.portfolio.ui.media.ImageMediaController; import org.olat.modules.portfolio.ui.media.ImageMediaController;
import org.olat.modules.portfolio.ui.media.UploadMedia; import org.olat.modules.portfolio.ui.media.UploadMedia;
...@@ -169,13 +170,13 @@ public class ImageHandler extends AbstractMediaHandler implements InteractiveAdd ...@@ -169,13 +170,13 @@ public class ImageHandler extends AbstractMediaHandler implements InteractiveAdd
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Media) { if(element instanceof Media) {
return getContent(ureq, (Media)element); return new PageRunComponent(getContent(ureq, (Media)element));
} }
if(element instanceof MediaPart) { if(element instanceof MediaPart) {
MediaPart mediaPart = (MediaPart)element; MediaPart mediaPart = (MediaPart)element;
return getContent(ureq, mediaPart.getMedia()); return new PageRunComponent(getContent(ureq, mediaPart.getMedia()));
} }
return null; return null;
} }
......
...@@ -29,7 +29,6 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo; ...@@ -29,7 +29,6 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
import org.olat.core.commons.services.image.Size; import org.olat.core.commons.services.image.Size;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.image.ImageComponent; import org.olat.core.gui.components.image.ImageComponent;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
...@@ -48,9 +47,11 @@ import org.olat.modules.portfolio.PortfolioLoggingAction; ...@@ -48,9 +47,11 @@ import org.olat.modules.portfolio.PortfolioLoggingAction;
import org.olat.modules.portfolio.manager.MediaDAO; import org.olat.modules.portfolio.manager.MediaDAO;
import org.olat.modules.portfolio.manager.PortfolioFileStorage; import org.olat.modules.portfolio.manager.PortfolioFileStorage;
import org.olat.modules.portfolio.model.MediaPart; import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.PageRunComponent;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageElement; import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementAddController; import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.media.CollectVideoMediaController; import org.olat.modules.portfolio.ui.media.CollectVideoMediaController;
import org.olat.modules.portfolio.ui.media.UploadMedia; import org.olat.modules.portfolio.ui.media.UploadMedia;
import org.olat.modules.portfolio.ui.media.VideoMediaController; import org.olat.modules.portfolio.ui.media.VideoMediaController;
...@@ -167,13 +168,13 @@ public class VideoHandler extends AbstractMediaHandler implements InteractiveAdd ...@@ -167,13 +168,13 @@ public class VideoHandler extends AbstractMediaHandler implements InteractiveAdd
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Media) { if(element instanceof Media) {
return getContent(ureq, (Media)element); return new PageRunComponent(getContent(ureq, (Media)element));
} }
if(element instanceof MediaPart) { if(element instanceof MediaPart) {
MediaPart mediaPart = (MediaPart)element; MediaPart mediaPart = (MediaPart)element;
return getContent(ureq, mediaPart.getMedia()); return new PageRunComponent(getContent(ureq, mediaPart.getMedia()));
} }
return null; return null;
} }
......
...@@ -69,7 +69,9 @@ import org.olat.modules.portfolio.ui.editor.PageElementAddController; ...@@ -69,7 +69,9 @@ import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.editor.PageElementEditorController; import org.olat.modules.portfolio.ui.editor.PageElementEditorController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler; import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageProvider; import org.olat.modules.portfolio.ui.editor.PageProvider;
import org.olat.modules.portfolio.ui.editor.PageRunElement;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler; import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.ValidationMessage;
import org.olat.modules.portfolio.ui.editor.handler.HTMLRawPageElementHandler; import org.olat.modules.portfolio.ui.editor.handler.HTMLRawPageElementHandler;
import org.olat.modules.portfolio.ui.editor.handler.SpacerElementHandler; import org.olat.modules.portfolio.ui.editor.handler.SpacerElementHandler;
import org.olat.modules.portfolio.ui.editor.handler.TitlePageElementHandler; import org.olat.modules.portfolio.ui.editor.handler.TitlePageElementHandler;
...@@ -371,8 +373,21 @@ public class PageRunController extends BasicController implements TooledControll ...@@ -371,8 +373,21 @@ public class PageRunController extends BasicController implements TooledControll
} }
private void doConfirmPublish(UserRequest ureq) { private void doConfirmPublish(UserRequest ureq) {
List<ValidationMessage> messages = new ArrayList<>();
pageCtrl.validateElements(ureq, messages);
String title = translate("publish.confirm.title"); String title = translate("publish.confirm.title");
String text = translate("publish.confirm.descr", new String[]{ StringHelper.escapeHtml(page.getTitle()) }); String text = translate("publish.confirm.descr", new String[]{ StringHelper.escapeHtml(page.getTitle()) });
if(messages.size() > 0) {
StringBuilder sb = new StringBuilder();
sb.append("<p>").append(text).append("</p>");
for(ValidationMessage message:messages) {
sb.append("<p class='o_warning'>").append(message.getMessage()).append("</p>");
}
text = sb.toString();
}
confirmPublishCtrl = activateYesNoDialog(ureq, title, text, confirmPublishCtrl); confirmPublishCtrl = activateYesNoDialog(ureq, title, text, confirmPublishCtrl);
} }
...@@ -625,7 +640,7 @@ public class PageRunController extends BasicController implements TooledControll ...@@ -625,7 +640,7 @@ public class PageRunController extends BasicController implements TooledControll
} }
@Override @Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) { public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
return null; return null;
} }
......
...@@ -68,16 +68,26 @@ public class PageController extends BasicController { ...@@ -68,16 +68,26 @@ public class PageController extends BasicController {
// //
} }
public boolean validateElements(UserRequest ureq, List<ValidationMessage> messages) {
boolean allOk = true;
for(PageFragment fragment:fragments) {
if(!fragment.validate(ureq, messages)) {
allOk &= false;
}
}
return allOk;
}
public void loadElements(UserRequest ureq) { public void loadElements(UserRequest ureq) {
List<? extends PageElement> elements = provider.getElements(); List<? extends PageElement> elements = provider.getElements();
List<PageFragment> newFragments = new ArrayList<>(elements.size()); List<PageFragment> newFragments = new ArrayList<>(elements.size());
for(PageElement element:elements) { for(PageElement element:elements) {
PageElementHandler handler = handlerMap.get(element.getType()); PageElementHandler handler = handlerMap.get(element.getType());
if(handler != null) { if(handler != null) {
Component cmp = handler.getContent(ureq, getWindowControl(), element); PageRunElement runElement = handler.getContent(ureq, getWindowControl(), element);
String cmpId = "cpt-" + (++counter); String cmpId = "cpt-" + (++counter);
newFragments.add(new PageFragment(cmpId, cmp)); newFragments.add(new PageFragment(cmpId, runElement));
mainVC.put(cmpId, cmp); mainVC.put(cmpId, runElement.getComponent());
} }
} }
fragments = newFragments; fragments = newFragments;
...@@ -87,11 +97,11 @@ public class PageController extends BasicController { ...@@ -87,11 +97,11 @@ public class PageController extends BasicController {
public static final class PageFragment { public static final class PageFragment {
private final String componentName; private final String componentName;
private final Component component; private final PageRunElement runElement;
public PageFragment(String componentName, Component component) { public PageFragment(String componentName, PageRunElement runElement) {
this.componentName = componentName; this.componentName = componentName;
this.component = component; this.runElement = runElement;
} }
public String getComponentName() { public String getComponentName() {
...@@ -99,7 +109,15 @@ public class PageController extends BasicController { ...@@ -99,7 +109,15 @@ public class PageController extends BasicController {
} }
public Component getComponent() { public Component getComponent() {
return component; return runElement.getComponent();
}
public PageRunElement getPageRunElement() {
return runElement;
}
public boolean validate(UserRequest ureq, List<ValidationMessage> messages) {
return runElement.validate(ureq, messages);
} }
} }
} }
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
package org.olat.modules.portfolio.ui.editor; package org.olat.modules.portfolio.ui.editor;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
...@@ -36,7 +35,7 @@ public interface PageElementHandler { ...@@ -36,7 +35,7 @@ public interface PageElementHandler {
public String getIconCssClass(); public String getIconCssClass();
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element); public PageRunElement getContent(UserRequest ureq, WindowControl wControl, PageElement element);
public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element); public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element);
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.modules.portfolio.ui.editor;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
/**
*
* Initial date: 23 déc. 2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class PageRunComponent implements PageRunElement {
private final Component component;
public PageRunComponent(Component component) {
this.component = component;
}
@Override
public Component getComponent() {
return component;
}
@Override
public boolean validate(UserRequest ureq, List<ValidationMessage> messages) {
return true;
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.modules.portfolio.ui.editor;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
/**
*
* Initial date: 23 déc. 2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class PageRunControllerElement implements PageRunElement {
private Controller controller;
public PageRunControllerElement(Controller controller) {
this.controller = controller;
}
@Override
public Component getComponent() {
return controller.getInitialComponent();
}
@Override
public boolean validate(UserRequest ureq, List<ValidationMessage> messages) {
if(controller instanceof ValidatingController) {
return ((ValidatingController)controller).validate(ureq, messages);
}
return true;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment