diff --git a/bigbluebutton-client/branding/default/style/css/V2Theme.css b/bigbluebutton-client/branding/default/style/css/V2Theme.css index 314a9db970b168379cb30977e5e5395956fea7e9..557b1e7c8bc1734c651c6e69e531a6bcb28c9992 100755 --- a/bigbluebutton-client/branding/default/style/css/V2Theme.css +++ b/bigbluebutton-client/branding/default/style/css/V2Theme.css @@ -1792,6 +1792,7 @@ users|UsersWindow { iconSettings : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Settings"); iconClearStatus : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_ClearStatus"); iconRooms : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Rooms"); + iconSaveNames : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Save"); horizontalAlign : center; } diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 0651c28fd2b9b8aaedfe16a28fc3062a57c3e390..9dff7aba6a4556e851b345db49cecdfa64e5bf43 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -180,6 +180,9 @@ bbb.users.settings.muteAll = Mute All Users bbb.users.settings.muteAllExcept = Mute All Users Except Presenter bbb.users.settings.unmuteAll = Turn Off Meeting Mute bbb.users.settings.clearAllStatus = Clear all status icons +bbb.users.settings.userExport = Save User Names +bbb.users.userExport.complete = User names saved +bbb.users.userExport.error = Error saving user names bbb.users.emojiStatusBtn.toolTip = Update my status icon bbb.users.roomMuted.text = Users Muted bbb.users.roomLocked.text = Viewers Locked @@ -191,7 +194,7 @@ bbb.users.muteMeBtnTxt.muted = Muted bbb.users.waitingBtn.label = {0} users waiting bbb.users.guestPolicyBtn.label = Guest policy bbb.users.guestPolicyBtn.toolTip = Change guest policy -bbb.users.usersGrid.contextmenu.exportusers = Copy User Names +bbb.users.usersGrid.contextmenu.exportusers = Save User Names bbb.users.usersGrid.accessibilityName = Users List. Use the arrow keys to navigate. bbb.users.usersGrid.nameItemRenderer = Name bbb.users.usersGrid.nameItemRenderer.youIdentifier = you diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml index 6a45a3efbe79b708e25d1c308fd3571a7bf56182..1b7ecb8729215fe2d598c80114cc21e6b2c0c536 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml @@ -71,6 +71,7 @@ $Id: $ import mx.binding.utils.BindingUtils; import mx.collections.ArrayCollection; + import mx.controls.Alert; import mx.controls.Menu; import mx.controls.dataGridClasses.DataGridColumn; import mx.controls.listClasses.IListItemRenderer; @@ -329,13 +330,29 @@ $Id: $ private function exportUsersItemHandler(e:ContextMenuEvent):void { if (e.target.caption == ResourceUtil.getInstance().getString("bbb.users.usersGrid.contextmenu.exportusers")) { - var userNames:String = ""; - var returnStr:String = (Capabilities.os.indexOf("Windows") >= 0 ? "\r\n" : "\r"); - for (var i:int = 0; i < users.length; i++) { - userNames += users[i].name + returnStr; + exportUserNamesToFile(); + } + } + + private function exportUserNamesToFile():void { + var userNames:String = ""; + var returnStr:String = (Capabilities.os.indexOf("Windows") >= 0 ? "\r\n" : "\r"); + if (users.length > 0) { + userNames = users[0].name; + for (var i:int = 1; i < users.length; i++) { + userNames += returnStr + users[i].name; } - System.setClipboard(userNames); } + + var fileRef:FileReference = new FileReference(); + + fileRef.addEventListener(Event.COMPLETE, function(evt:Event):void { + Alert.show(ResourceUtil.getInstance().getString('bbb.users.userExport.complete'), "", Alert.OK); + }); + fileRef.addEventListener(IOErrorEvent.IO_ERROR, function(evt:Event):void { + Alert.show(ResourceUtil.getInstance().getString('bbb.users.userExport.error'), "", Alert.OK); + }); + fileRef.save(userNames, "roster.txt"); } private function updateNumberofUsers(numUsers:int):void { @@ -426,6 +443,8 @@ $Id: $ if (partOptions.enableGuestUI) { paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.guestSettings'), handler: guestSettings}); } + + paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.userExport'), icon: getStyle('iconSaveNames'), handler: exportUserNamesToFile}); // make sure the previous menu is closed before opening a new one // This could be improved to include a flag that tells if the menu is open,