From a885f6dab730bbae4064e014c55f1c43c96a4d3e Mon Sep 17 00:00:00 2001
From: gnaegi <none@none>
Date: Fri, 4 Apr 2014 09:28:32 +0200
Subject: [PATCH] OO-1032 implement user properties context for the QTI results
 download file

---
 .../export/QTIExportFormatterCSVType1.java    | 91 +++++++++++--------
 .../export/QTIExportFormatterCSVType2.java    |  4 -
 .../export/QTIExportFormatterCSVType3.java    |  6 --
 .../export/_i18n/LocalStrings_de.properties   |  2 +-
 .../export/_i18n/LocalStrings_en.properties   |  2 +-
 .../_spring/userPropertiesContext.xml         | 13 +++
 6 files changed, 68 insertions(+), 50 deletions(-)

diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
index 9bf5738c324..c8a8bbc0461 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType1.java
@@ -34,13 +34,17 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.core.id.User;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.util.Formatter;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.filter.FilterFactory;
 import org.olat.ims.qti.editor.beecom.parser.ItemParser;
 import org.olat.ims.qti.export.helper.QTIItemObject;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
 
 /**
  * Initial Date: May 23, 2006 <br>
@@ -62,7 +66,9 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 
 	// CELFI#107 (Header question max lenght)
 	private int		cut				= 30;
-
+	// user properties
+	private List<UserPropertyHandler> userPropertyHandlers;
+	
 	/**
 	 * @param locale
 	 * @param type
@@ -79,6 +85,11 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 		this.esc = esc;
 		this.car = car;
 		this.tagless = tagless;
+		// initialize user property handlers
+		UserManager um = UserManager.getInstance();
+		this.userPropertyHandlers = um.getUserPropertyHandlersFor(this.getClass().getName(), true);
+		this.translator = um.getPropertyHandlerTranslator(this.translator);	
+
 	}
 	
 	public void openReport() {
@@ -185,30 +196,33 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 	}
 
 	public void openResultSet(QTIExportSet set) {
-		
-		String firstName = set.getFirstName();
-		String lastName = set.getLastName();
-		ContextEntry ce = BusinessControlFactory.getInstance().createContextEntry(set.getIdentity());
-		String login = BusinessControlFactory.getInstance().getAsURIString(Collections.singletonList(ce), false);
-		String instUsrIdent = set.getInstitutionalUserIdentifier();
-		if (instUsrIdent == null) {
-			instUsrIdent = translator.translate("column.field.notavailable");
-		}
-		float assessPoints = set.getScore();
-		boolean isPassed = set.getIsPassed();
-					
+		// header for personalized download (iqtest)
 		sb.append(row_counter);
 		sb.append(sep);
-		sb.append(lastName);
-		sb.append(sep);
-		sb.append(firstName);
-		sb.append(sep);
-		sb.append(login);
-		sb.append(sep);
-		sb.append(instUsrIdent);
+
+		// add configured user properties
+		User user = set.getIdentity().getUser();
+		for (UserPropertyHandler userPropertyHandler : this.userPropertyHandlers) {
+			if (userPropertyHandler == null) {
+				continue;
+			}
+			String property = userPropertyHandler.getUserProperty(user, translator.getLocale());
+			if (!StringHelper.containsNonWhitespace(property)) {
+				property = translator.translate("column.field.notavailable");
+			}
+			sb.append(property);
+			sb.append(sep);			
+		}
+		
+		// add other user and session information
+		ContextEntry ce = BusinessControlFactory.getInstance().createContextEntry(set.getIdentity());
+		String homepage = BusinessControlFactory.getInstance().getAsURIString(Collections.singletonList(ce), false);
+		sb.append(homepage);
 		sb.append(sep);
+		float assessPoints = set.getScore();
 		sb.append(assessPoints);
 		sb.append(sep);
+		boolean isPassed = set.getIsPassed();					
 		sb.append(isPassed);
 		sb.append(sep);
 		sb.append(set.getIp());
@@ -449,35 +463,36 @@ public class QTIExportFormatterCSVType1 extends QTIExportFormatter {
 
 		// header for personalized download (iqtest)
 		String sequentialNumber = translator.translate("column.header.seqnum");
-
-		String lastName = translator.translate("column.header.name");
-		String firstName = translator.translate("column.header.vorname");
-		String login = translator.translate("column.header.login");
-		String instUsrIdent = translator.translate("column.header.instUsrIdent");
-		String assessPoint = translator.translate("column.header.assesspoints");
-		String passed = translator.translate("column.header.passed");
-		String ipAddress = translator.translate("column.header.ipaddress");
-		String date = translator.translate("column.header.date");
-		String duration = translator.translate("column.header.duration");
-		
 		hr2Intro.append(sequentialNumber);
 		hr2Intro.append(sep);
-		hr2Intro.append(lastName);
-		hr2Intro.append(sep);
-		hr2Intro.append(firstName);
-		hr2Intro.append(sep);
-		hr2Intro.append(login);
-		hr2Intro.append(sep);
-		hr2Intro.append(instUsrIdent);
+
+		// add configured user properties
+		for (UserPropertyHandler userPropertyHandler : this.userPropertyHandlers) {
+			if (userPropertyHandler == null) {
+				continue;
+			}
+			String header = translator.translate(userPropertyHandler.i18nFormElementLabelKey());
+			hr2Intro.append(header);
+			hr2Intro.append(sep);			
+		}
+
+		// add other user and session information
+		String homepage = translator.translate("column.header.homepage");
+		hr2Intro.append(homepage);
 		hr2Intro.append(sep);
+		String assessPoint = translator.translate("column.header.assesspoints");
 		hr2Intro.append(assessPoint);
 		hr2Intro.append(sep);
+		String passed = translator.translate("column.header.passed");
 		hr2Intro.append(passed);
 		hr2Intro.append(sep);
+		String ipAddress = translator.translate("column.header.ipaddress");
 		hr2Intro.append(ipAddress);
 		hr2Intro.append(sep);
+		String date = translator.translate("column.header.date");
 		hr2Intro.append(date);
 		hr2Intro.append(sep);
+		String duration = translator.translate("column.header.duration");
 		hr2Intro.append(duration);
 		hr2Intro.append(sep);
 
diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
index fdbf68f78ea..07c3b2333ab 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType2.java
@@ -186,10 +186,6 @@ public class QTIExportFormatterCSVType2 extends QTIExportFormatter {
 	}
 
 	public void openResultSet(QTIExportSet set) {
-		String instUsrIdent = set.getInstitutionalUserIdentifier();
-		if (instUsrIdent == null) {
-			instUsrIdent = translator.translate("column.field.notavailable");
-		}
 		float assessPoints = set.getScore();
 			
 		Long key = set.getIdentity().getKey();
diff --git a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
index 698d03274d3..d0da3f85b8a 100644
--- a/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
+++ b/src/main/java/org/olat/ims/qti/export/QTIExportFormatterCSVType3.java
@@ -179,12 +179,6 @@ public class QTIExportFormatterCSVType3 extends QTIExportFormatter{
 	}
 
 	public void openResultSet(QTIExportSet set) {
-
-		String instUsrIdent = set.getInstitutionalUserIdentifier();
-		if (instUsrIdent == null){
-			instUsrIdent = translator.translate("column.field.notavailable");
-		}
-
 		if (anonymizerCallback == null)
 			sb.append(row_counter);
 		else 
diff --git a/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_de.properties
index 216dfadb6d0..3f0621175b5 100644
--- a/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_de.properties
@@ -31,7 +31,7 @@ column.header.details=Details
 column.header.duration=Gesamtdauer (s)
 column.header.instUsrIdent=Institutionsnummer
 column.header.ipaddress=IP-Adresse
-column.header.login=Benutzername
+column.header.homepage=Homepage
 column.header.name=Name
 column.header.number=Probanddecknummer
 column.header.passed=Bestanden
diff --git a/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_en.properties
index 7fcdddc7d87..50f2173e743 100644
--- a/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti/export/_i18n/LocalStrings_en.properties
@@ -31,7 +31,7 @@ column.header.details=Details
 column.header.duration=Total time (s)
 column.header.instUsrIdent=Institution identifier
 column.header.ipaddress=IP address
-column.header.login=User name
+column.header.homepage=Home page
 column.header.name=Name
 column.header.number=Test person's number
 column.header.passed=Passed
diff --git a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
index ab037a59136..5033fbf2696 100644
--- a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
+++ b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
@@ -274,6 +274,19 @@
 						</property>
 					</bean>
 				</entry>
+
+				<entry key="org.olat.ims.qti.export.QTIExportFormatterCSVType1">
+					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
+						<property name="description" value="Columns in download file of QTI assessment results in courses" />
+						<property name="propertyHandlers">
+							<list>
+								<ref bean="userPropertyFirstName" />
+								<ref bean="userPropertyLastName" />
+								<ref bean="userPropertyInstitutionalUserIdentifier" />
+							</list>
+						</property>
+					</bean>
+				</entry>
 				
 				<entry key="org.olat.admin.user.UsermanagerUserSearchForm">
 					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
-- 
GitLab