diff --git a/src/main/java/org/olat/course/nodes/BCCourseNode.java b/src/main/java/org/olat/course/nodes/BCCourseNode.java index 31c64de7c2d4428a21fc359a7f71f2f46439eafb..6a0d80162e41746f86254c093841fb719ad65c38 100644 --- a/src/main/java/org/olat/course/nodes/BCCourseNode.java +++ b/src/main/java/org/olat/course/nodes/BCCourseNode.java @@ -104,7 +104,7 @@ public class BCCourseNode extends AbstractAccessableCourseNode { @Override public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) { updateModuleConfigDefaults(false); - BCCourseNodeEditController childTabCntrllr = new BCCourseNodeEditController(this, course, ureq, wControl, euce); + BCCourseNodeEditController childTabCntrllr = new BCCourseNodeEditController(this, course, ureq, wControl, stackPanel, euce); CourseNode chosenNode = course.getEditorTreeModel().getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId()); return new NodeEditController(ureq, wControl, course.getEditorTreeModel(), course, chosenNode, euce, childTabCntrllr); } diff --git a/src/main/java/org/olat/course/nodes/bc/BCCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/bc/BCCourseNodeEditController.java index e85b819e2c4f9b0159501c1cbbd7d19746c890e4..669022ff3107499e18ab9ba3b96f053e7c79c4b1 100644 --- a/src/main/java/org/olat/course/nodes/bc/BCCourseNodeEditController.java +++ b/src/main/java/org/olat/course/nodes/bc/BCCourseNodeEditController.java @@ -31,13 +31,14 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; +import org.olat.core.gui.components.stack.BreadcrumbPanel; +import org.olat.core.gui.components.stack.PopEvent; import org.olat.core.gui.components.tabbedpane.TabbedPane; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; -import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController; import org.olat.core.util.vfs.Quota; import org.olat.core.util.vfs.QuotaManager; @@ -78,12 +79,14 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr private Link vfButton; private TabbedPane myTabbedPane; - private VelocityContainer accessabiliryContent, folderContent; + private final BreadcrumbPanel stackPanel; + private final VelocityContainer folderContent; + private final VelocityContainer accessabiliryContent; - private CloseableModalController cmc; private FolderRunController folderCtrl; private BCCourseNodeEditForm folderPathChoose; - private ConditionEditController uploaderCondContr, downloaderCondContr; + private ConditionEditController uploaderCondContr; + private ConditionEditController downloaderCondContr; @Autowired @@ -97,13 +100,15 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr * @param ureq * @param wControl */ - public BCCourseNodeEditController(BCCourseNode bcNode, ICourse course, UserRequest ureq, WindowControl wControl, + public BCCourseNodeEditController(BCCourseNode bcNode, ICourse course, UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, UserCourseEnvironment euce) { super(ureq,wControl); //o_clusterOK by guido: inside course editor its save to have a reference to the course this.course = course; this.bcNode = bcNode; myTabbedPane = null; + this.stackPanel = stackPanel; + stackPanel.addListener(this); accessabiliryContent = createVelocityContainer("edit"); @@ -141,8 +146,15 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr @Override public void event(UserRequest ureq, Component source, Event event) { - if (source == vfButton){ + if (source == vfButton) { doOpenFolder(ureq); + } else if(source == stackPanel) { + if(event instanceof PopEvent) { + PopEvent pe = (PopEvent)event; + if(pe.getController() == folderCtrl) { + cleanUp(); + } + } } } @@ -181,11 +193,10 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr if(namedContainer == null) { showWarning("warning.no.linkedfolder"); } else { + removeAsListenerAndDispose(folderCtrl); folderCtrl = new FolderRunController(namedContainer, false, ureq, getWindowControl()); listenTo(folderCtrl); - cmc = new CloseableModalController(getWindowControl(), translate("close"), folderCtrl.getInitialComponent()); - listenTo(cmc); - cmc.activate(); + stackPanel.pushController("Preview", folderCtrl); } } @@ -219,21 +230,14 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr accessabiliryContent.contextPut("uploadable", true); } fireEvent(urequest, event); - } else if(cmc == source) { - cleanUp(); } } private void cleanUp() { removeAsListenerAndDispose(folderCtrl); - removeAsListenerAndDispose(cmc); folderCtrl = null; - cmc = null; } - /** - * @see org.olat.core.gui.control.generic.tabbable.TabbableDefaultController#addTabs(org.olat.core.gui.components.TabbedPane) - */ @Override public void addTabs(TabbedPane tabbedPane) { myTabbedPane = tabbedPane; @@ -243,7 +247,9 @@ public class BCCourseNodeEditController extends ActivateableTabbableDefaultContr @Override protected void doDispose() { - // + if(stackPanel != null) { + stackPanel.removeListener(this); + } } @Override diff --git a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java index ff52cab378c8e09c602d945169c09c1e45f34644..9e5431666d8ac7976df047dcbf9537fc66640246 100644 --- a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java +++ b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java @@ -313,7 +313,7 @@ public class ScoreAccounting { lifecycle.getValidTo();// } return lifecycle; - } catch (LazyInitializationException e) { + } catch (LazyInitializationException | NullPointerException e) { //OO-2667: only seen in 1 instance but as it's a critical place, secure the system RepositoryEntry reloadedEntry = CoreSpringFactory.getImpl(RepositoryService.class) .loadByKey(cgm.getCourseEntry().getKey()); diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index 0bc85516283519b1ea0d8fa80aeb30957b785b03..dca21f2322a1af8591a51a1b049384eefd8324b1 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -197,7 +197,7 @@ cmd.forward=Weiter cmd.import.ressource=Importieren cmd.import.url.ressource=Importieren URL cmd.import.ressource.desc=W\u00E4hlen Sie eine Lernressource f\u00FCr den Import\:<ul><li>OpenOlat Formate\: Kurs, Ressourcenordner, Glossar, Wiki, Podcast, Blog, Portfoliovorlage</li><li>Videos\: MP4</li><li>Standardformate\: IMS Content Packaging, IMS QTI Test oder Fragebogen, SCORM 1.2</li><li>Dateien\: beliebig</li></ul> -cmd.import.ressource.url.desc=Tragen Sie eine URL f\u00FCr den Import ein\:<ul><li>Videos\: MP4, Youttube, Vimeo, Panopto</li><li>Blog oder Podcast</li></ul> +cmd.import.ressource.url.desc=Tragen Sie eine URL f\u00FCr den Import ein\:<ul><li>Videos\: MP4, Youtube, Vimeo, Panopto</li><li>Blog oder Podcast</li></ul> comments=Kommentar confirmation.no.toolHelp=Aktion abbrechen. confirmation.yes.toolHelp=Lernressource l\u00F6schen. diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties index d2fdf976ae8424e8b1bf4550ec439bde4802a470..513ceff67cf01bd7dc2b1c830d2c85840fb9d39a 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties @@ -196,7 +196,7 @@ cmd.finish=Fermer l'assistant cmd.forward=Continuer cmd.import.ressource=Importer cmd.import.ressource.desc=Choisissez une ressource didactique \u00E0 importer\:<ul><li>Formats OpenOlat\: Cours, le dossier de fichiers, glossaire, wiki, podcasts, blogues, mod\u00E8le portfolio</li><li>Vid\u00E9os\: MP4</li><li>Formats standards\: IMS Content Packaging, test ou questionnaire IMS QTI, SCORM 1.2</li><li>Fichiers\: quelconque</ li> </ ul> -cmd.import.ressource.url.desc=Entrez un lien / URL pour importer\: <ul><li>des vid\u00E9os\: MP4, Youttube, Vimeo, Panopto</li><li>des blog ou des podcast</li></ul> +cmd.import.ressource.url.desc=Entrez un lien / URL pour importer\: <ul><li>des vid\u00E9os\: MP4, Youtube, Vimeo, Panopto</li><li>des blog ou des podcast</li></ul> cmd.import.url.ressource=Importer une URL comments=Commentaires confirmation.no.toolHelp=Annuler l'op\u00E9ration