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

OO-4300: Show a check instead the progress bar if course node is fully assessed

parent 821d0328
No related branches found
No related tags found
No related merge requests found
......@@ -66,7 +66,7 @@ public class LearningPathDataModel extends DefaultFlexiTreeTableDataModel<Learni
case lastVisit: return row.getLastVisit();
case status: return row.getStatus();
case fullyAssessedDate: return row.getFullyAssessedDate();
case progress: return row.getProgressBar();
case progress: return row.getLearningPathNode();
default: return null;
}
}
......
......@@ -31,22 +31,15 @@ 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.progressbar.ProgressBar;
import org.olat.core.gui.components.progressbar.ProgressBar.LabelAlignment;
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.WindowControl;
import org.olat.core.util.nodes.INode;
import org.olat.course.assessment.CourseAssessmentService;
import org.olat.course.assessment.IndentedNodeRenderer;
import org.olat.course.assessment.handler.AssessmentConfig;
import org.olat.course.assessment.handler.AssessmentConfig.Mode;
import org.olat.course.learningpath.manager.LearningPathCourseTreeModelBuilder;
import org.olat.course.learningpath.ui.LearningPathDataModel.LearningPathCols;
import org.olat.course.run.scoring.StatusCompletionEvaluator;
import org.olat.course.run.userview.UserCourseEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
......@@ -55,8 +48,6 @@ import org.springframework.beans.factory.annotation.Autowired;
*
*/
public class LearningPathListController extends FormBasicController {
private static final StatusCompletionEvaluator STATUS_COMPLETION_EVALUATOR = new StatusCompletionEvaluator();
private FlexiTableElement tableEl;
private LearningPathDataModel dataModel;
......@@ -69,9 +60,6 @@ public class LearningPathListController extends FormBasicController {
initForm(ureq);
}
@Autowired
private CourseAssessmentService courseAssessmentService;
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
......@@ -91,7 +79,8 @@ public class LearningPathListController extends FormBasicController {
columnsModel.addFlexiColumnModel(lastVisitColumnModel);
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(LearningPathCols.status));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(LearningPathCols.fullyAssessedDate));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(LearningPathCols.progress));
FlexiCellRenderer progressRenderer = new LearningPathProgressRenderer();
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(LearningPathCols.progress, progressRenderer));
dataModel = new LearningPathDataModel(columnsModel);
tableEl = uifactory.addTableElement(getWindowControl(), "table", dataModel, 250, false, getTranslator(), formLayout);
......@@ -137,33 +126,11 @@ public class LearningPathListController extends FormBasicController {
}
private LearningPathRow forgeRow(LearningPathTreeNode treeNode, LearningPathRow parent) {
ProgressBar progressBar = new ProgressBar("progress-" + treeNode.getIdent());
progressBar.setMax(1.0f);
progressBar.setWidthInPercent(true);
progressBar.setPercentagesEnabled(true);
progressBar.setLabelAlignment(LabelAlignment.none);
float actual = getActual(treeNode);
progressBar.setActual(actual);
LearningPathRow row = new LearningPathRow(treeNode, progressBar);
LearningPathRow row = new LearningPathRow(treeNode);
row.setParent(parent);
return row;
}
private float getActual(LearningPathTreeNode treeNode) {
float actual = 0;
AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(treeNode.getCourseNode());
boolean hasCompletion = !Mode.none.equals(assessmentConfig.getCompletionMode());
if (hasCompletion) {
actual = treeNode.getCompletion() != null ? treeNode.getCompletion().floatValue() : 0.0f;
} else {
Double statusCompletion = STATUS_COMPLETION_EVALUATOR.getCompletion(treeNode.getFullyAssessed(),
treeNode.getAssessmentStatus());
actual = statusCompletion != null? statusCompletion.floatValue(): 0;
}
return actual;
}
@Override
protected void formOK(UserRequest ureq) {
//
......
/**
* <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 org.olat.core.CoreSpringFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
import org.olat.core.gui.components.progressbar.ProgressBar;
import org.olat.core.gui.components.progressbar.ProgressBar.LabelAlignment;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;
import org.olat.course.assessment.CourseAssessmentService;
import org.olat.course.assessment.handler.AssessmentConfig;
import org.olat.course.assessment.handler.AssessmentConfig.Mode;
import org.olat.course.run.scoring.StatusCompletionEvaluator;
import org.olat.modules.assessment.model.AssessmentEntryStatus;
/**
*
* Initial date: 12 Nov 2019<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class LearningPathProgressRenderer implements FlexiCellRenderer {
private static final StatusCompletionEvaluator STATUS_COMPLETION_EVALUATOR = new StatusCompletionEvaluator();
private CourseAssessmentService courseAssessmentService;
public LearningPathProgressRenderer() {
courseAssessmentService = CoreSpringFactory.getImpl(CourseAssessmentService.class);
}
@Override
public void render(Renderer renderer, StringOutput target, Object cellValue, int row, FlexiTableComponent source,
URLBuilder ubu, Translator translator) {
if (cellValue instanceof LearningPathTreeNode) {
LearningPathTreeNode treeNode = (LearningPathTreeNode)cellValue;
if (Boolean.TRUE.equals(treeNode.getFullyAssessed())) {
target.append("<i class=\"o_icon o_icon-fw o_lp_done\"></i>");
} else if (AssessmentEntryStatus.notReady.equals(treeNode.getAssessmentStatus())) {
// render nothing
} else {
renderProgressBar(renderer, target, ubu, translator, treeNode);
}
}
}
private void renderProgressBar(Renderer renderer, StringOutput target, URLBuilder ubu, Translator translator,
LearningPathTreeNode treeNode) {
ProgressBar progressBar = new ProgressBar("progress-" + treeNode.getIdent());
progressBar.setMax(1.0f);
progressBar.setWidthInPercent(true);
progressBar.setPercentagesEnabled(true);
progressBar.setLabelAlignment(LabelAlignment.none);
float actual = getActual(treeNode);
progressBar.setActual(actual);
progressBar.getHTMLRendererSingleton().render(renderer, target, progressBar, ubu, translator, null, null);
}
private float getActual(LearningPathTreeNode treeNode) {
float actual = 0.5f;
AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(treeNode.getCourseNode());
boolean hasCompletion = !Mode.none.equals(assessmentConfig.getCompletionMode());
if (hasCompletion) {
actual = treeNode.getCompletion() != null ? treeNode.getCompletion().floatValue() : 0.0f;
} else {
Double statusCompletion = STATUS_COMPLETION_EVALUATOR.getCompletion(treeNode.getFullyAssessed(),
treeNode.getAssessmentStatus());
actual = statusCompletion != null ? statusCompletion.floatValue() : 0;
}
return actual;
}
}
......@@ -21,7 +21,6 @@ package org.olat.course.learningpath.ui;
import java.util.Date;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTreeTableNode;
import org.olat.course.assessment.IndentedNodeRenderer.IndentedCourseNode;
import org.olat.modules.assessment.model.AssessmentEntryStatus;
......@@ -36,13 +35,11 @@ import org.olat.modules.assessment.model.AssessmentObligation;
public class LearningPathRow implements FlexiTreeTableNode, IndentedCourseNode {
private final LearningPathTreeNode learningPathNode;
private final Component progressBar;
private LearningPathRow parent;
private boolean hasChildren;
public LearningPathRow(LearningPathTreeNode learningPathNode, Component progressBar) {
public LearningPathRow(LearningPathTreeNode learningPathNode) {
this.learningPathNode = learningPathNode;
this.progressBar = progressBar;
}
@Override
......@@ -96,9 +93,9 @@ public class LearningPathRow implements FlexiTreeTableNode, IndentedCourseNode {
public Date getLastVisit() {
return learningPathNode.getLastVisit();
}
public Component getProgressBar() {
return progressBar;
public LearningPathTreeNode getLearningPathNode() {
return learningPathNode;
}
@Override
......
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