diff --git a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java index c72a15c316e904ba7f286167c5f14b230b4854ab..c366d786ea5f172d0bf7dc0dbea0ecbebfba4eae 100644 --- a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java +++ b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java @@ -87,7 +87,7 @@ public class FeedPeekviewController extends BasicController implements Controlle } else { peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : ""); // add gui helper - FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), getTranslator(), courseId, nodeId); + FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), ureq.getUserSession().getRoles(), getTranslator(), courseId, nodeId); peekviewVC.contextPut("helper", helper); // add items, only as many as configured List<Item> allItems = FeedManager.getInstance().loadFilteredAndSortedItems(feed, Collections.emptyList(), callback, getIdentity()); diff --git a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java index f3b18512155df915f7e6dcacdde881f4682538c7..136686e63200b5e85117206c764cefa1c0e7641a 100644 --- a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java +++ b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java @@ -28,12 +28,13 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import org.apache.logging.log4j.Logger; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; @@ -64,10 +65,13 @@ public class FeedViewHelper { // display 5 items per default private int itemsPerPage = 5; + private Roles roles; private Identity identity; private Translator translator; private Locale locale; - private String baseUri, feedUrl, nodeId; + private String baseUri; + private String feedUrl; + private String nodeId; private Long courseId; private static final String MEDIA_DIR = Path.MEDIA_DIR; // Per default show the first page @@ -81,12 +85,13 @@ public class FeedViewHelper { * @param feed * @param locale */ - public FeedViewHelper(Feed feed, Identity identity, Translator translator, Long courseId, String nodeId) { + public FeedViewHelper(Feed feed, Identity identity, Roles roles, Translator translator, Long courseId, String nodeId) { this.identity = identity; this.translator = translator; this.locale = translator.getLocale(); this.courseId = courseId; this.nodeId = nodeId; + this.roles = roles; this.setURIs(feed); } @@ -96,9 +101,9 @@ public class FeedViewHelper { * @param feed * @param identityKey */ - FeedViewHelper(Feed feed, Identity identity, Long courseId, String nodeId) { + FeedViewHelper(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) { this.identity = identity; - + this.roles = roles; this.courseId = courseId; this.nodeId = nodeId; this.setURIs(feed); @@ -110,7 +115,7 @@ public class FeedViewHelper { * @param feed */ public void setURIs(Feed feed) { - baseUri = FeedManager.getInstance().getFeedBaseUri(feed, identity, courseId, nodeId); + baseUri = FeedManager.getInstance().getFeedBaseUri(feed, identity, roles, courseId, nodeId); // Set feed base URI for internal feeds if (feed.isInternal()) { feedUrl = baseUri + "/" + FeedManager.RSS_FEED_NAME; diff --git a/src/main/java/org/olat/modules/webFeed/RSSFeed.java b/src/main/java/org/olat/modules/webFeed/RSSFeed.java index 51ffebf3b10154f822480deeb3ee58c13c8b1b36..89c6b1275451dd4ee6c04f8dd1909a5844b5e9b2 100644 --- a/src/main/java/org/olat/modules/webFeed/RSSFeed.java +++ b/src/main/java/org/olat/modules/webFeed/RSSFeed.java @@ -24,6 +24,7 @@ import java.util.List; import org.olat.core.commons.services.notifications.PersonalRSSServlet; import org.olat.core.id.Identity; +import org.olat.core.id.Roles; import org.olat.core.util.filter.FilterFactory; import org.olat.modules.webFeed.manager.FeedManager; @@ -53,12 +54,12 @@ public class RSSFeed extends SyndFeedImpl { * Constructor. The identityKey is needed to generate personal URLs for the * corresponding user. */ - public RSSFeed(Feed feed, Identity identity, Long courseId, String nodeId) { + public RSSFeed(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) { super(); // This helper object is required for generating the appropriate URLs for // the given user (identity) - FeedViewHelper helper = new FeedViewHelper(feed, identity, courseId, nodeId); + FeedViewHelper helper = new FeedViewHelper(feed, identity, roles, courseId, nodeId); setFeedType("rss_2.0"); setEncoding(PersonalRSSServlet.DEFAULT_ENCODING); diff --git a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java index f82afe42386dbfb4b7a1b39b1967bd6a8a1a4371..477b74524d91ba8193fbec70277e2a186942afbd 100644 --- a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java +++ b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java @@ -278,8 +278,12 @@ public class FeedMediaDispatcher implements Dispatcher, GenericEventListener { if (path.isFeedType()) { // Only create feed if modified. Send not modified response else. Identity identity = null; + Roles roles = null; if(path.getIdentityKey() != null) { identity = securityManager.loadIdentityByKey(path.getIdentityKey()); + roles = securityManager.getRoles(identity); + } else { + roles = Roles.guestRoles(); } long sinceModifiedMillis = request.getDateHeader("If-Modified-Since"); @@ -300,7 +304,7 @@ public class FeedMediaDispatcher implements Dispatcher, GenericEventListener { return; } } else { - resource = feedManager.createFeedFile(feed, identity, path.getCourseId(), path.getNodeId()); + resource = feedManager.createFeedFile(feed, identity, roles, path.getCourseId(), path.getNodeId()); } } else if (path.isItemType()) { resource = feedManager.createItemMediaFile(feed, path.getItemId(), path.getItemFileName()); diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java index 4c3120ed77d7e06568320f9d3a1c220fc597d070..bd158bf0ef2a14cda80f9f22a9a3cbbd4f72c8d7 100644 --- a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java +++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java @@ -28,6 +28,7 @@ import org.olat.core.gui.components.form.flexible.elements.FileElement; import org.olat.core.gui.media.MediaResource; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.vfs.Quota; @@ -297,7 +298,7 @@ public abstract class FeedManager { * @param idKey * @return The base URI of the (RSS) feed */ - public abstract String getFeedBaseUri(Feed feed, Identity identity, Long courseId, String nodeId); + public abstract String getFeedBaseUri(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId); /** * Creates the RSS feed resource. @@ -307,7 +308,7 @@ public abstract class FeedManager { * @param identityKey * @return The RSS feed as a MediaResource */ - public abstract MediaResource createFeedFile(OLATResourceable feed, Identity identity, Long courseId, String nodeId); + public abstract MediaResource createFeedFile(OLATResourceable feed, Identity identity, Roles roles, Long courseId, String nodeId); /** * Creates and returns a zip-file media resource of the given feed resource diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java index 1439e1b4f3d8b3a0f37264ad0006d2b346d507ac..5e6558329b5f96c30de60547a9a97116d7794110 100644 --- a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java +++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java @@ -28,6 +28,7 @@ import java.util.Date; import java.util.List; import org.apache.commons.lang.RandomStringUtils; +import org.apache.logging.log4j.Logger; import org.olat.admin.quota.QuotaConstants; import org.olat.basesecurity.Authentication; import org.olat.basesecurity.BaseSecurity; @@ -43,7 +44,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; -import org.apache.logging.log4j.Logger; +import org.olat.core.id.Roles; import org.olat.core.logging.Tracing; import org.olat.core.util.Encoder; import org.olat.core.util.FileUtils; @@ -682,7 +683,7 @@ public class FeedManagerImpl extends FeedManager { * @return The feed base uri for the given user (identity) */ @Override - public String getFeedBaseUri(Feed feed, Identity identity, Long courseId, String nodeId) { + public String getFeedBaseUri(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) { boolean isCourseNode = courseId != null && nodeId != null; final String slash = "/"; @@ -715,7 +716,12 @@ public class FeedManagerImpl extends FeedManager { } else { entry = repositoryManager.lookupRepositoryEntry(feed, false); } - if (entry == null || entry.isGuests()) { + + boolean isPrivate = true; + if (entry != null && entry.isGuests()) { + isPrivate = false; + } + if (isPrivate && !roles.isGuestOnly()) { // identity key uri.append(idKey); uri.append(slash); @@ -739,12 +745,12 @@ public class FeedManagerImpl extends FeedManager { } @Override - public MediaResource createFeedFile(OLATResourceable ores, Identity identity, Long courseId, String nodeId) { + public MediaResource createFeedFile(OLATResourceable ores, Identity identity, Roles roles, Long courseId, String nodeId) { MediaResource media = null; Feed feed = loadFeed(ores); if (feed != null) { - SyndFeed rssFeed = new RSSFeed(feed, identity, courseId, nodeId); + SyndFeed rssFeed = new RSSFeed(feed, identity, roles, courseId, nodeId); media = new SyndFeedMediaResource(rssFeed); } return media; diff --git a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java index cc9ca603d8649a51ba05e50b2f01d213c861807c..2988876d27a0ec7776490934c64562018491678f 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java @@ -133,7 +133,7 @@ public class FeedMainController extends BasicController implements Activateable2 vcMain.contextPut("errorMessage", translate("feed.error")); putInitialPanel(vcMain); } else { - helper = new FeedViewHelper(feed, getIdentity(), uiFactory.getTranslator(), courseId, nodeId); + helper = new FeedViewHelper(feed, getIdentity(), ureq.getUserSession().getRoles(), uiFactory.getTranslator(), courseId, nodeId); CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed); display(ureq, wControl, displayConfig); // do logging diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html index cf2913ca49a647eabe1dcf8753919afa59200aa5..016ac8d80d980552314b048b57012c930493d111 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html +++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html @@ -2,10 +2,7 @@ #if ($r.available("feed.edit")) <div class="o_edit pull-right">$r.render("feed.edit")</div> #end - <h2> - <i class="o_icon o_icon-fw o_icon o_FileResource-BLOG_icon"></i> - $r.escapeHtml($!feed.getTitle()) - </h2> + <h2><i class="o_icon o_icon-fw o_icon o_FileResource-BLOG_icon"> </i> $r.escapeHtml($!feed.getTitle())</h2> #if ($helper.getImageUrl($feed) && $helper.getImageUrl($feed) != "") <img class="o_media" src="$helper.getImageUrl($feed)?thumbnail=180x121{$!supressCache}" alt="Blog Image" /> #end @@ -20,10 +17,7 @@ #if (!$feed.isUndefined()) <div class="o_subscription"> - <a href="$!helper.getFeedUrl()" class="o_nowrap" target="_blank"> - <i class="o_icon o_icon-fw o_icon_rss"></i> - $r.translate("blog.subscribe.to.this.feed") - </a> + <a href="$!helper.getFeedUrl()" class="o_nowrap" target="_blank"><i class="o_icon o_icon-fw o_icon_rss"> </i> $r.translate("blog.subscribe.to.this.feed")</a> </div> #end