From b9f57bc5580304b53d0aebc728ef0ffd73f2a673 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 16 Apr 2020 08:54:17 +0200 Subject: [PATCH] OO-4635: enhance portfolio's toc's link to course to open in new window --- .../gui/components/link/LinkRenderer.java | 2 +- .../ui/TableOfContentController.java | 42 +++++++++++++++---- .../ui/_content/table_of_contents.html | 4 +- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java index 75eb66c7a5f..0761f9234d6 100644 --- a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java +++ b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java @@ -214,7 +214,7 @@ public class LinkRenderer extends DefaultComponentRenderer { } else { // a link may force a non ajax-mode and a custom targ boolean iframePostEnabled = flags.isIframePostEnabled() && link.isAjaxEnabled() && link.getTarget() == null; - ubu.buildHrefAndOnclick(sb, null, iframePostEnabled, !link.isSuppressDirtyFormWarning(), true, + ubu.buildHrefAndOnclick(sb, link.getUrl(), null, iframePostEnabled, !link.isSuppressDirtyFormWarning(), true, new NameValuePair(VelocityContainer.COMMAND_ID, command)); } diff --git a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java index 678f7375c13..debe917bf60 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.olat.NewControllerFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback; @@ -57,9 +58,9 @@ import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.control.generic.spacesaver.ToggleBoxController; import org.olat.core.gui.control.winmgr.ScrollTopCommand; 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.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; @@ -108,9 +109,18 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class TableOfContentController extends BasicController implements TooledController, Activateable2 { - private Link newSectionTool, newSectionButton, newEntryLink, newAssignmentLink, - editBinderMetadataLink, moveToTrashBinderLink, deleteBinderLink, restoreBinderLink, - exportBinderAsCpLink, printLink, exportBinderAsPdfLink; + private Link printLink; + private Link newEntryLink; + private Link newSectionTool; + private Link deleteBinderLink; + private Link newSectionButton; + private Link restoreBinderLink; + private Link newAssignmentLink; + private Link toReferenceEntryLink; + private Link editBinderMetadataLink; + private Link moveToTrashBinderLink; + private Link exportBinderAsCpLink; + private Link exportBinderAsPdfLink; private final VelocityContainer mainVC; private final TooledStackedPanel stackPanel; @@ -122,12 +132,14 @@ public class TableOfContentController extends BasicController implements TooledC private SectionEditController newSectionCtrl; private SectionEditController editSectionCtrl; private AssignmentEditController newAssignmentCtrl; + private DialogBoxController confirmCloseSectionCtrl; + private DialogBoxController confirmReopenSectionCtrl; + private DialogBoxController confirmDeleteSectionCtrl; + private DialogBoxController confirmRestoreBinderCtrl; private ConfirmDeleteBinderController deleteBinderCtrl; private SectionDatesEditController editSectionDatesCtrl; private BinderMetadataEditController binderMetadataCtrl; private ConfirmMoveBinderToTrashController moveBinderToTrashCtrl; - private DialogBoxController confirmCloseSectionCtrl, confirmReopenSectionCtrl, - confirmDeleteSectionCtrl, confirmRestoreBinderCtrl; private PageRunController pageCtrl; private PageMetadataEditController newPageCtrl; @@ -172,9 +184,14 @@ public class TableOfContentController extends BasicController implements TooledC RepositoryEntry repoEntry = binder.getEntry(); if (repoEntry != null) { - mainVC.contextPut("referenceEntryName", repoEntry.getDisplayname()); - String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + repoEntry.getKey(); - mainVC.contextPut("referenceEntryUrl", url); + String repoEntryPath = "[RepositoryEntry:" + repoEntry.getKey() + "]"; + String url = BusinessControlFactory.getInstance().getURLFromBusinessPathString(repoEntryPath); + String name = translate("binder.entry.name") + ": " + StringHelper.escapeHtml(repoEntry.getDisplayname()); + toReferenceEntryLink = LinkFactory.createLink("to.ref.entry", "to.ref.entry", "to.ref.rentry", name, getTranslator(), mainVC, this, Link.NONTRANSLATED); + toReferenceEntryLink.setDomReplacementWrapperRequired(false); + toReferenceEntryLink.setIconLeftCSS("o_icon o_CourseModule_icon"); + toReferenceEntryLink.setElementCssClass("small"); + toReferenceEntryLink.setUrl(url); } summaryComp = TextFactory.createTextComponentFromString("summaryCmp" + CodeHelper.getRAMUniqueID(), "", null, @@ -656,6 +673,8 @@ public class TableOfContentController extends BasicController implements TooledC doPrint(ureq); } else if(exportBinderAsPdfLink == source) { doExportBinderAsPdf(ureq); + } else if(toReferenceEntryLink == source) { + doOpenReferenceEntry(ureq); } else if(stackPanel == source) { if(event instanceof PopEvent && pageCtrl != null && ((PopEvent)event).getController() == pageCtrl && pageCtrl.getSection() != null) { stackPanel.popUserObject(new TOCSection(pageCtrl.getSection())); @@ -840,6 +859,11 @@ public class TableOfContentController extends BasicController implements TooledC return pageCtrl; } + private void doOpenReferenceEntry(UserRequest ureq) { + String businessPath = "[RepositoryEntry:" + binder.getEntry().getKey() + "]"; + NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); + } + private void doCreateNewEntry(UserRequest ureq) { if(guardModalController(newPageCtrl)) return; diff --git a/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html b/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html index 847cc3d28ad..c44b0783d93 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html +++ b/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html @@ -7,8 +7,8 @@ $r.contextHelpWithWrapper("Portfolio task and assignment: Collecting and editing") #end <h2>$r.translate("table.of.contents", $binderTitle) #if($owners && !$owners.isEmpty())<small>$r.translate("binder.by",$owners)</small>#end </h2> - #if($r.isNotNull($referenceEntryName)) - <div class="o_portfolio_repo_link o_block_bottom o_block_move_up_small"><a href="$referenceEntryUrl" class="small"><i class="o_icon o_CourseModule_icon"> </i> $r.translate("binder.entry.name"): $r.escapeHtml($referenceEntryName)</a></div> + #if($r.available("to.ref.entry")) + <div class="o_portfolio_repo_link o_block_bottom o_block_move_up_small">$r.render("to.ref.entry")</div> #end #if($r.available("summary")) $r.render("summary") -- GitLab