diff --git a/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java b/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java index ab2bc4fb29b1eb2aa263c3defac6440174f77680..0118cd780f906e25257fdda32a52fa7abaa7429d 100644 --- a/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java +++ b/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java @@ -100,6 +100,20 @@ public class NewControllerFactory extends LogDelegator { return contextEntryControllerCreators.containsKey(key); } + /** + * Check first context entry can be launched + * a further check is mostly not possible, as it gets validated through the BC-stack while building the controller-chain + * + * return true: if this will be launchable at least for the first step. + */ + public boolean validateCEWithContextControllerCreator(final UserRequest ureq, final WindowControl wControl, ContextEntry ce){ + String firstType = ce.getOLATResourceable().getResourceableTypeName(); + if (canLaunch(firstType)){ + return contextEntryControllerCreators.get(firstType).validateContextEntryAndShowError(ce, ureq, wControl); + } + return false; + } + /** * Launch a controller in a tab or site in the given window from a user * request url diff --git a/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java b/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java index b10fa3189387521f605d7f90348cf840b680f800..e206c36eefdf52cecbea57664c8c80c87e44d91c 100644 --- a/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java +++ b/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java @@ -303,7 +303,8 @@ public class ForumController extends BasicController implements GenericEventList scrollToCurrentMessage(); } else { // message not found, do nothing. Load normal start screen - logDebug("Invalid messageId=" , ores.getResourceableId().toString()); + showError("deleteok"); + logDebug("Invalid messageId=", ores.getResourceableId().toString()); } } else { //FIXME:chg: Should not happen, occurs when course-node are called diff --git a/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java b/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java index cb65863c51f16fbc28c25d2704eaf684dafd8b4b..423860cf4f42dd2d354e5a691ef90421005908f9 100644 --- a/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java +++ b/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java @@ -172,7 +172,10 @@ public class WikiMainController extends BasicController implements CloneableCont ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_OPEN, getClass()); // init the first page either startpage or an other page identified by initial page name if (initialPageName != null && wiki.pageExists(WikiManager.generatePageId(initialPageName))) page = wiki.getPage(initialPageName, true); - else page = wiki.getPage(WikiPage.WIKI_INDEX_PAGE); + else { + page = wiki.getPage(WikiPage.WIKI_INDEX_PAGE); + if (initialPageName != null) showError("wiki.error.page.not.found"); + } this.pageId = page.getPageId(); WikiPage menuPage = getWiki().getPage(WikiPage.WIKI_MENU_PAGE); diff --git a/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java b/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java index 2fa2a75c07e8d3c44be54c75f7cc55eaa58fa480..1c6e736ba30f44258cdc900f0f4aec7b090465b8 100644 --- a/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java +++ b/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java @@ -26,6 +26,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -211,7 +212,7 @@ public class EPArtefactViewController extends FormBasicController { // build link to original source if (StringHelper.containsNonWhitespace(artefact.getBusinessPath())) { - String sourceLink = createLinkToArtefactSource(artefact.getBusinessPath()); + String sourceLink = createLinkToArtefactSource(ureq, artefact.getBusinessPath()); flc.contextPut("artefactSourceLink", sourceLink); } @@ -267,11 +268,12 @@ public class EPArtefactViewController extends FormBasicController { return busLink; } - private String createLinkToArtefactSource(String businessPath){ + private String createLinkToArtefactSource(UserRequest ureq, String businessPath){ BusinessControlFactory bCF = BusinessControlFactory.getInstance(); List<ContextEntry> ceList = bCF.createCEListFromString(businessPath); + boolean valid = NewControllerFactory.getInstance().validateCEWithContextControllerCreator(ureq, getWindowControl(), ceList.get(0)); String busLink = bCF.getAsURIString(ceList, true); - if (StringHelper.containsNonWhitespace(busLink)){ + if (valid && StringHelper.containsNonWhitespace(busLink)){ return "<a href=\"" + busLink + "\">" + translate("artefact.open.source") + "</a>"; } else return translate("artefact.no.source"); }