diff --git a/src/mod_muc.erl b/src/mod_muc.erl index a6e0c6030..9c13926e0 100644 --- a/src/mod_muc.erl +++ b/src/mod_muc.erl @@ -1281,8 +1281,11 @@ mod_opt_type(default_room_options) -> allow_user_invites => econf:bool(), allow_visitor_nickchange => econf:bool(), allow_visitor_status => econf:bool(), + allow_voice_requests => econf:bool(), anonymous => econf:bool(), captcha_protected => econf:bool(), + description => econf:binary(), + enable_hats => econf:bool(), lang => econf:lang(), logging => econf:bool(), mam => econf:bool(), @@ -1298,7 +1301,11 @@ mod_opt_type(default_room_options) -> econf:enum([moderator, participant, visitor])), public => econf:bool(), public_list => econf:bool(), - title => econf:binary()}); + pubsub => econf:binary(), + title => econf:binary(), + vcard => econf:vcard_temp(), + vcard_xupdate => econf:binary(), + voice_request_min_interval => econf:pos_int()}); mod_opt_type(db_type) -> econf:db_type(?MODULE); mod_opt_type(ram_db_type) -> @@ -1668,6 +1675,11 @@ mod_doc() -> "If disallowed, the status text is stripped before broadcasting " "the presence update to all the room occupants. " "The default value is 'true'.")}}, + {allow_voice_requests, + #{value => "true | false", + desc => + ?T("Allow visitors in a moderated room to request voice. " + "The default value is 'true'.")}}, {anonymous, #{value => "true | false", desc => @@ -1684,6 +1696,16 @@ mod_doc() -> "https://docs.ejabberd.im/admin/configuration/#captcha[CAPTCHA] " "in order to accept their join in the room. " "The default value is 'false'.")}}, + {description, + #{value => ?T("Room Description"), + desc => + ?T("Short description of the room. " + "The default value is an empty string.")}}, + {enable_hats, + #{value => "true | false", + desc => + ?T("Allow extended roles as defined in XEP-0317 Hats. " + "The default value is 'false'.")}}, {lang, #{value => ?T("Language"), desc => @@ -1739,6 +1761,21 @@ mod_doc() -> desc => ?T("The list of participants is public, without requiring " "to enter the room. The default value is 'true'.")}}, + {pubsub, + #{value => ?T("PubSub Node"), + desc => + ?T("XMPP URI of associated Publish/Subscribe node. " + "The default value is an empty string.")}}, + {vcard, + #{value => ?T("vCard"), + desc => + ?T("A custom vCard for the room. See the equivalent mod_muc option." + "The default value is an empty string.")}}, + {voice_request_min_interval, + #{value => ?T("Number"), + desc => + ?T("Minimum interval between voice requests, in seconds. " + "The default value is '1800'.")}}, {mam, #{value => "true | false", desc => diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index 8271f5fd7..5f160218c 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -3836,6 +3836,11 @@ remove_nonmembers(StateData) -> -spec set_opts([{atom(), any()}], state()) -> state(). set_opts([], StateData) -> set_vcard_xupdate(StateData); +set_opts([{vcard, Val} | Opts], StateData) + when is_record(Val, vcard_temp) -> + %% default_room_options is setting a default room vcard + ValRaw = fxml:element_to_binary(xmpp:encode(Val)), + set_opts([{vcard, ValRaw} | Opts], StateData); set_opts([{Opt, Val} | Opts], StateData) -> NSD = case Opt of title ->