mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
* src/mod_shared_roster.erl: Support in API to add 'all' as member
of a group (thanks to Martin Langhoff)(EJAB-916) SVN Revision: 2031
This commit is contained in:
parent
8654991333
commit
d7223ea6ef
@ -1,5 +1,8 @@
|
|||||||
2009-04-22 Badlop <badlop@process-one.net>
|
2009-04-22 Badlop <badlop@process-one.net>
|
||||||
|
|
||||||
|
* src/mod_shared_roster.erl: Support in API to add 'all' as member
|
||||||
|
of a group (thanks to Martin Langhoff)(EJAB-916)
|
||||||
|
|
||||||
* src/ejabberd_captcha.erl: If a problem appears while obtaining
|
* src/ejabberd_captcha.erl: If a problem appears while obtaining
|
||||||
the image, show error message (EJAB-895)
|
the image, show error message (EJAB-895)
|
||||||
|
|
||||||
|
@ -542,15 +542,28 @@ is_user_in_group({_U, S} = US, Group, Host) ->
|
|||||||
%% @spec (Host::string(), {User::string(), Server::string()}, Group::string()) -> {atomic, ok}
|
%% @spec (Host::string(), {User::string(), Server::string()}, Group::string()) -> {atomic, ok}
|
||||||
add_user_to_group(Host, US, Group) ->
|
add_user_to_group(Host, US, Group) ->
|
||||||
{LUser, LServer} = US,
|
{LUser, LServer} = US,
|
||||||
%% Push this new user to members of groups where this group is displayed
|
case regexp:match(LUser, "^@.+@$") of
|
||||||
push_user_to_displayed(LUser, LServer, Group, both),
|
{match,_,_} ->
|
||||||
%% Push members of groups that are displayed to this group
|
GroupOpts = mod_shared_roster:get_group_opts(Host, Group),
|
||||||
push_displayed_to_user(LUser, LServer, Group, Host, both),
|
AllUsersOpt =
|
||||||
R = #sr_user{us = US, group_host = {Group, Host}},
|
case LUser == "@all@" of
|
||||||
F = fun() ->
|
true -> [{all_users, true}];
|
||||||
mnesia:write(R)
|
false -> []
|
||||||
end,
|
end,
|
||||||
mnesia:transaction(F).
|
mod_shared_roster:set_group_opts(
|
||||||
|
Host, Group,
|
||||||
|
GroupOpts ++ AllUsersOpt);
|
||||||
|
nomatch ->
|
||||||
|
%% Push this new user to members of groups where this group is displayed
|
||||||
|
push_user_to_displayed(LUser, LServer, Group, both),
|
||||||
|
%% Push members of groups that are displayed to this group
|
||||||
|
push_displayed_to_user(LUser, LServer, Group, Host, both),
|
||||||
|
R = #sr_user{us = US, group_host = {Group, Host}},
|
||||||
|
F = fun() ->
|
||||||
|
mnesia:write(R)
|
||||||
|
end,
|
||||||
|
mnesia:transaction(F)
|
||||||
|
end.
|
||||||
|
|
||||||
push_displayed_to_user(LUser, LServer, Group, Host, Subscription) ->
|
push_displayed_to_user(LUser, LServer, Group, Host, Subscription) ->
|
||||||
GroupsOpts = groups_with_opts(LServer),
|
GroupsOpts = groups_with_opts(LServer),
|
||||||
@ -560,17 +573,29 @@ push_displayed_to_user(LUser, LServer, Group, Host, Subscription) ->
|
|||||||
|
|
||||||
remove_user_from_group(Host, US, Group) ->
|
remove_user_from_group(Host, US, Group) ->
|
||||||
GroupHost = {Group, Host},
|
GroupHost = {Group, Host},
|
||||||
R = #sr_user{us = US, group_host = GroupHost},
|
|
||||||
F = fun() ->
|
|
||||||
mnesia:delete_object(R)
|
|
||||||
end,
|
|
||||||
Result = mnesia:transaction(F),
|
|
||||||
{LUser, LServer} = US,
|
{LUser, LServer} = US,
|
||||||
%% Push removal of the old user to members of groups where the group that this user was members was displayed
|
case regexp:match(LUser, "^@.+@$") of
|
||||||
push_user_to_displayed(LUser, LServer, Group, remove),
|
{match,_,_} ->
|
||||||
%% Push removal of members of groups that where displayed to the group which this user has left
|
GroupOpts = mod_shared_roster:get_group_opts(Host, Group),
|
||||||
push_displayed_to_user(LUser, LServer, Group, Host, remove),
|
NewGroupOpts =
|
||||||
Result.
|
case LUser of
|
||||||
|
"@all@" ->
|
||||||
|
lists:filter(fun(X) -> X/={all_users,true} end, GroupOpts)
|
||||||
|
end,
|
||||||
|
mod_shared_roster:set_group_opts(Host, Group, NewGroupOpts);
|
||||||
|
nomatch ->
|
||||||
|
R = #sr_user{us = US, group_host = GroupHost},
|
||||||
|
F = fun() ->
|
||||||
|
mnesia:delete_object(R)
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(F),
|
||||||
|
%% Push removal of the old user to members of groups where the group that this user was members was displayed
|
||||||
|
push_user_to_displayed(LUser, LServer, Group, remove),
|
||||||
|
%% Push removal of members of groups that where displayed to the group which this user has left
|
||||||
|
push_displayed_to_user(LUser, LServer, Group, Host, remove),
|
||||||
|
Result
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
push_members_to_user(LUser, LServer, Group, Host, Subscription) ->
|
push_members_to_user(LUser, LServer, Group, Host, Subscription) ->
|
||||||
GroupsOpts = groups_with_opts(LServer),
|
GroupsOpts = groups_with_opts(LServer),
|
||||||
|
Loading…
Reference in New Issue
Block a user