- put lock setting out of Conference

This commit is contained in:
Richard Alam 2017-06-16 10:08:31 -07:00
parent 2ce9b95775
commit d8bc6fc2db
17 changed files with 196 additions and 186 deletions

View File

@ -5,7 +5,12 @@ gradle clean
gradle resolveDeps
gradle war deploy
sudo chown -R red5.red5 /usr/share/red5/webapps
# Remove slf4j jar as it conflicts with logging with red5
sudo rm /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/slf4j-api-1.7.23.jar
FILE=/usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/slf4j-api-1.7.23.jar
if [ -f $FILE ]
then
sudo rm $FILE
fi

View File

@ -26,8 +26,10 @@ package org.bigbluebutton.core
import org.bigbluebutton.core.managers.UserManager;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.core.vo.CameraSettingsVO;
import org.bigbluebutton.core.vo.LockSettingsVO;
import org.bigbluebutton.main.model.options.LockOptions;
import org.bigbluebutton.main.model.users.BBBUser;
import org.bigbluebutton.util.SessionTokenUtil;
import org.bigbluebutton.util.SessionTokenUtil;
public class UsersUtil
{
@ -73,16 +75,16 @@ package org.bigbluebutton.core
return LiveMeeting.inst().meeting.recorded;
}
public static function amIPublishing():ArrayCollection {
return UserManager.getInstance().getConference().amIPublishing() as ArrayCollection;
public static function myCamSettings():ArrayCollection {
return LiveMeeting.inst().myStatus.myCamSettings() as ArrayCollection;
}
public static function addCameraSettings(camSettings:CameraSettingsVO):void {
UserManager.getInstance().getConference().addCameraSettings(camSettings);
LiveMeeting.inst().myStatus.addCameraSettings(camSettings);
}
public static function removeCameraSettings(camIndex:int):void {
UserManager.getInstance().getConference().removeCameraSettings(camIndex);
LiveMeeting.inst().myStatus.removeCameraSettings(camIndex);
}
public static function hasWebcamStream(userID:String):Boolean {
@ -103,6 +105,14 @@ package org.bigbluebutton.core
return null;
}
public static function setDefaultLayout(defaultLayout:String):void {
LiveMeeting.inst().meeting.defaultLayout = defaultLayout;
}
public static function getDefaultLayout():String {
return LiveMeeting.inst().meeting.defaultLayout;
}
public static function getUserIDs():ArrayCollection {
return UserManager.getInstance().getConference().getUserIDs();
}
@ -287,5 +297,28 @@ package org.bigbluebutton.core
myUser.applyLockSettings();
}
/**
* Read default lock settings from config.xml
* */
public static function configLockSettings():void {
var lockOptions:LockOptions = Options.getOptions(LockOptions) as LockOptions;
var lockSettings:LockSettingsVO = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic,
lockOptions.disablePrivateChat, lockOptions.disablePublicChat,
lockOptions.lockedLayout, lockOptions.lockOnJoin,
lockOptions.lockOnJoinConfigurable);
setLockSettings(lockSettings);
}
public static function getLockSettings():LockSettingsVO {
return LiveMeeting.inst().meetingStatus.lockSettings;
}
public static function setLockSettings(lockSettings:LockSettingsVO):void {
LiveMeeting.inst().meetingStatus.lockSettings = lockSettings;
UsersUtil.applyLockSettings();
UserManager.getInstance().getConference().refreshUsers(); // we need to refresh after updating the lock settings to trigger the user item renderers to redraw
}
}
}

View File

