From 93de337e1734ea2a3f5189fbccae3ffbcaaf4d5b Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 10 Aug 2020 18:19:16 +0200
Subject: [PATCH] OO-4838: add an url to the calendar's tool link in course

---
 .../gui/components/link/LinkRenderer.java     |  4 ++-
 .../course/run/CourseRuntimeController.java   | 29 ++++++++++++++++++-
 2 files changed, 31 insertions(+), 2 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 3a75af5f3e1..c2955f99976 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
@@ -199,7 +199,9 @@ public class LinkRenderer extends DefaultComponentRenderer {
 				try(StringOutput href = new StringOutput()) {
 					LinkPopupSettings popup = link.getPopup();
 					ubu.buildURI(href, new String[] { VelocityContainer.COMMAND_ID }, new String[] { command }, null, AJAXFlags.MODE_NORMAL);
-					sb.append("href=\"javascript:;\" onclick=\"o_openPopUp('").append(href).append("','")
+					boolean hasUrl = StringHelper.containsNonWhitespace(link.getUrl());
+					String hrefUrl = hasUrl ? link.getUrl() : "javascript:;";
+					sb.append("href=\"").append(hrefUrl).append("\" onclick=\"o_openPopUp('").append(href).append("','")
 					  .append(popup.getTarget()).append("',").append(popup.getWidth())
 					  .append(",").append(popup.getHeight()).append("); return false;\" ");
 				} catch(IOException e) {
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 3b8caab2da9..cac069c6ba8 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -882,6 +882,8 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 		if (calendarIsEnabled && userCourseEnv != null) {
 			calendarLink = LinkFactory.createToolLink("calendar",translate("command.calendar"), this, "o_icon_calendar");
 			calendarLink.setPopup(new LinkPopupSettings(950, 750, "cal"));
+			calendarLink.setUrl(BusinessControlFactory.getInstance()
+					.getAuthenticatedURLFromBusinessPathStrings(businessPathEntry, "[Calendar:0]"));
 			calendarLink.setVisible(cc.isCalendarEnabled());
 			toolbarPanel.addTool(calendarLink);
 		}
@@ -1306,6 +1308,10 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 				if (forumLink != null && forumLink.isVisible()) {
 					doForum(ureq);
 				}
+			} else if("Calendar".equalsIgnoreCase(type)) {
+				if (calendarLink != null && calendarLink.isVisible()) {
+					doCalendar(ureq);
+				}
 			} else if("Documents".equalsIgnoreCase(type)) {
 				if (documentsLink != null && documentsLink.isVisible()) {
 					activateSubEntries(ureq, doDocuments(ureq), entries);
@@ -1963,7 +1969,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 			currentToolCtr = emailCtrl;
 		} else {
 			delayedClose = Delayed.email;
-		};
+		}
 	}
 	
 	private BlogToolController doBlog(UserRequest ureq) {
@@ -2033,6 +2039,27 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 		return null;
 	}
 	
+	/**
+	 * Open the calendar as sub-controller.
+	 * 
+	 * @param ureq The user request
+	 * @return The calendar controller
+	 */
+	private CourseCalendarController doCalendar(UserRequest ureq) {
+		OLATResourceable ores = OresHelper.createOLATResourceableType("Calendar");
+		WindowControl swControl = addToHistory(ureq, ores, null);
+		CourseCalendarController calendarController = new CourseCalendarController(ureq, swControl, getUserCourseEnvironment());
+		pushController(ureq, translate("command.calendar"), calendarController);
+		setActiveTool(calendarLink);
+		currentToolCtr = calendarController;
+		return calendarController;
+	}
+	
+	/**
+	 * Open the course calendar as popup.
+	 * 
+	 * @param ureq The user request
+	 */
 	private void launchCalendar(UserRequest ureq) {
 		ControllerCreator ctrlCreator = (lureq, lwControl) -> {
 			ICourse course = CourseFactory.loadCourse(getRepositoryEntry());
-- 
GitLab