diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/DateChooser.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/DateChooser.java index 34fcec1c4e0697affe1bd3b0f87fb05141444d1d..84fe5a43b5017a5d57885c9b97532edbe5d7755e 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/DateChooser.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/DateChooser.java @@ -31,7 +31,7 @@ import java.util.Date; * @author patrickb * */ -public interface DateChooser extends TextElement{ +public interface DateChooser extends TextElement { /** * @return the date or null if the value is not valid (parsed with @@ -62,5 +62,16 @@ public interface DateChooser extends TextElement{ public void setValidDateCheck(String errorKey); public String getExampleDateString(); + + + public DateChooser getDefaultValue(); + + /** + * Set an other date chooser as default value for this + * chooser. + * + * @param dateChooser A date chooser + */ + public void setDefaultValue(DateChooser dateChooser); } \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooser.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooser.java index 96137f0044712576a2967ccc58f4da74ddd96963..b45c6b30f2d0ea7a79fb70bdac8cd76f33aad88e 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooser.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooser.java @@ -42,8 +42,6 @@ import org.olat.core.util.ValidationStatus; import org.olat.core.util.ValidationStatusImpl; /** - * Description:<br> - * TODO: patrickb Class Description for JSDateChooser * <P> * Initial Date: 19.01.2007 <br> * @@ -65,7 +63,9 @@ public class JSDateChooser extends TextElementImpl implements DateChooser { private boolean dateChooserTimeEnabled; private String forValidDateErrorKey; private boolean checkForValidDate; - private int minute, hour; + private int minute; + private int hour; + private DateChooser defaultDateValue; public JSDateChooser(String name, Locale locale) { this(null, name, null, locale); @@ -111,6 +111,16 @@ public class JSDateChooser extends TextElementImpl implements DateChooser { return dateComponent; } + @Override + public DateChooser getDefaultValue() { + return defaultDateValue; + } + + @Override + public void setDefaultValue(DateChooser dateChooser) { + defaultDateValue = dateChooser; + } + /** * @see org.olat.core.gui.components.form.flexible.elements.AbstractTextElement#validate(java.util.List) */ diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserComponent.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserComponent.java index 6f71e9076ddad1b96b7d9327d161b64bcf3ab208..43e4b1ca86da35e29b9efcab28f450eecaf67f6e 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserComponent.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserComponent.java @@ -35,9 +35,6 @@ import org.olat.core.gui.render.ValidationResult; import org.olat.core.gui.translator.Translator; /** - * Description:<br> - * TODO: patrickb Class Description for JSDateChooserComponent - * * <P> * Initial Date: 19.01.2007 <br> * @@ -45,7 +42,7 @@ import org.olat.core.gui.translator.Translator; */ class JSDateChooserComponent extends FormBaseComponentImpl { - private final static ComponentRenderer RENDERER = new JSDateChooserRenderer(); + private static final ComponentRenderer RENDERER = new JSDateChooserRenderer(); private JSDateChooser element; public JSDateChooserComponent(JSDateChooser element) { @@ -104,4 +101,8 @@ class JSDateChooserComponent extends FormBaseComponentImpl { public String getExampleDateString() { return element.getExampleDateString(); } + + public JSDateChooser getFormItem() { + return element; + } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java index db6b7fe2880943afbdbeef4c786a39c7753aed05..8f6539b8378076682498e685be3510c982964ddc 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/JSDateChooserRenderer.java @@ -40,8 +40,6 @@ import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; /** - * Description:<br> - * TODO: patrickb Class Description for JSDateChooserRenderer * <P> * Initial Date: 19.01.2007 <br> * @@ -87,7 +85,7 @@ class JSDateChooserRenderer extends DefaultComponentRenderer { .append("></i></span>") .append("</div></div>");//input-group // date chooser javascript - sb.append("<script type=\"text/javascript\">\n /* <![CDATA[ */ \n") + sb.append("<script>\n /* <![CDATA[ */ \n") .append("jQuery(function(){ jQuery('#").append(receiverId).append("').datepicker({\n") .append(" dateFormat:'").append(format).append("',\n") .append(" firstDay:1,\n") @@ -114,11 +112,18 @@ class JSDateChooserRenderer extends DefaultComponentRenderer { .append("'").append(dateTranslator.translate("day.short.fr")).append("',") .append("'").append(dateTranslator.translate("day.short.sa")).append("'") .append("],\n") - .append(" showOtherMonths:true,\n") - .append(" onSelect:function(){\n") - .append(" setFlexiFormDirty('").append(te.getRootForm().getDispatchFieldId()).append("');\n") - .append(" jQuery(this).change();\n") - .append(" }\n") + .append(" showOtherMonths:true,\n"); + if(jsdcc.getFormItem().getDefaultValue() != null) { + String id = ((JSDateChooser)jsdcc.getFormItem().getDefaultValue()).getTextElementComponent().getFormDispatchId(); + sb.append(" beforeShow:function(el, inst) {\n") + .append(" var defDate = jQuery('#").append(id).append("').datepicker('getDate');\n") + .append(" jQuery('#").append(receiverId).append("').datepicker('option', 'defaultDate', defDate);") + .append(" },\n"); + } + sb.append(" onSelect:function(){\n") + .append(" setFlexiFormDirty('").append(te.getRootForm().getDispatchFieldId()).append("');\n") + .append(" jQuery(this).change();\n") + .append(" }\n") .append("})});") .append("\n/* ]]> */ \n</script>"); diff --git a/src/main/java/org/olat/course/MergedCourseContainer.java b/src/main/java/org/olat/course/MergedCourseContainer.java index a8e3243c9837249628ce4a7b6ac244057580ea02..16541f4a15acabd3c0f97e8f352a2c0f02042966 100644 --- a/src/main/java/org/olat/course/MergedCourseContainer.java +++ b/src/main/java/org/olat/course/MergedCourseContainer.java @@ -35,11 +35,9 @@ import org.olat.core.util.vfs.NamedContainerImpl; import org.olat.core.util.vfs.Quota; import org.olat.core.util.vfs.QuotaManager; import org.olat.core.util.vfs.VFSContainer; -import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.callbacks.ReadOnlyCallback; import org.olat.core.util.vfs.callbacks.VFSSecurityCallback; -import org.olat.core.util.vfs.filters.VFSItemFilter; import org.olat.course.config.CourseConfig; import org.olat.course.nodes.BCCourseNode; import org.olat.course.nodes.CourseNode; @@ -308,7 +306,7 @@ public class MergedCourseContainer extends MergeSource { // , then do recursion for all children ... addFoldersForAdmin(course, courseNodeContainer, child); // ... but only add this container if it contains any children with at least one BC course node - if (courseNodeContainer.getItems().size() > 0) { + if (!courseNodeContainer.getItems().isEmpty()) { nodesContainer.addContainer(courseNodeContainer); } } @@ -325,12 +323,7 @@ public class MergedCourseContainer extends MergeSource { */ private String getFolderName(MergeSource nodesContainer, CourseNode bcNode, String folderName) { // add node ident if multiple files have same name - if (nodesContainer.getItems(new VFSItemFilter() { - @Override - public boolean accept(VFSItem vfsItem) { - return (bcNode.getShortTitle().equals(RequestUtil.normalizeFilename(bcNode.getShortTitle()))); - } - }).size() > 0) { + if (!nodesContainer.getItems(vfsItem -> vfsItem.getName().equals(RequestUtil.normalizeFilename(bcNode.getShortTitle()))).isEmpty()) { folderName = folderName + " (" + bcNode.getIdent() + ")"; } return folderName; diff --git a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java index c6d3830c0e0e6cca7e3a7d40346d9df7fdf197a2..119fbba20d168778fa15c37f8a5619d105e91595 100644 --- a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java +++ b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java @@ -196,6 +196,7 @@ public class AssessmentModeEditController extends FormBasicController { endEl = uifactory.addDateChooser("mode.end", assessmentMode.getEnd(), formLayout); endEl.setElementCssClass("o_sel_assessment_mode_end"); endEl.setDateChooserTimeEnabled(true); + endEl.setDefaultValue(beginEl); endEl.setMandatory(true); endEl.setEnabled(status != Status.end); @@ -606,7 +607,7 @@ public class AssessmentModeEditController extends FormBasicController { //update groups if(groupKeys.isEmpty()) { - if(assessmentMode.getGroups().size() > 0) { + if(!assessmentMode.getGroups().isEmpty()) { assessmentMode.getGroups().clear(); } } else { @@ -631,7 +632,7 @@ public class AssessmentModeEditController extends FormBasicController { //update areas if(areaKeys.isEmpty()) { - if(assessmentMode.getAreas().size() > 0) { + if(!assessmentMode.getAreas().isEmpty()) { assessmentMode.getAreas().clear(); } } else { diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java index 744c53c390497d5c7de2416a4f026f4f1bd2581a..31e66ffda92db7f4e864fa56c7fcca961a19c867 100644 --- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java @@ -696,9 +696,9 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements Boolean passed = null; if(cutValue != null) { boolean aboveCutValue = score >= cutValue.floatValue(); - passed = new Boolean(aboveCutValue); + passed = Boolean.valueOf(aboveCutValue); } - ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), passed); + ScoreEvaluation sceval = new ScoreEvaluation(Float.valueOf(score), passed); AssessmentManager am = assessedUserCourseEnv.getCourseEnvironment().getAssessmentManager(); am.saveScoreEvaluation(this, identity, assessedIdentity, sceval, assessedUserCourseEnv, false, by); diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java index 951a2bfd56a3bfa1d7c72358405ff7be33f4aaac..4f685c12f1617d72e90310cd6e0fd2cccf157f4f 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java @@ -38,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; +import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.id.OLATResourceable; @@ -138,7 +139,7 @@ public class CheckListRunController extends FormBasicController implements Contr boolean readOnly = isReadOnly(); if(formLayout instanceof FormLayoutContainer) { FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; - layoutCont.contextPut("readOnly", new Boolean(readOnly)); + layoutCont.contextPut("readOnly", Boolean.valueOf(readOnly)); if(dueDate != null) { layoutCont.contextPut("dueDate", dueDate); layoutCont.contextPut("in-due-date", isPanelOpen(ureq, "due-date", true)); @@ -290,7 +291,9 @@ public class CheckListRunController extends FormBasicController implements Contr CheckboxWrapper wrapper = (CheckboxWrapper)boxEl.getUserObject(); if(wrapper != null) { boolean checked = boxEl.isAtLeastSelected(1); - doCheck(ureq, wrapper, checked); + if(doCheck(ureq, wrapper, checked)) { + fireEvent(ureq, Event.CHANGED_EVENT); + } } } else if("ONCLICK".equals(event.getCommand())) { String cmd = ureq.getParameter("fcid"); @@ -302,7 +305,7 @@ public class CheckListRunController extends FormBasicController implements Contr super.formInnerEvent(ureq, source, event); } - private void doCheck(UserRequest ureq, CheckboxWrapper wrapper, boolean checked) { + private boolean doCheck(UserRequest ureq, CheckboxWrapper wrapper, boolean checked) { DBCheckbox theOne; if(wrapper.getDbCheckbox() == null) { String uuid = wrapper.getCheckbox().getCheckboxId(); @@ -311,6 +314,7 @@ public class CheckListRunController extends FormBasicController implements Contr theOne = wrapper.getDbCheckbox(); } + boolean grantPoints = false; if(theOne == null) { //only warning because this happen in course preview logWarn("A checkbox is missing: " + courseOres + " / " + courseNode.getIdent(), null); @@ -321,17 +325,23 @@ public class CheckListRunController extends FormBasicController implements Contr } else { score = 0f; } - checkboxManager.check(theOne, getIdentity(), score, new Boolean(checked)); + if(wrapper.getCheckbox().getPoints() != null) { + grantPoints = true; + } + + checkboxManager.check(theOne, getIdentity(), score, Boolean.valueOf(checked)); //make sure all results is on the database before calculating some scores - //manager commit already DBFactory.getInstance().commit(); + //manager commit already courseNode.updateScoreEvaluation(getIdentity(), userCourseEnv, getIdentity(), Role.user); Checkbox checkbox = wrapper.getCheckbox(); logUpdateCheck(checkbox.getCheckboxId(), checkbox.getTitle()); + } exposeUserDataToVC(ureq, flc); + return grantPoints; } private void logUpdateCheck(String checkboxId, String boxTitle) { @@ -353,9 +363,9 @@ public class CheckListRunController extends FormBasicController implements Contr private void saveOpenPanel(UserRequest ureq, String panelId, boolean newValue) { Preferences guiPrefs = ureq.getUserSession().getGuiPreferences(); if (guiPrefs != null) { - guiPrefs.putAndSave(CheckListRunController.class, getOpenPanelId(panelId), new Boolean(newValue)); + guiPrefs.putAndSave(CheckListRunController.class, getOpenPanelId(panelId), Boolean.valueOf(newValue)); } - flc.getFormItemComponent().contextPut("in-" + panelId, new Boolean(newValue)); + flc.getFormItemComponent().contextPut("in-" + panelId, Boolean.valueOf(newValue)); } private String getOpenPanelId(String panelId) { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunForCoachController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunForCoachController.java index 7c2fad6e7fe23e43ec3cc11fe719022143784ed2..da5aa23e4e46e6105a977928ad5b698b944ebfc3 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunForCoachController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunForCoachController.java @@ -27,6 +27,7 @@ import org.olat.core.gui.components.segmentedview.SegmentViewComponent; import org.olat.core.gui.components.segmentedview.SegmentViewEvent; import org.olat.core.gui.components.segmentedview.SegmentViewFactory; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; @@ -96,6 +97,16 @@ public class CheckListRunForCoachController extends BasicController { } } + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(runController == source) { + if(event == Event.CHANGED_EVENT) { + fireEvent(ureq, event); + } + } + super.event(ureq, source, event); + } + private void doOpenRun(UserRequest ureq) { if(runController == null) { runController = new CheckListRunController(ureq, getWindowControl(), userCourseEnv, courseOres, courseNode); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_content/identity_courseelement.html b/src/main/java/org/olat/course/nodes/gta/ui/_content/identity_courseelement.html index 780df08442b7e6f1929770de47f5c82a17a6400f..981c85aa4377513cce26d6d23602022e41ac1d6c 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_content/identity_courseelement.html +++ b/src/main/java/org/olat/course/nodes/gta/ui/_content/identity_courseelement.html @@ -11,3 +11,11 @@ #end </div> $r.render("table") +<div class="o_button_group"> + #if($r.available("bulk.done")) + $r.render("bulk.done") + #end + #if($r.available("bulk.visible")) + $r.render("bulk.visible") + #end +</div> \ No newline at end of file