diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 1af4cb0dbcf15e0486820814189151dcbee8f418..49b12c06c9182920b02db801181b848aaa17715c 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -57,6 +57,7 @@ bbb.participants.maximizeRestoreBtn.accessibilityName = Maximize the Participant bbb.participants.settings.buttonTooltip = Settings bbb.participants.settings.audioSettings = Audio Settings bbb.participants.settings.muteAll = Mute All +bbb.participants.settings.muteAllExcept = Mute All Except Presenter bbb.participants.settings.unmuteAll = Unmute All bbb.participants.settings.lowerAllHands = Lower All Hands bbb.participants.pushToTalk.toolTip = Click to talk diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as index 40250e5efbd0ddd212dec106fa76ed00c2369782..a45e5a47d779661d725876c7344261203193610e 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as @@ -84,7 +84,7 @@ package org.bigbluebutton.main.model.users [Bindable] public var room:String = ""; [Bindable] public var authToken:String = ""; [Bindable] public var selected:Boolean = false; - [Bindable] public var voiceUserid:Number; + [Bindable] public var voiceUserid:Number = 0; private var _voiceMuted:Boolean = false; [Bindable] @@ -219,7 +219,7 @@ package org.bigbluebutton.main.model.users n.authToken = user.authToken; n.me = user.me; n.userID = user.userID; - n.externUserID = user.externUserID; + n.externUserID = user.externUserID; n.name = user.name; n.hasStream = user.hasStream; n.streamName = user.streamName; @@ -227,6 +227,15 @@ package org.bigbluebutton.main.model.users n.raiseHand = user.raiseHand; n.role = user.role; n.room = user.room; + n.customdata = user.customdata; + n.media = user.media; + n.phoneUser = user.phoneUser; + n.talking = user.talking; + n.userStatus = user.userStatus; + n.voiceJoined = user.voiceJoined; + n.voiceLocked = user.voiceLocked; + n.voiceMuted = user.voiceMuted; + n.voiceUserid = user.voiceUserid; return n; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as index 6ebfca5cb4d44e8fd6e97a215a639a2ee9940d38..7294f13c145471023e511caec1240ace7abe99bf 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as @@ -53,11 +53,11 @@ package org.bigbluebutton.main.model.users { // Custom sort function for the users ArrayCollection. Need to put dial-in users at the very bottom. private function sortFunction(a:Object, b:Object, array:Array = null):int { - if (a.presenter) + /*if (a.presenter) return -1; else if (b.presenter) - return 1; - else if (a.role == Role.MODERATOR && b.role == Role.MODERATOR) { + return 1;*/ + if (a.role == Role.MODERATOR && b.role == Role.MODERATOR) { // do nothing go to the end and check names } else if (a.role == Role.MODERATOR) return -1; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as index a41eaac43e2eded57a9a511f72c7b26e16a95263..a9449e32ec57a3d4545d30b9492e8adb154bde25 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as @@ -93,7 +93,7 @@ package org.bigbluebutton.modules.chat.services msg.chatType = ChatConstants.PUBLIC_CHAT; msg.fromUserID = SPACE; msg.fromUsername = SPACE; - msg.fromColor = "0"; + msg.fromColor = "86187"; msg.fromLang = "en"; msg.fromTime = new Date().getTime(); msg.fromTimezoneOffset = new Date().getTimezoneOffset(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml index 4e588d30beb9840570c81acb636791583b494012..40c359840cb2199312f0a02b0d04334a16830cfd 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml @@ -58,7 +58,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mate:Listener type="{ShortcutEvent.FOCUS_CHAT_INPUT}" method="focusChatInput" /> <mate:Listener type="{UserLeftEvent.LEFT}" method="handleUserLeftEvent"/> <mate:Listener type="{ShortcutEvent.FOCUS_CHAT_BOX}" method="focusChatBox" /> - <mate:Listener type="{ShortcutEvent.CHANGE_FONT_COLOUR}" method="focusColourPicker" /> + <!--mate:Listener type="{ShortcutEvent.CHANGE_FONT_COLOUR}" method="focusColourPicker" /--> <mate:Listener type="{ShortcutEvent.SEND_MESSAGE}" method="remoteSendMessage" /> <mate:Listener type="{ShortcutEvent.CHAT_DEBUG}" method="chatDebugInfo" /> @@ -182,9 +182,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. focusManager.setFocus(chatMessagesList); } - private function focusColourPicker(e:ShortcutEvent):void{ + /*private function focusColourPicker(e:ShortcutEvent):void{ focusManager.setFocus(cmpColorPicker); - } + }*/ private function remoteSendMessage(e:ShortcutEvent):void{ sendMessages(); @@ -522,9 +522,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. cm.chatType = ChatConstants.PUBLIC_CHAT; cm.fromUserID = UsersUtil.getMyUserID(); cm.fromUsername = UsersUtil.getMyUsername(); - cm.fromColor = cmpColorPicker.selectedColor.toString(); + cm.fromColor = "0" //default the message colour to black now cmpColorPicker.selectedColor.toString(); cm.fromLang = ChatUtil.getUserLang(); - // Get the current UTC time and the timezone for this sender. // The receiver will have to convert this to local time. var now:Date = new Date(); @@ -543,7 +542,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. cm.chatType = ChatConstants.PRIVATE_CHAT; cm.fromUserID = UsersUtil.getMyUserID(); cm.fromUsername = UsersUtil.getMyUsername(); - cm.fromColor = cmpColorPicker.selectedColor.toString(); + cm.fromColor = "0" //default the message colour to black now cmpColorPicker.selectedColor.toString(); cm.fromLang = ChatUtil.getUserLang(); // Get the current UTC time and the timezone for this sender. @@ -598,7 +597,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:HBox id="chatCtrlBar" width="100%" height="50" styleName="chatControlBarStyle" verticalScrollPolicy="off" paddingLeft="5" paddingRight="5"> - <mx:TextArea id="txtMsgArea" width="100%" color="{cmpColorPicker.selectedColor}" + <mx:TextArea id="txtMsgArea" width="100%" styleName="chatControlBarTextMsgStyle" toolTip="{ResourceUtil.getInstance().getString('bbb.accessibility.chat.chatwindow.input')}" tabIndex="{baseIndex+1}"/> @@ -609,10 +608,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. click="sendMessages()" tabIndex="{baseIndex+2}" accessibilityName="{ResourceUtil.getInstance().getString('bbb.chat.sendBtn.name')}"/> - <mx:ColorPicker id="cmpColorPicker" showTextField="false" + <!--mx:ColorPicker id="cmpColorPicker" showTextField="false" toolTip="{ResourceUtil.getInstance().getString('bbb.chat.cmpColorPicker.toolTip')}" selectedColor="0x000000" dataProvider="{colorPickerColours}" swatchPanelStyleName="chatColorPickerStyle" - tabIndex="{baseIndex+3}"/> + tabIndex="{baseIndex+3}"/--> </mx:VBox> </mx:HBox> </mx:VBox> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as index e437ec53ba8d1180dfad6ce50333cc5e9260f7c8..8be57b7bfe9d5f0a959a42325fd5f94b1457964c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as @@ -255,6 +255,28 @@ package org.bigbluebutton.modules.participants.business } } + public function lockMuteUser(userid:Number, lock:Boolean):void { + var nc:NetConnection = _module.connection; + nc.call( + "voice.lockMuteUser",// Remote function name + new Responder( + // participants - On successful result + function(result:Object):void { + LogUtil.debug("Successfully lock mute/unmute: " + userid); + }, + // status - On error occurred + function(status:Object):void { + LogUtil.error("Error occurred:"); + for (var x:Object in status) { + LogUtil.error(x + " : " + status[x]); + } + } + ),//new Responder + userid, + lock + ); //_netConnection.call + } + public function muteUnmuteUser(userid:Number, mute:Boolean):void { var nc:NetConnection = _module.connection; nc.call( diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as index 76eb5ce82301c5f8c1f8446e2fc5576aa21fe9c2..d456bdc95bf408a8015202b59883a7e85879b44b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as @@ -22,6 +22,7 @@ package org.bigbluebutton.modules.participants.business import mx.collections.ArrayCollection; + import org.bigbluebutton.common.Role; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.users.BBBUser; @@ -88,6 +89,20 @@ package org.bigbluebutton.modules.participants.business public function unmuteAllUsers(command:VoiceConfEvent):void{ _listenersService.muteAllUsers(false); } + + public function muteAlmostAllUsers(command:VoiceConfEvent):void + { + //find the presenter and lock them + var pres:BBBUser = UserManager.getInstance().getConference().getPresenter(); + if (pres) + _listenersService.lockMuteUser(int(pres.voiceUserid), true); + + _listenersService.muteAllUsers(true); + + //unlock the presenter + if (pres) + _listenersService.lockMuteUser(int(pres.voiceUserid), false); + } public function kickUser(event:KickUserEvent):void { var user:BBBUser = UsersUtil.getUser(event.userid); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as index 415f418ad00b18b79eeda55e0edbab56304f0020..9b822b0a7ff359d55973f61d726b999587003344 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as @@ -25,6 +25,8 @@ package org.bigbluebutton.modules.participants.events public static const MUTE_ALL:String = "VOICECONF_MUTE_ALL"; public static const UNMUTE_ALL:String = "VOICECONF_UNMUTE_ALL"; + public static const MUTE_ALMOST_ALL:String = "VOICECONF_MUTE_ALMOST_ALL"; + public static const MUTE_USER:String = "VOICECONF_MUTE_USER"; public static const UNMUTE_USER:String = "VOICECONF_UNMUTE_USER"; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml index 09ec1c97936a31de2c32f0ab5eadb76daee45dcf..c87ef68d63d3d2c6e199b6209ce18fe580cf4f17 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml @@ -70,4 +70,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <MethodInvoker generator="{ParticipantsProxy}" method="unmuteAllUsers" arguments="{event}" /> </EventHandlers> + <EventHandlers type="{VoiceConfEvent.MUTE_ALMOST_ALL}" > + <MethodInvoker generator="{ParticipantsProxy}" method="muteAlmostAllUsers" arguments="{event}" /> + </EventHandlers> + </EventMap> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml index 4c8de9dae46c4a076a0e2c666fc7d8eb01c1b2d9..5793ef130efc69976b87968e7760df8f98ba45b1 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml @@ -104,7 +104,7 @@ } ]]> </mx:Script> - + <mx:Image id="showLock" visible="{data.voiceLocked}" source="{images.lock_close}" width="20" height="20" /> <mx:Image id="talkingIcon" visible="{data.talking}" source="{images.sound_new}" width="20" height="20" toolTip="{ResourceUtil.getInstance().getString('bbb.participants.participantsGrid.mediaItemRenderer.talking')}" /> <mx:Button id="webcamBtn" visible="{data.hasStream}" click="viewCamera()" icon="{images.webcam_new}" diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml index 37f2ec430deb3c79923125f1d5efba505e4e5116..44186c19ef2980bf41ee9cc544fd8dfc735f1287 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml @@ -175,12 +175,13 @@ var myMenuData:Array = [{label: ResourceUtil.getInstance().getString('bbb.participants.settings.audioSettings'), icon: images.audio}]; if (amIModerator) { - myMenuData[1] = {type: "separator"}; - if (!roomMuted) - myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAll'), icon: images.audio_muted}; - else - myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.unmuteAll'), icon: images.audio}; - myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.lowerAllHands'), icon: images.hand_new}; + myMenuData[1] = {type: "separator"}; + myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.lowerAllHands'), icon: images.hand_new}; + if (!roomMuted) { + myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAll'), icon: images.audio_muted}; + myMenuData[4] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAllExcept'), icon: images.audio_muted}; + } else + myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.unmuteAll'), icon: images.audio}; } // make sure the previous menu is closed before opening a new one @@ -203,11 +204,13 @@ showAudioSettings(); break; case 2: - muteAll(); + lowerHands(); break; case 3: - lowerHands(); + muteAll(); break; + case 4: + muteAlmostAll(); } } @@ -233,6 +236,16 @@ } } + private function muteAlmostAll():void { + if (amIModerator) { + if (!roomMuted) { + var muteCommand:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_ALMOST_ALL); + dispatchEvent(muteCommand); + roomMuted = true; + } + } + } + private function lowerHands():void { for (var i:int = 0; i < participants.length; i++) { var p:BBBUser = participants.getItemAt(i) as BBBUser; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml index f6d7f4d881c1680263db2811890ddf0c6af3b4f6..000622641a0a178699e6a3b20d5bca569ea77b1d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml @@ -271,15 +271,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:Spacer height="5"/> <mx:Label id="fileLbl" text="{ResourceUtil.getInstance().getString('bbb.fileupload.fileLbl')}" styleName="presentationUploadChooseFileLabelStyle"/> <mx:Spacer width="100%"/> - <mx:Button label="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.label')}" id="selectBtn" - toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.toolTip')}" - click="selectFile()" styleName="presentationUploadChooseFileButtonStyle"/> - <mx:Spacer width="5"/> </mx:HBox> <mx:Spacer height="5"/> <mx:HBox width="100%"> <mx:Spacer width="5"/> <mx:TextInput id="fileTxtInput" width="328" editable="false"/> + <mx:Button label="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.label')}" id="selectBtn" + toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.toolTip')}" + click="selectFile()" styleName="presentationUploadChooseFileButtonStyle"/> <mx:Button id="uploadBtn" label="{ResourceUtil.getInstance().getString('bbb.fileupload.uploadBtn')}" toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.uploadBtn.toolTip')}" click="startUpload()" enabled="false" icon="{bulletGoIcon}"/>