Skip to content
Snippets Groups Projects
Commit debc8d00 authored by srosse's avatar srosse
Browse files

OO-1322: show an error message in the course element if the feed doesn't exist

parent aa41b393
No related branches found
No related tags found
No related merge requests found
...@@ -22,7 +22,6 @@ package org.olat.course.nodes.feed; ...@@ -22,7 +22,6 @@ package org.olat.course.nodes.feed;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.htmlsite.OlatCmdEvent; import org.olat.core.gui.components.htmlsite.OlatCmdEvent;
...@@ -43,6 +42,7 @@ import org.olat.modules.webFeed.models.Item; ...@@ -43,6 +42,7 @@ import org.olat.modules.webFeed.models.Item;
import org.olat.modules.webFeed.ui.FeedUIFactory; import org.olat.modules.webFeed.ui.FeedUIFactory;
import org.olat.resource.OLATResource; import org.olat.resource.OLATResource;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* <h3>Description:</h3> The feed peekview controller displays the configurable * <h3>Description:</h3> The feed peekview controller displays the configurable
...@@ -60,6 +60,11 @@ import org.olat.user.UserManager; ...@@ -60,6 +60,11 @@ import org.olat.user.UserManager;
public class FeedPeekviewController extends BasicController implements Controller { public class FeedPeekviewController extends BasicController implements Controller {
// the current course node id // the current course node id
private final String nodeId; private final String nodeId;
@Autowired
private FeedManager feedManager;
@Autowired
private UserManager userManager;
/** /**
* Constructor for the feed peekview controller * Constructor for the feed peekview controller
...@@ -79,43 +84,46 @@ public class FeedPeekviewController extends BasicController implements Controlle ...@@ -79,43 +84,46 @@ public class FeedPeekviewController extends BasicController implements Controlle
Long courseId, String nodeId, FeedUIFactory feedUIFactory, int itemsToDisplay, String wrapperCssClass) { Long courseId, String nodeId, FeedUIFactory feedUIFactory, int itemsToDisplay, String wrapperCssClass) {
super(ureq, wControl); super(ureq, wControl);
this.nodeId = nodeId; this.nodeId = nodeId;
FeedManager feedManager = FeedManager.getInstance();
Feed feed = feedManager.getFeed(olatResource); Feed feed = feedManager.getFeed(olatResource);
UserManager userManager = CoreSpringFactory.getImpl(UserManager.class);
VelocityContainer peekviewVC = createVelocityContainer("peekview"); VelocityContainer peekviewVC = createVelocityContainer("peekview");
peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : ""); if(feed == null) {
// add gui helper peekviewVC.contextPut("items", new ArrayList<>(1));
String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); peekviewVC.contextPut("errorMessage", translate("peekview.error"));
FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), authorFullname, getTranslator(), courseId, nodeId, callback); } else {
peekviewVC.contextPut("helper", helper); peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : "");
// add items, only as many as configured // add gui helper
List<Item> allItems = feed.getFilteredItems(callback, getIdentity()); String authorFullname = userManager.getUserDisplayName(feed.getAuthor());
List<Item> items = new ArrayList<Item>(); FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), authorFullname, getTranslator(), courseId, nodeId, callback);
for (int i = 0; i < allItems.size(); i++) { peekviewVC.contextPut("helper", helper);
if (items.size() == itemsToDisplay) { // add items, only as many as configured
break; List<Item> allItems = feed.getFilteredItems(callback, getIdentity());
} List<Item> items = new ArrayList<Item>();
// add item itself if published for (int i = 0; i < allItems.size(); i++) {
Item item = allItems.get(i); if (items.size() == itemsToDisplay) {
if (item.isPublished()) { break;
items.add(item); }
// add link to item // add item itself if published
// Add link to jump to course node Item item = allItems.get(i);
Link nodeLink = LinkFactory.createLink("nodeLink_" + item.getGuid(), peekviewVC, this); if (item.isPublished()) {
nodeLink.setCustomDisplayText(StringHelper.escapeHtml(item.getTitle())); items.add(item);
nodeLink.setIconLeftCSS("o_icon o_" + feed.getResourceableTypeName().replace(".", "-") + "_icon"); // add link to item
nodeLink.setCustomEnabledLinkCSS("o_gotoNode"); // Add link to jump to course node
nodeLink.setUserObject(item.getGuid()); Link nodeLink = LinkFactory.createLink("nodeLink_" + item.getGuid(), peekviewVC, this);
nodeLink.setCustomDisplayText(StringHelper.escapeHtml(item.getTitle()));
nodeLink.setIconLeftCSS("o_icon o_" + feed.getResourceableTypeName().replace(".", "-") + "_icon");
nodeLink.setCustomEnabledLinkCSS("o_gotoNode");
nodeLink.setUserObject(item.getGuid());
}
} }
peekviewVC.contextPut("items", items);
// Add link to show all items (go to node)
Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this);
allItemsLink.setIconRightCSS("o_icon o_icon_start");
allItemsLink.setCustomEnabledLinkCSS("pull-right");
// Add Formatter for proper date formatting
peekviewVC.contextPut("formatter", Formatter.getInstance(getLocale()));
} }
peekviewVC.contextPut("items", items);
// Add link to show all items (go to node)
Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this);
allItemsLink.setIconRightCSS("o_icon o_icon_start");
allItemsLink.setCustomEnabledLinkCSS("pull-right");
// Add Formatter for proper date formatting
peekviewVC.contextPut("formatter", Formatter.getInstance(getLocale()));
putInitialPanel(peekviewVC); putInitialPanel(peekviewVC);
} }
......
#if($errorMessage)
<div class="o_error">$errorMessage</div>
#end
<div class="o_feed_peekview $wrapperCssClass clearfix"> <div class="o_feed_peekview $wrapperCssClass clearfix">
#foreach( $post in $items ) #foreach( $post in $items )
<div class="o_item"> <div class="o_item">
...@@ -10,5 +13,7 @@ ...@@ -10,5 +13,7 @@
$!helper.getItemDescriptionForBrowser($post) $!helper.getItemDescriptionForBrowser($post)
</div> </div>
#end #end
#if($r.available("peekview.allItemsLink"))
$r.render("peekview.allItemsLink") $r.render("peekview.allItemsLink")
#end
</div> </div>
\ No newline at end of file
...@@ -9,7 +9,7 @@ command.close=Vorschau schliessen ...@@ -9,7 +9,7 @@ command.close=Vorschau schliessen
condition.accessModerator.title=Moderieren condition.accessModerator.title=Moderieren
condition.accessPoster.title=Lesen und Schreiben condition.accessPoster.title=Lesen und Schreiben
condition.accessReader.title=Nur Lesen condition.accessReader.title=Nur Lesen
peekview.error=$org.olat.modules.webFeed.ui:feed.error
peekview.allItemsLink = Alle Ausgaben peekview.allItemsLink = Alle Ausgaben
help.hover.feed.mo=Hilfe, um den moderierenden Zugang zu konfigurieren help.hover.feed.mo=Hilfe, um den moderierenden Zugang zu konfigurieren
help.hover.feed.r=Hilfe, um den lesenden Zugang zu konfigurieren help.hover.feed.r=Hilfe, um den lesenden Zugang zu konfigurieren
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="feedManager" class="org.olat.modules.webFeed.managers.FeedManagerImpl"> <bean id="feedManager" class="org.olat.modules.webFeed.managers.FeedManagerImpl">
<constructor-arg index="0" ref="resourceManager"/> <constructor-arg index="0" ref="resourceManager"/>
......
...@@ -21,7 +21,6 @@ package org.olat.modules.webFeed.ui; ...@@ -21,7 +21,6 @@ package org.olat.modules.webFeed.ui;
import java.util.List; import java.util.List;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.flexible.elements.FileElement; import org.olat.core.gui.components.form.flexible.elements.FileElement;
...@@ -50,6 +49,7 @@ import org.olat.modules.webFeed.models.Feed; ...@@ -50,6 +49,7 @@ import org.olat.modules.webFeed.models.Feed;
import org.olat.modules.webFeed.models.Item; import org.olat.modules.webFeed.models.Item;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.olat.util.logging.activity.LoggingResourceable; import org.olat.util.logging.activity.LoggingResourceable;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* This is the main feed layout controller. It handles everything from adding * This is the main feed layout controller. It handles everything from adding
...@@ -62,7 +62,6 @@ import org.olat.util.logging.activity.LoggingResourceable; ...@@ -62,7 +62,6 @@ import org.olat.util.logging.activity.LoggingResourceable;
*/ */
public class FeedMainController extends BasicController implements Activateable2, GenericEventListener { public class FeedMainController extends BasicController implements Activateable2, GenericEventListener {
private static final FeedManager feedManager = FeedManager.getInstance();
private Feed feed; private Feed feed;
private Link editFeedButton; private Link editFeedButton;
private CloseableModalController cmc; private CloseableModalController cmc;
...@@ -77,7 +76,10 @@ public class FeedMainController extends BasicController implements Activateable2 ...@@ -77,7 +76,10 @@ public class FeedMainController extends BasicController implements Activateable2
// needed for comparison // needed for comparison
private String oldFeedUrl; private String oldFeedUrl;
private final UserManager userManager; @Autowired
private UserManager userManager;
@Autowired
private FeedManager feedManager;
/** /**
* Constructor for learning resource (not course nodes) * Constructor for learning resource (not course nodes)
...@@ -107,15 +109,28 @@ public class FeedMainController extends BasicController implements Activateable2 ...@@ -107,15 +109,28 @@ public class FeedMainController extends BasicController implements Activateable2
super(ureq, wControl); super(ureq, wControl);
this.uiFactory = uiFactory; this.uiFactory = uiFactory;
this.callback = callback; this.callback = callback;
userManager = CoreSpringFactory.getImpl(UserManager.class);
setTranslator(uiFactory.getTranslator()); setTranslator(uiFactory.getTranslator());
feed = feedManager.getFeed(ores); feed = feedManager.getFeed(ores);
String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); if(feed == null) {
helper = new FeedViewHelper(feed, getIdentity(), authorFullname, uiFactory.getTranslator(), courseId, nodeId, callback); vcMain = createVelocityContainer("feed_error");
CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed); vcMain.contextPut("errorMessage", translate("feed.error"));
display(ureq, wControl, displayConfig); putInitialPanel(vcMain);
// do logging } else {
ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_READ, getClass(), LoggingResourceable.wrap(feed)); String authorFullname = userManager.getUserDisplayName(feed.getAuthor());
helper = new FeedViewHelper(feed, getIdentity(), authorFullname, uiFactory.getTranslator(), courseId, nodeId, callback);
CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed);
display(ureq, wControl, displayConfig);
// do logging
ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_READ, getClass(), LoggingResourceable.wrap(feed));
}
}
@Override
protected void doDispose() {
feedManager.releaseLock(lock);
if(feed != null) {
CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, feed);
}
} }
/** /**
...@@ -156,16 +171,7 @@ public class FeedMainController extends BasicController implements Activateable2 ...@@ -156,16 +171,7 @@ public class FeedMainController extends BasicController implements Activateable2
listenTo(itemsCtr); listenTo(itemsCtr);
vcMain.put("items", itemsCtr.getInitialComponent()); vcMain.put("items", itemsCtr.getInitialComponent());
this.putInitialPanel(vcMain); putInitialPanel(vcMain);
}
/**
* @see org.olat.core.gui.control.DefaultController#doDispose()
*/
@Override
protected void doDispose() {
feedManager.releaseLock(lock);
CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, feed);
} }
/** /**
......
<div class="o_error">
$errorMessage
</div>
\ No newline at end of file
...@@ -34,4 +34,5 @@ feed.form.minutes.error = Die Minutenangabe ist ung\u00FCltig ...@@ -34,4 +34,5 @@ feed.form.minutes.error = Die Minutenangabe ist ung\u00FCltig
feed.item.confirm.delete = Wollen Sie diesen Eintrag wirklich l\u00F6schen? feed.item.confirm.delete = Wollen Sie diesen Eintrag wirklich l\u00F6schen?
feed.item.is.being.edited.by = Der Eintrag wird bereits von {0} bearbeitet. feed.item.is.being.edited.by = Der Eintrag wird bereits von {0} bearbeitet.
feed.is.being.edited.by = Die Beschreibung wird bereits von {0} bearbeitet. feed.is.being.edited.by = Die Beschreibung wird bereits von {0} bearbeitet.
feed.link.more=weiterlesen feed.link.more=weiterlesen
\ No newline at end of file feed.error=Leider ist ein unerwartete Fehler aufgetretten und der Feed konnte nicht dargestellt werden.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment