diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js index 79eac7b252..606603d451 100644 --- a/src/components/views/rooms/RoomHeader.js +++ b/src/components/views/rooms/RoomHeader.js @@ -151,20 +151,53 @@ module.exports = React.createClass({ var cancel_button = null; var save_button = null; var settings_button = null; - // var actual_name = this.props.room.currentState.getStateEvents('m.room.name', ''); - // if (actual_name) actual_name = actual_name.getContent().name; if (this.props.editing) { - // name = - //
- // - //
- // if (topic) topic_el =
+ + // calculate permissions. XXX: this should be done on mount or something, and factored out with RoomSettings + var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', ''); + var events_levels = power_levels.events || {}; + var user_id = MatrixClientPeg.get().credentials.userId; + + if (power_levels) { + power_levels = power_levels.getContent(); + var default_user_level = parseInt(power_levels.users_default || 0); + var user_levels = power_levels.users || {}; + var current_user_level = user_levels[user_id]; + if (current_user_level == undefined) current_user_level = default_user_level; + } else { + var default_user_level = 0; + var user_levels = []; + var current_user_level = 0; + } + + 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 room_name_level = parseInt(power_levels.state_default || 0); + if (events_levels['m.room.name'] !== undefined) { + room_name_level = events_levels['m.room.name']; + } + var can_set_room_name = current_user_level >= room_name_level; + + var room_topic_level = parseInt(power_levels.state_default || 0); + if (events_levels['m.room.topic'] !== undefined) { + room_topic_level = events_levels['m.room.topic']; + } + var can_set_room_topic = current_user_level >= room_topic_level; var placeholderName = "Unnamed Room"; if (this.state.defaultName && this.state.defaultName !== '?') { placeholderName += " (" + this.state.defaultName + ")"; } + save_button =
Save
+ cancel_button =
Cancel
+ } + + if (can_set_room_name) { name =
- - topic_el = - - - save_button =
Save
- cancel_button =
Cancel
- } else { - // + } + else { var searchStatus; // don't display the search count until the search completes and // gives us a valid (possibly zero) searchCount. @@ -204,17 +225,28 @@ module.exports = React.createClass({ + } + if (can_set_room_topic) { + topic_el = + + } else { var topic = this.props.room.currentState.getStateEvents('m.room.topic', ''); if (topic) topic_el =
{ topic.getContent().topic }
; } var roomAvatar = null; if (this.props.room) { - if (this.props.editing) { + if (can_set_room_avatar) { roomAvatar = (
- +