From f3fa8c88c295e2e086377f23bea90d720f145abb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20Gn=C3=A4gi?= <gnaegi@frentix.com>
Date: Thu, 4 Oct 2018 11:39:11 +0200
Subject: [PATCH] OO-3304 add hover texts to QM class icons

---
 .../modules/forms/ui/RubricAvgRenderer.java   | 41 +++++++++++++------
 .../forms/ui/_i18n/LocalStrings_de.properties |  5 ++-
 .../forms/ui/_i18n/LocalStrings_en.properties |  5 ++-
 .../quality/analysis/ui/HeatMapRenderer.java  |  7 +++-
 4 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/olat/modules/forms/ui/RubricAvgRenderer.java b/src/main/java/org/olat/modules/forms/ui/RubricAvgRenderer.java
index 0735bff7ad7..5ea399dc29f 100644
--- a/src/main/java/org/olat/modules/forms/ui/RubricAvgRenderer.java
+++ b/src/main/java/org/olat/modules/forms/ui/RubricAvgRenderer.java
@@ -19,6 +19,7 @@
  */
 package org.olat.modules.forms.ui;
 
+import org.apache.commons.lang.StringEscapeUtils;
 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;
@@ -49,28 +50,33 @@ public class RubricAvgRenderer implements FlexiCellRenderer {
 			URLBuilder ubu, Translator translator) {
 		if (cellValue instanceof Double) {
 			Double value = (Double) cellValue;
-			render(target, value);
+			render(target, value, translator);
 		}
 	}
 
