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