From 933b9d04effb3cb12f27f3438c4c7031f9c50d58 Mon Sep 17 00:00:00 2001
From: Richard Alam <ritzalam@gmail.com>
Date: Tue, 14 Apr 2015 14:40:24 +0000
Subject: [PATCH]  - make a moderator presenter when the current presenter
 leaves (e.g. disconnected). This way, as long as    there is a moderator in
 the meeting, there will always be a presenter.

---
 .../org/bigbluebutton/core/apps/users/UsersApp.scala | 12 ++++++++++++
 .../bigbluebutton/core/apps/users/UsersModel.scala   |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
index 19f0f158ee..481275a855 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
@@ -306,6 +306,18 @@ trait UsersApp {
 	  user foreach { u => 
 	    logger.info("User left meeting:  mid=[" + meetingID + "] uid=[" + u.userID + "]")
 	    outGW.send(new UserLeft(msg.meetingID, recorded, u)) 
+	    
+	    if (u.presenter) {
+	      /* The current presenter has left the meeting. Find a moderator and make
+	       * him presenter. This way, if there is a moderator in the meeting, there
+	       * will always be a presenter.
+	       */
+	      val moderator = users.findAModerator()
+	      moderator.foreach { mod =>
+	        logger.info("Presenter left meeting:  mid=[" + meetingID + "] uid=[" + u.userID + "]. Making user=[" + mod.userID + "] presenter.")
+	        assignNewPresenter(mod.userID, mod.name, mod.userID)
+	      }
+	    }
 	  }
 	  
       startCheckingIfWeNeedToEndVoiceConf()
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersModel.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersModel.scala
index 1353e8d296..5642ecf785 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersModel.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersModel.scala
@@ -63,7 +63,7 @@ class UsersModel {
 	  getModerators.length
   }
 
-  def getLoneModerator():Option[UserVO] = {
+  def findAModerator():Option[UserVO] = {
     uservos.values find (u => u.role == MODERATOR)
   }
     
-- 
GitLab