Make the settings page load for guests. Add checkboxes for guest r/w

pull/21833/head
Kegan Dougal 2016-01-05 17:34:25 +00:00
parent 8bd4fdbd5a
commit d729dee31d
3 changed files with 54 additions and 25 deletions

View File

@ -15,7 +15,7 @@ limitations under the License.
*/ */
'use strict'; 'use strict';
var q = require("q");
var MatrixClientPeg = require("./MatrixClientPeg"); var MatrixClientPeg = require("./MatrixClientPeg");
var Notifier = require("./Notifier"); var Notifier = require("./Notifier");
@ -35,6 +35,11 @@ module.exports = {
}, },
loadThreePids: function() { loadThreePids: function() {
if (MatrixClientPeg.get().isGuest()) {
return q({
threepids: []
}); // guests can't poke 3pid endpoint
}
return MatrixClientPeg.get().getThreePids(); return MatrixClientPeg.get().getThreePids();
}, },

View File

@ -733,7 +733,7 @@ module.exports = React.createClass({
return ret; return ret;
}, },
uploadNewState: function(new_name, new_topic, new_join_rule, new_history_visibility, new_power_levels) { uploadNewState: function(newVals) {
var old_name = this.state.room.name; var old_name = this.state.room.name;
var old_topic = this.state.room.currentState.getStateEvents('m.room.topic', ''); var old_topic = this.state.room.currentState.getStateEvents('m.room.topic', '');
@ -759,46 +759,54 @@ module.exports = React.createClass({
var deferreds = []; var deferreds = [];
if (old_name != new_name && new_name != undefined && new_name) { if (old_name != newVals.name && newVals.name != undefined && newVals.name) {
deferreds.push( deferreds.push(
MatrixClientPeg.get().setRoomName(this.state.room.roomId, new_name) MatrixClientPeg.get().setRoomName(this.state.room.roomId, newVals.name)
); );
} }
if (old_topic != new_topic && new_topic != undefined) { if (old_topic != newVals.topic && newVals.topic != undefined) {
deferreds.push( deferreds.push(
MatrixClientPeg.get().setRoomTopic(this.state.room.roomId, new_topic) MatrixClientPeg.get().setRoomTopic(this.state.room.roomId, newVals.topic)
); );
} }
if (old_join_rule != new_join_rule && new_join_rule != undefined) { if (old_join_rule != newVals.join_rule && newVals.join_rule != undefined) {
deferreds.push( deferreds.push(
MatrixClientPeg.get().sendStateEvent( MatrixClientPeg.get().sendStateEvent(
this.state.room.roomId, "m.room.join_rules", { this.state.room.roomId, "m.room.join_rules", {
join_rule: new_join_rule, join_rule: newVals.join_rule,
}, "" }, ""
) )
); );
} }
if (old_history_visibility != new_history_visibility && new_history_visibility != undefined) { if (old_history_visibility != newVals.history_visibility &&
newVals.history_visibility != undefined) {
deferreds.push( deferreds.push(
MatrixClientPeg.get().sendStateEvent( MatrixClientPeg.get().sendStateEvent(
this.state.room.roomId, "m.room.history_visibility", { this.state.room.roomId, "m.room.history_visibility", {
history_visibility: new_history_visibility, history_visibility: newVals.history_visibility,
}, "" }, ""
) )
); );
} }
if (new_power_levels) { if (newVals.power_levels) {
deferreds.push( deferreds.push(
MatrixClientPeg.get().sendStateEvent( MatrixClientPeg.get().sendStateEvent(
this.state.room.roomId, "m.room.power_levels", new_power_levels, "" this.state.room.roomId, "m.room.power_levels", newVals.power_levels, ""
) )
); );
} }
deferreds.push(
MatrixClientPeg.get().setGuestAccess(this.state.room.roomId, {
allowRead: newVals.guest_read,
allowJoin: newVals.guest_join
})
);
if (deferreds.length) { if (deferreds.length) {
var self = this; var self = this;
q.all(deferreds).fail(function(err) { q.all(deferreds).fail(function(err) {
@ -883,19 +891,15 @@ module.exports = React.createClass({
uploadingRoomSettings: true, uploadingRoomSettings: true,
}); });
var new_name = this.refs.header.getRoomName(); this.uploadNewState({
var new_topic = this.refs.room_settings.getTopic(); name: this.refs.header.getRoomName(),
var new_join_rule = this.refs.room_settings.getJoinRules(); topic: this.refs.room_settings.getTopic(),
var new_history_visibility = this.refs.room_settings.getHistoryVisibility(); join_rule: this.refs.room_settings.getJoinRules(),
var new_power_levels = this.refs.room_settings.getPowerLevels(); history_visibility: this.refs.room_settings.getHistoryVisibility(),
power_levels: this.refs.room_settings.getPowerLevels(),
this.uploadNewState( guest_join: this.refs.room_settings.canGuestsJoin(),
new_name, guest_read: this.refs.room_settings.canGuestsRead()
new_topic, });
new_join_rule,
new_history_visibility,
new_power_levels
);
}, },
onCancelClick: function() { onCancelClick: function() {

View File

@ -31,6 +31,14 @@ module.exports = React.createClass({
}; };
}, },
canGuestsJoin: function() {
return this.refs.guests_join.checked;
},
canGuestsRead: function() {
return this.refs.guests_read.checked;
},
getTopic: function() { getTopic: function() {
return this.refs.topic.value; return this.refs.topic.value;
}, },
@ -83,6 +91,10 @@ module.exports = React.createClass({
if (history_visibility) history_visibility = history_visibility.getContent().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 power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', '');
var guest_access = this.props.room.currentState.getStateEvents('m.room.guest_access', '');
if (guest_access) {
guest_access = guest_access.getContent().guest_access;
}
var events_levels = power_levels.events || {}; var events_levels = power_levels.events || {};
@ -154,6 +166,14 @@ module.exports = React.createClass({
<textarea className="mx_RoomSettings_description" placeholder="Topic" defaultValue={topic} ref="topic"/> <br/> <textarea className="mx_RoomSettings_description" placeholder="Topic" defaultValue={topic} ref="topic"/> <br/>
<label><input type="checkbox" ref="is_private" defaultChecked={join_rule != "public"}/> Make this room private</label> <br/> <label><input type="checkbox" ref="is_private" defaultChecked={join_rule != "public"}/> Make this room private</label> <br/>
<label><input type="checkbox" ref="share_history" defaultChecked={history_visibility == "shared"}/> Share message history with new users</label> <br/> <label><input type="checkbox" ref="share_history" defaultChecked={history_visibility == "shared"}/> Share message history with new users</label> <br/>
<label>
<input type="checkbox" ref="guests_read" defaultChecked={history_visibility === "world_readable"}/>
Allow guests to read messages in this room
</label> <br/>
<label>
<input type="checkbox" ref="guests_join" defaultChecked={guest_access === "can_join"}/>
Allow guests to join this room
</label> <br/>
<label className="mx_RoomSettings_encrypt"><input type="checkbox" /> Encrypt room</label> <br/> <label className="mx_RoomSettings_encrypt"><input type="checkbox" /> Encrypt room</label> <br/>
<h3>Power levels</h3> <h3>Power levels</h3>