Only allow admins to change room mode
This commit is contained in:
parent
31b7c4ed26
commit
cfc14f05a0
6 changed files with 90 additions and 48 deletions
|
|
@ -138,9 +138,9 @@
|
|||
</v-card-text>
|
||||
</v-card>
|
||||
|
||||
<v-card class="account ma-3" flat v-if="availableRoomTypes.length > 1 || canChangeReadOnly()">
|
||||
<v-card class="account ma-3" flat v-if="(iAmAdmin() && availableRoomTypes.length > 1) || canChangeReadOnly()">
|
||||
<v-card-title class="h2 with-right-label"><div>{{ $t("room_info.experimental_features") }}</div><div></div></v-card-title>
|
||||
<v-card-text class="with-right-label" v-if="availableRoomTypes.length > 1">
|
||||
<v-card-text class="with-right-label" v-if="iAmAdmin() && availableRoomTypes.length > 1">
|
||||
<div>
|
||||
<div class="option-title">{{ $t('room_info.room_type') }}</div>
|
||||
</div>
|
||||
|
|
@ -257,7 +257,7 @@ import CopyLink from "../components/CopyLink.vue"
|
|||
import RoomTypeSelector from "./RoomTypeSelector.vue";
|
||||
import roomInfoMixin from "./roomInfoMixin";
|
||||
import roomTypeMixin from "./roomTypeMixin";
|
||||
import util, { ROOM_TYPE_DEFAULT, ROOM_TYPE_FILE_MODE, ROOM_TYPE_VOICE_MODE } from "../plugins/utils";
|
||||
import util, { STATE_EVENT_ROOM_TYPE } from "../plugins/utils";
|
||||
|
||||
export default {
|
||||
name: "RoomInfo",
|
||||
|
|
@ -337,25 +337,29 @@ export default {
|
|||
|
||||
roomType: {
|
||||
get: function () {
|
||||
if (this.room && this.room.tags) {
|
||||
let options = this.room.tags["ui_options"] || {}
|
||||
if (options["voice_mode"]) {
|
||||
return ROOM_TYPE_VOICE_MODE;
|
||||
} else if (options["file_mode"]) {
|
||||
return ROOM_TYPE_FILE_MODE;
|
||||
}
|
||||
}
|
||||
return ROOM_TYPE_DEFAULT;
|
||||
// if (this.room && this.room.tags) {
|
||||
// let options = this.room.tags["ui_options"] || {}
|
||||
// if (options["voice_mode"]) {
|
||||
// return ROOM_TYPE_VOICE_MODE;
|
||||
// } else if (options["file_mode"]) {
|
||||
// return ROOM_TYPE_FILE_MODE;
|
||||
// }
|
||||
// }
|
||||
// return ROOM_TYPE_DEFAULT;
|
||||
return util.roomDisplayTypeOverride(this.room) || this.roomDisplayType;
|
||||
},
|
||||
set: function (roomType) {
|
||||
if (this.room) {
|
||||
let tags = this.room.tags || {};
|
||||
let options = tags["ui_options"] || {}
|
||||
options["voice_mode"] = (roomType == ROOM_TYPE_VOICE_MODE ? 1 : 0);
|
||||
options["file_mode"] = (roomType == ROOM_TYPE_FILE_MODE ? 1 : 0);
|
||||
tags["ui_options"] = options;
|
||||
this.room.tags = tags;
|
||||
this.$matrix.matrixClient.setRoomTag(this.room.roomId, "ui_options", options);
|
||||
// let tags = this.room.tags || {};
|
||||
// let options = tags["ui_options"] || {}
|
||||
// options["voice_mode"] = (roomType == ROOM_TYPE_VOICE_MODE ? 1 : 0);
|
||||
// options["file_mode"] = (roomType == ROOM_TYPE_FILE_MODE ? 1 : 0);
|
||||
// tags["ui_options"] = options;
|
||||
// this.room.tags = tags;
|
||||
// this.$matrix.matrixClient.setRoomTag(this.room.roomId, "ui_options", options);
|
||||
if (this.iAmAdmin()) {
|
||||
this.$matrix.matrixClient.sendStateEvent(this.room.roomId, STATE_EVENT_ROOM_TYPE, { type: roomType });
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
@ -539,6 +543,12 @@ export default {
|
|||
}
|
||||
return false;
|
||||
},
|
||||
iAmAdmin() {
|
||||
if (this.room) {
|
||||
return this.room.currentState && this.room.currentState.maySendStateEvent("m.room.power_levels", this.$matrix.currentUserId);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
// TODO - following power level comparisons assume that default power levels are used in the room!
|
||||
isAdmin(member) {
|
||||
return member.powerLevelNorm > 50;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue