diff options
Diffstat (limited to 'src/mod_muc/mod_muc_room.erl')
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 114 |
1 files changed, 67 insertions, 47 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index e01dab87..7f0026ad 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -35,17 +35,17 @@ -record(lqueue, {queue, len, max}). --record(config, {allow_change_subj = true, % TODO +-record(config, {allow_change_subj = true, allow_query_users = true, allow_private_messages = true, public = true, % TODO - persistent = false, % TODO + persistent = false, moderated = false, % TODO - members_by_default = true, % TODO + members_by_default = true, members_only = false, % TODO allow_user_invites = false, % TODO password_protected = false, % TODO - anonymous = true, % TODO + anonymous = true, logging = false % TODO }). @@ -426,6 +426,14 @@ handle_event(Event, StateName, StateData) -> %% {stop, Reason, NewStateData} | %% {stop, Reason, Reply, NewStateData} %%---------------------------------------------------------------------- +handle_sync_event(get_disco_item, From, StateName, StateData) -> + Reply = case (StateData#state.config)#config.public of + true -> + {item, StateData#state.room}; + _ -> + false + end, + {reply, Reply, StateName, StateData}; handle_sync_event(Event, From, StateName, StateData) -> Reply = ok, {reply, Reply, StateName, StateData}. @@ -656,15 +664,17 @@ send_new_presence(NJID, StateData) -> SRole = role_to_list(Role), lists:foreach( fun({LJID, Info}) -> - ItemAttrs = case Info#user.role of - moderator -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}] - end, + ItemAttrs = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}] + end, Packet = append_subtags( Presence, [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], @@ -692,19 +702,20 @@ send_existing_presences(ToJID, StateData) -> ok; _ -> FromAffiliation = get_affiliation(LJID, StateData), - ItemAttrs = case Role of - moderator -> - [{"jid", - jlib:jid_to_string(FromJID)}, - {"affiliation", - affiliation_to_list( - FromAffiliation)}, - {"role", role_to_list(FromRole)}]; - _ -> - [{"affiliation", affiliation_to_list( - FromAffiliation)}, - {"role", role_to_list(FromRole)}] - end, + ItemAttrs = + case (Role == moderator) orelse + ((StateData#state.config)#config.anonymous == + false) of + true -> + [{"jid", jlib:jid_to_string(FromJID)}, + {"affiliation", + affiliation_to_list(FromAffiliation)}, + {"role", role_to_list(FromRole)}]; + _ -> + [{"affiliation", + affiliation_to_list(FromAffiliation)}, + {"role", role_to_list(FromRole)}] + end, Packet = append_subtags( Presence, [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], @@ -746,26 +757,30 @@ send_nick_changing(JID, OldNick, StateData) -> SRole = role_to_list(Role), lists:foreach( fun({LJID, Info}) -> - ItemAttrs1 = case Info#user.role of - moderator -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}, - {"nick", Nick}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}, - {"nick", Nick}] - end, - ItemAttrs2 = case Info#user.role of - moderator -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}] - end, + ItemAttrs1 = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}, + {"nick", Nick}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}, + {"nick", Nick}] + end, + ItemAttrs2 = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}] + end, Packet1 = {xmlelement, "presence", [{"type", "unavailable"}], [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], @@ -871,7 +886,12 @@ send_join_messages_end(JID, StateData) -> Packet). can_change_subject(Role, StateData) -> - (Role == moderator) orelse (Role == participant). + case (StateData#state.config)#config.allow_change_subj of + true -> + (Role == moderator) orelse (Role == participant); + _ -> + Role == moderator + end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Admin stuff |