diff --git a/src/main/java/org/olat/course/nodes/OpencastCourseNode.java b/src/main/java/org/olat/course/nodes/OpencastCourseNode.java index 0a068c314e10983cd95f263b527e1a25c56b8f6a..a043fb5bb497b3d3f0dfdc243bbb190e4bbb7424 100644 --- a/src/main/java/org/olat/course/nodes/OpencastCourseNode.java +++ b/src/main/java/org/olat/course/nodes/OpencastCourseNode.java @@ -36,8 +36,8 @@ import org.olat.course.editor.ConditionAccessEditConfig; import org.olat.course.editor.CourseEditorEnv; import org.olat.course.editor.NodeEditController; import org.olat.course.editor.StatusDescription; -import org.olat.course.nodes.opencast.ui.OpencastDisplayController; import org.olat.course.nodes.opencast.ui.OpencastEditController; +import org.olat.course.nodes.opencast.ui.OpencastRunController; import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.CourseNodeSecurityCallback; import org.olat.course.run.userview.UserCourseEnvironment; @@ -95,7 +95,7 @@ public class OpencastCourseNode extends AbstractAccessableCourseNode { String message = trans.translate("freezenoaccess.message"); runCtrl = MessageUIFactory.createInfoMessage(ureq, wControl, title, message); } else { - runCtrl = new OpencastDisplayController(ureq, wControl, this, userCourseEnv); + runCtrl = new OpencastRunController(ureq, wControl, this, userCourseEnv); } Controller ctrl = TitledWrapperHelper.getWrapper(ureq, wControl, runCtrl, this, ICON_CSS); return new NodeRunConstructionResult(ctrl); diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/OpencastDisplayController.java b/src/main/java/org/olat/course/nodes/opencast/ui/OpencastDisplayController.java deleted file mode 100644 index 3ef28f6b9691500d4fc37e82012690ecb902298c..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/course/nodes/opencast/ui/OpencastDisplayController.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ -package org.olat.course.nodes.opencast.ui; - -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.components.form.flexible.FormItem; -import org.olat.core.gui.components.form.flexible.FormItemContainer; -import org.olat.core.gui.components.form.flexible.elements.FormLink; -import org.olat.core.gui.components.form.flexible.impl.FormBasicController; -import org.olat.core.gui.components.form.flexible.impl.FormEvent; -import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; -import org.olat.core.gui.components.link.Link; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; -import org.olat.core.gui.control.winmgr.CommandFactory; -import org.olat.core.util.Formatter; -import org.olat.course.nodes.OpencastCourseNode; -import org.olat.course.run.userview.UserCourseEnvironment; -import org.olat.modules.ModuleConfiguration; -import org.olat.modules.opencast.OpencastEvent; -import org.olat.modules.opencast.OpencastModule; -import org.olat.modules.opencast.OpencastSeries; -import org.olat.modules.opencast.OpencastService; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * - * Initial date: 12 Aug 2020<br> - * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com - * - */ -public class OpencastDisplayController extends FormBasicController { - - private FormLink seriesButton; - private FormLink eventButton; - - private final ModuleConfiguration config; - private final String roles; - - @Autowired - private OpencastModule opencastModule; - @Autowired - private OpencastService opencastService; - - public OpencastDisplayController(UserRequest ureq, WindowControl wControl, OpencastCourseNode courseNode, - UserCourseEnvironment userCourseEnv) { - super(ureq, wControl, "display"); - config = courseNode.getModuleConfiguration(); - roles = initRoles(userCourseEnv); - - initForm(ureq); - } - - private String initRoles(UserCourseEnvironment userCourseEnv) { - if (userCourseEnv.isAdmin()) { - return opencastModule.getRolesAdmin(); - } else if (userCourseEnv.isCoach()) { - return opencastModule.getRolesCoach(); - } - return opencastModule.getRolesParticipant(); - } - - @Override - protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - if (formLayout instanceof FormLayoutContainer) { - FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; - - String title = config.getStringValue(OpencastCourseNode.CONFIG_TITLE); - layoutCont.contextPut("title", title); - - if (config.has(OpencastCourseNode.CONFIG_SERIES_IDENTIFIER)) { - String seriesIdentifier = config.getStringValue(OpencastCourseNode.CONFIG_SERIES_IDENTIFIER); - OpencastSeries series = opencastService.getSeries(seriesIdentifier); - if (series != null) { - layoutCont.contextPut("title", series.getTitle()); - seriesButton = uifactory.addFormLink("start.series", formLayout, Link.BUTTON_LARGE); - seriesButton.setNewWindow(true, true); - seriesButton.setUserObject(series); - } else { - layoutCont.contextPut("error", translate("error.series.not.found", new String[] {title})); - } - } else { - String eventIdentifier = config.getStringValue(OpencastCourseNode.CONFIG_EVENT_IDENTIFIER); - OpencastEvent event = opencastService.getEvent(eventIdentifier); - if (event != null) { - layoutCont.contextPut("title", event.getTitle()); - String start = Formatter.getInstance(getLocale()).formatDateAndTime(event.getStart()); - layoutCont.contextPut("start", start); - layoutCont.contextPut("creator", event.getCreator()); - - eventButton = uifactory.addFormLink("start.event", formLayout, Link.BUTTON_LARGE); - eventButton.setNewWindow(true, true); - eventButton.setUserObject(event); - } else { - layoutCont.contextPut("error", translate("error.event.not.found", new String[] {title})); - } - } - } - } - - @Override - protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { - if (source == seriesButton) { - OpencastSeries opencastSeries = (OpencastSeries)seriesButton.getUserObject(); - doStartSeries(ureq, opencastSeries); - } else if (source == eventButton) { - OpencastEvent opencastEvent = (OpencastEvent)eventButton.getUserObject(); - doStartEvent(ureq, opencastEvent); - } - super.formInnerEvent(ureq, source, event); - } - - private void doStartSeries(UserRequest ureq, OpencastSeries opencastSeries) { - String url = opencastService.getLtiSeriesMapperUrl(ureq.getUserSession(), opencastSeries, roles); - getWindowControl().getWindowBackOffice().sendCommandTo(CommandFactory.createNewWindowRedirectTo(url)); - } - - private void doStartEvent(UserRequest ureq, OpencastEvent opencastEvent) { - String url = opencastService.getLtiEventMapperUrl(ureq.getUserSession(), opencastEvent.getIdentifier(), roles); - getWindowControl().getWindowBackOffice().sendCommandTo(CommandFactory.createNewWindowRedirectTo(url)); - } - - @Override - protected void formOK(UserRequest ureq) { - // - } - - @Override - protected void doDispose() { - // - } - -} diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/OpencastRunController.java b/src/main/java/org/olat/course/nodes/opencast/ui/OpencastRunController.java new file mode 100644 index 0000000000000000000000000000000000000000..7078188e9c5094fc01972788c0fdd2099d8de52e --- /dev/null +++ b/src/main/java/org/olat/course/nodes/opencast/ui/OpencastRunController.java @@ -0,0 +1,119 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.course.nodes.opencast.ui; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.Component; +import org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent; +import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.Event; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.util.Formatter; +import org.olat.course.nodes.OpencastCourseNode; +import org.olat.course.run.userview.UserCourseEnvironment; +import org.olat.modules.ModuleConfiguration; +import org.olat.modules.opencast.OpencastEvent; +import org.olat.modules.opencast.OpencastModule; +import org.olat.modules.opencast.OpencastSeries; +import org.olat.modules.opencast.OpencastService; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 13 Aug 2020<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public class OpencastRunController extends BasicController { + + private final ModuleConfiguration config; + private final String roles; + + @Autowired + private OpencastModule opencastModule; + @Autowired + private OpencastService opencastService; + + public OpencastRunController(UserRequest ureq, WindowControl wControl, OpencastCourseNode courseNode, UserCourseEnvironment userCourseEnv) { + super(ureq, wControl); + config = courseNode.getModuleConfiguration(); + roles = initRoles(userCourseEnv); + + VelocityContainer mainVC = createVelocityContainer("run"); + + String url = null; + String title = config.getStringValue(OpencastCourseNode.CONFIG_TITLE); + mainVC.contextPut("title", title); + + if (config.has(OpencastCourseNode.CONFIG_SERIES_IDENTIFIER)) { + String seriesIdentifier = config.getStringValue(OpencastCourseNode.CONFIG_SERIES_IDENTIFIER); + OpencastSeries series = opencastService.getSeries(seriesIdentifier); + if (series != null) { + mainVC.contextPut("title", series.getTitle()); + url = opencastService.getLtiSeriesMapperUrl(ureq.getUserSession(), series, roles); + } else { + mainVC.contextPut("error", translate("error.series.not.found", new String[] {title})); + } + } else { + String eventIdentifier = config.getStringValue(OpencastCourseNode.CONFIG_EVENT_IDENTIFIER); + OpencastEvent event = opencastService.getEvent(eventIdentifier); + if (event != null) { + mainVC.contextPut("title", event.getTitle()); + String start = Formatter.getInstance(getLocale()).formatDateAndTime(event.getStart()); + mainVC.contextPut("start", start); + mainVC.contextPut("creator", event.getCreator()); + url = opencastService.getLtiEventMapperUrl(ureq.getUserSession(), event.getIdentifier(), roles); + } else { + mainVC.contextPut("error", translate("error.event.not.found", new String[] {title})); + } + } + + if (url != null) { + mainVC.contextPut("mapperUri", url + "/"); + + JSAndCSSComponent js = new JSAndCSSComponent("js", new String[] { "js/openolat/iFrameResizerHelper.js" }, null); + mainVC.put("js", js); + } + + putInitialPanel(mainVC); + } + + private String initRoles(UserCourseEnvironment userCourseEnv) { + if (userCourseEnv.isAdmin()) { + return opencastModule.getRolesAdmin(); + } else if (userCourseEnv.isCoach()) { + return opencastModule.getRolesCoach(); + } + return opencastModule.getRolesParticipant(); + } + + + @Override + protected void event(UserRequest ureq, Component source, Event event) { + // + } + + @Override + protected void doDispose() { + // + } + +} diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/_content/display.html b/src/main/java/org/olat/course/nodes/opencast/ui/_content/display.html deleted file mode 100644 index dec36daf9114dfb1f88082b6cf718a3790808b63..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/course/nodes/opencast/ui/_content/display.html +++ /dev/null @@ -1,20 +0,0 @@ -<div> -<h3>$r.escapeHtml($title)</h3> -#if($r.isNotEmpty($errorMessage)) - <div class="o_error">$errorMessage</div> -#end -#if($r.isNotNull($start)) -<div><i class="o_icon o_icon-fw o_icon_lifecycle_date"> </i> $start</div> -#end -#if($r.isNotEmpty($creator)) -<div><i class="o_icon o_icon-fw o_icon_user"> </i> $r.escapeHtml($creator)</div> -#end -<div class="o_button_group"> -#if($r.available("start.series") && $r.visible("start.series")) - $r.render("start.series") -#end -#if($r.available("start.event") && $r.visible("start.event")) - $r.render("start.event") -#end -</div> -</div> \ No newline at end of file diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/_content/run.html b/src/main/java/org/olat/course/nodes/opencast/ui/_content/run.html new file mode 100644 index 0000000000000000000000000000000000000000..7eca555a3be17ed0c0335905c7f9e8ea278cf39f --- /dev/null +++ b/src/main/java/org/olat/course/nodes/opencast/ui/_content/run.html @@ -0,0 +1,23 @@ +<div> +<h3>$r.escapeHtml($title)</h3> +#if($r.isNotEmpty($errorMessage)) + <div class="o_error">$errorMessage</div> +#end +#if($r.isNotNull($start)) + <div><i class="o_icon o_icon-fw o_icon_lifecycle_date"> </i> $start</div> +#end +#if($r.isNotEmpty($creator)) + <div><i class="o_icon o_icon-fw o_icon_user"> </i> $r.escapeHtml($creator)</div> +#end +</div> +#if($r.isNotNull($mapperUri)) + <div class="o_iframedisplay"> + <iframe id="OpencastIFrame" src="${mapperUri}?$r.uuid" marginwidth="0" marginheight="0" frameborder="0" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> + </div> + <script> + /* <![CDATA[ */ + jQuery(function() {b_resizeIframeToMainMaxHeight("OpencastIFrame");}); + registerIFrameAndObserve("OpencastIFrame", false); + /* ]]> */ + </script> +#end \ No newline at end of file