/* Copyright 2015 OpenMarket Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ 'use strict'; var React = require('react'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); var sdk = require('matrix-react-sdk'); var RoomSettingsController = require('matrix-react-sdk/lib/controllers/molecules/RoomSettings') module.exports = React.createClass({ displayName: 'RoomSettings', mixins: [RoomSettingsController], getTopic: function() { return this.refs.topic.getDOMNode().value; }, getJoinRules: function() { return this.refs.is_private.getDOMNode().checked ? "invite" : "public"; }, getHistoryVisibility: function() { return this.refs.share_history.getDOMNode().checked ? "shared" : "invited"; }, getPowerLevels: function() { if (!this.state.power_levels_changed) return undefined; var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', ''); power_levels = power_levels.getContent(); var new_power_levels = { ban: parseInt(this.refs.ban.getDOMNode().value), kick: parseInt(this.refs.kick.getDOMNode().value), redact: parseInt(this.refs.redact.getDOMNode().value), invite: parseInt(this.refs.invite.getDOMNode().value), events_default: parseInt(this.refs.events_default.getDOMNode().value), state_default: parseInt(this.refs.state_default.getDOMNode().value), users_default: parseInt(this.refs.users_default.getDOMNode().value), users: power_levels.users, events: power_levels.events, }; return new_power_levels; }, onPowerLevelsChanged: function() { this.setState({ power_levels_changed: true }); }, render: function() { var ChangeAvatar = sdk.getComponent('molecules.ChangeAvatar'); var topic = this.props.room.currentState.getStateEvents('m.room.topic', ''); if (topic) topic = topic.getContent().topic; var join_rule = this.props.room.currentState.getStateEvents('m.room.join_rules', ''); if (join_rule) join_rule = join_rule.getContent().join_rule; var history_visibility = this.props.room.currentState.getStateEvents('m.room.history_visibility', ''); if (history_visibility) history_visibility = history_visibility.getContent().history_visibility; var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', ''); var events_levels = power_levels.events || {}; if (power_levels) { power_levels = power_levels.getContent(); var ban_level = parseInt(power_levels.ban); var kick_level = parseInt(power_levels.kick); var redact_level = parseInt(power_levels.redact); var invite_level = parseInt(power_levels.invite || 0); var send_level = parseInt(power_levels.events_default || 0); var state_level = parseInt(power_levels.state_default || 0); var default_user_level = parseInt(power_levels.users_default || 0); if (power_levels.ban == undefined) ban_level = 50; if (power_levels.kick == undefined) kick_level = 50; if (power_levels.redact == undefined) redact_level = 50; var user_levels = power_levels.users || {}; var user_id = MatrixClientPeg.get().credentials.userId; var current_user_level = user_levels[user_id]; if (current_user_level == undefined) current_user_level = default_user_level; var power_level_level = events_levels["m.room.power_levels"]; if (power_level_level == undefined) { power_level_level = state_level; } var can_change_levels = current_user_level >= power_level_level; } else { var ban_level = 50; var kick_level = 50; var redact_level = 50; var invite_level = 0; var send_level = 0; var state_level = 0; var default_user_level = 0; var user_levels = []; var events_levels = []; var current_user_level = 0; var power_level_level = 0; var can_change_levels = false; } var room_avatar_level = parseInt(power_levels.state_default || 0); if (events_levels['m.room.avatar'] !== undefined) { room_avatar_level = events_levels['m.room.avatar']; } var can_set_room_avatar = current_user_level >= room_avatar_level; var change_avatar; if (can_set_room_avatar) { change_avatar =