Skip to content
Snippets Groups Projects
Commit 7bf3c327 authored by srosse's avatar srosse
Browse files

OO-4879: rewrite comparator to handle anonymous users

parent 4d2d6bc0
No related branches found
No related tags found
No related merge requests found
/**
* <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.ims.qti21.resultexport;
import java.util.Comparator;
/**
*
* Initial date: 28 août 2020<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class AssessedMemberComparator implements Comparator<AssessedMember> {
@Override
public int compare(AssessedMember o1, AssessedMember o2) {
int c = 0;
String l1 = o1.getLastname();
String l2 = o2.getLastname();
if(l1 == null || l2 == null) {
c = compareNullObjects(l1, l2);
} else {
c = l1.compareTo(l2);
}
if(c == 0) {
String n1 = o1.getNickname();
String n2 = o2.getNickname();
if(n1 == null || n2 == null) {
c = compareNullObjects(n1, n2);
} else {
c = n1.compareTo(n2);
}
}
return c;
}
private final int compareNullObjects(final Object a, final Object b) {
boolean ba = (a == null);
boolean bb = (b == null);
return ba? (bb? 0: -1):(bb? 1: 0);
}
}
...@@ -86,6 +86,7 @@ import org.olat.ims.qti21.ui.AssessmentResultController; ...@@ -86,6 +86,7 @@ import org.olat.ims.qti21.ui.AssessmentResultController;
import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.AssessmentEntry;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
public class QTI21ResultsExportMediaResource implements MediaResource { public class QTI21ResultsExportMediaResource implements MediaResource {
...@@ -108,11 +109,14 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ...@@ -108,11 +109,14 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
private final Set<RepositoryEntry> testEntries = new HashSet<>(); private final Set<RepositoryEntry> testEntries = new HashSet<>();
private final UserManager userManager; @Autowired
private final QTI21Service qtiService; private UserManager userManager;
@Autowired
private QTI21Service qtiService;
public QTI21ResultsExportMediaResource(CourseEnvironment courseEnv, List<Identity> identities, public QTI21ResultsExportMediaResource(CourseEnvironment courseEnv, List<Identity> identities,
QTICourseNode courseNode, String archivePath, Locale locale) { QTICourseNode courseNode, String archivePath, Locale locale) {
CoreSpringFactory.autowireObject(this);
this.courseNode = courseNode; this.courseNode = courseNode;
this.identities = identities; this.identities = identities;
this.courseEnv = courseEnv; this.courseEnv = courseEnv;
...@@ -124,8 +128,6 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ...@@ -124,8 +128,6 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
ureq.getUserSession().setRoles(Roles.userRoles()); ureq.getUserSession().setRoles(Roles.userRoles());
velocityHelper = VelocityHelper.getInstance(); velocityHelper = VelocityHelper.getInstance();
qtiService = CoreSpringFactory.getImpl(QTI21Service.class);
userManager = CoreSpringFactory.getImpl(UserManager.class);
entry = courseEnv.getCourseGroupManager().getCourseEntry(); entry = courseEnv.getCourseGroupManager().getCourseEntry();
translator = Util.createPackageTranslator(QTI21ResultsExportMediaResource.class, locale); translator = Util.createPackageTranslator(QTI21ResultsExportMediaResource.class, locale);
exportFolderName = ZipUtil.concat(archivePath, translator.translate("export.folder.name")); exportFolderName = ZipUtil.concat(archivePath, translator.translate("export.folder.name"));
...@@ -277,13 +279,16 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ...@@ -277,13 +279,16 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
assessmentEntryMap.put(assessmentEntry.getIdentity(), assessmentEntry); assessmentEntryMap.put(assessmentEntry.getIdentity(), assessmentEntry);
} }
List<AssessedMember> assessedMembers = new ArrayList<>(); List<AssessedMember> assessedMembers = new ArrayList<>();
for(Identity identity : identities) { for(Identity identity : identities) {
if(identity == null || identity.getStatus() == null || identity.getStatus().equals(Identity.STATUS_DELETED)) { if(identity == null || identity.getStatus() == null || identity.getStatus().equals(Identity.STATUS_DELETED)) {
continue; continue;
} }
String lastNameOrAnoymous = identity.getUser().getLastName();
String lastname = StringHelper.transformDisplayNameToFileSystemName(identity.getUser().getLastName()); if(!StringHelper.containsNonWhitespace(lastNameOrAnoymous)) {
lastNameOrAnoymous = "anonym";
}
String lastname = StringHelper.transformDisplayNameToFileSystemName(lastNameOrAnoymous);
String idDir = exportFolderName + "/" + DATA + lastname + "_" + identity.getKey(); String idDir = exportFolderName + "/" + DATA + lastname + "_" + identity.getKey();
idDir = idDir.endsWith(SEP) ? idDir : idDir + SEP; idDir = idDir.endsWith(SEP) ? idDir : idDir + SEP;
createZipDirectory(zout, idDir); createZipDirectory(zout, idDir);
...@@ -303,7 +308,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ...@@ -303,7 +308,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
String linkToUser = idDir.replace(exportFolderName + "/", "") + "index.html"; String linkToUser = idDir.replace(exportFolderName + "/", "") + "index.html";
String memberEmail = userManager.getUserDisplayEmail(identity, ureq.getLocale()); String memberEmail = userManager.getUserDisplayEmail(identity, ureq.getLocale());
AssessedMember member = new AssessedMember(identity.getUser().getProperty(UserConstants.NICKNAME, null), AssessedMember member = new AssessedMember(identity.getUser().getProperty(UserConstants.NICKNAME, null),
identity.getUser().getLastName(), identity.getUser().getFirstName(), lastNameOrAnoymous, identity.getUser().getFirstName(),
memberEmail, assessments.size(), passed, score, linkToUser); memberEmail, assessments.size(), passed, score, linkToUser);
String singleUserInfoHTML = createResultListingHTML(assessments, assessmentDocuments, member); String singleUserInfoHTML = createResultListingHTML(assessments, assessmentDocuments, member);
...@@ -373,7 +378,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ...@@ -373,7 +378,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
} }
private String createMemberListingHTML(List<AssessedMember> assessedMembers) { private String createMemberListingHTML(List<AssessedMember> assessedMembers) {
Collections.sort(assessedMembers, (o1, o2) -> o1.getLastname().compareTo(o2.getLastname())); Collections.sort(assessedMembers, new AssessedMemberComparator());
// now put values to velocityContext // now put values to velocityContext
VelocityContext ctx = new VelocityContext(); VelocityContext ctx = new VelocityContext();
ctx.put("t", translator); ctx.put("t", translator);
......
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