From f7f49c1e4bf183bf8c8e919a721648e2ddda24f1 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 6 Aug 2020 16:32:09 +0200 Subject: [PATCH] OO-4835: enforce description of video from top to bottom --- .../olat/course/nodes/VideoCourseNode.java | 39 +++++++++++++++---- .../nodes/video/VideoEditController.java | 30 +++----------- .../nodes/video/VideoRunController.java | 20 +--------- .../video/ui/VideoDisplayController.java | 19 ++------- .../modules/video/ui/VideoDisplayOptions.java | 13 +------ .../video/ui/VideoListingController.java | 2 +- 6 files changed, 43 insertions(+), 80 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/VideoCourseNode.java b/src/main/java/org/olat/course/nodes/VideoCourseNode.java index c1c9e7edaa9..873dc5d89e1 100644 --- a/src/main/java/org/olat/course/nodes/VideoCourseNode.java +++ b/src/main/java/org/olat/course/nodes/VideoCourseNode.java @@ -32,6 +32,7 @@ import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; import org.olat.core.util.Util; +import org.olat.core.util.ValidationStatus; import org.olat.core.util.nodes.INode; import org.olat.course.ICourse; import org.olat.course.condition.ConditionEditController; @@ -46,6 +47,8 @@ import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.CourseNodeSecurityCallback; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.types.VideoFileResource; +import org.olat.modules.ModuleConfiguration; +import org.olat.modules.video.ui.VideoDisplayOptions; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryImportExport; import org.olat.repository.handlers.RepositoryHandler; @@ -72,7 +75,7 @@ public class VideoCourseNode extends AbstractAccessableCourseNode { @Override public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) { - VideoEditController childTabCntrllr = new VideoEditController(this, ureq, wControl, course, euce); + VideoEditController childTabCntrllr = new VideoEditController(this, ureq, wControl); CourseNode chosenNode = course.getEditorTreeModel().getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId()); return new NodeEditController(ureq, wControl, course, chosenNode, euce, childTabCntrllr); } @@ -93,13 +96,36 @@ public class VideoCourseNode extends AbstractAccessableCourseNode { } @Override - public NodeRunConstructionResult createNodeRunConstructionResult( - UserRequest ureq, WindowControl wControl, - UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback, - String nodecmd) { + public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, + UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback, String nodecmd) { VideoRunController cprunC = new VideoRunController(getModuleConfiguration(), wControl, ureq, userCourseEnv, this); return cprunC.createNodeRunConstructionResult(ureq); } + + public VideoDisplayOptions getVideoDisplay(RepositoryEntry videoEntry, boolean readOnly) { + // configure the display controller according to config + ModuleConfiguration config = getModuleConfiguration(); + boolean autoplay = config.getBooleanSafe(VideoEditController.CONFIG_KEY_AUTOPLAY); + boolean comments = config.getBooleanSafe(VideoEditController.CONFIG_KEY_COMMENTS); + boolean ratings = config.getBooleanSafe(VideoEditController.CONFIG_KEY_RATING); + String customtext = config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_CUSTOMTEXT); + + VideoDisplayOptions displayOptions = VideoDisplayOptions.valueOf(autoplay, comments, ratings, true, false, false, null, false, readOnly); + switch(config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_SELECT, "none")) { + case "customDescription": + displayOptions.setShowDescription(true); + displayOptions.setDescriptionText(customtext); + break; + case "resourceDescription": + displayOptions.setShowDescription(true); + displayOptions.setDescriptionText(videoEntry.getDescription()); + break; + default: + displayOptions.setShowDescription(false); + break; + } + return displayOptions; + } @Override public StatusDescription isConfigValid(){ @@ -108,12 +134,11 @@ public class VideoCourseNode extends AbstractAccessableCourseNode { StatusDescription sd = StatusDescription.NOERROR; boolean isValid = VideoEditController.isModuleConfigValid(getModuleConfiguration()); if (!isValid) { - // FIXME: refine statusdescriptions String shortKey = "no.video.chosen"; String longKey = "error.noreference.long"; String[] params = new String[] { this.getShortTitle() }; String translPackage = Util.getPackageName(VideoEditController.class); - sd = new StatusDescription(StatusDescription.ERROR, shortKey, longKey, params, translPackage); + sd = new StatusDescription(ValidationStatus.ERROR, shortKey, longKey, params, translPackage); sd.setDescriptionForUnit(getIdent()); // set which pane is affected by error sd.setActivateableViewIdentifier(VideoEditController.PANE_TAB_VIDEOCONFIG); diff --git a/src/main/java/org/olat/course/nodes/video/VideoEditController.java b/src/main/java/org/olat/course/nodes/video/VideoEditController.java index 8306f361c1b..f025b18285d 100644 --- a/src/main/java/org/olat/course/nodes/video/VideoEditController.java +++ b/src/main/java/org/olat/course/nodes/video/VideoEditController.java @@ -46,10 +46,8 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.filter.FilterFactory; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSContainerMapper; -import org.olat.course.ICourse; import org.olat.course.editor.NodeEditController; import org.olat.course.nodes.VideoCourseNode; -import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.types.VideoFileResource; import org.olat.modules.ModuleConfiguration; import org.olat.modules.video.VideoManager; @@ -71,11 +69,9 @@ import org.springframework.beans.factory.annotation.Autowired; public class VideoEditController extends ActivateableTabbableDefaultController implements ControllerEventListener { public static final String PANE_TAB_VIDEOCONFIG = "pane.tab.videoconfig"; - private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility"; - private final static String[] paneKeys = { PANE_TAB_VIDEOCONFIG}; + private static final String[] paneKeys = { PANE_TAB_VIDEOCONFIG}; public static final String NLS_ERROR_VIDEOREPOENTRYMISSING = "error.videorepoentrymissing"; - private static final String NLS_CONDITION_ACCESSIBILITY_TITLE = "condition.accessibility.title"; private static final String NLS_COMMAND_CHOOSEVIDEO = "command.choosevideo"; private static final String NLS_COMMAND_CREATEVID = "command.createvideo"; private static final String NLS_COMMAND_CHANGEVID = "command.changevideo"; @@ -98,8 +94,8 @@ public class VideoEditController extends ActivateableTabbableDefaultController i private TabbedPane myTabbedPane; private VelocityContainer videoConfigurationVc; - private ModuleConfiguration config; private final VideoCourseNode videoNode; + private final ModuleConfiguration config; private RepositoryEntry repositoryEntry; private CloseableModalController cmc; @@ -107,10 +103,10 @@ public class VideoEditController extends ActivateableTabbableDefaultController i private VideoOptionsForm videoOptionsCtrl; private ReferencableEntriesSearchController searchController; - public VideoEditController(VideoCourseNode videoNode, UserRequest ureq, WindowControl wControl, ICourse course, UserCourseEnvironment euce) { + public VideoEditController(VideoCourseNode videoNode, UserRequest ureq, WindowControl wControl) { super(ureq, wControl); - this.config = videoNode.getModuleConfiguration(); this.videoNode = videoNode; + this.config = videoNode.getModuleConfiguration(); main = new Panel("videomain"); @@ -249,23 +245,7 @@ public class VideoEditController extends ActivateableTabbableDefaultController i removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(previewCtrl); - boolean autoplay = config.getBooleanSafe(VideoEditController.CONFIG_KEY_AUTOPLAY); - boolean showRating = config.getBooleanSafe(VideoEditController.CONFIG_KEY_RATING); - boolean showComments = config.getBooleanSafe(VideoEditController.CONFIG_KEY_COMMENTS); - - VideoDisplayOptions options = VideoDisplayOptions.valueOf(autoplay, showComments, showRating, true, true, false, false, "", true, true); - switch(config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_SELECT, "none")) { - case "customDescription": - options.setCustomDescription(true); - options.setDescriptionText(config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_CUSTOMTEXT)); - break; - case "none": - options.setShowDescription(false); - break; - default: - break; - } - + VideoDisplayOptions options = videoNode.getVideoDisplay(repositoryEntry, true); previewCtrl = new VideoDisplayController(ureq, getWindowControl(), repositoryEntry, null, null, options); listenTo(previewCtrl); cmc = new CloseableModalController(getWindowControl(), translate("close"), previewCtrl.getInitialComponent(), true, translate(NLS_COMMAND_CHOOSEVIDEO)); diff --git a/src/main/java/org/olat/course/nodes/video/VideoRunController.java b/src/main/java/org/olat/course/nodes/video/VideoRunController.java index 14187065183..966a991d7a6 100644 --- a/src/main/java/org/olat/course/nodes/video/VideoRunController.java +++ b/src/main/java/org/olat/course/nodes/video/VideoRunController.java @@ -107,27 +107,9 @@ public class VideoRunController extends BasicController { showError(VideoEditController.NLS_ERROR_VIDEOREPOENTRYMISSING); return; } - - // configure the display controller according to config - boolean autoplay = config.getBooleanSafe(VideoEditController.CONFIG_KEY_AUTOPLAY); - boolean comments = config.getBooleanSafe(VideoEditController.CONFIG_KEY_COMMENTS); - boolean ratings = config.getBooleanSafe(VideoEditController.CONFIG_KEY_RATING); - String customtext = config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_CUSTOMTEXT); - VideoDisplayOptions displayOptions = VideoDisplayOptions.valueOf(autoplay, comments, ratings, true, true, false, false, null, false, userCourseEnv.isCourseReadOnly()); - switch(config.getStringValue(VideoEditController.CONFIG_KEY_DESCRIPTION_SELECT,"none")) { - case "customDescription": - displayOptions.setCustomDescription(true); - displayOptions.setDescriptionText(customtext); - break; - case "none": - displayOptions.setShowDescription(false); - break; - default: - break; - } - RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); + VideoDisplayOptions displayOptions = videoNode.getVideoDisplay(videoEntry, userCourseEnv.isCourseReadOnly()); videoDispCtr = new VideoDisplayController(ureq, getWindowControl(), videoEntry, courseEntry, videoNode, displayOptions); listenTo(videoDispCtr); diff --git a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java index c92fc5cf772..edebc7ef4d3 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java @@ -103,7 +103,6 @@ public class VideoDisplayController extends BasicController { private Integer userPreferredResolution; private RepositoryEntry videoEntry; - private String descriptionText; private String mediaRepoBaseUrl; private VideoMeta videoMetadata; private VideoMarkers videoMarkers; @@ -118,13 +117,9 @@ public class VideoDisplayController extends BasicController { private VideoModule videoModule; @Autowired private VideoManager videoManager; - - public VideoDisplayController(UserRequest ureq, WindowControl wControl, RepositoryEntry videoEntry, boolean autoWidth) { - this(ureq, wControl, videoEntry, null, null, VideoDisplayOptions.valueOf(false, false, false, true, true, false, autoWidth, null, false, false)); - } public VideoDisplayController(UserRequest ureq, WindowControl wControl, RepositoryEntry videoEntry) { - this(ureq, wControl, videoEntry, null, null, VideoDisplayOptions.valueOf(false, false, false, true, true, false, false, null, false, false)); + this(ureq, wControl, videoEntry, null, null, VideoDisplayOptions.valueOf(false, false, false, true, true, true, videoEntry.getDescription(), false, false)); } /** @@ -141,7 +136,6 @@ public class VideoDisplayController extends BasicController { super(ureq, wControl); this.videoEntry = videoEntry; this.displayOptions = displayOptions; - this.descriptionText = getDescription(courseNode, displayOptions); mainVC = createVelocityContainer("video_run"); putInitialPanel(mainVC); @@ -224,12 +218,6 @@ public class VideoDisplayController extends BasicController { PublisherData data = new PublisherData(VideoFileResource.TYPE_NAME, ores.getResourceableId() + "-" + subIdent, businessPath); return new PublishingInformations(data, ctx); } - - private String getDescription(VideoCourseNode courseNode, VideoDisplayOptions options) { - if (options.isCustomDescription()) return options.getDescriptionText(); - if (courseNode != null) return courseNode.getLearningObjectives(); - return null; - } public VideoMeta getVideoMetadata() { return videoMetadata; @@ -425,9 +413,8 @@ public class VideoDisplayController extends BasicController { mainVC.contextPut("masterUrl", masterUrl); mainVC.contextPut("title", videoEntry.getDisplayname()); - if(displayOptions == null || displayOptions.isShowDescription()) { - String desc = (StringHelper.containsNonWhitespace(descriptionText) ? descriptionText : videoEntry.getDescription()); - setText(desc, "description"); + if(displayOptions.isShowDescription()) { + setText(displayOptions.getDescriptionText(), "description"); } String authors = videoEntry.getAuthors(); diff --git a/src/main/java/org/olat/modules/video/ui/VideoDisplayOptions.java b/src/main/java/org/olat/modules/video/ui/VideoDisplayOptions.java index 466bf607e35..de85d36046e 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoDisplayOptions.java +++ b/src/main/java/org/olat/modules/video/ui/VideoDisplayOptions.java @@ -33,7 +33,6 @@ public class VideoDisplayOptions { private boolean showRating; private boolean showTitle; private boolean showDescription; - private boolean customDescription; private boolean autoWidth; private boolean readOnly; private String descriptionText; @@ -46,11 +45,10 @@ public class VideoDisplayOptions { private boolean authorMode; public static VideoDisplayOptions valueOf(boolean autoplay, boolean showComments, boolean showRating, boolean showTitle, boolean showDescription, - boolean customDescription, boolean autoWidth, String descriptionText, boolean authorMode, boolean readOnly) { + boolean autoWidth, String descriptionText, boolean authorMode, boolean readOnly) { VideoDisplayOptions options = new VideoDisplayOptions(); options.setAutoplay(autoplay); options.setAutoWidth(autoWidth); - options.setCustomDescription(customDescription); options.setDescriptionText(descriptionText); options.setReadOnly(readOnly); options.setShowComments(showComments); @@ -71,7 +69,6 @@ public class VideoDisplayOptions { VideoDisplayOptions options = new VideoDisplayOptions(); options.setAutoplay(false); options.setAutoWidth(false); - options.setCustomDescription(false); options.setDescriptionText(null); options.setReadOnly(false); options.setShowComments(false); @@ -167,14 +164,6 @@ public class VideoDisplayOptions { public void setShowDescription(boolean showDescription) { this.showDescription = showDescription; } - - public boolean isCustomDescription() { - return customDescription; - } - - public void setCustomDescription(boolean customDescription) { - this.customDescription = customDescription; - } public boolean isAutoWidth() { return autoWidth; diff --git a/src/main/java/org/olat/modules/video/ui/VideoListingController.java b/src/main/java/org/olat/modules/video/ui/VideoListingController.java index a2f3acdcaa7..9425ff84132 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoListingController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoListingController.java @@ -167,7 +167,7 @@ public class VideoListingController extends FormBasicController implements Activ RepositoryEntrySecurity reSecurity = repositoryManager.isAllowed(ureq, videoEntry); if (reSecurity.canLaunch()) {// no booking implemented for video boolean readOnly = videoEntry.getEntryStatus().decommissioned(); - VideoDisplayOptions options = VideoDisplayOptions.valueOf(true, true, true, true, true, false, true, null, false, readOnly); + VideoDisplayOptions options = VideoDisplayOptions.valueOf(true, true, true, true, true, false, videoEntry.getDescription(), false, readOnly); VideoDisplayController videoDisplayCtr = new VideoDisplayController(ureq, getWindowControl(), videoEntry, null, null, options); listenTo(videoDisplayCtr); toolbarPanel.pushController(videoEntry.getDisplayname(), videoDisplayCtr); -- GitLab