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 =
+ }
+
+ if (can_set_room_name) {
name =
-
- topic_el =
-
-
- save_button = Save
- cancel_button =
- } 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 = (