Skip to content
Snippets Groups Projects
Commit a5a25460 authored by uhensler's avatar uhensler
Browse files

OO-3303: Restricted editing of the new evaluaton form parts, styling

parent c5268610
No related branches found
No related tags found
No related merge requests found
Showing
with 202 additions and 40 deletions
......@@ -43,11 +43,11 @@ public class AllHandlerPageProvider implements PageProvider {
handlers.add(new TitleHandler());
handlers.add(new SpacerHandler());
handlers.add(new HTMLRawHandler());
handlers.add(new RubricHandler(true));
handlers.add(new TextInputHandler());
handlers.add(new FileUploadHandler());
handlers.add(new SingleChoiceHandler());
handlers.add(new MultipleChoiceHandler());
handlers.add(new RubricHandler(false));
handlers.add(new TextInputHandler(false));
handlers.add(new FileUploadHandler(false));
handlers.add(new SingleChoiceHandler(false));
handlers.add(new MultipleChoiceHandler(false));
}
@Override
......
......@@ -55,6 +55,12 @@ import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
*/
public class FileUploadHandler implements EvaluationFormElementHandler, SimpleAddPageElementHandler {
private final boolean restrictedEdit;
public FileUploadHandler(boolean restrictedEdit) {
this.restrictedEdit = restrictedEdit;
}
@Override
public String getType() {
return "formfileupload";
......@@ -79,7 +85,7 @@ public class FileUploadHandler implements EvaluationFormElementHandler, SimpleAd
public PageElementEditorController getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof FileUpload) {
FileUpload fileUpload = (FileUpload) element;
return new FileUploadEditorController(ureq, wControl, fileUpload);
return new FileUploadEditorController(ureq, wControl, fileUpload, restrictedEdit);
}
return null;
}
......
......@@ -54,6 +54,12 @@ import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
*
*/
public class MultipleChoiceHandler implements EvaluationFormElementHandler, SimpleAddPageElementHandler {
private final boolean restrictedEdit;
public MultipleChoiceHandler(boolean restrictedEdit) {
this.restrictedEdit = restrictedEdit;
}
@Override
public String getType() {
......@@ -80,7 +86,7 @@ public class MultipleChoiceHandler implements EvaluationFormElementHandler, Sim
public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof MultipleChoice) {
MultipleChoice multipleChoice = (MultipleChoice) element;
return new MultipleChoiceEditorController(ureq, wControl, multipleChoice);
return new MultipleChoiceEditorController(ureq, wControl, multipleChoice, restrictedEdit);
}
return null;
}
......
......@@ -56,6 +56,12 @@ import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
*
*/
public class SingleChoiceHandler implements EvaluationFormElementHandler, SimpleAddPageElementHandler {
private final boolean restrictedEdit;
public SingleChoiceHandler(boolean restrictedEdit) {
this.restrictedEdit = restrictedEdit;
}
@Override
public String getType() {
......@@ -82,7 +88,7 @@ public class SingleChoiceHandler implements EvaluationFormElementHandler, Simple
public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof SingleChoice) {
SingleChoice singleChoice = (SingleChoice) element;
return new SingleChoiceEditorController(ureq, wControl, singleChoice);
return new SingleChoiceEditorController(ureq, wControl, singleChoice, restrictedEdit);
}
return null;
}
......
......@@ -53,6 +53,12 @@ import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
*/
public class TextInputHandler implements EvaluationFormElementHandler, SimpleAddPageElementHandler {
private final boolean restrictedEdit;
public TextInputHandler(boolean restrictedEdit) {
this.restrictedEdit = restrictedEdit;
}
@Override
public String getType() {
return "formtextinput";
......@@ -75,7 +81,7 @@ public class TextInputHandler implements EvaluationFormElementHandler, SimpleAdd
@Override
public PageElementEditorController getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof TextInput) {
return new TextInputEditorController(ureq, wControl, (TextInput)element);
return new TextInputEditorController(ureq, wControl, (TextInput)element, restrictedEdit);
}
return null;
}
......
......@@ -132,16 +132,16 @@ public class EvaluationFormEditorController extends BasicController {
RubricHandler rubricHandler = new RubricHandler(restrictedEdit);
handlers.add(rubricHandler);
// handler for text input
TextInputHandler textInputHandler = new TextInputHandler();
TextInputHandler textInputHandler = new TextInputHandler(restrictedEdit);
handlers.add(textInputHandler);
// handler for file upload
FileUploadHandler fileUploadhandler = new FileUploadHandler();
FileUploadHandler fileUploadhandler = new FileUploadHandler(restrictedEdit);
handlers.add(fileUploadhandler);
// handler for single choice
SingleChoiceHandler singleChoiceHandler = new SingleChoiceHandler();
SingleChoiceHandler singleChoiceHandler = new SingleChoiceHandler(restrictedEdit);
handlers.add(singleChoiceHandler);
// handler for multiple choice
MultipleChoiceHandler multipleChoiceHandler = new MultipleChoiceHandler();
MultipleChoiceHandler multipleChoiceHandler = new MultipleChoiceHandler(restrictedEdit);
handlers.add(multipleChoiceHandler);
if(!restrictedEdit) {
......
......@@ -52,14 +52,16 @@ public class FileUploadEditorController extends FormBasicController implements P
private final FileUpload fileUpload;
private boolean editMode = false;
private final boolean restrictedEdit;
@Autowired
private EvaluationFormsModule evaluationFormsModule;
public FileUploadEditorController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload) {
public FileUploadEditorController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload, boolean restrictedEdit) {
super(ureq, wControl, "file_upload_editor");
this.fileUpload = fileUpload;
this.restrictedEdit = restrictedEdit;
initForm(ureq);
setEditMode(editMode);
}
......@@ -100,6 +102,7 @@ public class FileUploadEditorController extends FormBasicController implements P
MimeTypeSetFactory.getKeys(), MimeTypeSetFactory.getValues(getTranslator()), null);
mimeTypesEl.select(getInitialMimeTypeSetKey(), true);
mimeTypesEl.addActionListener(FormEvent.ONCHANGE);
mimeTypesEl.setEnabled(!restrictedEdit);
}
private String getInitialMaxFileUploadLimitKey(String[] orderedKeys) {
......
......@@ -54,10 +54,10 @@ public class MultipleChoiceCompareController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
flc.contextPut("wrappers", createWrappers(ureq));
flc.contextPut("wrappers", createWrappers());
}
private List<MultipleChoiceCompareWrapper> createWrappers(UserRequest ureq) {
private List<MultipleChoiceCompareWrapper> createWrappers() {
List<MultipleChoiceCompareWrapper> wrappers = new ArrayList<>();
for (CompareResponse compareResponse: compareResponses) {
if (isValid(compareResponse)) {
......
......@@ -73,10 +73,12 @@ public class MultipleChoiceEditorController extends FormBasicController implemen
private final MultipleChoice multipleChoice;
private boolean editMode = false;
private final boolean restrictedEdit;
public MultipleChoiceEditorController(UserRequest ureq, WindowControl wControl, MultipleChoice multipleChoice) {
public MultipleChoiceEditorController(UserRequest ureq, WindowControl wControl, MultipleChoice multipleChoice, boolean restrictedEdit) {
super(ureq, wControl, "multiple_choice_editor");
this.multipleChoice = multipleChoice;
this.restrictedEdit = restrictedEdit;
initForm(ureq);
setEditMode(editMode);
}
......@@ -109,6 +111,7 @@ public class MultipleChoiceEditorController extends FormBasicController implemen
settingsCont, WITH_OTHER_KEYS, new String[] { translate(WITH_OTHER_KEY) }, null, null, 1);
withOthersEl.select(WITH_OTHER_KEY, multipleChoice.isWithOthers());
withOthersEl.addActionListener(FormEvent.ONCHANGE);
withOthersEl.setEnabled(!restrictedEdit);
// choices
FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
......@@ -123,8 +126,10 @@ public class MultipleChoiceEditorController extends FormBasicController implemen
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.value));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.edit, CMD_EDIT,
new StaticFlexiCellRenderer("", CMD_EDIT, "o_icon o_icon-lg o_icon_edit")));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.delete, CMD_DELETE,
new StaticFlexiCellRenderer("", CMD_DELETE, "o_icon o_icon-lg o_icon_delete_item")));
if (!restrictedEdit) {
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.delete, CMD_DELETE,
new StaticFlexiCellRenderer("", CMD_DELETE, "o_icon o_icon-lg o_icon_delete_item")));
}
dataModel = new ChoiceDataModel(columnsModel);
tableEl = uifactory.addTableElement(getWindowControl(), "choices", dataModel, getTranslator(), settingsCont);
......@@ -135,6 +140,7 @@ public class MultipleChoiceEditorController extends FormBasicController implemen
addChoiceEl = uifactory.addFormLink("choice.add", flc, Link.BUTTON);
addChoiceEl.setIconLeftCSS("o_icon o_icon_add");
addChoiceEl.setVisible(!restrictedEdit);
}
private void loadModel() {
......
......@@ -31,6 +31,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FormLink;
import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.elements.SliderElement;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormEvent;
......@@ -65,7 +66,7 @@ public class RubricEditorController extends FormBasicController implements PageE
private final String[] sliderTypeKeys = new String[] { SliderType.discrete.name(), SliderType.discrete_slider.name(), SliderType.continuous.name() };
private final String[] sliderStepKeys = new String[] { "2", "3", "4", "5", "6", "7", "8", "9", "10" };
private final String[] showRespomseKey = new String[] { "show.no.response" };
private final String[] showResponseKey = new String[] { "show.no.response" };
private List<StepLabelColumn> stepLabels = new ArrayList<>();
private List<SliderRow> sliders = new ArrayList<>();
......@@ -152,9 +153,10 @@ public class RubricEditorController extends FormBasicController implements PageE
}
noAnswerEl = uifactory.addCheckboxesVertical("no.response." + count.incrementAndGet(),
"rubric.no.response.enabled", settingsLayout, showRespomseKey,
"rubric.no.response.enabled", settingsLayout, showResponseKey,
new String[] { translate("rubric.no.response.enabled.show") }, 1);
noAnswerEl.select(showRespomseKey[0], rubric.isNoResponseEnabled());
noAnswerEl.select(showResponseKey[0], rubric.isNoResponseEnabled());
noAnswerEl.setEnabled(!restrictedEdit);
updateTypeSettings();
updateSteps();
......@@ -229,6 +231,12 @@ public class RubricEditorController extends FormBasicController implements PageE
}
}
private void updateSliders() {
for (SliderRow row: sliders) {
row.setSliderEl(createSliderEl());
}
}
private SliderRow forgeSliderRow(Slider slider) {
String startLabel = slider.getStartLabel();
TextElement startLabelEl = uifactory.addTextElement("start.label." + count.incrementAndGet(), "start.label", 256, startLabel, flc);
......@@ -237,7 +245,7 @@ public class RubricEditorController extends FormBasicController implements PageE
TextElement endLabelEl = uifactory.addTextElement("end.label." + count.incrementAndGet(), "end.label", 256, endLabel, flc);
endLabelEl.setDomReplacementWrapperRequired(false);
SliderRow row = new SliderRow(slider, startLabelEl, endLabelEl);
SliderRow row = new SliderRow(slider, startLabelEl, endLabelEl, createSliderEl());
if(!restrictedEdit) {
FormLink deleteButton = uifactory.addFormLink("del." + count.incrementAndGet(), "delete_slider", "", null, flc, Link.BUTTON | Link.NONTRANSLATED);
deleteButton.setDomReplacementWrapperRequired(false);
......@@ -249,6 +257,55 @@ public class RubricEditorController extends FormBasicController implements PageE
return row;
}
private FormItem createSliderEl() {
SliderType selectedType = SliderType.valueOf(sliderTypeEl.getSelectedKey());
if (selectedType == SliderType.discrete) {
return createRadioEl();
} else if (selectedType == SliderType.discrete_slider) {
return createDescreteSliderEl();
}
return createContinousSliderEl();
}
private FormItem createRadioEl() {
int start = 1;
int steps = Integer.parseInt(stepsEl.getSelectedKey());
int end = 1 + steps;
double[] theSteps = new double[steps];
String[] theKeys = new String[steps];
String[] theValues = new String[steps];
double step = (end - start + 1) / (double)steps;
for(int i=0; i<steps; i++) {
theSteps[i] = start + (i * step);
theKeys[i] = Double.toString(theSteps[i]);
theValues[i] = "";
}
SingleSelection radioEl = uifactory.addRadiosVertical("slider_" + CodeHelper.getRAMUniqueID(), null, flc, theKeys, theValues);
radioEl.setAllowNoSelection(true);
radioEl.setDomReplacementWrapperRequired(false);
int widthInPercent = Math.round(100.0f / steps) - 1;
radioEl.setWidthInPercent(widthInPercent, true);
return radioEl;
}
private FormItem createDescreteSliderEl() {
SliderElement sliderEl = uifactory.addSliderElement("slider_" + CodeHelper.getRAMUniqueID(), null, flc);
sliderEl.setDomReplacementWrapperRequired(false);
sliderEl.setMinValue(1);
sliderEl.setMaxValue( Integer.parseInt(stepsEl.getSelectedKey()));
sliderEl.setStep(1);
return sliderEl;
}
private FormItem createContinousSliderEl() {
SliderElement sliderEl = uifactory.addSliderElement("slider_" + CodeHelper.getRAMUniqueID(), null, flc);
sliderEl.setDomReplacementWrapperRequired(false);
return sliderEl;
}
@Override
protected void doDispose() {
//
......@@ -272,10 +329,13 @@ public class RubricEditorController extends FormBasicController implements PageE
} else if(sliderTypeEl == source) {
updateTypeSettings();
updateSteps();
updateSliders();
} else if(stepsEl == source) {
updateSteps();
updateSliders();
} else if (scaleTypeEl == source) {
updateSteps();
updateSliders();
} else if(saveButton == source) {
if(validateFormLogic(ureq)) {
formOK(ureq);
......@@ -440,13 +500,15 @@ public class RubricEditorController extends FormBasicController implements PageE
private final TextElement startLabelEl;
private final TextElement endLabelEl;
private FormLink deleteButton;
private FormItem sliderEl;
private final Slider slider;
public SliderRow(Slider slider, TextElement startLabelEl, TextElement endLabelEl) {
public SliderRow(Slider slider, TextElement startLabelEl, TextElement endLabelEl, FormItem sliderEl) {
this.slider = slider;
this.startLabelEl = startLabelEl;
this.endLabelEl = endLabelEl;
this.sliderEl = sliderEl;
}
public Slider getSlider() {
......@@ -468,5 +530,28 @@ public class RubricEditorController extends FormBasicController implements PageE
public void setDeleteButton(FormLink deleteButton) {
this.deleteButton = deleteButton;
}
public FormItem getSliderEl() {
return sliderEl;
}
public void setSliderEl(FormItem sliderEl) {
this.sliderEl = sliderEl;
}
public String getSliderCss() {
if (sliderEl instanceof SingleSelection) {
return "o_slider_descrete_radio";
}
if (sliderEl instanceof SliderElement) {
SliderElement sliderElement = (SliderElement) sliderEl;
if (sliderElement.getStep() == 0) {
return "o_slider_continous";
}
return "o_slider_descrete";
}
return "";
}
}
}
......@@ -54,10 +54,10 @@ public class SingleChoiceCompareController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
flc.contextPut("wrappers", createWrappers(ureq));
flc.contextPut("wrappers", createWrappers());
}
private List<SingleChoiceCompareWrapper> createWrappers(UserRequest ureq) {
private List<SingleChoiceCompareWrapper> createWrappers() {
List<SingleChoiceCompareWrapper> wrappers = new ArrayList<>();
for (CompareResponse compareResponse: compareResponses) {
if (isValid(compareResponse)) {
......
......@@ -73,10 +73,12 @@ public class SingleChoiceEditorController extends FormBasicController implements
private final SingleChoice singleChoice;
private boolean editMode = false;
private boolean restrictedEdit;
public SingleChoiceEditorController(UserRequest ureq, WindowControl wControl, SingleChoice singleChoice) {
public SingleChoiceEditorController(UserRequest ureq, WindowControl wControl, SingleChoice singleChoice, boolean restrictedEdit) {
super(ureq, wControl, "single_choice_editor");
this.singleChoice = singleChoice;
this.restrictedEdit = restrictedEdit;
initForm(ureq);
setEditMode(editMode);
}
......@@ -125,8 +127,10 @@ public class SingleChoiceEditorController extends FormBasicController implements
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.value));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.edit, CMD_EDIT,
new StaticFlexiCellRenderer("", CMD_EDIT, "o_icon o_icon-lg o_icon_edit")));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.delete, CMD_DELETE,
new StaticFlexiCellRenderer("", CMD_DELETE, "o_icon o_icon-lg o_icon_delete_item")));
if (!restrictedEdit) {
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ChoiceCols.delete, CMD_DELETE,
new StaticFlexiCellRenderer("", CMD_DELETE, "o_icon o_icon-lg o_icon_delete_item")));
}
dataModel = new ChoiceDataModel(columnsModel);
tableEl = uifactory.addTableElement(getWindowControl(), "choices", dataModel, getTranslator(), settingsCont);
......@@ -135,8 +139,10 @@ public class SingleChoiceEditorController extends FormBasicController implements
tableEl.setLabel("choice.values", null);
loadModel();
addChoiceEl = uifactory.addFormLink("choice.add", flc, Link.BUTTON);
addChoiceEl.setIconLeftCSS("o_icon o_icon_add");
if (!restrictedEdit) {
addChoiceEl = uifactory.addFormLink("choice.add", flc, Link.BUTTON);
addChoiceEl.setIconLeftCSS("o_icon o_icon_add");
}
}
private void loadModel() {
......
......@@ -54,10 +54,10 @@ public class TextInputCompareController extends FormBasicController implements C
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
flc.contextPut("wrappers", createWrappers(ureq));
flc.contextPut("wrappers", createWrappers());
}
private List<TextInputCompareWrapper> createWrappers(UserRequest ureq) {
private List<TextInputCompareWrapper> createWrappers() {
List<TextInputCompareWrapper> wrappers = new ArrayList<>();
for (CompareResponse compareResponse: compareResponses) {
if (isValid(compareResponse)) {
......
......@@ -69,10 +69,12 @@ public class TextInputEditorController extends FormBasicController implements Pa
private final TextInput textInput;
private boolean editMode = false;
private boolean restrictedEdit;
public TextInputEditorController(UserRequest ureq, WindowControl wControl, TextInput textInput) {
public TextInputEditorController(UserRequest ureq, WindowControl wControl, TextInput textInput, boolean restrictedEdit) {
super(ureq, wControl, "textinput_editor");
this.textInput = textInput;
this.restrictedEdit = restrictedEdit;
initForm(ureq);
}
......@@ -102,12 +104,14 @@ public class TextInputEditorController extends FormBasicController implements Pa
String selectedNumericKey = textInput.isNumeric()? NUMERIC_NUMERIC_KEY: NUMERIC_TEXT_KEY;
numericEl.select(selectedNumericKey, true);
numericEl.addActionListener(FormEvent.ONCHANGE);
numericEl.setEnabled(!restrictedEdit);
singleRowEl = uifactory.addDropdownSingleselect("textinput_row_" + CodeHelper.getRAMUniqueID(),
"textinput.rows.mode", settingsCont, ROW_OPTIONS, translateKeys(ROW_OPTIONS));
String selectedRowsKey = textInput.isSingleRow()? SINGLE_ROW_KEY: MULTIPLE_ROWS_KEY;
singleRowEl.select(selectedRowsKey, true);
singleRowEl.addActionListener(FormEvent.ONCHANGE);
singleRowEl.setEnabled(!restrictedEdit);
String rows = "";
if(textInput.getRows() > 0) {
......
#if($editMode)
<div class="o_evaluation_editor_form">$r.render("settings")</div>
<div class="o_button_group">$r.render("choice.add")</div>
<div class="o_evaluation_editor_form">$r.render("settings")</div>
#if($r.available("choice.add") && $r.isVisible("choice.add"))
<div class="o_button_group">$r.render("choice.add")</div>
#end
#else
$r.render("preview")
#end
\ No newline at end of file
......@@ -26,7 +26,7 @@
#foreach($slider in $sliders)
<div class="row o_slider_editor #if($r.isNotNull($slider.deleteButton) && $r.visible($slider.deleteButton)) o_slider_editor_delete #end">
<div class="col-sm-3">$r.render($slider.startLabelEl)</div>
<div class="col-sm-6">.....</div>
<div class="col-sm-6 $slider.sliderCss">$r.render($slider.sliderEl)</div>
<div class="col-sm-3">$r.render($slider.endLabelEl)</div>
#if($r.isNotNull($slider.deleteButton) && $r.visible($slider.deleteButton))<div class="o_slider_editor_delete_button">$r.render($slider.deleteButton)</div>#end
</div>
......
#if($editMode)
<div class="o_evaluation_editor_form">$r.render("settings")</div>
<div class="o_button_group">$r.render("choice.add")</div>
#if($r.available("choice.add") && $r.isVisible("choice.add"))
<div class="o_button_group">$r.render("choice.add")</div>
#end
#else
$r.render("preview")
#end
\ No newline at end of file
......@@ -77,6 +77,7 @@
}
div.radio {
background-color: $o-evaluation-step-background-color;
margin-top: 0px;
display:inline-block;
text-align: center;
&:hover {
......@@ -84,6 +85,11 @@
}
}
}
.o_evaluation_no_response {
div.checkbox {
margin-top: 0px;
}
}
}
}
......@@ -203,6 +209,30 @@
}
}
.o_slider_descrete_radio {
div.radio {
background-color: $o-evaluation-step-background-color;
padding-top: 5px;
padding-bottom: -5px;
margin-top: 0px;
display:inline-block;
text-align: center;
&:hover {
background-color: $o-evaluation-slider-hover-background-color;
}
}
}
.o_slider_continous {
padding-top: 10px;
padding-bottom: -10px;
}
.o_slider_descrete {
padding-top: 5px;
padding-bottom: -5px;
}
.o_evaluation_example {
font-size: 90%;
}
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
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