@ -18,6 +18,9 @@
*/
package org.bigbluebutton.core.model
{
import mx.collections.ArrayCollection;
import org.bigbluebutton.core.vo.CameraSettingsVO;
public class MyStatus {
@ -41,6 +44,29 @@ package org.bigbluebutton.core.model
public var isPresenter: Boolean = false;
public var myEmojiStatus: String = "none";
private var _myCamSettings:ArrayCollection = new ArrayCollection();
public function addCameraSettings(camSettings: CameraSettingsVO): void {
if(!_myCamSettings.contains(camSettings)) {
_myCamSettings.addItem(camSettings);
}
}
public function removeCameraSettings(camIndex:int): void {
if (camIndex != -1) {
for(var i:int = 0; i < _myCamSettings.length; i++) {
if (_myCamSettings.getItemAt(i) != null && _myCamSettings.getItemAt(i).camIndex == camIndex) {
_myCamSettings.removeItemAt(i);
return;
}
}
}
}
public function myCamSettings():ArrayCollection {
return _myCamSettings;
}
}
}

View File

@ -18,77 +18,77 @@
*/
package org.bigbluebutton.core.vo
{
public class LockSettingsVO
{
private var lockOnJoinConfigurable:Boolean;
private var disableCam:Boolean;
private var disableMic:Boolean;
private var disablePrivateChat:Boolean;
private var disablePublicChat:Boolean;
private var lockedLayout:Boolean;
private var lockOnJoin:Boolean;
public function LockSettingsVO(pDisableCam:Boolean,
pDisableMic:Boolean,
pDisablePrivateChat:Boolean,
pDisablePublicChat:Boolean,
pLockLayout: Boolean,
pLockOnJoin:Boolean,
pLockOnJoinConfigurable:Boolean)
{
this.disableCam = pDisableCam;
this.disableMic = pDisableMic;
this.disablePrivateChat = pDisablePrivateChat;
this.disablePublicChat = pDisablePublicChat;
this.lockedLayout = pLockLayout;
this.lockOnJoin = pLockOnJoin;
this.lockOnJoinConfigurable = pLockOnJoinConfigurable;
}
public function toMap():Object {
var map:Object = {
disableCam: this.disableCam,
disableMic: this.disableMic,
disablePrivateChat: this.disablePrivateChat,
disablePublicChat: this.disablePublicChat,
lockedLayout: this.lockedLayout,
lockOnJoin: this.lockOnJoin,
lockOnJoinConfigurable: this.lockOnJoinConfigurable
};
return map;
}
public function getDisableCam():Boolean {
return disableCam;
}
public function getDisableMic():Boolean {
return disableMic;
}
public function getDisablePrivateChat():Boolean {
return disablePrivateChat;
}
public function getDisablePublicChat():Boolean {
return disablePublicChat;
}
public function getLockedLayout():Boolean {
return lockedLayout;
}
public function getLockOnJoin():Boolean {
return lockOnJoin;
}
public function getLockOnJoinConfigurable():Boolean {
return lockOnJoinConfigurable;
}
public function isAnythingLocked():Boolean {
return ( lockedLayout || disableCam || disableMic || disablePrivateChat || disablePublicChat );
}
}
public class LockSettingsVO
{
private var lockOnJoinConfigurable:Boolean = true;
private var disableCam:Boolean = false;
private var disableMic:Boolean = false;
private var disablePrivateChat:Boolean = false;
private var disablePublicChat:Boolean = false;
private var lockedLayout:Boolean = false;
private var lockOnJoin:Boolean = false;
public function LockSettingsVO(pDisableCam:Boolean,
pDisableMic:Boolean,
pDisablePrivateChat:Boolean,
pDisablePublicChat:Boolean,
pLockLayout: Boolean,
pLockOnJoin:Boolean,
pLockOnJoinConfigurable:Boolean)
{
this.disableCam = pDisableCam;
this.disableMic = pDisableMic;
this.disablePrivateChat = pDisablePrivateChat;
this.disablePublicChat = pDisablePublicChat;
this.lockedLayout = pLockLayout;
this.lockOnJoin = pLockOnJoin;
this.lockOnJoinConfigurable = pLockOnJoinConfigurable;
}
public function toMap():Object {
var map:Object = {
disableCam: this.disableCam,
disableMic: this.disableMic,
disablePrivateChat: this.disablePrivateChat,
disablePublicChat: this.disablePublicChat,
lockedLayout: this.lockedLayout,
lockOnJoin: this.lockOnJoin,
lockOnJoinConfigurable: this.lockOnJoinConfigurable
};
return map;
}
public function getDisableCam():Boolean {
return disableCam;
}
public function getDisableMic():Boolean {
return disableMic;
}
public function getDisablePrivateChat():Boolean {
return disablePrivateChat;
}
public function getDisablePublicChat():Boolean {
return disablePublicChat;
}
public function getLockedLayout():Boolean {
return lockedLayout;
}
public function getLockOnJoin():Boolean {
return lockOnJoin;
}
public function getLockOnJoinConfigurable():Boolean {
return lockOnJoinConfigurable;
}
public function isAnythingLocked():Boolean {
return ( lockedLayout || disableCam || disableMic || disablePrivateChat || disablePublicChat );
}
}
}

