Skip to content
Snippets Groups Projects
Commit c23690b1 authored by uhensler's avatar uhensler
Browse files

OO-4836: Show Opencast content inline

parent 8ceeeb00
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -20,16 +20,12 @@
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.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.winmgr.CommandFactory;
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;
......@@ -42,15 +38,12 @@ import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 12 Aug 2020<br>
* Initial date: 13 Aug 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OpencastDisplayController extends FormBasicController {
public class OpencastRunController extends BasicController {
private FormLink seriesButton;
private FormLink eventButton;
private final ModuleConfiguration config;
private final String roles;
......@@ -59,15 +52,50 @@ public class OpencastDisplayController extends FormBasicController {
@Autowired
private OpencastService opencastService;
public OpencastDisplayController(UserRequest ureq, WindowControl wControl, OpencastCourseNode courseNode,
UserCourseEnvironment userCourseEnv) {
super(ureq, wControl, "display");
public OpencastRunController(UserRequest ureq, WindowControl wControl, OpencastCourseNode courseNode, UserCourseEnvironment userCourseEnv) {
super(ureq, wControl);
config = courseNode.getModuleConfiguration();
roles = initRoles(userCourseEnv);
initForm(ureq);
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();
......@@ -77,68 +105,9 @@ public class OpencastDisplayController extends FormBasicController {
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) {
protected void event(UserRequest ureq, Component source, Event event) {
//
}
......
<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
<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
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