From 9e5b22df2d05f5ed3681dc76dd5173dfbf6453bc Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 22 Aug 2016 16:36:43 +0200
Subject: [PATCH] OO-1593: wording, refresh eff. statement more deeply...

---
 .../course/assessment/AssessmentHelper.java   | 11 +++++
 .../manager/AssessmentToolManagerImpl.java    | 44 +++----------------
 .../manager/EfficiencyStatementManager.java   | 10 ++++-
 .../qti21/ui/_i18n/LocalStrings_de.properties |  4 +-
 .../qti21/ui/_i18n/LocalStrings_en.properties |  4 +-
 .../qti21/ui/_i18n/LocalStrings_fr.properties |  4 +-
 .../ui/AssessedIdentityListController.java    |  3 +-
 .../ui/AssessmentOverviewController.java      |  3 +-
 .../assessment/ui/_content/overview.html      |  5 +--
 .../ui/_i18n/LocalStrings_de.properties       |  1 +
 .../ui/_i18n/LocalStrings_en.properties       |  1 +
 11 files changed, 37 insertions(+), 53 deletions(-)

diff --git a/src/main/java/org/olat/course/assessment/AssessmentHelper.java b/src/main/java/org/olat/course/assessment/AssessmentHelper.java
index 7a11c1d1a4a..aaee8717290 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentHelper.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentHelper.java
@@ -168,6 +168,17 @@ public class AssessmentHelper {
 		Date lastModified = uce.getCourseEnvironment().getAssessmentManager().getScoreLastModifiedDate(courseNode, identity);
 		return new AssessedIdentityWrapper(uce, attempts, details, initialLaunchDate, lastModified);
 	}