View File

@ -192,7 +192,7 @@ package org.bigbluebutton.main.api
var obj:Object = new Object();
var camArray: ArrayCollection = new ArrayCollection();
var camSettingsArray:ArrayCollection = UsersUtil.amIPublishing();
var camSettingsArray:ArrayCollection = UsersUtil.myCamSettings();
for (var i:int = 0; i < camSettingsArray.length; i++) {
var camSettings:CameraSettingsVO = camSettingsArray.getItemAt(i) as CameraSettingsVO;
var cam:Object = new Object();

View File

@ -161,7 +161,7 @@ package org.bigbluebutton.main.api
}
public function handleAmISharingCamQueryEvent(event:AmISharingWebcamQueryEvent):void {
var camSettingsArray:ArrayCollection = UsersUtil.amIPublishing();
var camSettingsArray:ArrayCollection = UsersUtil.myCamSettings();
var payload:Object = new Object();
var camArray: ArrayCollection = new ArrayCollection();
for (var i:int = 0; i < camSettingsArray.length; i++) {

View File

@ -1,33 +1,33 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3.0 of the License, or (at your option) any later
* version.
*
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
*
*/
package org.bigbluebutton.main.model
{
public class User
{
public var room:String;
public var conference:String;
public var userid:String;
public var externUserID:String;
public var name:String;
public var role:String;
public var isPresenter:Boolean;
public var authToken:String;
public var guest:Boolean;
}
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3.0 of the License, or (at your option) any later
* version.
*
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
*
*/
package org.bigbluebutton.main.model
{
public class User
{
public var room:String;
public var conference:String;
public var userid:String;
public var externUserID:String;
public var name:String;
public var role:String;
public var isPresenter:Boolean;
public var authToken:String;
public var guest:Boolean;
}
}

View File

@ -402,7 +402,7 @@ package org.bigbluebutton.main.model.users
}
public function applyLockSettings():void {
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
var lockSettings:LockSettingsVO = UsersUtil.getLockSettings();
var amNotModerator:Boolean = !UsersUtil.amIModerator();
var amNotPresenter:Boolean = !UsersUtil.amIPresenter();
var lockAppliesToMe:Boolean = me && amNotModerator && amNotPresenter && userLocked;

View File

@ -32,7 +32,6 @@ package org.bigbluebutton.main.model.users {
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.core.vo.CameraSettingsVO;
import org.bigbluebutton.core.vo.LockSettingsVO;
import org.bigbluebutton.main.events.BreakoutRoomEvent;
import org.bigbluebutton.main.model.options.LockOptions;
@ -44,10 +43,6 @@ package org.bigbluebutton.main.model.users {
private static const LOGGER:ILogger = getClassLogger(Conference);
private var lockSettings:LockSettingsVO;
private var _myCamSettings:ArrayCollection = null;
[Bindable]
public var users:ArrayCollection = null;
@ -59,8 +54,6 @@ package org.bigbluebutton.main.model.users {
private var sort:Sort;
private var defaultLayout:String;
public function Conference():void {
users = new ArrayCollection();
sort = new Sort();
@ -68,7 +61,7 @@ package org.bigbluebutton.main.model.users {
users.sort = sort;
users.refresh();
breakoutRooms = new ArrayCollection();
_myCamSettings = new ArrayCollection();
}
// Custom sort function for the users ArrayCollection. Need to put dial-in users at the very bottom.
@ -132,34 +125,7 @@ package org.bigbluebutton.main.model.users {
users.refresh();
}
public function addCameraSettings(camSettings: CameraSettingsVO): void {
if(!_myCamSettings.contains(camSettings)) {
_myCamSettings.addItem(camSettings);
}
}
public function removeCameraSettings(camIndex:int): void {
if (camIndex != -1) {
for(var i:int = 0; i < _myCamSettings.length; i++) {
if (_myCamSettings.getItemAt(i) != null && _myCamSettings.getItemAt(i).camIndex == camIndex) {
_myCamSettings.removeItemAt(i);
return;
}
}
}
}
public function amIPublishing():ArrayCollection {
return _myCamSettings;
}
public function setDefaultLayout(defaultLayout:String):void {
this.defaultLayout = defaultLayout;
}
public function getDefaultLayout():String {
return defaultLayout;
}
public function hasUser(userID:String):Boolean {
var p:Object = getUserIndex(userID);
@ -389,18 +355,7 @@ package org.bigbluebutton.main.model.users {
return uids;
}
/**
* Read default lock settings from config.xml
* */
public function configLockSettings():void {
var lockOptions:LockOptions = Options.getOptions(LockOptions) as LockOptions;
lockSettings = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic,
lockOptions.disablePrivateChat, lockOptions.disablePublicChat,
lockOptions.lockedLayout, lockOptions.lockOnJoin,
lockOptions.lockOnJoinConfigurable);
setLockSettings(lockSettings);
}
public function getMyUser():BBBUser {
var eachUser:BBBUser;
for (var i:int = 0; i < users.length; i++) {
@ -411,14 +366,8 @@ package org.bigbluebutton.main.model.users {
}
return null;
}
public function getLockSettings():LockSettingsVO {
return lockSettings;
}
public function setLockSettings(lockSettings:LockSettingsVO):void {
this.lockSettings = lockSettings;
UsersUtil.applyLockSettings();
public function refreshUsers():void {
users.refresh(); // we need to refresh after updating the lock settings to trigger the user item renderers to redraw
}

View File

@ -101,8 +101,6 @@ package org.bigbluebutton.main.model.users
if (success) {
var meetingOptions : MeetingOptions = Options.getOptions(MeetingOptions) as MeetingOptions;
LiveMeeting.inst().meetingStatus.lockSettings = UserManager.getInstance().getConference().getLockSettings();
LiveMeeting.inst().me.id = result.intUserId
LiveMeeting.inst().me.name = result.username;
LiveMeeting.inst().me.externalId = result.extUserId;

View File

@ -222,7 +222,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
updateCopyrightText();
loadBackground();
UserManager.getInstance().getConference().configLockSettings();
UsersUtil.configLockSettings();
showToolbarOpt = layoutOptions.showToolbar;
if (!showToolbarOpt) {
toolbarHeight = 0;
@ -926,8 +926,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function openLockSettingsWindow(event:LockControlEvent):void {
var conference:Conference = UserManager.getInstance().getConference();
var lsv:LockSettingsVO = conference.getLockSettings();
var lsv:LockSettingsVO = UsersUtil.getLockSettings();
var popUp:IFlexDisplayObject = PopUpUtil.createModalPopUp(mdiCanvas, LockSettings, false);
if (popUp) {

View File

@ -268,7 +268,7 @@ package org.bigbluebutton.modules.layout.managers
var layoutOptions:LayoutOptions = Options.getOptions(LayoutOptions) as LayoutOptions;
var defaultLayout:LayoutDefinition = _layoutModel.getLayout(layoutOptions.defaultLayout);
var sessionDefaulLayout:String = UserManager.getInstance().getConference().getDefaultLayout();
var sessionDefaulLayout:String = UsersUtil.getDefaultLayout();
if (sessionDefaulLayout != "NOLAYOUT") {
var sesLayout:LayoutDefinition = _layoutModel.getLayout(sessionDefaulLayout);

View File

@ -39,9 +39,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<fx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import mx.collections.ArrayCollection;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.common.events.LocaleChangeEvent;
@ -130,7 +130,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
public function refreshRole(amIModerator:Boolean):void {
var layoutLocked:Boolean = UserManager.getInstance().getConference().getLockSettings().getLockedLayout();
var layoutLocked:Boolean = UsersUtil.getLockSettings().getLockedLayout();
this.enabled = amIModerator || !layoutLocked;
}
]]>

View File

@ -238,7 +238,7 @@ package org.bigbluebutton.modules.users.services
map.lockedLayout,
map.lockOnJoin,
map.lockOnJoinConfigurable);
UserManager.getInstance().getConference().setLockSettings(lockSettings);
UsersUtil.setLockSettings(lockSettings);
}
private function sendRecordingStatusUpdate(recording:Boolean):void {
@ -293,7 +293,7 @@ package org.bigbluebutton.modules.users.services
var lockSettings:LockSettingsVO = new LockSettingsVO(perm.disableCam, perm.disableMic,
perm.disablePrivateChat, perm.disablePublicChat, perm.lockedLayout, perm.lockOnJoin, perm.lockOnJoinConfigurable);
UserManager.getInstance().getConference().setLockSettings(lockSettings);
UsersUtil.setLockSettings(lockSettings);
LiveMeeting.inst().meetingStatus.isMeetingMuted = map.meetingMuted;
UsersUtil.applyLockSettings();
@ -452,7 +452,7 @@ package org.bigbluebutton.modules.users.services
bbbEvent.payload.userID = bu.userID;
globalDispatcher.dispatchEvent(bbbEvent);
if (_conference.getLockSettings().getDisableMic() && !bu.voiceMuted && bu.userLocked && bu.me) {
if (UsersUtil.getLockSettings().getDisableMic() && !bu.voiceMuted && bu.userLocked && bu.me) {
var ev:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
ev.userid = voiceUser.userId;
ev.mute = true;

View File

@ -179,7 +179,7 @@
// reset the mute image filter so the talking indicator doesn't stick
muteImg.filters = null;
var ls:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
var ls:LockSettingsVO = UsersUtil.getLockSettings();
if (data != null) {
settingsBtn.visible = rolledOver && !data.me && !UsersUtil.isBreakout();

View File

@ -176,7 +176,7 @@
resourcesChanged();
roomMuted = LiveMeeting.inst().meetingStatus.isMeetingMuted;
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
var lockSettings:LockSettingsVO = UsersUtil.getLockSettings();
roomLocked = lockSettings.isAnythingLocked() && ( lockSettings.getLockOnJoin() || UsersUtil.isAnyoneLocked());
titleBarOverlay.tabIndex = partOptions.baseTabIndex;
@ -329,7 +329,7 @@
}
private function handleChangedLockSettingsEvent(e:LockControlEvent):void {
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
var lockSettings:LockSettingsVO = UsersUtil.getLockSettings();
roomLocked = lockSettings.isAnythingLocked() && (lockSettings.getLockOnJoin() || UsersUtil.isAnyoneLocked());
}

View File

@ -309,7 +309,7 @@ package org.bigbluebutton.modules.videoconf.maps
_isWaitingActivation = false;
var arr: ArrayCollection = UsersUtil.amIPublishing();
var arr: ArrayCollection = UsersUtil.myCamSettings();
for (var i:int = 0; i < arr.length; i++) {
var broadcastEvent:BroadcastStartedEvent = new BroadcastStartedEvent();
streamList.addItem(e.stream);