From 333d035db5b455e6b726b7c8223932e2f2caa7f9 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 20 Apr 2016 08:49:26 +0200
Subject: [PATCH] OO-1996: add secondary sorting to the catalog / my courses
 order by for title

---
 .../manager/RepositoryEntryMyCourseQueries.java  | 16 ++++++++++++++--
 .../RepositoryEntryAuthorQueriesTest.java        |  3 +++
 .../RepositoryEntryMyCourseQueriesTest.java      |  2 ++
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
index dafb0d94157..7be7a27b10d 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
@@ -432,7 +432,14 @@ public class RepositoryEntryMyCourseQueries {
 		return needIdentityKey;
 	}
 	
-
+	/**
+	 * Append additional informations and values to the select part of the query
+	 * needed by the order by.
+	 * 
+	 * @param params
+	 * @param sb
+	 * @return
+	 */
 	private boolean appendOrderByInSelect(SearchMyRepositoryEntryViewParams params, StringBuilder sb) {
 		boolean needIdentityKey = false;
 		OrderBy orderBy = params.getOrderBy();
@@ -493,7 +500,12 @@ public class RepositoryEntryMyCourseQueries {
 					appendAsc(sb, asc).append(" nulls last, lower(v.displayname) asc");
 					break;
 				case title:
-					sb.append(" order by lower(v.displayname)");
+					//life cycle always sorted from the newer to the older.
+					if(asc) {
+						sb.append(" order by lower(v.displayname) asc, lifecycle.validFrom desc nulls last, lower(v.externalRef) asc nulls last");
+					} else {
+						sb.append(" order by lower(v.displayname) desc, lifecycle.validFrom desc nulls last, lower(v.externalRef) desc nulls last");
+					}
 					appendAsc(sb, asc);
 					break;
 				case lifecycle:
diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryAuthorQueriesTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryAuthorQueriesTest.java
index 0d04ac51404..8788bde88c4 100644
--- a/src/test/java/org/olat/repository/manager/RepositoryEntryAuthorQueriesTest.java
+++ b/src/test/java/org/olat/repository/manager/RepositoryEntryAuthorQueriesTest.java
@@ -35,6 +35,9 @@ import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
+ * 
+ * Check if the query with the sort argument are "playable" but don't
+ * check if the order by goes in the right direction.
  * 
  * Initial date: 04.06.2014<br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryMyCourseQueriesTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryMyCourseQueriesTest.java
index 6c8eea49383..ea91b3d13ab 100644
--- a/src/test/java/org/olat/repository/manager/RepositoryEntryMyCourseQueriesTest.java
+++ b/src/test/java/org/olat/repository/manager/RepositoryEntryMyCourseQueriesTest.java
@@ -35,6 +35,8 @@ import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
+ * Check if the query with the sort argument are "playable" but don't
+ * check if the order by goes in the right direction.
  * 
  * Initial date: 04.06.2014<br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
-- 
GitLab