From 3b004e7922727ff75abb76be974affd358528263 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 21 Aug 2014 11:40:03 +0200 Subject: [PATCH] OO-990: fix CP editor, reimplement active tool... --- .../glossary/GlossaryRuntimeController.java | 2 + .../java/org/olat/course/CourseFactory.java | 5 +- .../course/editor/EditorMainController.java | 251 ++++++++---------- .../course/nodes/iq/IQEditController.java | 2 +- .../course/run/CourseRuntimeController.java | 36 ++- .../olat/ims/cp/ui/CPEditMainController.java | 19 +- .../olat/ims/cp/ui/CPRuntimeController.java | 4 +- .../repository/handlers/QTISurveyHandler.java | 2 +- .../repository/handlers/QTITestHandler.java | 2 +- .../modules/scorm/ScormRuntimeController.java | 1 + .../webFeed/ui/FeedRuntimeController.java | 1 + .../olat/repository/handlers/BlogHandler.java | 2 +- .../repository/handlers/CourseHandler.java | 4 +- .../repository/handlers/GlossaryHandler.java | 2 +- .../repository/handlers/ImsCPHandler.java | 4 +- .../repository/handlers/PodcastHandler.java | 2 +- .../repository/handlers/PortfolioHandler.java | 2 +- .../handlers/RepositoryHandler.java | 4 +- .../repository/handlers/SCORMCPHandler.java | 2 +- .../handlers/SharedFolderHandler.java | 2 +- .../handlers/WebDocumentHandler.java | 3 +- .../olat/repository/handlers/WikiHandler.java | 2 +- .../ui/RepositoryEntryRuntimeController.java | 36 ++- 23 files changed, 211 insertions(+), 179 deletions(-) diff --git a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryRuntimeController.java b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryRuntimeController.java index 786752724a7..5dbaac7f13d 100644 --- a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryRuntimeController.java +++ b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryRuntimeController.java @@ -76,6 +76,7 @@ public class GlossaryRuntimeController extends RepositoryEntryRuntimeController GlossaryRegisterSettingsController glossRegisterSetCtr = new GlossaryRegisterSettingsController(ureq, getWindowControl(), glossary.getOlatResource()); pushController(ureq, translate("tab.glossary.register"), glossRegisterSetCtr); + setActiveTool(registerLink); } private void doPermission(UserRequest ureq) { @@ -83,5 +84,6 @@ public class GlossaryRuntimeController extends RepositoryEntryRuntimeController GlossaryEditSettingsController glossEditCtr = new GlossaryEditSettingsController(ureq, getWindowControl(), glossary.getOlatResource()); pushController(ureq, translate("tab.glossary.edit"), glossEditCtr); + setActiveTool(permissionLink); } } diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index 92692c262b4..e31f3ff426e 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -58,7 +58,6 @@ import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.commons.services.taskexecutor.TaskExecutorManager; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.htmlheader.jscss.CustomCSS; -import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; @@ -181,10 +180,10 @@ public class CourseFactory extends BasicManager { * @return editor controller for the given course resourceable; if the editor * is already locked, it returns a controller with a lock message */ - public static EditorMainController createEditorController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stack, + public static EditorMainController createEditorController(UserRequest ureq, WindowControl wControl, OLATResourceable olatResource, CourseNode selectedNode) { ICourse course = loadCourse(olatResource); - EditorMainController emc = new EditorMainController(ureq, wControl, course, stack, selectedNode); + EditorMainController emc = new EditorMainController(ureq, wControl, course, selectedNode); if (emc.getLockEntry() == null) { Translator translator = Util.createPackageTranslator(RunMainController.class, ureq.getLocale()); wControl.setWarning(translator.translate("error.editoralreadylocked", new String[] { "?" })); diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index 83b17370f39..c1439d97352 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -104,6 +104,7 @@ import org.olat.course.tree.CourseEditorTreeModel; import org.olat.course.tree.CourseEditorTreeNode; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import org.olat.repository.ui.RepositoryEntryRuntimeController.ToolbarAware; import org.olat.util.logging.activity.LoggingResourceable; /** @@ -119,7 +120,7 @@ import org.olat.util.logging.activity.LoggingResourceable; * @author Felix Jost * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ -public class EditorMainController extends MainLayoutBasicController implements GenericEventListener { +public class EditorMainController extends MainLayoutBasicController implements GenericEventListener, ToolbarAware { private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(EditorMainController.class); protected static final String TB_ACTION = "o_tb_do_"; @@ -127,7 +128,6 @@ public class EditorMainController extends MainLayoutBasicController implements G private static final String CMD_COPYNODE = "copyn"; private static final String CMD_MOVENODE = "moven"; private static final String CMD_DELNODE = "deln"; - private static final String CMD_CLOSEEDITOR = "cmd.close"; private static final String CMD_PUBLISH = "pbl"; private static final String CMD_COURSEPREVIEW = "cprev"; protected static final String CMD_MULTI_SP = "cmp.multi.sp"; @@ -139,7 +139,6 @@ public class EditorMainController extends MainLayoutBasicController implements G private static final String NLS_PUBLISHED_LATEST = "published.latest"; private static final String NLS_COMMAND_COURSEPREVIEW = "command.coursepreview"; private static final String NLS_COMMAND_PUBLISH = "command.publish"; - private static final String NLS_COMMAND_CLOSEEDITOR = "command.closeeditor"; private static final String NLS_HEADER_INSERTNODES = "header.insertnodes"; private static final String NLS_COMMAND_DELETENODE_HEADER = "command.deletenode.header"; private static final String NLS_COMMAND_DELETENODE = "command.deletenode"; @@ -176,6 +175,7 @@ public class EditorMainController extends MainLayoutBasicController implements G private HtmlHeaderComponent hc; private EditorUserCourseEnvironmentImpl euce; + private Dropdown nodeTools; private Link undelButton, alternativeLink, statusLink; private Link previewLink, publishLink, closeLink; private Link createNodeLink, deleteNodeLink, moveNodeLink, copyNodeLink; @@ -183,8 +183,8 @@ public class EditorMainController extends MainLayoutBasicController implements G private CloseableModalController cmc; private CloseableCalloutWindowController calloutCtrl; + private TooledStackedPanel stackPanel; private MultiSPController multiSPChooserCtr; - private final TooledStackedPanel stackPanel; private final OLATResourceable ores; @@ -198,14 +198,9 @@ public class EditorMainController extends MainLayoutBasicController implements G * @param wControl The window controller * @param course The course */ - public EditorMainController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, - TooledStackedPanel externStack, CourseNode selectedNode) { + public EditorMainController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, CourseNode selectedNode) { super(ureq,wControl); - this.ores = ores; - stackPanel = externStack == null - ? new TooledStackedPanel("courseEditorStackPanel", getTranslator(), this) - : externStack; - + this.ores = ores; // OLAT-4955: setting the stickyActionType here passes it on to any controller defined in the scope of the editor, // basically forcing any logging action called within the course editor to be of type 'admin' @@ -225,139 +220,128 @@ public class EditorMainController extends MainLayoutBasicController implements G CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, getIdentity(), lockEntryOres); try { - ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_EDITOR_OPEN, getClass()); - - if (!lockEntry.isSuccess()) { - MainPanel empty = new MainPanel("empty"); - putInitialPanel(empty); - return; - } else { - ICourse course = CourseFactory.openCourseEditSession(ores.getResourceableId()); - main = createVelocityContainer("index"); - main.setDomReplacementWrapperRequired(false); - - OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", ores.getResourceableId()); - RepositoryEntry repo = RepositoryManager.getInstance().lookupRepositoryEntry(courseOres, false); - Controller courseCloser = new DisposedCourseRestartController(ureq, wControl, repo); - Controller disposedRestartController = new LayoutMain3ColsController(ureq, wControl, courseCloser); - setDisposedMsgController(disposedRestartController); - - undelButton = LinkFactory.createButton("undeletenode.button", main, this); - - // set the custom course css - enableCustomCss(ureq); - - menuTree = new MenuTree("luTree"); - menuTree.setExpandSelectedNode(false); - menuTree.setDragEnabled(true); - menuTree.setDropEnabled(true); - menuTree.setDropSiblingEnabled(true); - menuTree.setDndAcceptJSMethod("treeAcceptDrop_notWithChildren"); - menuTree.setElementCssClass("o_editor_menu"); - - /* - * create editor user course environment for enhanced syntax/semantic - * checks. Initialize it with the current course node id, which is not set - * yet. Furthermore the course is refreshed, e.g. as it get's loaded by - * XSTREAM constructors are not called, but transient data must be - * caculated and initialized - */ - cetm = CourseFactory.getCourseEditSession(ores.getResourceableId()).getEditorTreeModel(); - CourseEditorEnv cev = new CourseEditorEnvImpl(cetm, course.getCourseEnvironment().getCourseGroupManager(), ureq.getLocale()); - euce = new EditorUserCourseEnvironmentImpl(cev); - euce.getCourseEditorEnv().setCurrentCourseNodeId(null); - + ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_EDITOR_OPEN, getClass()); + + if (!lockEntry.isSuccess()) { + MainPanel empty = new MainPanel("empty"); + putInitialPanel(empty); + } else { + ICourse course = CourseFactory.openCourseEditSession(ores.getResourceableId()); + main = createVelocityContainer("index"); + main.setDomReplacementWrapperRequired(false); + + OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", ores.getResourceableId()); + RepositoryEntry repo = RepositoryManager.getInstance().lookupRepositoryEntry(courseOres, false); + Controller courseCloser = new DisposedCourseRestartController(ureq, wControl, repo); + Controller disposedRestartController = new LayoutMain3ColsController(ureq, wControl, courseCloser); + setDisposedMsgController(disposedRestartController); + + undelButton = LinkFactory.createButton("undeletenode.button", main, this); + + // set the custom course css + enableCustomCss(ureq); + + menuTree = new MenuTree("luTree"); + menuTree.setExpandSelectedNode(false); + menuTree.setDragEnabled(true); + menuTree.setDropEnabled(true); + menuTree.setDropSiblingEnabled(true); + menuTree.setDndAcceptJSMethod("treeAcceptDrop_notWithChildren"); + menuTree.setElementCssClass("o_editor_menu"); + + /* + * create editor user course environment for enhanced syntax/semantic + * checks. Initialize it with the current course node id, which is not set + * yet. Furthermore the course is refreshed, e.g. as it get's loaded by + * XSTREAM constructors are not called, but transient data must be + * caculated and initialized + */ + cetm = CourseFactory.getCourseEditSession(ores.getResourceableId()).getEditorTreeModel(); + CourseEditorEnv cev = new CourseEditorEnvImpl(cetm, course.getCourseEnvironment().getCourseGroupManager(), ureq.getLocale()); + euce = new EditorUserCourseEnvironmentImpl(cev); + euce.getCourseEditorEnv().setCurrentCourseNodeId(null); + + + long lpTimeStamp = cetm.getLatestPublishTimestamp(); + if (lpTimeStamp == -1) { + showInfo(NLS_PUBLISHED_NEVER_YET); + } else { // course has been published before + Date d = new Date(lpTimeStamp); + getWindowControl().setInfo(translate(NLS_PUBLISHED_LATEST, Formatter.getInstance(ureq.getLocale()).formatDateAndTime(d))); + } + menuTree.setTreeModel(cetm); + menuTree.setOpenNodeIds(Collections.singleton(cetm.getRootNode().getIdent())); + menuTree.addListener(this); + + tabbedNodeConfig = new TabbedPane("tabbedNodeConfig", ureq.getLocale()); + tabbedNodeConfig.setElementCssClass("o_node_config"); + main.put(tabbedNodeConfig.getComponentName(), tabbedNodeConfig); + + alternativeLink = LinkFactory.createButton("alternative", main, this); + main.put("alternative", alternativeLink); + + columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), menuTree, main, "course" + course.getResourceableId()); + columnLayoutCtr.addCssClassToMain("o_editor"); + listenTo(columnLayoutCtr); + putInitialPanel(columnLayoutCtr.getInitialComponent()); + + //tools + statusLink = LinkFactory.createToolLink("status", translate("status"), this, null); + statusLink.setUserObject(new EditedCourseStatus()); + + createNodeLink = LinkFactory.createToolLink(NLS_HEADER_INSERTNODES, translate(NLS_HEADER_INSERTNODES), this, "o_icon_add"); + createNodeLink.setElementCssClass("o_sel_course_editor_create_node"); + createNodeLink.setDomReplacementWrapperRequired(false); - long lpTimeStamp = cetm.getLatestPublishTimestamp(); - if (lpTimeStamp == -1) { - showInfo(NLS_PUBLISHED_NEVER_YET); - } else { // course has been published before - Date d = new Date(lpTimeStamp); - getWindowControl().setInfo(translate(NLS_PUBLISHED_LATEST, Formatter.getInstance(ureq.getLocale()).formatDateAndTime(d))); - } - menuTree.setTreeModel(cetm); - menuTree.setOpenNodeIds(Collections.singleton(cetm.getRootNode().getIdent())); - menuTree.addListener(this); + nodeTools = new Dropdown("insertNodes", NLS_COMMAND_DELETENODE_HEADER, false, getTranslator()); + nodeTools.setIconCSS("o_icon o_icon_customize"); - tabbedNodeConfig = new TabbedPane("tabbedNodeConfig", ureq.getLocale()); - tabbedNodeConfig.setElementCssClass("o_node_config"); - main.put(tabbedNodeConfig.getComponentName(), tabbedNodeConfig); - - alternativeLink = LinkFactory.createButton("alternative", main, this); - main.put("alternative", alternativeLink); + deleteNodeLink = LinkFactory.createToolLink(CMD_DELNODE, translate(NLS_COMMAND_DELETENODE), this, "o_icon_delete_item"); + nodeTools.addComponent(deleteNodeLink); + moveNodeLink = LinkFactory.createToolLink(CMD_MOVENODE, translate(NLS_COMMAND_MOVENODE), this, "o_icon_move"); + nodeTools.addComponent(moveNodeLink); + copyNodeLink = LinkFactory.createToolLink(CMD_COPYNODE, translate(NLS_COMMAND_COPYNODE), this, "o_icon_copy"); + nodeTools.addComponent(copyNodeLink); - columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), menuTree, main, "course" + course.getResourceableId()); - columnLayoutCtr.addCssClassToMain("o_editor"); - listenTo(columnLayoutCtr); - - if(externStack == null) { - stackPanel.pushController(course.getCourseTitle(), columnLayoutCtr); - putInitialPanel(stackPanel); - } else { - putInitialPanel(columnLayoutCtr.getInitialComponent()); - } + previewLink = LinkFactory.createToolLink(CMD_COURSEPREVIEW, translate(NLS_COMMAND_COURSEPREVIEW), this, "o_icon_preview"); + publishLink = LinkFactory.createToolLink(CMD_PUBLISH, translate(NLS_COMMAND_PUBLISH), this, "o_icon_publish"); + publishLink.setElementCssClass("o_sel_course_editor_publish"); + + // validate course and update course status + euce.getCourseEditorEnv().validateCourse(); + StatusDescription[] courseStatus = euce.getCourseEditorEnv().getCourseStatus(); + updateCourseStatusMessages(ureq.getLocale(), courseStatus); - stackPanel.pushController("Editor", this); - initToolbar(externStack == null); - - // validate course and update course status - euce.getCourseEditorEnv().validateCourse(); - StatusDescription[] courseStatus = euce.getCourseEditorEnv().getCourseStatus(); - updateCourseStatusMessages(ureq.getLocale(), courseStatus); - - // add as listener to course so we are being notified about course events: - // - deleted events - CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), course); - // activate course root node - String nodeIdent = cetm.getRootNode().getIdent(); - if(selectedNode != null) { - CourseEditorTreeNode editorNode = cetm.getCourseEditorNodeContaining(selectedNode); - if(editorNode != null) { - nodeIdent = editorNode.getIdent(); + // add as listener to course so we are being notified about course events: + // - deleted events + CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), course); + // activate course root node + String nodeIdent = cetm.getRootNode().getIdent(); + if(selectedNode != null) { + CourseEditorTreeNode editorNode = cetm.getCourseEditorNodeContaining(selectedNode); + if(editorNode != null) { + nodeIdent = editorNode.getIdent(); + } } + menuTree.setSelectedNodeId(nodeIdent); + updateViewForSelectedNodeId(ureq, nodeIdent); } - menuTree.setSelectedNodeId(nodeIdent); - updateViewForSelectedNodeId(ureq, nodeIdent); - } } catch (RuntimeException e) { log.warn(RELEASE_LOCK_AT_CATCH_EXCEPTION+" [in <init>]", e); dispose(); throw e; } } - - private void initToolbar(boolean closeEditor) { - createNodeLink = LinkFactory.createToolLink(NLS_HEADER_INSERTNODES, translate(NLS_HEADER_INSERTNODES), this, "o_icon_add"); - createNodeLink.setElementCssClass("o_sel_course_editor_create_node"); - createNodeLink.setDomReplacementWrapperRequired(false); - stackPanel.addTool(createNodeLink, Align.left); - Dropdown nodeTools = new Dropdown("insertNodes", NLS_COMMAND_DELETENODE_HEADER, false, getTranslator()); - nodeTools.setIconCSS("o_icon o_icon_customize"); - stackPanel.addTool(nodeTools, Align.left); - - deleteNodeLink = LinkFactory.createToolLink(CMD_DELNODE, translate(NLS_COMMAND_DELETENODE), this, "o_icon_delete_item"); - nodeTools.addComponent(deleteNodeLink); - moveNodeLink = LinkFactory.createToolLink(CMD_MOVENODE, translate(NLS_COMMAND_MOVENODE), this, "o_icon_move"); - nodeTools.addComponent(moveNodeLink); - copyNodeLink = LinkFactory.createToolLink(CMD_COPYNODE, translate(NLS_COMMAND_COPYNODE), this, "o_icon_copy"); - nodeTools.addComponent(copyNodeLink); - - statusLink = LinkFactory.createToolLink("status", translate("status"), this, null); - statusLink.setUserObject(new EditedCourseStatus()); - stackPanel.addTool(statusLink, Align.right); - - previewLink = LinkFactory.createToolLink(CMD_COURSEPREVIEW, translate(NLS_COMMAND_COURSEPREVIEW), this, "o_icon_preview"); - stackPanel.addTool(previewLink, Align.right); - publishLink = LinkFactory.createToolLink(CMD_PUBLISH, translate(NLS_COMMAND_PUBLISH), this, "o_icon_publish"); - publishLink.setElementCssClass("o_sel_course_editor_publish"); - stackPanel.addTool(publishLink, Align.right); + @Override + public void initToolbar(TooledStackedPanel toolbar) { + this.stackPanel = toolbar; - if(closeEditor) { - closeLink = LinkFactory.createToolLink(CMD_CLOSEEDITOR, translate(NLS_COMMAND_CLOSEEDITOR), this, "o_icon_close_tool"); - stackPanel.addTool(closeLink, Align.right); - } - + toolbar.addTool(createNodeLink, Align.left); + toolbar.addTool(nodeTools, Align.left); + toolbar.addTool(statusLink, Align.right); + toolbar.addTool(previewLink, Align.right); + toolbar.addTool(publishLink, Align.right); } /** @@ -463,8 +447,7 @@ public class EditorMainController extends MainLayoutBasicController implements G //set all dirty TreeVisitor tv = new TreeVisitor( new Visitor() { public void visit(INode node) { - CourseEditorTreeNode cetn = (CourseEditorTreeNode)node; - cetn.setDirty(true); + ((CourseEditorTreeNode)node).setDirty(true); } }, newCetn, true); tv.visitAll(); @@ -556,8 +539,8 @@ public class EditorMainController extends MainLayoutBasicController implements G private void jumpToNodeEditor(String activatorIdent, UserRequest ureq, CourseNode chosenNode) { initNodeEditor(ureq, chosenNode); if (nodeEditCntrllr instanceof ActivateableTabbableDefaultController) { - OLATResourceable ores = OresHelper.createOLATResourceableInstanceWithoutCheck(activatorIdent, 0l); - List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromString(ores); + OLATResourceable activeOres = OresHelper.createOLATResourceableInstanceWithoutCheck(activatorIdent, 0l); + List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromString(activeOres); ((ActivateableTabbableDefaultController) nodeEditCntrllr).activate(ureq, entries, null); } } diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java index 632100026c3..1a0729b3a52 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java @@ -455,7 +455,7 @@ public class IQEditController extends ActivateableTabbableDefaultController impl //not found } else { RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); - correctQTIcontroller = typeToEdit.createEditorController(re, ureq, getWindowControl(), null); + correctQTIcontroller = typeToEdit.createEditorController(re, ureq, getWindowControl()); getWindowControl().pushToMainArea(correctQTIcontroller.getInitialComponent()); listenTo(correctQTIcontroller); } diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index 07961838d44..6d55ca0d856 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -91,6 +91,7 @@ import org.olat.course.config.ui.CourseOptionsController; import org.olat.course.config.ui.courselayout.CourseLayoutGeneratorController; import org.olat.course.db.CourseDBManager; import org.olat.course.db.CustomDBMainController; +import org.olat.course.editor.EditorMainController; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.CourseRights; import org.olat.course.member.MembersManagementMainController; @@ -572,6 +573,14 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } } + @Override + public void setActiveTool(Link tool) { + if(myCourse != null) { + myCourse.setActiveLink(tool); + } + super.setActiveTool(tool); + } + @Override protected void doDispose() { super.doDispose(); @@ -625,9 +634,9 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } else if(courseStatisticLink == source) { doCourseStatistics(ureq); } else if(testStatisticLink == source) { - doAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", QTIType.test, QTIType.onyx); + doAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", testStatisticLink, QTIType.test, QTIType.onyx); } else if(surveyStatisticLink == source) { - doAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", QTIType.survey); + doAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", surveyStatisticLink, QTIType.survey); } else if(assessmentLink == source) { doAssessmentTool(ureq); } else if(calendarLink == source) { @@ -756,9 +765,9 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im try { Activateable2 assessmentCtrl = null; if("TestStatistics".equalsIgnoreCase(type)) { - assessmentCtrl = doAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", QTIType.test, QTIType.onyx); + assessmentCtrl = doAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", testStatisticLink, QTIType.test, QTIType.onyx); } else { - assessmentCtrl = doAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", QTIType.survey); + assessmentCtrl = doAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", surveyStatisticLink, QTIType.survey); } List<ContextEntry> subEntries; @@ -778,8 +787,6 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im if(getRunMainController() != null) { getRunMainController().activate(ureq, entries, state); } - - //super.activate(ureq, entries, state); } @Override @@ -799,12 +806,14 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); CourseNode currentCourseNode = getCurrentCourseNode(); - editorCtrl = CourseFactory.createEditorController(ureq, getWindowControl(), toolbarPanel, course, currentCourseNode); + EditorMainController ctrl = CourseFactory.createEditorController(ureq, getWindowControl(), course, currentCourseNode); + editorCtrl = pushController(ureq, "Editor", ctrl); //user activity logger which was initialized with course run if(editorCtrl != null){ listenTo(editorCtrl); setIsInEditor(true); currentToolCtr = editorCtrl; + setActiveTool(editLink); } } } @@ -827,6 +836,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im MembersManagementMainController ctrl = new MembersManagementMainController(ureq, addToHistory(ureq, bwControl), getRepositoryEntry()); listenTo(ctrl); membersCtrl = pushController(ureq, translate("command.opensimplegroupmngt"), ctrl); + setActiveTool(membersLink); currentToolCtr = membersCtrl; } return membersCtrl; @@ -849,6 +859,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im course.getCourseEnvironment(), !managedLayout); listenTo(ctrl); courseLayoutCtrl = pushController(ureq, translate("command.layout"), ctrl); + setActiveTool(layoutLink); currentToolCtr = courseLayoutCtrl; } } @@ -860,6 +871,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im CourseConfig courseConfig = course.getCourseEnvironment().getCourseConfig().clone(); CourseOptionsController ctrl = new CourseOptionsController(ureq, getWindowControl(), getRepositoryEntry(), courseConfig, true); optionsToolCtr = pushController(ureq, translate("command.options"), ctrl); + setActiveTool(optionsLink); currentToolCtr = optionsToolCtr; } } @@ -872,6 +884,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im listenTo(ctrl); archiverCtrl = pushController(ureq, translate("command.openarchiver"), ctrl); currentToolCtr = archiverCtrl; + setActiveTool(archiverLink); } } @@ -885,6 +898,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im FolderRunController ctrl = new FolderRunController(namedCourseFolder, true, true, true, ureq, getWindowControl(), null, customLinkTreeModel); ctrl.addLoggingResourceable(LoggingResourceable.wrap(course)); courseFolderCtrl = pushController(ureq, translate("command.coursefolder"), ctrl); + setActiveTool(folderLink); currentToolCtr = courseFolderCtrl; } @@ -894,6 +908,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im CourseAreasController ctrl = new CourseAreasController(ureq, getWindowControl(), getRepositoryEntry().getOlatResource()); ctrl.addLoggingResourceable(LoggingResourceable.wrap(course)); areasCtrl = pushController(ureq, translate("command.courseareas"), ctrl); + setActiveTool(areaLink); currentToolCtr = areasCtrl; } @@ -904,6 +919,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im CustomDBMainController ctrl = new CustomDBMainController(ureq, getWindowControl(), course); listenTo(ctrl); databasesCtrl = pushController(ureq, translate("command.opendb"), ctrl); + setActiveTool(dbLink); currentToolCtr = databasesCtrl; } } @@ -915,11 +931,12 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im StatisticMainController ctrl = new StatisticMainController(ureq, getWindowControl(), course); listenTo(ctrl); statisticsCtrl = pushController(ureq, translate("command.openstatistic"), ctrl); + setActiveTool(courseStatisticLink); currentToolCtr = statisticsCtrl; } } - private Activateable2 doAssessmentStatistics(UserRequest ureq, String i18nCrumbKey, String typeName, QTIType... types) { + private Activateable2 doAssessmentStatistics(UserRequest ureq, String i18nCrumbKey, String typeName, Link tool, QTIType... types) { OLATResourceable ores = OresHelper.createOLATResourceableType(typeName); ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores)); WindowControl swControl = addToHistory(ureq, ores, null); @@ -930,6 +947,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im listenTo(ctrl); statsToolCtr = pushController(ureq, translate(i18nCrumbKey), ctrl); currentToolCtr = statsToolCtr; + setActiveTool(tool); return statsToolCtr; } return null; @@ -949,6 +967,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im listenTo(ctrl); assessmentToolCtr = pushController(ureq, translate("command.openassessment"), ctrl); currentToolCtr = assessmentToolCtr; + setActiveTool(assessmentLink); return assessmentToolCtr; } // 2) users with coach right: limited access to coached groups @@ -960,6 +979,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im listenTo(ctrl); assessmentToolCtr = pushController(ureq, translate("command.openassessment"), ctrl); currentToolCtr = assessmentToolCtr; + setActiveTool(assessmentLink); return assessmentToolCtr; } return null; diff --git a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java index 91a49c89bb4..73cd80a3215 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java +++ b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java @@ -44,11 +44,12 @@ import org.olat.core.util.vfs.VFSContainer; import org.olat.ims.cp.CPManager; import org.olat.ims.cp.ContentPackage; import org.olat.modules.cp.CPUIFactory; +import org.olat.repository.ui.RepositoryEntryRuntimeController.ToolbarAware; /** * The content packaging main edit controller. */ -public class CPEditMainController extends BasicController { +public class CPEditMainController extends BasicController implements ToolbarAware { private CPContentController contentCtr; private CPTreeController treeCtr; @@ -56,7 +57,7 @@ public class CPEditMainController extends BasicController { private LockResult lock; private DeliveryOptions deliveryOptions; - public CPEditMainController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, + public CPEditMainController(UserRequest ureq, WindowControl wControl, VFSContainer cpContainer, OLATResourceable ores) { super(ureq, wControl); @@ -86,10 +87,6 @@ public class CPEditMainController extends BasicController { listenTo(columnLayoutCtr); putInitialPanel(columnLayoutCtr.getInitialComponent()); - - stackPanel.pushController("Editor", this); - treeCtr.initToolbar(stackPanel); - contentCtr.initToolbar(stackPanel); if (!cp.isOLATContentPackage()) { showWarning("maincontroller.cp.created.with.third.party.editor"); @@ -108,6 +105,16 @@ public class CPEditMainController extends BasicController { logAudit("cp editor started. oresId: " + ores.getResourceableId(), null); } + @Override + public void initToolbar(TooledStackedPanel stackPanel) { + if(stackPanel != null && treeCtr != null) { + treeCtr.initToolbar(stackPanel); + } + if(stackPanel != null && contentCtr != null) { + contentCtr.initToolbar(stackPanel); + } + } + @Override protected void doDispose() { Long oresId = cp.getResourcable().getResourceableId(); diff --git a/src/main/java/org/olat/ims/cp/ui/CPRuntimeController.java b/src/main/java/org/olat/ims/cp/ui/CPRuntimeController.java index ba45c46ca5f..d038f6bc3e4 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPRuntimeController.java +++ b/src/main/java/org/olat/ims/cp/ui/CPRuntimeController.java @@ -91,7 +91,7 @@ public class CPRuntimeController extends RepositoryEntryRuntimeController { super.event(ureq, source, event); } } - + private void doQuota(UserRequest ureq) { if (quotaManager.hasQuotaEditRights(ureq.getIdentity())) { RepositoryEntry entry = getRepositoryEntry(); @@ -99,6 +99,7 @@ public class CPRuntimeController extends RepositoryEntryRuntimeController { OlatRootFolderImpl cpRoot = FileResourceManager.getInstance().unzipContainerResource(resource); Controller quotaCtrl = quotaManager.getQuotaEditorInstance(ureq, getWindowControl(), cpRoot.getRelPath(), false); pushController(ureq, translate("tab.quota.edit"), quotaCtrl); + setActiveTool(quotaLink); } } @@ -127,5 +128,6 @@ public class CPRuntimeController extends RepositoryEntryRuntimeController { }); pushController(ureq, translate("tab.layout"), deliveryOptionsCtrl); + setActiveTool(deliveryOptionsLink); } } \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java index c1be91128e8..6fb4d7eef1d 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java @@ -159,7 +159,7 @@ public class QTISurveyHandler extends QTIHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { OLATResource res = re.getOlatResource(); if (OnyxModule.isOnyxTest(res)) { return null; diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java index eb5273c2427..03ddd3dca9f 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java @@ -160,7 +160,7 @@ public class QTITestHandler extends QTIHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { OLATResource res = re.getOlatResource(); if(OnyxModule.isOnyxTest(res)) { return null; diff --git a/src/main/java/org/olat/modules/scorm/ScormRuntimeController.java b/src/main/java/org/olat/modules/scorm/ScormRuntimeController.java index c290ab07187..43f0b9a82b8 100644 --- a/src/main/java/org/olat/modules/scorm/ScormRuntimeController.java +++ b/src/main/java/org/olat/modules/scorm/ScormRuntimeController.java @@ -102,5 +102,6 @@ public class ScormRuntimeController extends RepositoryEntryRuntimeController { }); pushController(ureq, translate("tab.layout"), deliveryOptionsCtrl); + setActiveTool(deliveryOptionsLink); } } \ No newline at end of file diff --git a/src/main/java/org/olat/modules/webFeed/ui/FeedRuntimeController.java b/src/main/java/org/olat/modules/webFeed/ui/FeedRuntimeController.java index 92ee7c219d8..4dfd5622dac 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/FeedRuntimeController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/FeedRuntimeController.java @@ -84,6 +84,7 @@ public class FeedRuntimeController extends RepositoryEntryRuntimeController { OlatRootFolderImpl feedRoot = FileResourceManager.getInstance().getFileResourceRootImpl(entry.getOlatResource()); Controller quotaCtrl = quotaManager.getQuotaEditorInstance(ureq, getWindowControl(), feedRoot.getRelPath(), false); pushController(ureq, translate("tab.quota.edit"), quotaCtrl); + setActiveTool(quotaLink); } } } \ No newline at end of file diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java index f90b19d37bb..175f1dd093a 100644 --- a/src/main/java/org/olat/repository/handlers/BlogHandler.java +++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java @@ -165,7 +165,7 @@ public class BlogHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control) { return null; } diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index b930dbf8741..f92be1451e7 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -461,8 +461,8 @@ public class CourseHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { - return CourseFactory.createEditorController(ureq, wControl, panel, re.getOlatResource(), null); + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { + return CourseFactory.createEditorController(ureq, wControl, re.getOlatResource(), null); } @Override diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java index b215fdca270..3da3b2b3397 100644 --- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java +++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java @@ -208,7 +208,7 @@ public class GlossaryHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { VFSContainer glossaryFolder = GlossaryManager.getInstance().getGlossaryRootFolder(re.getOlatResource()); Properties glossProps = GlossaryItemManager.getInstance().getGlossaryConfig(glossaryFolder); diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java index 28f62657fa2..65be451b0e3 100644 --- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java @@ -231,7 +231,7 @@ public class ImsCPHandler extends FileHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { // only unzips, if not already unzipped OlatRootFolderImpl cpRoot = FileResourceManager.getInstance().unzipContainerResource(re.getOlatResource()); @@ -243,7 +243,7 @@ public class ImsCPHandler extends FileHandler { VFSSecurityCallback secCallback = new FullAccessWithQuotaCallback(quota); cpRoot.setLocalSecurityCallback(secCallback); - return new CPEditMainController(ureq, wControl, panel, cpRoot, re.getOlatResource()); + return new CPEditMainController(ureq, wControl, cpRoot, re.getOlatResource()); } protected String getDeletedFilePrefix() { diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java index b3476274972..3d67d2d3d1c 100644 --- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java +++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java @@ -165,7 +165,7 @@ public class PodcastHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control) { return null; } diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index beed593903a..8cf52d86932 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -234,7 +234,7 @@ public class PortfolioHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl control) { return null; } diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java index 01ae541295f..47d720a4c6d 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java @@ -29,7 +29,6 @@ import java.io.File; import java.util.Locale; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.layout.MainLayoutController; @@ -151,11 +150,10 @@ public interface RepositoryHandler { * can only be called when the current user is either olat admin or in the owning group of this resource * @param ureq * @param wControl - * @param panel TODO * @param res * @return Controler able to edit resourceable. */ - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel); + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl); /** * Called if a user wants to create a Resourceable via wizard. diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java index 558835a4be6..9b14f9d7a8d 100644 --- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java @@ -174,7 +174,7 @@ public class SCORMCPHandler extends FileHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { throw new AssertException("Trying to get editor for an SCORM CP type where no editor is provided for this type."); } diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java index 6b5281b416d..196c4ef18af 100644 --- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java +++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java @@ -205,7 +205,7 @@ public class SharedFolderHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { Controller sharedFolderCtr = new SharedFolderEditorController(re, ureq, wControl); // use on column layout LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, sharedFolderCtr); diff --git a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java index ee32addb622..068470d0f2b 100644 --- a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java +++ b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java @@ -34,7 +34,6 @@ import java.util.Locale; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.layout.MainLayoutController; @@ -215,7 +214,7 @@ public class WebDocumentHandler extends FileHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { throw new AssertException("a web document is not editable!!! res-id:"+re.getResourceableId()); } diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index f2d258557cb..0d45bee576f 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -268,7 +268,7 @@ public class WikiHandler implements RepositoryHandler { } @Override - public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel panel) { + public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { return null; } diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java index 922c91ee1e1..c4e6ff69db9 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java +++ b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java @@ -53,6 +53,7 @@ import org.olat.core.util.UserSession; import org.olat.core.util.Util; import org.olat.core.util.resource.OresHelper; import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryEntryManagedFlag; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; import org.olat.repository.handlers.EditionSupport; @@ -220,12 +221,10 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } protected void initToolbar(Dropdown toolsDropdown, Dropdown settingsDropdown) { - - boolean managed = false; - if (isEntryAdmin) { //tools if(handler.supportsEdit(re) == EditionSupport.yes) { + boolean managed = RepositoryEntryManagedFlag.isManaged(getRepositoryEntry(), RepositoryEntryManagedFlag.editcontent); editLink = LinkFactory.createToolLink("edit.cmd", translate("details.openeditor"), this, "o_sel_repository_editor"); editLink.setIconLeftCSS("o_icon o_icon-lg o_icon_edit"); editLink.setEnabled(!managed); @@ -239,23 +238,21 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController ordersLink = LinkFactory.createToolLink("bookings", translate("details.orders"), this, "o_sel_repo_booking"); ordersLink.setIconLeftCSS("o_icon o_icon-fw o_icon_booking"); boolean booking = acService.isResourceAccessControled(re.getOlatResource(), null); - ordersLink.setEnabled(!corrupted && booking); + ordersLink.setEnabled(booking); toolsDropdown.addComponent(ordersLink); //settings editDescriptionLink = LinkFactory.createToolLink("settings.cmd", translate("details.chprop"), this, "o_icon_settings"); editDescriptionLink.setElementCssClass("o_sel_course_settings"); - editDescriptionLink.setEnabled(!managed); + editDescriptionLink.setEnabled(!corrupted); settingsDropdown.addComponent(editDescriptionLink); accessLink = LinkFactory.createToolLink("access.cmd", translate("tab.accesscontrol"), this, "o_icon_password"); accessLink.setElementCssClass("o_sel_course_access"); - accessLink.setEnabled(!managed); settingsDropdown.addComponent(accessLink); catalogLink = LinkFactory.createToolLink("cat", translate("details.categoriesheader"), this, "o_icon_catalog"); catalogLink.setElementCssClass("o_sel_repo_add_to_catalog"); - catalogLink.setEnabled(!managed); settingsDropdown.addComponent(catalogLink); } @@ -280,6 +277,15 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController toolbarPanel.addTool(bookmarkLink, Align.right); } + public void setActiveTool(Link tool) { + if(tools != null) { + tools.setActiveLink(tool); + } + if(settings != null) { + settings.setActiveLink(tool); + } + } + @Override public CustomCSS getCustomCSS() { return runtimeController instanceof MainLayoutController ? ((MainLayoutController)runtimeController).getCustomCSS() : null; @@ -415,6 +421,9 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController protected <T extends Controller> T pushController(UserRequest ureq, String name, T controller) { popToRoot(ureq).cleanUp(); toolbarPanel.pushController(name, controller); + if(controller instanceof ToolbarAware) { + ((ToolbarAware)controller).initToolbar(toolbarPanel); + } return controller; } @@ -426,6 +435,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController AuthoringEditAccessController ctrl = new AuthoringEditAccessController(ureq, getWindowControl(), re); listenTo(ctrl); accessCtrl = pushController(ureq, translate("tab.accesscontrol"), ctrl); + setActiveTool(accessLink); currentToolCtr = accessCtrl; } @@ -454,10 +464,11 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController protected void doEdit(UserRequest ureq) { if(!isEntryAdmin) return; - Controller ctrl = handler.createEditorController(re, ureq, getWindowControl(), toolbarPanel); + Controller ctrl = handler.createEditorController(re, ureq, getWindowControl()); listenTo(ctrl); editorCtrl = pushController(ureq, translate("resource.editor"), ctrl); currentToolCtr = editorCtrl; + setActiveTool(editLink); } protected void doDetails(UserRequest ureq) { @@ -478,6 +489,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController listenTo(ctrl); descriptionCtrl = pushController(ureq, translate("settings.editor"), ctrl); currentToolCtr = descriptionCtrl; + setActiveTool(editDescriptionLink); } /** @@ -492,6 +504,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController listenTo(catalogCtlr); catalogCtlr.initToolbar(); currentToolCtr = catalogCtlr; + setActiveTool(catalogLink); } protected Activateable2 doMembers(UserRequest ureq) { @@ -501,6 +514,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController listenTo(ctrl); membersEditController = pushController(ureq, translate("details.members"), ctrl); currentToolCtr = membersEditController; + setActiveTool(membersLink); return membersEditController; } @@ -511,6 +525,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController listenTo(ctrl); ordersCtlr = pushController(ureq, translate("details.orders"), ctrl); currentToolCtr = ordersCtlr; + setActiveTool(ordersLink); } private void doRun(UserRequest ureq, RepositoryEntrySecurity reSecurity) { @@ -566,4 +581,9 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController public Controller create(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel, RepositoryEntry entry); } + + public interface ToolbarAware { + + public void initToolbar(TooledStackedPanel toolbar); + } } \ No newline at end of file -- GitLab