From 9031b1f01df53de1d3dbcdfb777048122d3ef29b Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 10 Jan 2017 13:43:26 +0100
Subject: [PATCH] OO-2435: add fallback to the big portrait if the small one is
 missing

---
 .../MembersCourseNodeRunController.java       |  7 +++---
 .../olat/user/DisplayPortraitController.java  |  3 +++
 .../org/olat/user/DisplayPortraitManager.java | 24 ++++++++++++++++---
 .../java/org/olat/user/UserAvatarMapper.java  | 10 +++++---
 4 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
index 9d6531f1082..add2030659e 100644
--- a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
@@ -48,7 +48,6 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.creator.ControllerCreator;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.media.MediaResource;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.id.UserConstants;
@@ -319,8 +318,8 @@ public class MembersCourseNodeRunController extends FormBasicController {
 	}
 	
 	private Member createMember(Identity identity) {
-		MediaResource rsrc = portraitManager.getSmallPortraitResource(identity.getName());
-		
+		boolean hasPortrait = portraitManager.hasPortrait(identity.getName());
+
 		String portraitCssClass;
 		String gender = identity.getUser().getProperty(UserConstants.GENDER, Locale.ENGLISH);
 		if ("male".equalsIgnoreCase(gender)) {
@@ -331,7 +330,7 @@ public class MembersCourseNodeRunController extends FormBasicController {
 			portraitCssClass = DisplayPortraitManager.DUMMY_BIG_CSS_CLASS;
 		}
 		String fullname = userManager.getUserDisplayName(identity);
-		return new Member(identity, fullname, userPropertyHandlers, getLocale(), rsrc != null, portraitCssClass);
+		return new Member(identity, fullname, userPropertyHandlers, getLocale(), hasPortrait, portraitCssClass);
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/user/DisplayPortraitController.java b/src/main/java/org/olat/user/DisplayPortraitController.java
index 7a01cfeffcb..cb9f8b1b97a 100644
--- a/src/main/java/org/olat/user/DisplayPortraitController.java
+++ b/src/main/java/org/olat/user/DisplayPortraitController.java
@@ -164,6 +164,9 @@ public class DisplayPortraitController extends BasicController implements Generi
 				}
 			} else {
 				image = DisplayPortraitManager.getInstance().getSmallPortrait(portraitIdent.getName());
+				if(image == null) {
+					image = DisplayPortraitManager.getInstance().getBigPortrait(portraitIdent.getName());
+				}
 				if (image != null) {
 					myContent.contextPut("portraitCssClass", DisplayPortraitManager.AVATAR_SMALL_CSS_CLASS);					
 				} else if (isAnonymous) {
diff --git a/src/main/java/org/olat/user/DisplayPortraitManager.java b/src/main/java/org/olat/user/DisplayPortraitManager.java
index eb01ca3cf82..fafe985a478 100644
--- a/src/main/java/org/olat/user/DisplayPortraitManager.java
+++ b/src/main/java/org/olat/user/DisplayPortraitManager.java
@@ -169,13 +169,31 @@ public class DisplayPortraitManager extends BasicManager implements UserDataDele
 	public File getBigLogo(String username) {
 		return getPortraitFile(username, LOGO_BIG_FILENAME);
 	}
+	
+	public boolean hasPortrait(String username) {
+		File portraitDir = getPortraitDir(username);
+		if(portraitDir != null) {
+			File[] portraits = portraitDir.listFiles();
+			if(portraits.length > 0) {
+				for(File file:portraits) {
+					if(file.getName().startsWith(PORTRAIT_PREFIX_FILENAME)) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
 
 	private File getPortraitFile(String username, String prefix) {
 		File portraitDir = getPortraitDir(username);
 		if(portraitDir != null) {
-			for(File file:portraitDir.listFiles()) {
-				if(file.getName().startsWith(prefix)) {
-					return file;
+			File[] portraits = portraitDir.listFiles();
+			if(portraits.length > 0) {
+				for(File file:portraits) {
+					if(file.getName().startsWith(prefix)) {
+						return file;
+					}
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/user/UserAvatarMapper.java b/src/main/java/org/olat/user/UserAvatarMapper.java
index 9fdc8f310c8..a02d9626201 100644
--- a/src/main/java/org/olat/user/UserAvatarMapper.java
+++ b/src/main/java/org/olat/user/UserAvatarMapper.java
@@ -48,6 +48,7 @@ public class UserAvatarMapper implements Mapper {
 
 	@Override
 	public MediaResource handle(String relPath, HttpServletRequest request) {
+		MediaResource rsrc = null;
 		if(relPath != null && relPath.endsWith(POSTFIX_LARGE) || relPath.endsWith(POSTFIX_SMALL)) {
 			if(relPath.startsWith("/")) {
 				relPath = relPath.substring(1, relPath.length());
@@ -59,13 +60,16 @@ public class UserAvatarMapper implements Mapper {
 				Long key = Long.parseLong(idKey);
 				String username = userManager.getUsername(key);
 				if (useLarge) {
-					return portraitManager.getBigPortraitResource(username);					
+					rsrc = portraitManager.getBigPortraitResource(username);					
 				} else {					
-					return portraitManager.getSmallPortraitResource(username);
+					rsrc = portraitManager.getSmallPortraitResource(username);
+					if(rsrc == null) {
+						rsrc = portraitManager.getBigPortraitResource(username);
+					}
 				}
 			}
 		}
-		return null;
+		return rsrc;
 	}
 	
 	public String createPathFor(String mapperPath, Identity identity) {
-- 
GitLab