diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-05-15 18:16:13 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-05-15 18:16:13 +0000 |
commit | ee15945cd796c2248c64f9b2832c80828738ea5e (patch) | |
tree | f4a4f945eb2d1f37ade8897615037a49f59f3d73 /src/mod_muc | |
parent | * src/mod_muc/mod_muc_room.erl: Remove user from room on receiving (diff) |
* src/ejabberd_s2s.erl: Added error catching for do_route/3
* src/ejabberd_local.erl: Likewise for do_route/4
* src/msgs/ru.msg: Updated
* src/mod_muc/mod_muc_room.erl: New option to allow to view list
of participants for non-ones via disco#items
* src/mod_muc/mod_muc_room.erl: Store room subject with
configuration options
SVN Revision: 109
Diffstat (limited to 'src/mod_muc')
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 33d82447..47e55576 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -40,6 +40,7 @@ allow_query_users = true, allow_private_messages = true, public = true, + public_list = true, persistent = false, moderated = false, % TODO members_by_default = true, @@ -146,10 +147,20 @@ normal_state({route, From, "", case can_change_subject(Role, StateData) of true -> - {StateData#state{ - subject = Subject, - subject_author = FromNick}, - true}; + NSD = + StateData#state{ + subject = Subject, + subject_author = + FromNick}, + case (NSD#state.config)#config.persistent of + true -> + mod_muc:store_room( + NSD#state.room, + make_opts(NSD)); + _ -> + ok + end, + {NSD, true}; _ -> {StateData, false} end @@ -272,7 +283,7 @@ normal_state({route, From, "", {{iq, ID, result, XMLNS, [{xmlelement, "query", [{"xmlns", XMLNS}], Res - }]}, + }]}, SD}; {error, Error} -> {{iq, ID, error, XMLNS, @@ -1496,9 +1507,6 @@ process_iq_owner(From, set, SubEl, StateData) -> _ -> {error, ?ERR_FORBIDDEN} end; -% {xmlelement, _, _, Items} = SubEl, -% process_admin_items_set(From, Items, StateData); -% {error, ?ERR_FEATURE_NOT_IMPLEMENTED}; process_iq_owner(From, get, SubEl, StateData) -> FAffiliation = get_affiliation(From, StateData), @@ -1567,6 +1575,9 @@ get_config(Lang, StateData) -> ?BOOLXFIELD("Make room public searchable?", "public", Config#config.public), + ?BOOLXFIELD("Make participants list public?", + "public_list", + Config#config.public_list), ?BOOLXFIELD("Make room persistent?", "persistent", Config#config.persistent), @@ -1634,6 +1645,8 @@ set_xoption([{"allow_private_messages", [Val]} | Opts], Config) -> ?SET_BOOL_XOPT(allow_private_messages, Val); set_xoption([{"public", [Val]} | Opts], Config) -> ?SET_BOOL_XOPT(public, Val); +set_xoption([{"public_list", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(public_list, Val); set_xoption([{"persistent", [Val]} | Opts], Config) -> ?SET_BOOL_XOPT(persistent, Val); set_xoption([{"moderated", [Val]} | Opts], Config) -> @@ -1681,6 +1694,7 @@ set_opts([{Opt, Val} | Opts], StateData) -> ?CASE_CONFIG_OPT(allow_query_users); ?CASE_CONFIG_OPT(allow_private_messages); ?CASE_CONFIG_OPT(public); + ?CASE_CONFIG_OPT(public_list); ?CASE_CONFIG_OPT(persistent); ?CASE_CONFIG_OPT(moderated); ?CASE_CONFIG_OPT(members_by_default); @@ -1691,6 +1705,10 @@ set_opts([{Opt, Val} | Opts], StateData) -> ?CASE_CONFIG_OPT(logging); affiliations -> StateData#state{affiliations = ?DICT:from_list(Val)}; + subject -> + StateData#state{subject = Val}; + subject_author -> + StateData#state{subject_author = Val}; _ -> StateData end, set_opts(Opts, NSD). @@ -1705,6 +1723,7 @@ make_opts(StateData) -> ?MAKE_CONFIG_OPT(allow_query_users), ?MAKE_CONFIG_OPT(allow_private_messages), ?MAKE_CONFIG_OPT(public), + ?MAKE_CONFIG_OPT(public_list), ?MAKE_CONFIG_OPT(persistent), ?MAKE_CONFIG_OPT(moderated), ?MAKE_CONFIG_OPT(members_by_default), @@ -1713,7 +1732,9 @@ make_opts(StateData) -> ?MAKE_CONFIG_OPT(password_protected), ?MAKE_CONFIG_OPT(anonymous), ?MAKE_CONFIG_OPT(logging), - {affiliations, ?DICT:to_list(StateData#state.affiliations)} + {affiliations, ?DICT:to_list(StateData#state.affiliations)}, + {subject, StateData#state.subject}, + {subject_author, StateData#state.subject_author} ]. @@ -1760,8 +1781,9 @@ process_iq_disco_items(From, set, StateData) -> process_iq_disco_items(From, get, StateData) -> FAffiliation = get_affiliation(From, StateData), FRole = get_role(From, StateData), - case (FRole /= none) or - (FAffiliation == admin) or + case ((StateData#state.config)#config.public_list == true) orelse + (FRole /= none) orelse + (FAffiliation == admin) orelse (FAffiliation == owner) of true -> UList = |