From 654e7036ce8b06182bffa61d66a10d295359b537 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 22 Aug 2014 11:24:37 +0200 Subject: [PATCH] no-jira: hardened my courses, groups, author env. against unconventional settings in sites administration --- .../gui/control/_spring/sitedefContext.xml | 2 +- .../OverviewBusinessGroupListController.java | 65 +++++++++++++------ .../ui/author/AuthorListController.java | 20 ++++-- .../author/OverviewAuthoringController.java | 33 +++++++--- .../OverviewRepositoryListController.java | 36 +++++++--- 5 files changed, 112 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml index 11f99892557..c959b5972bc 100644 --- a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml +++ b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml @@ -64,7 +64,7 @@ <property name="defaultSiteSecurityCallbackBeanId" value="registredSiteSecurityCallback"/> </bean> - <bean id="olatsites_repository" class="org.olat.repository.site.RepositorySiteDef"> + <bean id="olatsites_authenv" class="org.olat.repository.site.RepositorySiteDef"> <property name="order" value="9" /> <property name="enabled" value="${site.repository.enable}"/> <property name="defaultSiteSecurityCallbackBeanId" value="restrictToInstResourceManagersAndAuthorsSiteSecurityCallback"/> diff --git a/src/main/java/org/olat/group/ui/main/OverviewBusinessGroupListController.java b/src/main/java/org/olat/group/ui/main/OverviewBusinessGroupListController.java index 46534cfce63..e9f706f4eb1 100644 --- a/src/main/java/org/olat/group/ui/main/OverviewBusinessGroupListController.java +++ b/src/main/java/org/olat/group/ui/main/OverviewBusinessGroupListController.java @@ -53,8 +53,8 @@ import org.olat.util.logging.activity.LoggingResourceable; */ public class OverviewBusinessGroupListController extends BasicController implements Activateable2 { - private final Link markedGroupsLink, myGroupsLink, openGroupsLink; - private Link searchOpenLink; + private final Link openGroupsLink; + private Link markedGroupsLink, myGroupsLink, searchOpenLink; private final SegmentViewComponent segmentView; private final VelocityContainer mainVC; @@ -63,8 +63,11 @@ public class OverviewBusinessGroupListController extends BasicController impleme private OpenBusinessGroupListController openGroupsCtrl; private SearchBusinessGroupListController searchGroupsCtrl; + private final boolean isGuestOnly; + public OverviewBusinessGroupListController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); + isGuestOnly = ureq.getUserSession().getRoles().isGuestOnly(); mainVC = createVelocityContainer("group_list_overview"); @@ -74,12 +77,16 @@ public class OverviewBusinessGroupListController extends BasicController impleme //segmented view segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this); - markedGroupsLink = LinkFactory.createLink("marked.groups", mainVC, this); - markedGroupsLink.setElementCssClass("o_sel_group_bookmarked_groups_seg"); - segmentView.addSegment(markedGroupsLink, false); - myGroupsLink = LinkFactory.createLink("my.groups", mainVC, this); - myGroupsLink.setElementCssClass("o_sel_group_all_groups_seg"); - segmentView.addSegment(myGroupsLink, false); + if(!isGuestOnly) { + markedGroupsLink = LinkFactory.createLink("marked.groups", mainVC, this); + markedGroupsLink.setElementCssClass("o_sel_group_bookmarked_groups_seg"); + segmentView.addSegment(markedGroupsLink, false); + + myGroupsLink = LinkFactory.createLink("my.groups", mainVC, this); + myGroupsLink.setElementCssClass("o_sel_group_all_groups_seg"); + segmentView.addSegment(myGroupsLink, false); + } + openGroupsLink = LinkFactory.createLink("open.groups", mainVC, this); openGroupsLink.setElementCssClass("o_sel_group_open_groups_seg"); segmentView.addSegment(openGroupsLink, false); @@ -135,23 +142,38 @@ public class OverviewBusinessGroupListController extends BasicController impleme @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { - boolean markedEmpty = updateMarkedGroups(ureq).isEmpty(); - if(markedEmpty) { - updateMyGroups(ureq); - segmentView.select(myGroupsLink); + if(isGuestOnly) { + updateOpenGroups(ureq); + segmentView.select(openGroupsLink); } else { - segmentView.select(markedGroupsLink); + boolean markedEmpty = updateMarkedGroups(ureq).isEmpty(); + if(markedEmpty) { + updateMyGroups(ureq); + segmentView.select(myGroupsLink); + } else { + segmentView.select(markedGroupsLink); + } } } else { ContextEntry entry = entries.get(0); String segment = entry.getOLATResourceable().getResourceableTypeName(); List<ContextEntry> subEntries = entries.subList(1, entries.size()); if("Favorits".equals(segment)) { - updateMarkedGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); - segmentView.select(markedGroupsLink); + if(isGuestOnly) { + updateOpenGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(openGroupsLink); + } else { + updateMarkedGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(markedGroupsLink); + } } else if("AllGroups".equals(segment)) { - updateMyGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); - segmentView.select(myGroupsLink); + if(isGuestOnly) { + updateOpenGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(openGroupsLink); + } else { + updateMyGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(myGroupsLink); + } } else if("OwnedGroups".equals(segment)) { updateOpenGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); segmentView.select(openGroupsLink); @@ -159,8 +181,13 @@ public class OverviewBusinessGroupListController extends BasicController impleme updateSearch(ureq).activate(ureq, subEntries, entry.getTransientState()); segmentView.select(searchOpenLink); } else {//default all groups - updateMyGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); - segmentView.select(myGroupsLink); + if(isGuestOnly) { + updateOpenGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(openGroupsLink); + } else { + updateMyGroups(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(myGroupsLink); + } } } } diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java index 806f1af74e8..37a8d479d33 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java @@ -136,8 +136,9 @@ public class AuthorListController extends FormBasicController implements Activat private ImportRepositoryEntryController importCtrl; private CreateRepositoryEntryController createCtrl; private CloseableCalloutWindowController toolsCalloutCtrl; - - + + private boolean hasAuthorRight; + private Link importLink; private Dropdown createDropdown; private FormLink addOwnersButton; @@ -166,13 +167,16 @@ public class AuthorListController extends FormBasicController implements Activat this.i18nName = i18nName; this.withSearch = withSearch; this.searchParams = searchParams; + + Roles roles = ureq.getUserSession().getRoles(); + hasAuthorRight = roles.isAuthor() || roles.isInstitutionalResourceManager() || roles.isOLATAdmin(); dataSource = new AuthoringEntryDataSource(searchParams, this); initForm(ureq); stackPanel = new TooledStackedPanel(i18nName, getTranslator(), this); stackPanel.pushController(translate(i18nName), this); - if(!withSearch) { + if(!withSearch && hasAuthorRight) { importLink = LinkFactory.createLink("cmd.import.ressource", getTranslator(), this); importLink.setDomReplacementWrapperRequired(false); importLink.setIconLeftCSS("o_icon o_icon_import"); @@ -250,9 +254,11 @@ public class AuthorListController extends FormBasicController implements Activat true, OrderBy.lastUsage.name())); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(Cols.detailsSupported.i18nKey(), Cols.detailsSupported.ordinal(), "details", new StaticFlexiCellRenderer("", "details", "o_icon-lg o_icon_details", translate("details")))); - columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(Cols.editionSupported.i18nKey(), Cols.editionSupported.ordinal(), "edit", + if(hasAuthorRight) { + columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(Cols.editionSupported.i18nKey(), Cols.editionSupported.ordinal(), "edit", new BooleanCellRenderer(new StaticFlexiCellRenderer("", "edit", "o_icon-lg o_icon_edit", translate("edit")), null))); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.tools.i18nKey(), Cols.tools.ordinal())); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.tools.i18nKey(), Cols.tools.ordinal())); + } model = new AuthoringEntryDataModel(dataSource, columnsModel); tableEl = uifactory.addTableElement(getWindowControl(), "table", model, 20, false, getTranslator(), formLayout); @@ -271,7 +277,9 @@ public class AuthorListController extends FormBasicController implements Activat tableEl.setFilters(null, getFilters()); } - addOwnersButton = uifactory.addFormLink("tools.add.owners", formLayout, Link.BUTTON); + if(hasAuthorRight) { + addOwnersButton = uifactory.addFormLink("tools.add.owners", formLayout, Link.BUTTON); + } } private List<FlexiTableFilter> getFilters() { diff --git a/src/main/java/org/olat/repository/ui/author/OverviewAuthoringController.java b/src/main/java/org/olat/repository/ui/author/OverviewAuthoringController.java index fbdc254d290..c93340efb18 100644 --- a/src/main/java/org/olat/repository/ui/author/OverviewAuthoringController.java +++ b/src/main/java/org/olat/repository/ui/author/OverviewAuthoringController.java @@ -59,9 +59,12 @@ public class OverviewAuthoringController extends BasicController implements Acti private MainPanel mainPanel; private final VelocityContainer mainVC; private final SegmentViewComponent segmentView; - private final Link favoriteLink, myEntriesLink, searchLink; + private Link favoriteLink; + private final Link myEntriesLink, searchLink; private AuthorListController markedCtrl, myEntriesCtrl, searchEntriesCtrl; + private boolean isGuestonly; + @Autowired private UserManager userManager; @Autowired @@ -70,6 +73,7 @@ public class OverviewAuthoringController extends BasicController implements Acti public OverviewAuthoringController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator())); + isGuestonly = ureq.getUserSession().getRoles().isGuestOnly(); mainPanel = new MainPanel("authoringMainPanel"); mainPanel.setDomReplaceable(false); @@ -78,8 +82,11 @@ public class OverviewAuthoringController extends BasicController implements Acti segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this); segmentView.setReselect(true); - favoriteLink = LinkFactory.createLink("search.mark", mainVC, this); - segmentView.addSegment(favoriteLink, false); + + if(!isGuestonly) { + favoriteLink = LinkFactory.createLink("search.mark", mainVC, this); + segmentView.addSegment(favoriteLink, false); + } myEntriesLink = LinkFactory.createLink("search.my", mainVC, this); segmentView.addSegment(myEntriesLink, false); searchLink = LinkFactory.createLink("search.generic", mainVC, this); @@ -96,20 +103,30 @@ public class OverviewAuthoringController extends BasicController implements Acti @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { - boolean markEmpty = doOpenMark(ureq).isEmpty(); - if(markEmpty) { + if(isGuestonly) { doOpenMyEntries(ureq); segmentView.select(myEntriesLink); } else { - segmentView.select(favoriteLink); + boolean markEmpty = doOpenMark(ureq).isEmpty(); + if(markEmpty) { + doOpenMyEntries(ureq); + segmentView.select(myEntriesLink); + } else { + segmentView.select(favoriteLink); + } } } else { ContextEntry entry = entries.get(0); String segment = entry.getOLATResourceable().getResourceableTypeName(); List<ContextEntry> subEntries = entries.subList(1, entries.size()); if("Favorits".equals(segment)) { - doOpenMark(ureq).activate(ureq, subEntries, entry.getTransientState()); - segmentView.select(favoriteLink); + if(isGuestonly) { + doOpenMyEntries(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(myEntriesLink); + } else { + doOpenMark(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(favoriteLink); + } } else if("My".equals(segment)) { doOpenMyEntries(ureq).activate(ureq, subEntries, entry.getTransientState()); segmentView.select(myEntriesLink); diff --git a/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java b/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java index fbf1c0ebf1c..701cb7b2136 100644 --- a/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java +++ b/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java @@ -60,8 +60,8 @@ public class OverviewRepositoryListController extends BasicController implements private final VelocityContainer mainVC; private final SegmentViewComponent segmentView; - private final Link favoriteLink, myCourseLink; - private Link catalogLink, searchCourseLink; + private final Link myCourseLink; + private Link favoriteLink, catalogLink, searchCourseLink; private RepositoryEntryListController markedCtrl; private BreadcrumbedStackedPanel markedStackPanel; @@ -72,6 +72,8 @@ public class OverviewRepositoryListController extends BasicController implements private RepositoryEntryListController searchCoursesCtrl; private BreadcrumbedStackedPanel searchCoursesStackPanel; + private final boolean isGuestOnly; + @Autowired private CatalogManager catalogManager; @Autowired @@ -80,6 +82,7 @@ public class OverviewRepositoryListController extends BasicController implements public OverviewRepositoryListController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator())); + isGuestOnly = ureq.getUserSession().getRoles().isGuestOnly(); MainPanel mainPanel = new MainPanel("myCoursesMainPanel"); mainPanel.setDomReplaceable(false); @@ -88,9 +91,12 @@ public class OverviewRepositoryListController extends BasicController implements segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this); segmentView.setReselect(true); - favoriteLink = LinkFactory.createLink("search.mark", mainVC, this); - favoriteLink.setElementCssClass("o_sel_mycourses_fav"); - segmentView.addSegment(favoriteLink, false); + if(!isGuestOnly) { + favoriteLink = LinkFactory.createLink("search.mark", mainVC, this); + favoriteLink.setElementCssClass("o_sel_mycourses_fav"); + segmentView.addSegment(favoriteLink, false); + } + myCourseLink = LinkFactory.createLink("search.mycourses.student", mainVC, this); myCourseLink.setElementCssClass("o_sel_mycourses_my"); segmentView.addSegment(myCourseLink, false); @@ -112,20 +118,30 @@ public class OverviewRepositoryListController extends BasicController implements @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { - boolean markEmpty = doOpenMark(ureq).isEmpty(); - if(markEmpty) { + if(isGuestOnly) { doOpenMyCourses(ureq); segmentView.select(myCourseLink); } else { - segmentView.select(favoriteLink); + boolean markEmpty = doOpenMark(ureq).isEmpty(); + if(markEmpty) { + doOpenMyCourses(ureq); + segmentView.select(myCourseLink); + } else { + segmentView.select(favoriteLink); + } } } else { ContextEntry entry = entries.get(0); String segment = entry.getOLATResourceable().getResourceableTypeName(); List<ContextEntry> subEntries = entries.subList(1, entries.size()); if("Favorits".equalsIgnoreCase(segment)) { - doOpenMark(ureq).activate(ureq, subEntries, entry.getTransientState()); - segmentView.select(favoriteLink); + if(isGuestOnly) { + doOpenMyCourses(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(myCourseLink); + } else { + doOpenMark(ureq).activate(ureq, subEntries, entry.getTransientState()); + segmentView.select(favoriteLink); + } } else if("My".equalsIgnoreCase(segment)) { doOpenMyCourses(ureq).activate(ureq, subEntries, entry.getTransientState()); segmentView.select(myCourseLink); -- GitLab