From a5ca87f749e7d8cedd9de6c5b09db370517ea4be Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 12 Nov 2015 08:19:05 +0100
Subject: [PATCH] OO-1777: prevent guest to leave a course

---
 .../java/org/olat/course/run/CourseRuntimeController.java    | 4 +++-
 .../repository/ui/list/RepositoryEntryDetailsController.java | 5 ++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 8011704767b..57683617aa7 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -581,7 +581,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 			}
 			
 			if(repositoryService.isParticipantAllowedToLeave(getRepositoryEntry())
-					&& !assessmentLock
+					&& !assessmentLock && !roles.isGuestOnly()
 					&& (uce.isParticipant() || !uce.getParticipatingGroups().isEmpty())) {
 				leaveLink = LinkFactory.createToolLink("sign.out", "leave", translate("sign.out"), this);
 				leaveLink.setIconLeftCSS("o_icon o_icon-fw o_icon_sign_out");
@@ -1015,6 +1015,8 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 	}
 	
 	private void doLeave(UserRequest ureq) {
+		if(roles.isGuestOnly()) return;
+		
 		MailerResult result = new MailerResult();
 		MailPackage reMailing = new MailPackage(result, getWindowControl().getBusinessControl().getAsString(), true);
 		//leave course
diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
index 259edbbe7f7..4492052bba1 100644
--- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
+++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
@@ -313,7 +313,8 @@ public class RepositoryEntryDetailsController extends FormBasicController {
             Roles roles = ureq.getUserSession().getRoles();
 			layoutCont.contextPut("roles", roles);
 
-			if(memberRoles.contains(GroupRoles.participant.name()) && repositoryService.isParticipantAllowedToLeave(entry)) {
+			if(!guestOnly && memberRoles.contains(GroupRoles.participant.name())
+					&& repositoryService.isParticipantAllowedToLeave(entry)) {
 				leaveLink = uifactory.addFormLink("sign.out", "leave", "sign.out", null, formLayout, Link.LINK);
 				leaveLink.setIconLeftCSS("o_icon o_icon_sign_out");
 			}
@@ -576,6 +577,8 @@ public class RepositoryEntryDetailsController extends FormBasicController {
 	}
 	
 	protected void doLeave() {
+		if(guestOnly) return;
+		
 		MailerResult result = new MailerResult();
 		MailPackage reMailing = new MailPackage(result, getWindowControl().getBusinessControl().getAsString(), true);
 		LeavingStatusList status = new LeavingStatusList();
-- 
GitLab