+	
+	public static UserCourseEnvironment createInitAndUpdateUserCourseEnvironment(Identity identity, ICourse course) {
+		// create an identenv with no roles, no attributes, no locale
+		IdentityEnvironment ienv = new IdentityEnvironment(); 
+		ienv.setIdentity(identity);
+		UserCourseEnvironment uce = new UserCourseEnvironmentImpl(ienv, course.getCourseEnvironment());
+		// Fetch all score and passed and calculate score accounting for the entire
+		// course
+		uce.getScoreAccounting().evaluateAll(true);
+		return uce;
+	}
 
 	/**
 	 * Create a user course environment for the given user and course. After
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
index e99ae7d7be9..57cd72a5e75 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
@@ -160,40 +160,6 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 		return results != null && results.size() > 0 && results.get(0)[0] instanceof Number
 				? ((Number)results.get(0)[0]).intValue(): 0;
 	}
-	
-
-	/*public List<AssessedBusinessGroup> getBusinessGroupLoginStatistics(Identity coach, SearchAssessedIdentityParams params) {
-		RepositoryEntry courseEntry = params.getEntry();
-		
-		StringBuilder sf = new StringBuilder();
-		sf.append("select bgi.key, bgi.name, count(infos.key)")
-		  .append(" from businessgroup as bgi")
-		  .append(" inner join bgi.baseGroup as baseGroup")
-		  .append(" inner join repoentrytogroup as rel on (rel.group.key=baseGroup.key and rel.entry.key=:repoEntryKey)")
-		  .append(" inner join repositoryentry as entry on (rel.entry.key=entry.key)")
-		  .append(" inner join baseGroup.members as bmember on (bmember.role='").append(GroupRoles.participant.name()).append("')")
-		  .append(" inner join usercourseinfos as infos on (bmember.identity.key=infos.identity.key and infos.resource.key=entry.olatResource.key)");
-		if(!params.isAdmin()) {
-			sf.append(" where bgi.key n (:groupKeys)");
-		}
-		sf.append(" group by bgi.key");
-		
-		TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager()
-				.createQuery(sf.toString(), Object[].class)
-				.setParameter("repoEntryKey", courseEntry.getKey());
-		if(!params.isAdmin()) {
-			stats.setParameter("groupKeys", params.getBusinessGroupKeys());
-		}
-		
-		List<Object[]> results = stats.getResultList();
-		List<AssessedBusinessGroup> rows = new ArrayList<>(results.size());
-		for(Object[] result:results) {
-			Long key = (Long)result[0];
-			String name = (String)result[1];
-			int login = result[2] == null ? 0 : ((Number)result[2]).intValue();
-		}
-		return rows;
-	}*/
 
 	@Override
 	public List<AssessedBusinessGroup> getBusinessGroupStatistics(Identity coach, SearchAssessedIdentityParams params) {
@@ -538,6 +504,8 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 	public List<AssessmentEntry> getAssessmentEntries(Identity coach, SearchAssessedIdentityParams params, AssessmentEntryStatus status) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select aentry from assessmententry aentry")
+		  .append(" inner join fetch aentry.identity as assessedIdentity")
+		  .append(" inner join fetch assessedIdentity.user as assessedUser")
 		  .append(" where aentry.repositoryEntry.key=:repoEntryKey");
 		if(params.getReferenceEntry() != null) {
 			sb.append(" and aentry.referenceEntry.key=:referenceKey");
@@ -548,19 +516,19 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager {
 		if(status != null) {
 			sb.append(" and aentry.status=:assessmentStatus");
 		}
-		sb.append(" and (aentry.identity in");
+		sb.append(" and (assessedIdentity.key in");
 		if(params.isAdmin()) {
-			sb.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
+			sb.append(" (select participant.identity.key from repoentrytogroup as rel, bgroupmember as participant")
 	          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
 	          .append("      and participant.role='").append(GroupRoles.participant.name()).append("'")
 	          .append("  )");
 			if(params.isNonMembers()) {
-				sb.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
+				sb.append(" or assessedIdentity.key not in (select membership.identity.key from repoentrytogroup as rel, bgroupmember as membership")
 		          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity")
 		          .append(" )");
 			}
 		} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
-			sb.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
+			sb.append(" (select participant.identity.key from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
 	          .append("    where rel.entry.key=:repoEntryKey")
 	          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
 	          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
index 8e58f12861f..e21c54fb5ca 100644
--- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
+++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
@@ -232,11 +232,17 @@ public class EfficiencyStatementManager implements UserDataDeletable {
 			Object passed = rootNode.get(AssessmentHelper.KEY_PASSED);
 			if(passed instanceof Boolean) {
 				efficiencyProperty.setPassed((Boolean)passed);
+			} else {
+				efficiencyProperty.setPassed(null);
 			}
 			
 			Object fscore = rootNode.get(AssessmentHelper.KEY_SCORE_F);
 			if(fscore instanceof Float) {
-				efficiencyProperty.setScore((Float)fscore);
+				efficiencyProperty.setScore((Float)fscore);	
+			} else if(fscore instanceof Number) {
+				efficiencyProperty.setScore(((Number)fscore).floatValue());
+			} else {
+				efficiencyProperty.setScore(null);
 			}
 	
 			Object shortTitle = rootNode.get(AssessmentHelper.KEY_TITLE_SHORT);
@@ -681,7 +687,7 @@ public class EfficiencyStatementManager implements UserDataDeletable {
 					@Override
 					public void execute() {					
 						// create temporary user course env
-						UserCourseEnvironment uce = AssessmentHelper.createAndInitUserCourseEnvironment(identity, course);
+						UserCourseEnvironment uce = AssessmentHelper.createInitAndUpdateUserCourseEnvironment(identity, course);
 						updateUserEfficiencyStatement(uce, courseEntry);
 					}
 				});
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
index ba14c5bc340..a0c7efa339e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
@@ -116,8 +116,8 @@ tab.options=Optionen
 tab.reset.data=Daten zur\u00FCcksetzen
 table.header.action=Aktion
 table.header.duration=Dauer
-table.header.lastModified=$org.olat.course.nodes.iq\:table.header.lastModified
-table.header.results=$org.olat.course.nodes.iq\:table.header.results
+table.header.lastModified=Datum
+table.header.results=Resultat
 terminated.msg=Der Test ist beendet.
 test.complete=Test abgeschlossen
 test.entry.page.text=Der Test hat bis {0} Teile.
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
index 73fbdd3677e..2b6b445f63a 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
@@ -125,8 +125,8 @@ tab.options=Options
 tab.reset.data=Reset data
 table.header.action=Action
 table.header.duration=Duration
-table.header.lastModified=$org.olat.course.nodes.iq\:table.header.lastModified
-table.header.results=$org.olat.course.nodes.iq\:table.header.results
+table.header.lastModified=Date
+table.header.results=Score
 terminated.msg=The test is finished.
 test.complete=Test complete
 test.entry.page.text=This test consists of up to {0} parts.
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties
index 2e1bcd25efe..43a056dbc2c 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties
@@ -42,5 +42,5 @@ retrievetest.nothing.todo=$org.olat.ims.qti.statistics.ui\:retrievetest.nothing.
 score.max=$org.olat.ims.qti\:score.max
 suspend.test=$org.olat.modules.iq\:suspendAssess
 tab.options=Options
-table.header.lastModified=$org.olat.course.nodes.iq\:table.header.lastModified
-table.header.results=$org.olat.course.nodes.iq\:table.header.results
+table.header.lastModified=Date
+table.header.results=R\u00E9sultat
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
index 129815fc398..8e2fa14c31a 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
@@ -223,7 +223,8 @@ public class AssessedIdentityListController extends FormBasicController implemen
 		List<Identity> assessedIdentities = assessmentToolManager.getAssessedIdentities(getIdentity(), params);
 		List<AssessmentEntry> assessmentEntries = assessmentToolManager.getAssessmentEntries(getIdentity(), params, null);
 		Map<Long,AssessmentEntry> entryMap = new HashMap<>();
-		assessmentEntries.forEach((entry) -> entryMap.put(entry.getIdentity().getKey(), entry));
+		assessmentEntries.stream().filter((entry) -> entry.getIdentity() != null)
+			.forEach((entry) -> entryMap.put(entry.getIdentity().getKey(), entry));
 
 		List<AssessedIdentityElementRow> rows = new ArrayList<>(assessedIdentities.size());
 		for(Identity assessedIdentity:assessedIdentities) {
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessmentOverviewController.java b/src/main/java/org/olat/modules/assessment/ui/AssessmentOverviewController.java
index 37b2779a10e..6ef97ed2b33 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessmentOverviewController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessmentOverviewController.java
@@ -65,8 +65,7 @@ public class AssessmentOverviewController extends BasicController implements Act
 		
 	public AssessmentOverviewController(UserRequest ureq, WindowControl wControl,
 			RepositoryEntry testEntry, AssessmentToolSecurityCallback assessmentCallback) {
-		super(ureq, wControl);
-		setTranslator(Util.createPackageTranslator(AssessmentModule.class, getLocale(), getTranslator()));
+		super(ureq, wControl, Util.createPackageTranslator(AssessmentModule.class, ureq.getLocale()));
 		
 		mainVC = createVelocityContainer("overview");
 		
diff --git a/src/main/java/org/olat/modules/assessment/ui/_content/overview.html b/src/main/java/org/olat/modules/assessment/ui/_content/overview.html
index 91ab0b9a8c5..5167247b297 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_content/overview.html
+++ b/src/main/java/org/olat/modules/assessment/ui/_content/overview.html
@@ -1,9 +1,6 @@
 $r.contextHelpWithWrapper("Using Course Tools#_bewertungswerkzeug")
 <h2><i class="o_icon o_icon_assessment_tool"> </i>  $r.translate("assessment.tool.overview")</h2>
-#if(!$hasAssessableNodes)
-	<p class="o_warning">$r.translate("index.noAssessableNodes")</p>
-#end
-<p class="o_info">$r.translate("index.intro")</p>
+<p class="o_info">$r.translate("index.introduction")</p>
 <div class="row o_block">
 	<div class="col-sm-6"><ul class="list-unstyled">
 		#if($r.available("assessed.identities"))
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
index 5eda66cef5d..08f8e423294 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_de.properties
@@ -19,6 +19,7 @@ filter.inReview=Korrigieren
 filter.passed=Bestanden
 filter.anonymousUsers=Anonym Benutzer
 filter.otherUsers=Alle Benutzer
+index.introduction=Mit diesem Werkzeug bewerten Sie die Teilnehmer dieser Test-Lernressource. Es gestattet Ihnen, Testergebnisse einzusehen und zu \u00E4ndern.
 reopen=Neu \u00F6ffnen
 review=\u00DCberpr\u00FCfen
 save.done=Speichern als vervollst\u00E4ndigt
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
index 5fd316fdd3e..ec9bd1a5248 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_en.properties
@@ -19,6 +19,7 @@ filter.inReview=To review
 filter.passed=Passed
 filter.anonymousUsers=Anonymous users
 filter.otherUsers=All users
+index.introduction=Assess the participants of this test learning resource using its assessment tool. It allows you to access and modify test results.
 reopen=Reopen
 review=Review
 save.done=Save as done
-- 
GitLab