From eeee1f7f2ba1e9b57f6ffd5c23c76264c22e0be3 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 16 Oct 2012 12:04:08 +0200 Subject: [PATCH] OO-378: make the excel download of group members configurable --- .../securitygroup/gui/GroupController.java | 21 +++------------ .../gui/WaitingGroupController.java | 6 ++--- .../olat/basesecurity/BaseSecurityModule.java | 1 - .../olat/catalog/ui/CatalogController.java | 2 +- .../ProjectBrokerCourseEditorController.java | 2 +- .../projectbroker/ProjectGroupController.java | 6 ++--- .../org/olat/group/BusinessGroupModule.java | 18 +++++++++++++ .../group/_spring/businessGroupContext.xml | 1 + .../manager/BusinessGroupImportExport.java | 6 ++++- .../manager/BusinessGroupPropertyDAO.java | 27 +++++++++++++++---- .../manager/BusinessGroupServiceImpl.java | 5 +++- .../org/olat/group/model/DisplayMembers.java | 10 +++++++ .../edit/BusinessGroupMembersController.java | 6 ++--- .../ui/edit/DisplayMemberSwitchForm.java | 6 +++++ .../ui/edit/_i18n/LocalStrings_de.properties | 1 + .../ui/edit/_i18n/LocalStrings_en.properties | 1 + .../ui/edit/_i18n/LocalStrings_fr.properties | 1 + .../GroupMembersDisplayController.java | 6 ++--- .../run/BusinessGroupMainRunController.java | 7 ++--- .../RepositoryDetailsController.java | 4 +-- .../resources/serviceconfig/olat.properties | 3 +++ 21 files changed, 96 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/olat/admin/securitygroup/gui/GroupController.java b/src/main/java/org/olat/admin/securitygroup/gui/GroupController.java index 50b0dc8ca6c..eb28a589978 100644 --- a/src/main/java/org/olat/admin/securitygroup/gui/GroupController.java +++ b/src/main/java/org/olat/admin/securitygroup/gui/GroupController.java @@ -127,20 +127,6 @@ public class GroupController extends BasicController { protected static final String usageIdentifyer = IdentitiesOfGroupTableDataModel.class.getCanonicalName(); protected boolean isAdministrativeUser; - - /** - * @param ureq - * @param wControl - * @param mayModifyMembers - * @param keepAtLeastOne - * @param enableTablePreferences - * @param aSecurityGroup - */ - public GroupController(UserRequest ureq, WindowControl wControl, boolean mayModifyMembers, boolean keepAtLeastOne, boolean enableTablePreferences, SecurityGroup aSecurityGroup) { - super(ureq, wControl); - init(ureq, mayModifyMembers, keepAtLeastOne, enableTablePreferences, false, aSecurityGroup); - } - /** * @param ureq * @param wControl @@ -152,14 +138,14 @@ public class GroupController extends BasicController { */ public GroupController(UserRequest ureq, WindowControl wControl, boolean mayModifyMembers, boolean keepAtLeastOne, boolean enableTablePreferences, boolean enableUserSelection, - SecurityGroup aSecurityGroup) { + boolean allowDownload, SecurityGroup aSecurityGroup) { super(ureq, wControl); - init(ureq, mayModifyMembers, keepAtLeastOne, enableTablePreferences, enableUserSelection, aSecurityGroup); + init(ureq, mayModifyMembers, keepAtLeastOne, enableTablePreferences, enableUserSelection, allowDownload, aSecurityGroup); } protected void init(UserRequest ureq, boolean mayModifyMembers, boolean keepAtLeastOne, boolean enableTablePreferences, boolean enableUserSelection, - SecurityGroup aSecurityGroup) { + boolean allowDownload, SecurityGroup aSecurityGroup) { this.securityGroup = aSecurityGroup; this.mayModifyMembers = mayModifyMembers; this.keepAtLeastOne = keepAtLeastOne; @@ -181,6 +167,7 @@ public class GroupController extends BasicController { } TableGuiConfiguration tableConfig = new TableGuiConfiguration(); + tableConfig.setDownloadOffered(allowDownload); if (enableTablePreferences) { // save table preferences for each group seperatly if (mayModifyMembers) { diff --git a/src/main/java/org/olat/admin/securitygroup/gui/WaitingGroupController.java b/src/main/java/org/olat/admin/securitygroup/gui/WaitingGroupController.java index 9cf667d57e6..fab4d24fbd3 100644 --- a/src/main/java/org/olat/admin/securitygroup/gui/WaitingGroupController.java +++ b/src/main/java/org/olat/admin/securitygroup/gui/WaitingGroupController.java @@ -30,7 +30,6 @@ import java.util.List; import org.olat.basesecurity.SecurityGroup; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.table.DefaultColumnDescriptor; -import org.olat.core.gui.components.table.StaticColumnDescriptor; import org.olat.core.gui.components.table.Table; import org.olat.core.gui.components.table.TableController; import org.olat.core.gui.components.table.TableMultiSelectEvent; @@ -74,8 +73,9 @@ public class WaitingGroupController extends GroupController { * @param enableTablePreferences * @param aSecurityGroup */ - public WaitingGroupController(UserRequest ureq, WindowControl wControl, boolean mayModifyMembers, boolean keepAtLeastOne, boolean enableTablePreferences, SecurityGroup waitingListGroup) { - super(ureq, wControl, mayModifyMembers, keepAtLeastOne, enableTablePreferences, waitingListGroup); + public WaitingGroupController(UserRequest ureq, WindowControl wControl, boolean mayModifyMembers, boolean keepAtLeastOne, boolean enableTablePreferences, + boolean allowDownload, SecurityGroup waitingListGroup) { + super(ureq, wControl, mayModifyMembers, keepAtLeastOne, enableTablePreferences, false, allowDownload, waitingListGroup); } /** diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityModule.java b/src/main/java/org/olat/basesecurity/BaseSecurityModule.java index b5b4469db0f..a7f4df0cc11 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityModule.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityModule.java @@ -93,7 +93,6 @@ public class BaseSecurityModule extends AbstractOLATModule { public static Boolean USERMANAGER_CAN_EDIT_ALL_PROFILE_FIELDS = true; private static String defaultAuthProviderIdentifier; - private String userSearchAdminPropsForUsers; private String userSearchAdminPropsForAuthors; private String userSearchAdminPropsForUsermanagers; diff --git a/src/main/java/org/olat/catalog/ui/CatalogController.java b/src/main/java/org/olat/catalog/ui/CatalogController.java index 1274e9719d6..98838634cba 100644 --- a/src/main/java/org/olat/catalog/ui/CatalogController.java +++ b/src/main/java/org/olat/catalog/ui/CatalogController.java @@ -508,7 +508,7 @@ public class CatalogController extends BasicController implements Activateable2 boolean keepAtLeastOne = currentCatalogEntryLevel == 0; removeAsListenerAndDispose(groupController); - groupController = new GroupController(ureq, getWindowControl(), true, keepAtLeastOne, false, secGroup); + groupController = new GroupController(ureq, getWindowControl(), true, keepAtLeastOne, false, false, false, secGroup); listenTo(groupController); // open form in dialog diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java index a032f4c8262..8c476d179d6 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java @@ -189,7 +189,7 @@ public class ProjectBrokerCourseEditorController extends ActivateableTabbableDef String groupDescription = translate("account.manager.groupdescription", node.getShortTitle()); accountManagerGroup = ProjectBrokerManagerFactory.getProjectGroupManager().getAccountManagerGroupFor(cpm, node, course, groupName, groupDescription, ureq.getIdentity()); if (accountManagerGroup != null) { - accountManagerGroupController = new GroupController(ureq, getWindowControl(), true, false, true, accountManagerGroup.getPartipiciantGroup()); + accountManagerGroupController = new GroupController(ureq, getWindowControl(), true, false, true, false, true, accountManagerGroup.getPartipiciantGroup()); listenTo(accountManagerGroupController); // add mail templates used when adding and removing users MailTemplate ownerAddUserMailTempl = BGMailHelper.createAddParticipantMailTemplate(accountManagerGroup, ureq.getIdentity()); diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectGroupController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectGroupController.java index 23593a96223..8a24b7ee322 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectGroupController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectGroupController.java @@ -87,12 +87,12 @@ public class ProjectGroupController extends BasicController { VelocityContainer myContent = createVelocityContainer("projectgroup_management"); // Project Leader Management - projectLeaderController = new GroupController(ureq, getWindowControl(), true, true, true, project.getProjectLeaderGroup()); + projectLeaderController = new GroupController(ureq, getWindowControl(), true, true, true, false, true, project.getProjectLeaderGroup()); listenTo(projectLeaderController); myContent.put("projectLeaderController", projectLeaderController.getInitialComponent()); // Project Member Management - projectMemberController = new GroupController(ureq, getWindowControl(), true, false, true, project.getProjectParticipantGroup()); + projectMemberController = new GroupController(ureq, getWindowControl(), true, false, true, false, true, project.getProjectParticipantGroup()); listenTo(projectMemberController); myContent.put("projectMemberController", projectMemberController.getInitialComponent()); // add mail templates used when adding and removing users @@ -103,7 +103,7 @@ public class ProjectGroupController extends BasicController { // Project Candidates Management if (projectBrokerModuleConfiguration.isAcceptSelectionManually()) { - projectCandidatesController = new WaitingGroupController(ureq, getWindowControl(), true, false, true, project.getCandidateGroup()); + projectCandidatesController = new WaitingGroupController(ureq, getWindowControl(), true, false, true, true, project.getCandidateGroup()); listenTo(projectCandidatesController); myContent.contextPut("isProjectCandidatesListEmpty", ProjectBrokerManagerFactory.getProjectGroupManager().isCandidateListEmpty(project.getCandidateGroup()) ); myContent.put("projectCandidatesController", projectCandidatesController.getInitialComponent()); diff --git a/src/main/java/org/olat/group/BusinessGroupModule.java b/src/main/java/org/olat/group/BusinessGroupModule.java index 788642fbd84..82f82867491 100644 --- a/src/main/java/org/olat/group/BusinessGroupModule.java +++ b/src/main/java/org/olat/group/BusinessGroupModule.java @@ -43,6 +43,7 @@ public class BusinessGroupModule extends AbstractOLATModule { private static final String USER_ALLOW_CREATE_BG = "user.allowed.create"; private static final String AUTHOR_ALLOW_CREATE_BG = "author.allowed.create"; private static final String CONTACT_BUSINESS_CARD = "contact.business.card"; + private static final String USER_LIST_DOWNLOAD = "userlist.download.default.allowed"; public static final String CONTACT_BUSINESS_CARD_NEVER = "never"; public static final String CONTACT_BUSINESS_CARD_ALWAYS = "always"; @@ -51,6 +52,7 @@ public class BusinessGroupModule extends AbstractOLATModule { private boolean userAllowedCreate; private boolean authorAllowedCreate; + private boolean userListDownloadDefaultAllowed; private String contactBusinessCard; @@ -88,6 +90,11 @@ public class BusinessGroupModule extends AbstractOLATModule { if(StringHelper.containsNonWhitespace(contactAllowed)) { contactBusinessCard = contactAllowed; } + + String downloadAllowed = getStringPropertyValue(USER_LIST_DOWNLOAD, true); + if(StringHelper.containsNonWhitespace(downloadAllowed)) { + userListDownloadDefaultAllowed = "true".equals(downloadAllowed); + } } /** @@ -98,6 +105,7 @@ public class BusinessGroupModule extends AbstractOLATModule { userAllowedCreate = getBooleanConfigParameter(USER_ALLOW_CREATE_BG, true); authorAllowedCreate = getBooleanConfigParameter(AUTHOR_ALLOW_CREATE_BG, true); contactBusinessCard = getStringConfigParameter(CONTACT_BUSINESS_CARD, CONTACT_BUSINESS_CARD_NEVER, true); + userListDownloadDefaultAllowed = getBooleanConfigParameter(USER_LIST_DOWNLOAD, true); } @Override @@ -133,6 +141,16 @@ public class BusinessGroupModule extends AbstractOLATModule { public void setContactBusinessCard(String contactBusinessCard) { setStringProperty(CONTACT_BUSINESS_CARD, contactBusinessCard, true); } + + public boolean isUserListDownloadDefaultAllowed() { + return userListDownloadDefaultAllowed; + } + + public void setUserListDownloadDefaultAllowed(boolean userListDownload) { + setStringProperty(USER_LIST_DOWNLOAD, Boolean.toString(userListDownload), true); + } + + } \ No newline at end of file diff --git a/src/main/java/org/olat/group/_spring/businessGroupContext.xml b/src/main/java/org/olat/group/_spring/businessGroupContext.xml index 30405b83174..368fc67224a 100644 --- a/src/main/java/org/olat/group/_spring/businessGroupContext.xml +++ b/src/main/java/org/olat/group/_spring/businessGroupContext.xml @@ -37,6 +37,7 @@ <!-- Show the contact form in the business group card. Values are: never,always,groupconfig --> contact.business.card=${group.card.contact} + userlist.download.default.allowed=${group.userlist.download.default.allowed} </value> </property> </bean> diff --git a/src/main/java/org/olat/group/manager/BusinessGroupImportExport.java b/src/main/java/org/olat/group/manager/BusinessGroupImportExport.java index 920f8a70f48..39d53ff3ab7 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupImportExport.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupImportExport.java @@ -39,6 +39,7 @@ import org.olat.core.logging.Tracing; import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupModule; import org.olat.group.BusinessGroupService; import org.olat.group.area.BGArea; import org.olat.group.area.BGAreaManager; @@ -70,6 +71,8 @@ public class BusinessGroupImportExport { private BusinessGroupService businessGroupService; @Autowired private BusinessGroupPropertyDAO businessGroupPropertyManager; + @Autowired + private BusinessGroupModule groupModule; public void exportGroups(List<BusinessGroup> groups, List<BGArea> areas, File fExportFile, BusinessGroupEnvironment env, boolean backwardsCompatible) { @@ -315,7 +318,8 @@ public class BusinessGroupImportExport { if (group.showWaitingList != null) { showWaitingList = group.showWaitingList; } - businessGroupPropertyManager.updateDisplayMembers(newGroup, showOwners, showParticipants, showWaitingList, false, false, false); + boolean download = groupModule.isUserListDownloadDefaultAllowed(); + businessGroupPropertyManager.updateDisplayMembers(newGroup, showOwners, showParticipants, showWaitingList, false, false, false, download); if(dbCount++ % 3 == 0) { dbInstance.commitAndCloseSession(); diff --git a/src/main/java/org/olat/group/manager/BusinessGroupPropertyDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupPropertyDAO.java index 2651c8eda30..613ec05f3b0 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupPropertyDAO.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupPropertyDAO.java @@ -27,6 +27,7 @@ package org.olat.group.manager; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupModule; import org.olat.properties.Property; import org.olat.properties.PropertyConstants; import org.olat.properties.PropertyManager; @@ -54,6 +55,8 @@ public class BusinessGroupPropertyDAO { @Autowired private PropertyManager propertyManager; + @Autowired + private BusinessGroupModule groupModule; /** * Creates and persists a new Property for the Display Members configuration @@ -82,7 +85,7 @@ public class BusinessGroupPropertyDAO { * @param showPartips */ public void updateDisplayMembers(BusinessGroup group, boolean showOwners, boolean showPartips, boolean showWaitingList, - boolean ownrsPublic, boolean partipsPublic, boolean waitingListPublic) { + boolean ownrsPublic, boolean partipsPublic, boolean waitingListPublic, boolean downloadLists) { long showXXX = 0; if (showOwners) showXXX += showOwnersVal; if (showPartips) showXXX += showPartipsVal; @@ -93,9 +96,12 @@ public class BusinessGroupPropertyDAO { if (partipsPublic) publicXXX += showPartipsVal; if (waitingListPublic) publicXXX += showWaitingListVal; + float download = downloadLists ? 1.0f : 0.0f; + Property property = findProperty(group); property.setLongValue(new Long(showXXX)); property.setStringValue(Long.toString(publicXXX)); + property.setFloatValue(new Float(download)); propertyManager.updateProperty(property); } @@ -151,6 +157,14 @@ public class BusinessGroupPropertyDAO { public boolean isWaitingListPublic(Property prop) { return ((getPublicMembersValue(prop) & showWaitingListVal) == showWaitingListVal); } + + public boolean isDownloadLists(Property prop) { + Float val = prop.getFloatValue(); + if(val == null) { + return groupModule.isUserListDownloadDefaultAllowed();//default + } + return 0.5f < val.floatValue(); + } private int getDisplayMembersValue(Property prop) { int showXXX = prop.getLongValue().intValue(); @@ -192,9 +206,12 @@ public class BusinessGroupPropertyDAO { boolean showOwners = showOwners(sourceGPM); boolean showPartips = showPartips(sourceGPM); boolean showWaitingList = showWaitingList(sourceGPM); - boolean ownersPublic = this.isOwnersPublic(sourceGPM); - boolean partipsPublic = this.isPartipsPublic(sourceGPM); - boolean waitingListPublic = this.isWaitingListPublic(sourceGPM); - updateDisplayMembers(targetGroup, showOwners, showPartips, showWaitingList, ownersPublic, partipsPublic, waitingListPublic); + boolean ownersPublic = isOwnersPublic(sourceGPM); + boolean partipsPublic = isPartipsPublic(sourceGPM); + boolean waitingListPublic = isWaitingListPublic(sourceGPM); + boolean downloadLists = isDownloadLists(sourceGPM); + updateDisplayMembers(targetGroup, showOwners, showPartips, showWaitingList, + ownersPublic, partipsPublic, waitingListPublic, + downloadLists); } } \ No newline at end of file diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index 24e9fd76ff7..ac575d93b20 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -283,6 +283,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD displayMembers.setOwnersPublic(businessGroupPropertyManager.isOwnersPublic(props)); displayMembers.setParticipantsPublic(businessGroupPropertyManager.isPartipsPublic(props)); displayMembers.setWaitingListPublic(businessGroupPropertyManager.isWaitingListPublic(props)); + displayMembers.setDownloadLists(businessGroupPropertyManager.isDownloadLists(props)); return displayMembers; } @@ -294,7 +295,9 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD boolean ownersPublic = displayMembers.isOwnersPublic(); boolean partipsPublic = displayMembers.isParticipantsPublic(); boolean waitingListPublic = displayMembers.isWaitingListPublic(); - businessGroupPropertyManager.updateDisplayMembers(group, showOwners, showPartips, showWaitingList, ownersPublic, partipsPublic, waitingListPublic); + boolean downloadLists = displayMembers.isDownloadLists(); + businessGroupPropertyManager.updateDisplayMembers(group, showOwners, showPartips, showWaitingList, + ownersPublic, partipsPublic, waitingListPublic, downloadLists); } @Override diff --git a/src/main/java/org/olat/group/model/DisplayMembers.java b/src/main/java/org/olat/group/model/DisplayMembers.java index bffc1e78f1d..03c0fe6a789 100644 --- a/src/main/java/org/olat/group/model/DisplayMembers.java +++ b/src/main/java/org/olat/group/model/DisplayMembers.java @@ -33,6 +33,8 @@ public class DisplayMembers { private boolean participantsPublic; private boolean waitingListPublic; + private boolean downloadLists; + public DisplayMembers() { // } @@ -90,4 +92,12 @@ public class DisplayMembers { public void setWaitingListPublic(boolean waitingListPublic) { this.waitingListPublic = waitingListPublic; } + + public boolean isDownloadLists() { + return downloadLists; + } + + public void setDownloadLists(boolean downloadLists) { + this.downloadLists = downloadLists; + } } diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java index cf74d3ab59f..f0a317e5888 100644 --- a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java +++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java @@ -101,7 +101,7 @@ public class BusinessGroupMembersController extends BasicController { boolean requiresOwner = courses.isEmpty(); // groupcontroller which allows to remove all members depending on // configuration. - ownerGrpCntrllr = new GroupController(ureq, getWindowControl(), true, requiresOwner, enableTablePreferences, businessGroup.getOwnerGroup()); + ownerGrpCntrllr = new GroupController(ureq, getWindowControl(), true, requiresOwner, enableTablePreferences, false, true, businessGroup.getOwnerGroup()); listenTo(ownerGrpCntrllr); // add mail templates used when adding and removing users MailTemplate ownerAddUserMailTempl = BGMailHelper.createAddParticipantMailTemplate(businessGroup, ureq.getIdentity()); @@ -114,7 +114,7 @@ public class BusinessGroupMembersController extends BasicController { // groupcontroller which allows to remove all members removeAsListenerAndDispose(partipGrpCntrllr); - partipGrpCntrllr = new GroupController(ureq, getWindowControl(), true, false, enableTablePreferences, businessGroup.getPartipiciantGroup()); + partipGrpCntrllr = new GroupController(ureq, getWindowControl(), true, false, enableTablePreferences, false, true, businessGroup.getPartipiciantGroup()); listenTo(partipGrpCntrllr); // add mail templates used when adding and removing users @@ -128,7 +128,7 @@ public class BusinessGroupMembersController extends BasicController { // Show waiting list only if enabled // waitinglist-groupcontroller which allows to remove all members SecurityGroup waitingList = businessGroup.getWaitingGroup(); - waitingGruppeController = new WaitingGroupController(ureq, getWindowControl(), true, false, enableTablePreferences, waitingList ); + waitingGruppeController = new WaitingGroupController(ureq, getWindowControl(), true, false, true, enableTablePreferences, waitingList ); listenTo(waitingGruppeController); // add mail templates used when adding and removing users diff --git a/src/main/java/org/olat/group/ui/edit/DisplayMemberSwitchForm.java b/src/main/java/org/olat/group/ui/edit/DisplayMemberSwitchForm.java index 5801d6377bc..724b306c2e9 100644 --- a/src/main/java/org/olat/group/ui/edit/DisplayMemberSwitchForm.java +++ b/src/main/java/org/olat/group/ui/edit/DisplayMemberSwitchForm.java @@ -52,6 +52,7 @@ public class DisplayMemberSwitchForm extends FormBasicController { private SelectionElement showOwners, showPartips, showWaitingList; private SelectionElement openOwners, openPartips, openWaitingList; + private SelectionElement downloadList; private boolean hasOwners, hasPartips, hasWaitingList; /** @@ -77,6 +78,7 @@ public class DisplayMemberSwitchForm extends FormBasicController { displayMembers.setOwnersPublic(openOwners.isSelected(0)); displayMembers.setParticipantsPublic(openPartips.isSelected(0)); displayMembers.setWaitingListPublic(openWaitingList.isVisible() && openWaitingList.isEnabled() && openWaitingList.isSelected(0)); + displayMembers.setDownloadLists(downloadList.isSelected(0)); return displayMembers; } @@ -87,6 +89,7 @@ public class DisplayMemberSwitchForm extends FormBasicController { openOwners.select("xx", displayMembers.isOwnersPublic()); openPartips.select("xx", displayMembers.isParticipantsPublic()); openWaitingList.select("xx", displayMembers.isWaitingListPublic()); + downloadList.select("xx", displayMembers.isDownloadLists()); } public void setWaitingListReadOnly(boolean b) { @@ -126,12 +129,15 @@ public class DisplayMemberSwitchForm extends FormBasicController { openWaitingList = uifactory.addCheckboxesVertical("OpenWaitingList", "chkBox.open.waitingList", formLayout, new String[]{"xx"}, new String[]{""}, null, 1); openWaitingList.setVisible(hasWaitingList); + downloadList = uifactory.addCheckboxesVertical("DownloadList", "chkBox.open.downloadList", formLayout, new String[]{"xx"}, new String[]{""}, null, 1); + showOwners.addActionListener(this, FormEvent.ONCLICK); showPartips.addActionListener(this, FormEvent.ONCLICK); showWaitingList.addActionListener(this, FormEvent.ONCLICK); openOwners.addActionListener(this, FormEvent.ONCLICK); openPartips.addActionListener(this, FormEvent.ONCLICK); openWaitingList.addActionListener(this, FormEvent.ONCLICK); + downloadList.addActionListener(this, FormEvent.ONCLICK); } @Override diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties index c497fe6dd33..18f7ad53e19 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties @@ -68,6 +68,7 @@ chkBox.open.owners=Alle sehen Betreuer chkBox.open.partips=Alle sehen Teilnehmer chkBox.open.waitingList=Alle sehen Warteliste chkBox.open=Gruppe für Buchung in Gruppenbereich ver\u00F6ffentlichen +chkBox.open.downloadList=Benutzer dürfen Teilnehmerliste herunterladen cmd.addresource=Kurs hinzuf\u00FCgen error.message.locked=Diese Gruppe wird im Moment vom Benutzer {0} ({1}) ver\u00E4ndert und ist daher gesperrt. Bitte versuchen Sie es sp\u00E4ter noch einmal. fieldset.legend.areas=Zugewiesene Lernbereiche diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties index b59f6a11d8f..d74ee46bef6 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties @@ -60,6 +60,7 @@ chkBox.open.waitingList=All users can see the waiting list chkBox.show.owners=Members can see coaches chkBox.show.partips=Members can see participants chkBox.show.waitingList=Members can see waiting list +chkBox.open.downloadList=Users can download the list of members cmd.addresource=Add course error.message.locked=This group is being edited by user {0} ({1}) and therefore locked. Please try again later. fieldset.legend.areas=Assigned learning areas diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_fr.properties index 3cc8b286909..5375f376ee1 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_fr.properties @@ -60,6 +60,7 @@ chkBox.open.waitingList=Tous voient la liste d'attente chkBox.show.owners=Membres voient propri\u00E9taires chkBox.show.partips=Membres voient participants chkBox.show.waitingList=Membres voient liste d'attente +chkBox.open.downloadList=Les utilisateurs peuvent t\u00E9l\u00E9charger la liste des membres cmd.addresource=Ajouter un cours error.message.locked=Ce groupe est modifi\u00E9 en ce moment par l'utilisateur {0} ({1}) et est donc bloqu\u00E9. R\u00E9essayez plus tard SVP. fieldset.legend.areas=Domaines d'\u00E9tude affect\u00E9s diff --git a/src/main/java/org/olat/group/ui/homepage/GroupMembersDisplayController.java b/src/main/java/org/olat/group/ui/homepage/GroupMembersDisplayController.java index 448a9e6ad3c..99e8653ff6b 100644 --- a/src/main/java/org/olat/group/ui/homepage/GroupMembersDisplayController.java +++ b/src/main/java/org/olat/group/ui/homepage/GroupMembersDisplayController.java @@ -46,15 +46,15 @@ public class GroupMembersDisplayController extends BasicController { content = createVelocityContainer("groupmembersdisplay"); if(members.isOwnersPublic()) { - GroupController groupOwnersController = new GroupController(ureq, wControl, false, true, false, businessGroup.getOwnerGroup()); + GroupController groupOwnersController = new GroupController(ureq, wControl, false, true, false, false, false, businessGroup.getOwnerGroup()); content.put("owners", groupOwnersController.getInitialComponent()); } if(members.isParticipantsPublic()) { - GroupController groupParticipantsController = new GroupController(ureq, wControl, false, true, false, businessGroup.getPartipiciantGroup()); + GroupController groupParticipantsController = new GroupController(ureq, wControl, false, true, false, false, false, businessGroup.getPartipiciantGroup()); content.put("participants", groupParticipantsController.getInitialComponent()); } if(members.isWaitingListPublic()) { - GroupController groupWaitingListController = new GroupController(ureq, wControl, false, true, false, businessGroup.getWaitingGroup()); + GroupController groupWaitingListController = new GroupController(ureq, wControl, false, true, false, false, false, businessGroup.getWaitingGroup()); content.put("waitingList", groupWaitingListController.getInitialComponent()); } putInitialPanel(content); diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java index 76c63cd9dff..b5004c00822 100644 --- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java +++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java @@ -706,9 +706,10 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im VelocityContainer membersVc = createVelocityContainer("ownersandmembers"); // 1. show owners if configured with Owners DisplayMembers displayMembers = businessGroupService.getDisplayMembers(businessGroup); + boolean downloadAllowed = displayMembers.isDownloadLists(); if (displayMembers.isShowOwners()) { removeAsListenerAndDispose(gownersC); - gownersC = new GroupController(ureq, getWindowControl(), false, true, false, businessGroup.getOwnerGroup()); + gownersC = new GroupController(ureq, getWindowControl(), false, true, false, false, downloadAllowed, businessGroup.getOwnerGroup()); listenTo(gownersC); membersVc.put("owners", gownersC.getInitialComponent()); membersVc.contextPut("showOwnerGroups", Boolean.TRUE); @@ -718,7 +719,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im // 2. show participants if configured with Participants if (displayMembers.isShowParticipants()) { removeAsListenerAndDispose(gparticipantsC); - gparticipantsC = new GroupController(ureq, getWindowControl(), false, true, false, businessGroup.getPartipiciantGroup()); + gparticipantsC = new GroupController(ureq, getWindowControl(), false, true, false, false, downloadAllowed, businessGroup.getPartipiciantGroup()); listenTo(gparticipantsC); membersVc.put("participants", gparticipantsC.getInitialComponent()); @@ -730,7 +731,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im membersVc.contextPut("hasWaitingList", new Boolean(businessGroup.getWaitingListEnabled()) ); if (displayMembers.isShowWaitingList()) { removeAsListenerAndDispose(waitingListController); - waitingListController = new GroupController(ureq, getWindowControl(), false, true, false, businessGroup.getWaitingGroup()); + waitingListController = new GroupController(ureq, getWindowControl(), false, true, false, false, downloadAllowed, businessGroup.getWaitingGroup()); listenTo(waitingListController); membersVc.put("waitingList", waitingListController.getInitialComponent()); membersVc.contextPut("showWaitingList", Boolean.TRUE); diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java index 12783100d16..639343a17f5 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java @@ -407,7 +407,7 @@ public class RepositoryDetailsController extends BasicController implements Gene main.put(infopanelVC.getComponentName(), infopanelVC); removeAsListenerAndDispose(groupController); - groupController = new GroupController(ureq, getWindowControl(), false, true, false, repositoryEntry.getOwnerGroup()); + groupController = new GroupController(ureq, getWindowControl(), false, true, false, false, true, repositoryEntry.getOwnerGroup()); listenTo(groupController); main.put("ownertable", groupController.getInitialComponent()); @@ -1108,7 +1108,7 @@ public class RepositoryDetailsController extends BasicController implements Gene groupTutorEditController = null; groupParticipantEditController = null; - GroupController controller = new GroupController(ureq, getWindowControl(), true, keepAtLeastOne, false, secGroup); + GroupController controller = new GroupController(ureq, getWindowControl(), true, keepAtLeastOne, false, false, true, secGroup); listenTo(controller); VelocityContainer groupContainer = createVelocityContainer(template); diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index e990ee0a80e..d5cac2a2abd 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -202,6 +202,9 @@ group.author.create.values=true,false # show the contact form in the business group card. group.card.contact=groupconfig group.card.contact.values=never,always,groupconfig +# user can download member list of groups +group.userlist.download.default.allowed=false +group.userlist.download.default.allowed.values=true,false #################################################### # assessmentplugin config -- GitLab