From 7d2238dbfbc0bfe5fbb658c3a7ad7658428c9794 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 16 Jan 2018 15:17:41 +0100 Subject: [PATCH] OO-3239: add order by last name (default) in roll call table --- .../lecture/ui/ParticipantListDataModel.java | 3 ++- .../ParticipantListRepositoryController.java | 12 +++++++++ .../ui/ParticipantListSortDelegate.java | 20 ++++++++++++++ .../lecture/ui/TeacherRollCallController.java | 27 ++++++++++++++++--- 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/olat/modules/lecture/ui/ParticipantListSortDelegate.java diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantListDataModel.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantListDataModel.java index f772637aa1c..bbbd429ccda 100644 --- a/src/main/java/org/olat/modules/lecture/ui/ParticipantListDataModel.java +++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantListDataModel.java @@ -54,7 +54,8 @@ implements SortableFlexiTableDataModel<ParticipantRow>, ExportableFlexiTableData @Override public void sort(SortKey sortKey) { - // + List<ParticipantRow> rows = new ParticipantListSortDelegate(sortKey, this, locale).sort(); + super.setObjects(rows); } @Override diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java index 84aaa7fceee..e9450735f89 100644 --- a/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java +++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java @@ -29,11 +29,13 @@ import java.util.stream.Collectors; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityModule; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; +import org.olat.core.commons.persistence.SortKey; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement; +import org.olat.core.gui.components.form.flexible.elements.FlexiTableSortOptions; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; @@ -50,6 +52,7 @@ import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.id.Identity; import org.olat.core.id.Roles; +import org.olat.core.id.UserConstants; import org.olat.modules.lecture.LectureModule; import org.olat.modules.lecture.LectureService; import org.olat.modules.lecture.RepositoryEntryLectureConfiguration; @@ -145,9 +148,11 @@ public class ParticipantListRepositoryController extends FormBasicController { layoutCont.getFormItemComponent().contextPut("withPrint", Boolean.TRUE); } + FlexiTableSortOptions options = new FlexiTableSortOptions(); FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); if(isAdministrativeUser) { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ParticipantsCols.username)); + options.setDefaultOrderBy(new SortKey(ParticipantsCols.username.sortKey(), true)); } int colPos = USER_PROPS_OFFSET; @@ -160,6 +165,12 @@ public class ParticipantListRepositoryController extends FormBasicController { FlexiColumnModel col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, true, propName); columnsModel.addFlexiColumnModel(col); colPos++; + + if(!options.hasDefaultOrderBy()) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } else if(UserConstants.LASTNAME.equals(propName)) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } } columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ParticipantsCols.plannedLectures)); @@ -199,6 +210,7 @@ public class ParticipantListRepositoryController extends FormBasicController { tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 20, false, getTranslator(), formLayout); tableEl.setExportEnabled(!printView); tableEl.setEmtpyTableMessageKey("empty.table.participant.list"); + tableEl.setSortSettings(options); tableEl.setAndLoadPersistedPreferences(ureq, "participant-list-repo-entry"); } diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantListSortDelegate.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantListSortDelegate.java new file mode 100644 index 00000000000..f40df7ce02e --- /dev/null +++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantListSortDelegate.java @@ -0,0 +1,20 @@ +package org.olat.modules.lecture.ui; + +import java.util.Locale; + +import org.olat.core.commons.persistence.SortKey; +import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate; + +/** + * + * Initial date: 16 janv. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class ParticipantListSortDelegate extends SortableFlexiTableModelDelegate<ParticipantRow> { + + public ParticipantListSortDelegate(SortKey orderBy, ParticipantListDataModel tableModel, Locale locale) { + super(orderBy, tableModel, locale); + } + +} diff --git a/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java b/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java index 1308c22c4b5..22bdba66698 100644 --- a/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java +++ b/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java @@ -26,10 +26,12 @@ import java.util.List; import java.util.Map; import org.olat.basesecurity.BaseSecurityModule; +import org.olat.core.commons.persistence.SortKey; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement; +import org.olat.core.gui.components.form.flexible.elements.FlexiTableSortOptions; 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.TextElement; @@ -52,6 +54,7 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowC import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.id.Identity; import org.olat.core.id.Roles; +import org.olat.core.id.UserConstants; import org.olat.core.logging.activity.CoreLoggingResourceable; import org.olat.core.logging.activity.LearningResourceLoggingAction; import org.olat.core.logging.activity.OlatResourceableType; @@ -193,9 +196,11 @@ public class TeacherRollCallController extends FormBasicController { } // table + FlexiTableSortOptions options = new FlexiTableSortOptions(); FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); if(isAdministrativeUser) { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(RollCols.username)); + options.setDefaultOrderBy(new SortKey(RollCols.username.sortKey(), true)); } int colPos = USER_PROPS_OFFSET; @@ -208,22 +213,33 @@ public class TeacherRollCallController extends FormBasicController { FlexiColumnModel col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, true, propName); columnsModel.addFlexiColumnModel(col); colPos++; + + if(!options.hasDefaultOrderBy()) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } else if(UserConstants.LASTNAME.equals(propName)) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } } if(lectureBlock.isCompulsory()) { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(RollCols.status)); for(int i=0; i<numOfLectures; i++) { - FlexiColumnModel col = new DefaultFlexiColumnModel("table.header.lecture." + (i+1), i + CHECKBOX_OFFSET, true, "lecture." + (i+1)); + DefaultFlexiColumnModel col = new DefaultFlexiColumnModel("table.header.lecture." + (i+1), i + CHECKBOX_OFFSET, true, "lecture." + (i+1)); + col.setAlwaysVisible(true); columnsModel.addFlexiColumnModel(col); } //all button - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("all", + DefaultFlexiColumnModel allCol = new DefaultFlexiColumnModel("all", RollCols.all.ordinal(), "all", - new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("all"), "all", null, null, translate("all.desc")), null))); + new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("all"), "all", null, null, translate("all.desc")), null)); + allCol.setAlwaysVisible(true); + columnsModel.addFlexiColumnModel(allCol); if(secCallback.canViewAuthorizedAbsences() || secCallback.canEditAuthorizedAbsences()) { - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(RollCols.authorizedAbsence)); + DefaultFlexiColumnModel authorizedCol = new DefaultFlexiColumnModel(RollCols.authorizedAbsence); + authorizedCol.setAlwaysVisible(true); + columnsModel.addFlexiColumnModel(authorizedCol); } } @@ -232,6 +248,8 @@ public class TeacherRollCallController extends FormBasicController { tableModel = new TeacherRollCallDataModel(columnsModel, secCallback, getLocale()); tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 20, false, getTranslator(), formLayout); tableEl.setCustomizeColumns(true); + tableEl.setSortSettings(options); + tableEl.setAndLoadPersistedPreferences(ureq, "teacher-roll-call"); //buttons uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl()); @@ -289,6 +307,7 @@ public class TeacherRollCallController extends FormBasicController { rows.add(forgeRow(participant, rollCall)); } tableModel.setObjects(rows); + tableEl.reset(false, false, true); } private TeacherRollCallRow forgeRow(Identity participant, LectureBlockRollCall rollCall) { -- GitLab