diff --git a/bigbluebutton-html5/imports/api/presentations/server/publishers.js b/bigbluebutton-html5/imports/api/presentations/server/publishers.js old mode 100644 new mode 100755 index cd6be803fdd53ced02ccdcd6c9b382df88202d40..db65fb887f01aede1f1023021353f448029441db --- a/bigbluebutton-html5/imports/api/presentations/server/publishers.js +++ b/bigbluebutton-html5/imports/api/presentations/server/publishers.js @@ -7,7 +7,8 @@ import { isAllowedTo } from '/imports/startup/server/userPermissions'; Meteor.publish('presentations', (credentials) => { // TODO: Some publishers have ACL and others dont // if (!isAllowedTo('@@@', credentials)) { - // this.error(new Meteor.Error(402, "The user was not authorized to subscribe for 'presentations'")); + // this.error(new Meteor.Error(402, + // "The user was not authorized to subscribe for 'presentations'")); // } const { meetingId, requesterUserId, requesterToken } = credentials; diff --git a/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js b/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js old mode 100644 new mode 100755 index c8ec4f666b81810aa15235c5b1e66eca0869d441..d366cce6f0952f64faf5abbe168fb768ed2d23db --- a/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js +++ b/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js @@ -28,7 +28,8 @@ export default function switchSlide(credentials, slideNumber) { }); if (!Presentation) { - throw new Meteor.Error('presentation-not-found', `You need a presentation to be able to switch slides`); + throw new Meteor.Error( + 'presentation-not-found', `You need a presentation to be able to switch slides`); } const Slide = Slides.findOne({ @@ -38,7 +39,8 @@ export default function switchSlide(credentials, slideNumber) { }); if (!Slide) { - throw new Meteor.Error('slide-not-found', `Slide number ${slideNumber} not found in the current presentation`); + throw new Meteor.Error( + 'slide-not-found', `Slide number ${slideNumber} not found in the current presentation`); } let payload = { diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/eventHandlers.js b/bigbluebutton-html5/imports/api/users/server/modifiers/eventHandlers.js index 89b3f7e8c68fce48a16b7e329c60e5603c1f689f..b23227ffdf4e5bbbcff6775049fc07036f929197 100755 --- a/bigbluebutton-html5/imports/api/users/server/modifiers/eventHandlers.js +++ b/bigbluebutton-html5/imports/api/users/server/modifiers/eventHandlers.js @@ -140,7 +140,7 @@ eventEmitter.on('user_emoji_status_message', function (arg) { 'user.set_emoji_time': setEmojiTime, 'user.emoji_status': emojiStatus, }, - }, (err, numUpdated) => logger.info(` Updating emoji numUpdated=${numUpdated}, err=${err}`)); + }, (err, numUpdated) => logger.info(`Updating emoji numUpdated=${numUpdated}, err=${err}`)); } return arg.callback(); diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/emoji-menu/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/emoji-menu/component.jsx index dae569c048623b403119ef9e8d784744a29dd463..dff610dba3d44dfa556f296e3a2091f588c2229a 100755 --- a/bigbluebutton-html5/imports/ui/components/actions-bar/emoji-menu/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/actions-bar/emoji-menu/component.jsx @@ -47,12 +47,6 @@ class EmojiMenu extends Component { </DropdownTrigger> <DropdownContent placement="top left"> <DropdownList> - <DropdownListItem - icon="time" - label={intl.formatMessage(intlMessages.awayLabel)} - description={intl.formatMessage(intlMessages.awayDesc)} - onClick={() => actions.setEmojiHandler('away')} - /> <DropdownListItem icon="hand" icon="raiseHand" diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/service.js b/bigbluebutton-html5/imports/ui/components/actions-bar/service.js index 61335496542dbdade735cbd08bbedc059080ff5f..147abd1af8a2d293b009488e62c68ffa8e945cbc 100755 --- a/bigbluebutton-html5/imports/ui/components/actions-bar/service.js +++ b/bigbluebutton-html5/imports/ui/components/actions-bar/service.js @@ -1,18 +1,18 @@ -import AuthSingleton from '/imports/ui/services/auth/index.js'; -import Users from '/imports/api/users'; - -let isUserPresenter = () => { - - // check if user is a presenter - let isPresenter = Users.findOne({ - userId: AuthSingleton.getCredentials().requesterUserId, - }).user.presenter; - - return { - isUserPresenter: isPresenter, - }; -}; - -export default { - isUserPresenter, -}; +import AuthSingleton from '/imports/ui/services/auth/index.js'; +import Users from '/imports/api/users'; + +let isUserPresenter = () => { + + // check if user is a presenter + let isPresenter = Users.findOne({ + userId: AuthSingleton.getCredentials().requesterUserId, + }).user.presenter; + + return { + isUserPresenter: isPresenter, + }; +}; + +export default { + isUserPresenter, +}; diff --git a/bigbluebutton-html5/imports/ui/components/chat/container.jsx b/bigbluebutton-html5/imports/ui/components/chat/container.jsx index bf2572594d4421f8d91f6641f00e02c7cffa38ed..8ab839d8c9b4af6638c590f2a8540316a86a36bd 100755 --- a/bigbluebutton-html5/imports/ui/components/chat/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/chat/container.jsx @@ -71,7 +71,7 @@ export default injectIntl(createContainer(({ params, intl }) => { id: id, text: intl.formatMessage(intlMessages.partnerDisconnected, { name: user.name }), time: time, - }], + },], time: time, sender: null, }; diff --git a/bigbluebutton-html5/imports/ui/components/icon/component.jsx b/bigbluebutton-html5/imports/ui/components/icon/component.jsx old mode 100644 new mode 100755 diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/settings-dropdown/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/settings-dropdown/component.jsx index 8891f6814fbcb2ebba5c1326e9c6b8fd54af029b..80c37a67da74dd790490f7173bebd9ab79671a73 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/settings-dropdown/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/settings-dropdown/component.jsx @@ -93,7 +93,7 @@ const toggleFullScreen = () => { const openSettings = () => showModal(<SettingsMenuContainer />); -const openAbout = () => showModal(<AboutContainer /> ); +const openAbout = () => showModal(<AboutContainer />); const openLogoutConfirmation = () => showModal(<LogoutConfirmation />); diff --git a/bigbluebutton-html5/imports/ui/components/settings/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/component.jsx index 21b7b66f0ebfc7c6f2c381e91af7bd0b5a156741..15c702a75f5b4c8c0de458981de4e08df45dbfa1 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/component.jsx @@ -19,7 +19,6 @@ export default class Settings extends React.Component { renderSettingOptions() { const { isPresenter, role } = this.props; - this.submenus = []; this.submenus.push( { componentName: AudioMenu, tabIndex: 3, diff --git a/bigbluebutton-html5/imports/ui/components/settings/container.jsx b/bigbluebutton-html5/imports/ui/components/settings/container.jsx index 8b847f94582fea2ee62f4b7be2d9e61ba8ff61fd..3249333a28e33027d3889b391a83912c5e321126 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/container.jsx @@ -1,24 +1,24 @@ -import React, { Component, PropTypes } from 'react'; -import { createContainer } from 'meteor/react-meteor-data'; - -import Settings from './component'; -import Service from './service'; - -class SettingsMenuContainer extends Component { - constructor(props) { - super(props); - } - - render() { - return ( - <Settings {...this.props}> - {this.props.children} - </Settings> - ); - } -} - -export default createContainer(() => { - let data = Service.checkUserRoles(); - return data; -}, SettingsMenuContainer); +import React, { Component, PropTypes } from 'react'; +import { createContainer } from 'meteor/react-meteor-data'; + +import Settings from './component'; +import Service from './service'; + +class SettingsMenuContainer extends Component { + constructor(props) { + super(props); + } + + render() { + return ( + <Settings {...this.props}> + {this.props.children} + </Settings> + ); + } +} + +export default createContainer(() => { + let data = Service.checkUserRoles(); + return data; +}, SettingsMenuContainer); diff --git a/bigbluebutton-html5/imports/ui/components/settings/service.js b/bigbluebutton-html5/imports/ui/components/settings/service.js index e53217bb0d2577585e39b89a61a4a30877f5ad0e..401c0464f6f105d86e3d68bfccd68a53f115f895 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/service.js +++ b/bigbluebutton-html5/imports/ui/components/settings/service.js @@ -1,17 +1,17 @@ -import Users from '/imports/api/users'; -import AuthSingleton from '/imports/ui/services/auth/index.js'; - -checkUserRoles = () => { - const user = Users.findOne({ - userId: AuthSingleton.getCredentials().requesterUserId, - }).user; - - return { - isPresenter: user.presenter, - role: user.role, - }; -}; - -export default { - checkUserRoles, -}; +import Users from '/imports/api/users'; +import AuthSingleton from '/imports/ui/services/auth/index.js'; + +checkUserRoles = () => { + const user = Users.findOne({ + userId: AuthSingleton.getCredentials().requesterUserId, + }).user; + + return { + isPresenter: user.presenter, + role: user.role, + }; +}; + +export default { + checkUserRoles, +}; diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/audio/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/audio/component.jsx index 91c5d14ef6a64b1a6c27c6eee4c94cf915581ace..a2edd817a3c31e5e50a28cffc4b462a4f58092c1 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/audio/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/audio/component.jsx @@ -14,7 +14,7 @@ export default class AudioMenu extends BaseMenu { this.state = { inputDeviceId: undefined, - } + }; } chooseAudio() { @@ -24,7 +24,7 @@ export default class AudioMenu extends BaseMenu { handleInputChange(deviceId) { console.log(`INPUT DEVICE CHANGED: ${deviceId}`); this.setState({ - inputDeviceId: deviceId + inputDeviceId: deviceId, }); } diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/component.jsx index 80b9b4ef3ef32388cd9236a704c4006af01558a6..6bcaaa9e89ee2bf346956d53210cd66e4412157b 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/component.jsx @@ -1,15 +1,15 @@ -import React from 'react'; -import BaseMenu from '../base/component'; -import ParticipantsMenuContainer from './participants/container'; - -export default class UsersMenu extends BaseMenu { - constructor(props) { - super(props); - } - - render() { - return ( - <ParticipantsMenuContainer /> - ); - } -}; +import React from 'react'; +import BaseMenu from '../base/component'; +import ParticipantsMenuContainer from './participants/container'; + +export default class UsersMenu extends BaseMenu { + constructor(props) { + super(props); + } + + render() { + return ( + <ParticipantsMenuContainer /> + ); + } +}; diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/component.jsx index 83f03bdb37f5f6f0d12a3de6b904c8aa0ff725e4..1832fcd112f74bb21e4a22cc1ed9ced4f92d2a8c 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/component.jsx @@ -1,115 +1,115 @@ -import React from 'react'; -import Modal from 'react-modal'; -import Icon from '/imports/ui/components/icon/component'; -import Button from '/imports/ui/components/button/component'; -import styles from '../../styles.scss'; -import Service from './service'; - -const ROLE_MODERATOR = 'moderator'; - -const LOCK_OPTIONS = { - MUTE_ALL: { - label: 'Mute all except the presenter', - ariaLabelledBy: 'muteALlLabel', - ariaDescribedBy: 'muteAllDesc', - ariaLabel: 'Mute all', - ariaDesc: 'Mutes all participants except the presenter.', - tabIndex: 7, - }, - LOCK_ALL: { - label: 'Lock all participants', - ariaLabelledBy: 'lockAllLabel', - ariaDescribedBy: 'lockAllDesc', - ariaLabel: 'Lock all', - ariaDesc: 'Toggles locked status for all participants.', - tabIndex: 8, - }, - WEBCAM_LOCK: { - label: 'Webcam', - ariaLabelledBy: 'webcamLabel', - ariaDescribedBy: 'webcamDesc', - ariaLabel: 'Webcam lock', - ariaDesc: 'Disables the webcam for all locked participants.', - tabIndex: 9, - }, - MIC_LOCK: { - label: 'Microphone', - ariaLabelledBy: 'micLabel', - ariaDescribedBy: 'micDesc', - ariaLabel: 'Microphone lock', - ariaDesc: 'Disables the microphone for all locked participants.', - tabIndex: 10, - }, - PUBLIC_CHAT_LOCK: { - label: 'Public chat', - ariaLabelledBy: 'pubChatLabel', - ariaDescribedBy: 'pubChatDesc', - ariaLabel: 'Public chat lock', - ariaDesc: 'Disables public chat for all locked participants.', - tabIndex: 11, - }, - PRIVATE_CHAT_LOCK: { - label: 'Private chat', - ariaLabelledBy: 'privChatLabel', - ariaDescribedBy: 'privChatDesc', - ariaLabel: 'Private chat lock', - ariaDesc: 'Disables private chat for all locked participants.', - tabIndex: 12, - }, -}; - -export default class ParticipantsMenu extends React.Component { - constructor(props) { - super(props); - } - - renderLockItem(lockOption) { - return ( - <div className={styles.row} role='presentation' key={lockOption.label} > - <label> - <input - className={styles.checkboxOffset} - type="checkbox" - tabIndex={lockOption.tabIndex} - aria-labelledby={lockOption.ariaLabelledBy} - aria-describedby={lockOption.ariaDescribedBy} /> - {lockOption.label} - </label> - <div id={lockOption.ariaLabelledBy} hidden>{lockOption.ariaLabel}</div> - <div id={lockOption.ariaDescribedBy} hidden>{lockOption.ariaDesc}</div> - </div> - ); - } - - renderLockOptions () { - - const { isPresenter, role } = this.props; - - let roleBasedOptions = []; - - if (isPresenter || role === ROLE_MODERATOR) { - roleBasedOptions.push( - this.renderLockItem(LOCK_OPTIONS.LOCK_ALL), - this.renderLockItem(LOCK_OPTIONS.WEBCAM_LOCK), - this.renderLockItem(LOCK_OPTIONS.MIC_LOCK), - this.renderLockItem(LOCK_OPTIONS.PUBLIC_CHAT_LOCK), - this.renderLockItem(LOCK_OPTIONS.PRIVATE_CHAT_LOCK), - ); - } - - return _.compact([ - this.renderLockItem(LOCK_OPTIONS.MUTE_ALL), - ...roleBasedOptions, - ]); - } - - render () { - - return ( - <div> - {this.renderLockOptions()} - </div> - ); - } - -}; +import React from 'react'; +import Modal from 'react-modal'; +import Icon from '/imports/ui/components/icon/component'; +import Button from '/imports/ui/components/button/component'; +import styles from '../../styles.scss'; +import Service from './service'; + +const ROLE_MODERATOR = 'moderator'; + +const LOCK_OPTIONS = { + MUTE_ALL: { + label: 'Mute all except the presenter', + ariaLabelledBy: 'muteALlLabel', + ariaDescribedBy: 'muteAllDesc', + ariaLabel: 'Mute all', + ariaDesc: 'Mutes all participants except the presenter.', + tabIndex: 7, + }, + LOCK_ALL: { + label: 'Lock all participants', + ariaLabelledBy: 'lockAllLabel', + ariaDescribedBy: 'lockAllDesc', + ariaLabel: 'Lock all', + ariaDesc: 'Toggles locked status for all participants.', + tabIndex: 8, + }, + WEBCAM_LOCK: { + label: 'Webcam', + ariaLabelledBy: 'webcamLabel', + ariaDescribedBy: 'webcamDesc', + ariaLabel: 'Webcam lock', + ariaDesc: 'Disables the webcam for all locked participants.', + tabIndex: 9, + }, + MIC_LOCK: { + label: 'Microphone', + ariaLabelledBy: 'micLabel', + ariaDescribedBy: 'micDesc', + ariaLabel: 'Microphone lock', + ariaDesc: 'Disables the microphone for all locked participants.', + tabIndex: 10, + }, + PUBLIC_CHAT_LOCK: { + label: 'Public chat', + ariaLabelledBy: 'pubChatLabel', + ariaDescribedBy: 'pubChatDesc', + ariaLabel: 'Public chat lock', + ariaDesc: 'Disables public chat for all locked participants.', + tabIndex: 11, + }, + PRIVATE_CHAT_LOCK: { + label: 'Private chat', + ariaLabelledBy: 'privChatLabel', + ariaDescribedBy: 'privChatDesc', + ariaLabel: 'Private chat lock', + ariaDesc: 'Disables private chat for all locked participants.', + tabIndex: 12, + }, +}; + +export default class ParticipantsMenu extends React.Component { + constructor(props) { + super(props); + } + + renderLockItem(lockOption) { + return ( + <div className={styles.row} role='presentation' key={lockOption.label} > + <label> + <input + className={styles.checkboxOffset} + type="checkbox" + tabIndex={lockOption.tabIndex} + aria-labelledby={lockOption.ariaLabelledBy} + aria-describedby={lockOption.ariaDescribedBy} /> + {lockOption.label} + </label> + <div id={lockOption.ariaLabelledBy} hidden>{lockOption.ariaLabel}</div> + <div id={lockOption.ariaDescribedBy} hidden>{lockOption.ariaDesc}</div> + </div> + ); + } + + renderLockOptions () { + + const { isPresenter, role } = this.props; + + let roleBasedOptions = []; + + if (isPresenter || role === ROLE_MODERATOR) { + roleBasedOptions.push( + this.renderLockItem(LOCK_OPTIONS.LOCK_ALL), + this.renderLockItem(LOCK_OPTIONS.WEBCAM_LOCK), + this.renderLockItem(LOCK_OPTIONS.MIC_LOCK), + this.renderLockItem(LOCK_OPTIONS.PUBLIC_CHAT_LOCK), + this.renderLockItem(LOCK_OPTIONS.PRIVATE_CHAT_LOCK), + ); + } + + return _.compact([ + this.renderLockItem(LOCK_OPTIONS.MUTE_ALL), + ...roleBasedOptions, + ]); + } + + render () { + + return ( + <div> + {this.renderLockOptions()} + </div> + ); + } + +}; diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/container.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/container.jsx index 606fb82b57253b11211d34553416b8d7dd85aa81..665b3bab0f7808bc095286a726d9b1519545368f 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/container.jsx @@ -1,24 +1,24 @@ -import React, { Component, PropTypes } from 'react'; -import { createContainer } from 'meteor/react-meteor-data'; - -import ParticipantsMenu from './component'; -import Service from './service'; - -class ParticipantsMenuContainer extends Component { - constructor(props) { - super(props); - } - - render() { - return ( - <ParticipantsMenu {...this.props}> - {this.props.children} - </ParticipantsMenu> - ); - } -} - -export default createContainer(() => { - let data = Service.checkUserRoles(); - return data; -}, ParticipantsMenuContainer); +import React, { Component, PropTypes } from 'react'; +import { createContainer } from 'meteor/react-meteor-data'; + +import ParticipantsMenu from './component'; +import Service from './service'; + +class ParticipantsMenuContainer extends Component { + constructor(props) { + super(props); + } + + render() { + return ( + <ParticipantsMenu {...this.props}> + {this.props.children} + </ParticipantsMenu> + ); + } +} + +export default createContainer(() => { + let data = Service.checkUserRoles(); + return data; +}, ParticipantsMenuContainer); diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/service.js b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/service.js index e53217bb0d2577585e39b89a61a4a30877f5ad0e..401c0464f6f105d86e3d68bfccd68a53f115f895 100755 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/service.js +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/users/participants/service.js @@ -1,17 +1,17 @@ -import Users from '/imports/api/users'; -import AuthSingleton from '/imports/ui/services/auth/index.js'; - -checkUserRoles = () => { - const user = Users.findOne({ - userId: AuthSingleton.getCredentials().requesterUserId, - }).user; - - return { - isPresenter: user.presenter, - role: user.role, - }; -}; - -export default { - checkUserRoles, -}; +import Users from '/imports/api/users'; +import AuthSingleton from '/imports/ui/services/auth/index.js'; + +checkUserRoles = () => { + const user = Users.findOne({ + userId: AuthSingleton.getCredentials().requesterUserId, + }).user; + + return { + isPresenter: user.presenter, + role: user.role, + }; +}; + +export default { + checkUserRoles, +}; diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-item/component.jsx index 017f7768f19f91be9ab1ed2ac877b6bb8f202354..16c7d10014bf6877b9b79910c8da1d9c706b3d76 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-item/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-item/component.jsx @@ -290,7 +290,7 @@ class UserListItem extends Component { { audioChatIcon ? <span className={cx(audioIconClassnames)}> - <Icon iconName={audioChatIcon}/> + <Icon iconName={audioChatIcon}/> </span> : null } diff --git a/bigbluebutton-html5/imports/utils/statuses.js b/bigbluebutton-html5/imports/utils/statuses.js index 15d060cbf7c523decdc99bcc5f541f349e88c9c0..a62ca1f0eecae0a098b4f85390b81dba87d9b3b3 100755 --- a/bigbluebutton-html5/imports/utils/statuses.js +++ b/bigbluebutton-html5/imports/utils/statuses.js @@ -1,3 +1,4 @@ -const EMOJI_STATUSES = ['away', 'raiseHand', 'neutral', 'confused', 'sad', 'happy']; +const EMOJI_STATUSES = ['away', 'raiseHand', 'neutral', 'confused', 'sad', + 'happy', 'applause', 'thumbsUp', 'thumbsDown']; export { EMOJI_STATUSES };