From badedc99a997114bd08653bacd45f6dac2c2a113 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 22 Jan 2018 08:58:17 +0100 Subject: [PATCH] OO-3251: sort the list for coach in the participant folder alphabetically --- .../org/olat/course/nodes/PFCourseNode.java | 15 +-- .../course/nodes/pf/manager/PFManager.java | 17 ---- .../course/nodes/pf/ui/PFCoachController.java | 97 ++++++++++--------- .../course/nodes/pf/ui/PFRunController.java | 9 +- 4 files changed, 57 insertions(+), 81 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/PFCourseNode.java b/src/main/java/org/olat/course/nodes/PFCourseNode.java index efebb7a2655..a6d6dfe6dc0 100644 --- a/src/main/java/org/olat/course/nodes/PFCourseNode.java +++ b/src/main/java/org/olat/course/nodes/PFCourseNode.java @@ -124,20 +124,17 @@ public class PFCourseNode extends AbstractAccessableCourseNode { } public boolean hasParticipantBoxConfigured() { - boolean hasStundentBox = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_PARTICIPANTBOX); - return hasStundentBox; + return getModuleConfiguration().getBooleanSafe(CONFIG_KEY_PARTICIPANTBOX); } public boolean hasCoachBoxConfigured() { - boolean hasTeacherBox = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_COACHBOX); - return hasTeacherBox; + return getModuleConfiguration().getBooleanSafe(CONFIG_KEY_COACHBOX); } public boolean hasAlterFileConfigured() { boolean hasStundentBox = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_PARTICIPANTBOX); if (hasStundentBox) { - boolean hasAlterFile = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_ALTERFILE); - return hasAlterFile; + return getModuleConfiguration().getBooleanSafe(CONFIG_KEY_ALTERFILE); } return false; } @@ -145,8 +142,7 @@ public class PFCourseNode extends AbstractAccessableCourseNode { public boolean hasLimitCountConfigured() { boolean hasStundentBox = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_PARTICIPANTBOX); if (hasStundentBox) { - boolean hasLimitCount = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_LIMITCOUNT); - return hasLimitCount; + return getModuleConfiguration().getBooleanSafe(CONFIG_KEY_LIMITCOUNT); } return false; } @@ -161,8 +157,7 @@ public class PFCourseNode extends AbstractAccessableCourseNode { public boolean hasDropboxTimeFrameConfigured() { boolean hasStundentBox = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_PARTICIPANTBOX); if (hasStundentBox) { - boolean hasTimeFrame = getModuleConfiguration().getBooleanSafe(CONFIG_KEY_TIMEFRAME); - return hasTimeFrame; + return getModuleConfiguration().getBooleanSafe(CONFIG_KEY_TIMEFRAME); } return false; } diff --git a/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java b/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java index dda27b3f1c2..97a7f26e143 100644 --- a/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java +++ b/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java @@ -40,8 +40,6 @@ import org.olat.basesecurity.GroupRoles; import org.olat.core.commons.modules.bc.components.FolderComponent; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.commons.services.notifications.SubscriptionContext; -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.logging.OLog; @@ -245,21 +243,6 @@ public class PFManager { uploadFileToReturnBox(uploadFile, fileName, courseEnv, pfNode, identity); } } - - - /** - * Export media resource as folder download. - * - * @param ureq - * @param identities - * @param pfNode - * @param courseEnv - */ - public MediaResource exportMediaResource (UserRequest ureq, List<Identity> identities, PFCourseNode pfNode, CourseEnvironment courseEnv) { - MediaResource resource = new FileSystemExport (identities, pfNode, courseEnv, ureq.getLocale()); - ureq.getDispatchResult().setResultingMediaResource(resource); - return resource; - } /** * Calculate callback dependent on ModuleConfiguration. diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java index d9701e30875..9d6550e0a57 100644 --- a/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java +++ b/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java @@ -25,6 +25,7 @@ import java.util.List; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityModule; +import org.olat.core.commons.persistence.SortKey; import org.olat.core.commons.services.notifications.PublisherData; import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController; @@ -33,6 +34,7 @@ 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.elements.FormLink; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; @@ -46,23 +48,22 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlex import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; -import org.olat.core.gui.components.velocity.VelocityContainer; 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.closablewrapper.CloseableModalController; +import org.olat.core.gui.media.MediaResource; import org.olat.core.id.Identity; import org.olat.core.id.Roles; import org.olat.core.id.UserConstants; import org.olat.core.util.resource.OresHelper; import org.olat.course.nodes.PFCourseNode; -import org.olat.course.nodes.TitledWrapperHelper; +import org.olat.course.nodes.pf.manager.FileSystemExport; import org.olat.course.nodes.pf.manager.PFManager; import org.olat.course.nodes.pf.manager.PFView; import org.olat.course.nodes.pf.ui.DropBoxTableModel.DropBoxCols; import org.olat.course.run.environment.CourseEnvironment; -import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.resource.OLATResource; import org.olat.user.HomePageConfig; @@ -88,7 +89,6 @@ public class PFCoachController extends FormBasicController implements Controller private Link backLink; private DropBoxTableModel tableModel; private FlexiTableElement dropboxTable; - private VelocityContainer mainVC; private CloseableModalController cmc; private PFFileUploadController pfFileUploadCtr; @@ -101,7 +101,7 @@ public class PFCoachController extends FormBasicController implements Controller private UserCourseEnvironment userCourseEnv; private CourseEnvironment courseEnv; - private Identity identity; + private PFView pfView; @Autowired private PFManager pfManager; @@ -119,7 +119,6 @@ public class PFCoachController extends FormBasicController implements Controller this.userCourseEnv = userCourseEnv; this.courseEnv = userCourseEnv.getCourseEnvironment(); this.pfNode = sfNode; - this.identity = ureq.getIdentity(); this.pfView = pfView; Roles roles = ureq.getUserSession().getRoles(); @@ -128,6 +127,7 @@ public class PFCoachController extends FormBasicController implements Controller setTranslator(userManager.getPropertyHandlerTranslator(getTranslator())); initForm(ureq); + loadModel(true); } @Override @@ -148,7 +148,7 @@ public class PFCoachController extends FormBasicController implements Controller fireEvent(ureq, Event.CHANGED_EVENT); } else { pfManager.uploadFileToDropBox(pfFileUploadCtr.getUpLoadFile(), - pfFileUploadCtr.getUploadFileName(), 4, courseEnv, pfNode, identity); + pfFileUploadCtr.getUploadFileName(), 4, courseEnv, pfNode, getIdentity()); } cmc.deactivate(); cleanUpCMC(); @@ -157,19 +157,11 @@ public class PFCoachController extends FormBasicController implements Controller cleanUpCMC(); } super.event(ureq, source, event); - } @Override protected void doDispose() { // nothing to dispose - - } - - public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq) { - // integrate it into the olat menu - Controller ctrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), this, pfNode, "o_pf_icon"); - return new NodeRunConstructionResult(ctrl); } @Override @@ -203,36 +195,37 @@ public class PFCoachController extends FormBasicController implements Controller } } } - } - private void doSelectParticipantFolder (UserRequest ureq, UserPropertiesRow row, PFView pfView) { - Identity identity = securityManager.loadIdentityByKey(row.getIdentityKey()); + private void doSelectParticipantFolder (UserRequest ureq, UserPropertiesRow row, PFView view) { + Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey()); removeAsListenerAndDispose(pfParticipantController); pfParticipantController = new PFParticipantController(ureq, getWindowControl(), pfNode, - userCourseEnv, identity, pfView, true, false); + userCourseEnv, assessedIdentity, view, true, false); listenTo(pfParticipantController); - mainVC.put("single", pfParticipantController.getInitialComponent()); + flc.put("single", pfParticipantController.getInitialComponent()); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - mainVC = ((FormLayoutContainer) formLayout).getFormItemComponent(); - - OLATResource course = courseEnv.getCourseGroupManager().getCourseResource(); - String businessPath = getWindowControl().getBusinessControl().getAsString(); - SubscriptionContext subsContext = new SubscriptionContext(course, pfNode.getIdent()); - PublisherData publisherData = new PublisherData(OresHelper.calculateTypeName(PFCourseNode.class), - String.valueOf(course.getResourceableId()), businessPath); - contextualSubscriptionCtr = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, - publisherData); - listenTo(contextualSubscriptionCtr); - mainVC.put("contextualSubscription", contextualSubscriptionCtr.getInitialComponent()); + if(formLayout instanceof FormLayoutContainer) { + FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; + OLATResource course = courseEnv.getCourseGroupManager().getCourseResource(); + String businessPath = getWindowControl().getBusinessControl().getAsString(); + SubscriptionContext subsContext = new SubscriptionContext(course, pfNode.getIdent()); + PublisherData publisherData = new PublisherData(OresHelper.calculateTypeName(PFCourseNode.class), + String.valueOf(course.getResourceableId()), businessPath); + contextualSubscriptionCtr = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, + publisherData); + listenTo(contextualSubscriptionCtr); + layoutCont.put("contextualSubscription", contextualSubscriptionCtr.getInitialComponent()); + backLink = LinkFactory.createLinkBack(layoutCont.getFormItemComponent(), this); + } - backLink = LinkFactory.createLinkBack(mainVC, this); FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); int i = 0; + FlexiTableSortOptions options = new FlexiTableSortOptions(); for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { int colIndex = USER_PROPS_OFFSET + i++; if (userPropertyHandler == null) continue; @@ -250,6 +243,12 @@ public class PFCoachController extends FormBasicController implements Controller col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colIndex, true, propName); } columnsModel.addFlexiColumnModel(col); + + if(!options.hasDefaultOrderBy()) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } else if(UserConstants.LASTNAME.equals(propName)) { + options.setDefaultOrderBy(new SortKey(propName, true)); + } } if (pfNode.hasParticipantBoxConfigured()){ @@ -267,15 +266,13 @@ public class PFCoachController extends FormBasicController implements Controller tableModel = new DropBoxTableModel(columnsModel, getTranslator()); dropboxTable = uifactory.addTableElement(getWindowControl(), "table", tableModel, getTranslator(), formLayout); - dropboxTable.setMultiSelect(true); dropboxTable.setSelectAllEnable(true); dropboxTable.setExportEnabled(true); - dropboxTable.setAndLoadPersistedPreferences(ureq, this.getClass().getName() + "_" + pfView.name()); + dropboxTable.setSortSettings(options); + dropboxTable.setAndLoadPersistedPreferences(ureq, "participant-folder_coach_" + pfView.name()); dropboxTable.setEmtpyTableMessageKey("table.empty"); - tableModel.setObjects(pfManager.getParticipants(identity, pfNode, userPropertyHandlers, getLocale(), courseEnv, userCourseEnv.isAdmin())); - mainVC.contextPut("hasParticipants", tableModel.getRowCount() > 0); FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); @@ -286,6 +283,12 @@ public class PFCoachController extends FormBasicController implements Controller uploadAllLink = uifactory.addFormLink("upload.link", buttonGroupLayout, Link.BUTTON); } + private void loadModel(boolean full) { + List<DropBoxRow> rows = pfManager.getParticipants(getIdentity(), pfNode, userPropertyHandlers, getLocale(), courseEnv, userCourseEnv.isAdmin()); + tableModel.setObjects(rows); + dropboxTable.reset(full, full, true); + flc.contextPut("hasParticipants", tableModel.getRowCount() > 0); + } private void uploadToSelection (File uploadFile, String fileName) { List<Long> identitykeys = new ArrayList<>(); @@ -299,39 +302,37 @@ public class PFCoachController extends FormBasicController implements Controller private void downloadFromSelection (UserRequest ureq) { List<Long> identitykeys = new ArrayList<>(); - for (int i : dropboxTable.getMultiSelectedIndex()) { + for (Integer i : dropboxTable.getMultiSelectedIndex()) { identitykeys.add(tableModel.getObject(i).getIdentity().getIdentityKey()); } List<Identity> identities = securityManager.loadIdentityByKeys(identitykeys); - - pfManager.exportMediaResource(ureq, identities, pfNode, courseEnv); + MediaResource resource = new FileSystemExport (identities, pfNode, courseEnv, getLocale()); + ureq.getDispatchResult().setResultingMediaResource(resource); } - @Override protected void formOK(UserRequest ureq) { - + // } private void doOpenUploadController (UserRequest ureq, boolean uploadToAll) { pfFileUploadCtr = new PFFileUploadController(ureq, getWindowControl(), uploadToAll); listenTo(pfFileUploadCtr); + cmc = new CloseableModalController(getWindowControl(), translate("close"), pfFileUploadCtr.getInitialComponent(), true, translate("upload.link")); listenTo(cmc); - cmc.activate(); } private void doOpenHomePage (UserRequest ureq, UserPropertiesRow row) { - - Identity identity = securityManager.loadIdentityByKey(row.getIdentityKey()); - homePageDisplayController = new HomePageDisplayController(ureq, getWindowControl(), identity, new HomePageConfig()); + Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey()); + homePageDisplayController = new HomePageDisplayController(ureq, getWindowControl(), assessedIdentity, new HomePageConfig()); listenTo(homePageDisplayController); + cmc = new CloseableModalController(getWindowControl(), translate("close"), homePageDisplayController.getInitialComponent(), true, translate("upload.link")); listenTo(cmc); - cmc.activate(); } @@ -344,10 +345,10 @@ public class PFCoachController extends FormBasicController implements Controller private void back() { if(pfParticipantController != null) { - mainVC.remove(pfParticipantController.getInitialComponent()); + flc.remove(pfParticipantController.getInitialComponent()); removeAsListenerAndDispose(pfParticipantController); pfParticipantController = null; + loadModel(false); } } - } diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFRunController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFRunController.java index ec44b07e581..fd1d561a7bf 100644 --- a/src/main/java/org/olat/course/nodes/pf/ui/PFRunController.java +++ b/src/main/java/org/olat/course/nodes/pf/ui/PFRunController.java @@ -67,8 +67,7 @@ public class PFRunController extends BasicController { super(ureq, wControl); this.pfNode = pfNode; this.userCourseEnv = userCourseEnv; - - this.pfView = pfManager.providePFView(pfNode); + pfView = pfManager.providePFView(pfNode); mainVC = createVelocityContainer("run"); @@ -85,9 +84,7 @@ public class PFRunController extends BasicController { doOpenParticipantsView(ureq); } - putInitialPanel(mainVC); - } @Override @@ -140,9 +137,9 @@ public class PFRunController extends BasicController { doOpenParticipantsView(ureq, ureq.getIdentity(), pfView); } - private void doOpenParticipantsView(UserRequest ureq, Identity identity, PFView pfView) { + private void doOpenParticipantsView(UserRequest ureq, Identity identity, PFView view) { participantController = new PFParticipantController(ureq, getWindowControl(), pfNode, - userCourseEnv, identity, pfView, false, false); + userCourseEnv, identity, view, false, false); listenTo(participantController); mainVC.put("segmentCmp", participantController.getInitialComponent()); } -- GitLab