diff --git a/src/main/java/org/olat/course/learningpath/ui/IdentityOverviewController.java b/src/main/java/org/olat/course/learningpath/ui/IdentityOverviewController.java deleted file mode 100644 index 9ec199f492a49e1ce20c424c6e64b406e19d80ba..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/course/learningpath/ui/IdentityOverviewController.java +++ /dev/null @@ -1,110 +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.learningpath.ui; - -import java.util.List; - -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.TooledController; -import org.olat.core.gui.components.stack.TooledStackedPanel; -import org.olat.core.gui.components.stack.TooledStackedPanel.Align; -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.helpers.Settings; -import org.olat.course.run.userview.UserCourseEnvironment; -import org.olat.modules.assessment.AssessmentEntry; -import org.olat.modules.assessment.AssessmentService; -import org.olat.repository.RepositoryEntry; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * - * Initial date: 16 Aug 2019<br> - * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com - * - */ -public class IdentityOverviewController extends BasicController implements TooledController { - - private final TooledStackedPanel stackPanel; - private final VelocityContainer mainVC; - private Link resetStatusLink; - - private LearningPathListController learningPathListController; - - private final UserCourseEnvironment userCourseEnv; - private final RepositoryEntry courseEntry; - - @Autowired - private AssessmentService assessmentService; - - public IdentityOverviewController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, - UserCourseEnvironment userCourseEnv) { - super(ureq, wControl); - this.stackPanel = stackPanel; - this.userCourseEnv = userCourseEnv; - this.courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); - - mainVC = createVelocityContainer("identity_overview"); - - learningPathListController = new LearningPathListController(ureq, wControl, userCourseEnv); - listenTo(learningPathListController); - mainVC.put("list", learningPathListController.getInitialComponent()); - - putInitialPanel(mainVC); - } - - @Override - public void initTools() { - if (Settings.isDebuging()) { - resetStatusLink = LinkFactory.createToolLink("reset.all.status", translate("reset.all.status"), this); - resetStatusLink.setIconLeftCSS("o_icon o_icon-lg o_icon_exclamation"); - stackPanel.addTool(resetStatusLink, Align.right); - } - } - - @Override - protected void event(UserRequest ureq, Component source, Event event) { - if (source == resetStatusLink) { - doResetStatus(); - } - } - - private void doResetStatus() { - List<AssessmentEntry> assessmentEntries = assessmentService.loadAssessmentEntriesByAssessedIdentity(getIdentity(), courseEntry); - for (AssessmentEntry assessmentEntry : assessmentEntries) { - assessmentEntry.setFullyAssessed(null); - assessmentEntry.setAssessmentStatus(null); - assessmentService.updateAssessmentEntry(assessmentEntry); - } - userCourseEnv.getScoreAccounting().evaluateAll(true); - learningPathListController.loadModel(); - } - - @Override - protected void doDispose() { - // - } - -} diff --git a/src/main/java/org/olat/course/learningpath/ui/LearningPathListController.java b/src/main/java/org/olat/course/learningpath/ui/LearningPathListController.java index 3ba931eba293f1145a57a7509cea967b157d2834..74faf323feba087ec0e2597adbd2bc0cbde5a38d 100644 --- a/src/main/java/org/olat/course/learningpath/ui/LearningPathListController.java +++ b/src/main/java/org/olat/course/learningpath/ui/LearningPathListController.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; @@ -31,16 +32,27 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellR import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; import org.olat.core.gui.components.form.flexible.impl.elements.table.TreeNodeFlexiCellRenderer; +import org.olat.core.gui.components.link.Link; +import org.olat.core.gui.components.link.LinkFactory; +import org.olat.core.gui.components.stack.TooledController; +import org.olat.core.gui.components.stack.TooledStackedPanel; +import org.olat.core.gui.components.stack.TooledStackedPanel.Align; import org.olat.core.gui.components.tree.GenericTreeModel; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.olat.core.helpers.Settings; import org.olat.core.util.nodes.INode; import org.olat.course.assessment.IndentedNodeRenderer; import org.olat.course.assessment.ui.tool.AssessmentStatusCellRenderer; import org.olat.course.learningpath.manager.LearningPathCourseTreeModelBuilder; import org.olat.course.learningpath.ui.LearningPathDataModel.LearningPathCols; import org.olat.course.run.userview.UserCourseEnvironment; +import org.olat.modules.assessment.AssessmentEntry; +import org.olat.modules.assessment.AssessmentService; +import org.olat.repository.RepositoryEntry; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -48,16 +60,25 @@ import org.olat.course.run.userview.UserCourseEnvironment; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class LearningPathListController extends FormBasicController { +public class LearningPathListController extends FormBasicController implements TooledController { + private final TooledStackedPanel stackPanel; private FlexiTableElement tableEl; private LearningPathDataModel dataModel; + private Link resetStatusLink; private final UserCourseEnvironment userCourseEnv; + private final RepositoryEntry courseEntry; - public LearningPathListController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv) { + @Autowired + private AssessmentService assessmentService; + + public LearningPathListController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, + UserCourseEnvironment userCourseEnv) { super(ureq, wControl, LAYOUT_BAREBONE); this.userCourseEnv = userCourseEnv; + this.stackPanel = stackPanel; + this.courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); initForm(ureq); } @@ -93,6 +114,16 @@ public class LearningPathListController extends FormBasicController { loadModel(); } + + @Override + public void initTools() { + // Never enable this function in a productive environment. It may lead to corrupt data. + if (Settings.isDebuging()) { + resetStatusLink = LinkFactory.createToolLink("reset.all.status", translate("reset.all.status"), this); + resetStatusLink.setIconLeftCSS("o_icon o_icon-lg o_icon_exclamation"); + stackPanel.addTool(resetStatusLink, Align.right); + } + } void loadModel() { LearningPathCourseTreeModelBuilder learningPathCourseTreeModelBuilder = new LearningPathCourseTreeModelBuilder(userCourseEnv); @@ -133,6 +164,24 @@ public class LearningPathListController extends FormBasicController { row.setParent(parent); return row; } + + @Override + public void event(UserRequest ureq, Component source, Event event) { + if (source == resetStatusLink) { + doResetStatus(); + } + } + + private void doResetStatus() { + List<AssessmentEntry> assessmentEntries = assessmentService.loadAssessmentEntriesByAssessedIdentity(getIdentity(), courseEntry); + for (AssessmentEntry assessmentEntry : assessmentEntries) { + assessmentEntry.setFullyAssessed(null); + assessmentEntry.setAssessmentStatus(null); + assessmentService.updateAssessmentEntry(assessmentEntry); + } + userCourseEnv.getScoreAccounting().evaluateAll(true); + loadModel(); + } @Override protected void formOK(UserRequest ureq) { diff --git a/src/main/java/org/olat/course/learningpath/ui/_content/identity_overview.html b/src/main/java/org/olat/course/learningpath/ui/_content/identity_overview.html deleted file mode 100644 index a87f99813fa6cdd65b5c059e0bdcc49b5a178a17..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/course/learningpath/ui/_content/identity_overview.html +++ /dev/null @@ -1 +0,0 @@ -$r.render("list") diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index e24714de79cb673d7ee4f5c01814fb959c65ad02..f83b2e5b28a2327ae67bf0b467982fff9a4409af 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -100,7 +100,7 @@ import org.olat.course.editor.EditorMainController; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.CourseRights; import org.olat.course.learningpath.manager.LearningPathNodeAccessProvider; -import org.olat.course.learningpath.ui.IdentityOverviewController; +import org.olat.course.learningpath.ui.LearningPathListController; import org.olat.course.member.MembersManagementMainController; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.ENCourseNode; @@ -180,7 +180,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im //my course efficiencyStatementsLink, noteLink, leaveLink, //course tools - learninPathLink, calendarLink, chatLink, participantListLink, participantInfoLink, blogLink, forumLink, documentsLink, + learningPathLink, calendarLink, chatLink, participantListLink, participantInfoLink, blogLink, forumLink, documentsLink, emailLink, searchLink, //glossary openGlossaryLink, enableGlossaryLink, lecturesLink; @@ -797,9 +797,11 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im toolbarPanel.addTool(detailsLink); } - if(!assessmentLock && !isGuestOnly && LearningPathNodeAccessProvider.TYPE.equals(cc.getNodeAccessType().getType())) { - learninPathLink = LinkFactory.createToolLink("learningPath", translate("command.learning.path"), this, "o_icon_learning_path"); - toolbarPanel.addTool(learninPathLink); + if (!assessmentLock && !isGuestOnly + && LearningPathNodeAccessProvider.TYPE.equals(cc.getNodeAccessType().getType()) + && userCourseEnv.isParticipant()) { + learningPathLink = LinkFactory.createToolLink("learningPath", translate("command.learning.path"), this, "o_icon_learning_path"); + toolbarPanel.addTool(learningPathLink); } boolean calendarIsEnabled = !assessmentLock && !isGuestOnly && calendarModule.isEnabled() @@ -980,7 +982,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im doForum(ureq); } else if(documentsLink == source) { doDocuments(ureq); - } else if(learninPathLink == source) { + } else if(learningPathLink == source) { doLearningPath(ureq); } else if(calendarLink == source) { launchCalendar(ureq); @@ -1154,7 +1156,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } else if("Infos".equalsIgnoreCase(type)) { doDetails(ureq); } else if("LearningPath".equalsIgnoreCase(type)) { - if (learninPathLink != null && learninPathLink.isVisible()) { + if (learningPathLink != null && learningPathLink.isVisible()) { doLearningPath(ureq); } } else if("Settings".equalsIgnoreCase(type) || "EditDescription".equalsIgnoreCase(type)) { @@ -1704,13 +1706,13 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im if(delayedClose == Delayed.learningPath || requestForClose(ureq)) { OLATResourceable ores = OresHelper.createOLATResourceableType("LearningPath"); WindowControl swControl = addToHistory(ureq, ores, null); - IdentityOverviewController identityOverviewCtrl = new IdentityOverviewController(ureq, swControl, + LearningPathListController learningPathCtrl = new LearningPathListController(ureq, swControl, toolbarPanel, getUserCourseEnvironment()); - listenTo(identityOverviewCtrl); - pushController(ureq, translate("command.learning.path"), identityOverviewCtrl); - currentToolCtr = identityOverviewCtrl; - setActiveTool(learninPathLink); + listenTo(learningPathCtrl); + pushController(ureq, translate("command.learning.path"), learningPathCtrl); + currentToolCtr = learningPathCtrl; + setActiveTool(learningPathLink); } else { delayedClose = Delayed.learningPath; }