aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mod_shared_roster.erl71
1 files changed, 34 insertions, 37 deletions
diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl
index 94bd8adcd..59ebf1ad8 100644
--- a/src/mod_shared_roster.erl
+++ b/src/mod_shared_roster.erl
@@ -580,17 +580,16 @@ is_group_enabled(Host1, Group1) ->
{Host, Group} = split_grouphost(Host1, Group1),
case get_group_opts(Host, Group) of
error -> false;
- Opts -> not lists:member(disabled, Opts)
+ Opts -> is_group_enabled(Opts)
end.
-get_group_opt(Host, Group, Opt, Default) ->
- case get_group_opts(Host, Group) of
- error -> Default;
- Opts ->
- case lists:keysearch(Opt, 1, Opts) of
- {value, {_, Val}} -> Val;
- false -> Default
- end
+is_group_enabled(Opts) ->
+ not lists:member(disabled, Opts).
+
+get_group_opt(Opt, Opts, Default) ->
+ case lists:keysearch(Opt, 1, Opts) of
+ {value, {_, Val}} -> Val;
+ false -> Default
end.
get_online_users(Host) ->
@@ -599,12 +598,13 @@ get_online_users(Host) ->
get_group_users(Host1, Group1) ->
{Host, Group} = split_grouphost(Host1, Group1),
- case get_group_opt(Host, Group, all_users, false) of
+ Opts = get_group_opts(Host, Group),
+ case get_group_opt(all_users, Opts, false) of
true -> ejabberd_auth:get_vh_registered_users(Host);
false -> []
end
++
- case get_group_opt(Host, Group, online_users, false) of
+ case get_group_opt(online_users, Opts, false) of
true -> get_online_users(Host);
false -> []
end
@@ -660,20 +660,21 @@ get_group_explicit_users(Host, Group, odbc) ->
get_group_name(Host1, Group1) ->
{Host, Group} = split_grouphost(Host1, Group1),
- get_group_opt(Host, Group, name, Group).
+ Opts = get_group_opts(Host, Group),
+ get_group_opt(name, Opts, Group).
get_special_users_groups(Host) ->
- lists:filter(fun (Group) ->
- get_group_opt(Host, Group, all_users, false) orelse
- get_group_opt(Host, Group, online_users, false)
+ lists:filter(fun ({_Group, Opts}) ->
+ get_group_opt(all_users, Opts, false) orelse
+ get_group_opt(online_users, Opts, false)
end,
- list_groups(Host)).
+ groups_with_opts(Host)).
get_special_users_groups_online(Host) ->
- lists:filter(fun (Group) ->
- get_group_opt(Host, Group, online_users, false)
+ lists:filter(fun ({_Group, Opts}) ->
+ get_group_opt(online_users, Opts, false)
end,
- list_groups(Host)).
+ groups_with_opts(Host)).
displayed_groups(GroupsOpts, SelectedGroupsOpts) ->
DisplayedGroups = lists:usort(lists:flatmap(fun
@@ -742,24 +743,20 @@ get_user_displayed_groups(LUser, LServer, GroupsOpts,
get_user_displayed_groups(US) ->
Host = element(2, US),
- DisplayedGroups1 = lists:usort(lists:flatmap(fun
- (Group) ->
- case
- is_group_enabled(Host,
- Group)
- of
- true ->
- get_group_opt(Host,
- Group,
- displayed_groups,
- []);
- false -> []
- end
- end,
- get_user_groups(US))),
- [Group
- || Group <- DisplayedGroups1,
- is_group_enabled(Host, Group)].
+ DisplayedGroups1 =
+ lists:usort(
+ lists:flatmap(
+ fun(Group) ->
+ Opts = get_group_opts(Host, Group),
+ case is_group_enabled(Opts) of
+ true ->
+ get_group_opt(displayed_groups, Opts, []);
+ false ->
+ []
+ end
+ end,
+ get_user_groups(US))),
+ [Group || Group <- DisplayedGroups1, is_group_enabled(Host, Group)].
is_user_in_group(US, Group, Host) ->
is_user_in_group(US, Group, Host,