-	public String render(Double avg) {
+	public String render(Double avg, Translator translator) {
 		StringOutput target = new StringOutput();
-		render(target, avg);
+		render(target, avg, translator);
 		return target.toString();
 	}
 
-	private void render(StringOutput target, Double value) {
+	private void render(StringOutput target, Double value, Translator translator) {
+		EvaluationFormManager evaluationFormManager = CoreSpringFactory.getImpl(EvaluationFormManager.class);
+		RubricRating rating = evaluationFormManager.getRubricRating(rubric, value);
+		
 		target.append("<div class='o_rubric_avg o_nowrap ");
-		target.append(getRatingCssClass(rubric, value));
+		String ratingCss = getRatingCssClass(rating);
+		target.append(ratingCss, ratingCss != null);
 		target.append("'>");
-		target.append("<i class='o_icon o_icon-fw ").append(getRatingIconCssClass(rubric, value)).append("'> </i> ");
+		if (ratingCss != null) {
+			target.append("<i class='o_icon o_icon-fw ").append(getRatingIconCssClass(rating)).append("' title=\"");
+			target.append(StringEscapeUtils.escapeHtml(getRatingIconExplanation(rating, rubric, translator))).append("\"> </i> ");
+		}
 		target.append(EvaluationFormFormatter.formatDouble(value));
 		target.append("</div>");
 	}
 
-	public static String getRatingCssClass(Rubric rubric, Double value) {
-		EvaluationFormManager evaluationFormManager = CoreSpringFactory.getImpl(EvaluationFormManager.class);
-		RubricRating rating = evaluationFormManager.getRubricRating(rubric, value);
+	public static String getRatingCssClass(RubricRating rating) {
 		switch (rating) {
 			case SUFFICIENT: return "o_rubric_sufficient";
 			case NEUTRAL: return "o_rubric_neutral";
@@ -78,10 +84,8 @@ public class RubricAvgRenderer implements FlexiCellRenderer {
 			default: return null;
 		}
 	}
-	
-	public static String getRatingIconCssClass(Rubric rubric, Double value) {
-		EvaluationFormManager evaluationFormManager = CoreSpringFactory.getImpl(EvaluationFormManager.class);
-		RubricRating rating = evaluationFormManager.getRubricRating(rubric, value);
+
+	public static String getRatingIconCssClass(RubricRating rating) {
 		switch (rating) {
 			case SUFFICIENT: return "o_icon_rubric_sufficient";
 			case NEUTRAL: return "o_icon_rubric_neutral";
@@ -90,5 +94,16 @@ public class RubricAvgRenderer implements FlexiCellRenderer {
 		}
 	}
 
+	public static String getRatingIconExplanation(RubricRating rating, Rubric rubric, Translator translator) {
+		
+		switch (rating) {
+			case SUFFICIENT: return translator.translate("rubric.sufficient.explanation", new String[]{rubric.getLowerBoundSufficient()+ "", rubric.getUpperBoundSufficient()+""});
+			case NEUTRAL: return translator.translate("rubric.neutral.explanation", new String[]{rubric.getLowerBoundNeutral()+ "", rubric.getUpperBoundNeutral()+""});
+			case INSUFFICIENT: return translator.translate("rubric.insufficient.explanation", new String[]{rubric.getLowerBoundInsufficient()+ "", rubric.getUpperBoundInsufficient()+""});
+			default: return null;
+		}
+	}
+	
+
 	
 }
diff --git a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
index 4a6e5de5bac..4ec3860a12c 100644
--- a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
@@ -89,9 +89,11 @@ reports.table.overview=\u00dcbersicht
 reports.table.report=Tabellen
 rubic.column.label=Spaltenbeschriftung
 rubric.insufficient=Ungen\u00fcgend
+rubric.insufficient.explanation=Ungen\u00fcgende Beurteilung (Wert zwischen {0} und {1})
 rubric.lower.bound=von
 rubric.name=Name
 rubric.neutral=Neutral
+rubric.neutral.explanation=Neutrale Beurteilung (Wert zwischen {0} und {1})
 rubric.no.response.enabled.show=anzeigen
 rubric.no.response.enabled=Spalte "$\:no.response"
 rubric.report.avg.abrev=\u00F8
@@ -117,7 +119,8 @@ rubric.scale.maxToOne=Absteigende Likert-Skala (x bis 1)
 rubric.scale.oneToMax=Aufsteigende Likert-Skala (1 bis x)
 rubric.scale.type=Skalentyp
 rubric.scale.zeroBallanced=Symmetrische Likert-Skala (-x bis x)
-rubric.sufficient=Gen\u00fcgend
+rubric.sufficient=Gut
+rubric.sufficient.explanation=Gute Beurteilung (Wert zwischen {0} und {1})
 rubric.upper.bound=bis
 save.as.done=Speichern und abschliessen
 save.intermediate=Zwischenspeichern
diff --git a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
index 1fdcc1193a4..2e32e748242 100644
--- a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
@@ -90,9 +90,11 @@ reports.table.overview=Overview
 reports.table.report=Tables
 rubic.column.label=Column label
 rubric.insufficient=Insufficient
+rubric.insufficient.explanation=Insufficient rating (Value between {0} and {1})
 rubric.lower.bound=from
 rubric.name=Name
 rubric.neutral=Neutral
+rubric.insufficient.explanation=Neutral rating (Value between {0} and {1})
 rubric.no.response.enabled.show=show
 rubric.no.response.enabled=Column "$\:no.response"
 rubric.report.avg.abrev=\u00F8
@@ -118,7 +120,8 @@ rubric.scale.maxToOne=Descending Likert scale (x to 1)
 rubric.scale.oneToMax=Ascending Likert scale (1 to x)
 rubric.scale.type=Scale type
 rubric.scale.zeroBallanced=Ballanced Likert scale (-x to x)
-rubric.sufficient=Sufficient
+rubric.sufficient=Good
+rubric.insufficient.explanation=Good rating (Value between {0} and {1})
 rubric.upper.bound=to
 save.as.done=Save and finish
 save.intermediate=Quick save
diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRenderer.java b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRenderer.java
index ba8dbfe1415..1e85a3b8bf0 100644
--- a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRenderer.java
+++ b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRenderer.java
@@ -19,12 +19,15 @@
  */
 package org.olat.modules.quality.analysis.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.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.modules.forms.EvaluationFormManager;
+import org.olat.modules.forms.RubricRating;
 import org.olat.modules.forms.model.xml.Rubric;
 import org.olat.modules.forms.ui.EvaluationFormFormatter;
 import org.olat.modules.forms.ui.RubricAvgRenderer;
@@ -70,7 +73,9 @@ public class HeatMapRenderer implements FlexiCellRenderer {
 	}
 
 	public String getColorCss(GroupedStatistic statistic) {
-		String colorCss = RubricAvgRenderer.getRatingCssClass(rubric, statistic.getAvg());
+		EvaluationFormManager evaluationFormManager = CoreSpringFactory.getImpl(EvaluationFormManager.class);
+		RubricRating rating = evaluationFormManager.getRubricRating(rubric, statistic.getAvg());
+		String colorCss = RubricAvgRenderer.getRatingCssClass(rating);
 		if (colorCss == null) {
 			colorCss = "o_qual_hm_basecolor";
 		}
-- 
GitLab