Make mod_admin_extra add/delete_rosteritem reuse code from mod_roster
This commit is contained in:
parent
dc126b86bb
commit
226c09f031
|
@ -1233,34 +1233,25 @@ update_vcard_els(Data, ContentList, Els1) ->
|
||||||
%%%
|
%%%
|
||||||
|
|
||||||
add_rosteritem(LocalUser, LocalServer, User, Server, Nick, Group, Subs) ->
|
add_rosteritem(LocalUser, LocalServer, User, Server, Nick, Group, Subs) ->
|
||||||
case add_rosteritem(LocalUser, LocalServer, User, Server, Nick, Group, Subs, []) of
|
Jid = jid:make(LocalUser, LocalServer),
|
||||||
{atomic, ok} ->
|
RosterItem = build_roster_item(User, Server, {add, Nick, Subs, Group}),
|
||||||
push_roster_item(LocalUser, LocalServer, User, Server, {add, Nick, Subs, Group}),
|
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||||
ok;
|
ok -> ok;
|
||||||
_ ->
|
_ -> error
|
||||||
error
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
add_rosteritem(LU, LS, User, Server, Nick, Group, Subscription, Xattrs) ->
|
|
||||||
subscribe(LU, LS, User, Server, Nick, Group, Subscription, Xattrs).
|
|
||||||
|
|
||||||
subscribe(LU, LS, User, Server, Nick, Group, Subscription, _Xattrs) ->
|
subscribe(LU, LS, User, Server, Nick, Group, Subscription, _Xattrs) ->
|
||||||
ItemEl = build_roster_item(User, Server, {add, Nick, Subscription, Group}),
|
ItemEl = build_roster_item(User, Server, {add, Nick, Subscription, Group}),
|
||||||
mod_roster:set_items(LU, LS, #roster_query{items = [ItemEl]}).
|
mod_roster:set_items(LU, LS, #roster_query{items = [ItemEl]}).
|
||||||
|
|
||||||
delete_rosteritem(LocalUser, LocalServer, User, Server) ->
|
delete_rosteritem(LocalUser, LocalServer, User, Server) ->
|
||||||
case unsubscribe(LocalUser, LocalServer, User, Server) of
|
Jid = jid:make(LocalUser, LocalServer),
|
||||||
{atomic, ok} ->
|
RosterItem = build_roster_item(User, Server, remove),
|
||||||
push_roster_item(LocalUser, LocalServer, User, Server, remove),
|
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||||
ok;
|
ok -> ok;
|
||||||
_ ->
|
_ -> error
|
||||||
error
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
unsubscribe(LU, LS, User, Server) ->
|
|
||||||
ItemEl = build_roster_item(User, Server, remove),
|
|
||||||
mod_roster:set_items(LU, LS, #roster_query{items = [ItemEl]}).
|
|
||||||
|
|
||||||
%% -----------------------------
|
%% -----------------------------
|
||||||
%% Get Roster
|
%% Get Roster
|
||||||
%% -----------------------------
|
%% -----------------------------
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
roster_versioning_enabled/1, roster_version/2,
|
roster_versioning_enabled/1, roster_version/2,
|
||||||
mod_opt_type/1, mod_options/1, set_roster/1, del_roster/3,
|
mod_opt_type/1, mod_options/1, set_roster/1, del_roster/3,
|
||||||
process_rosteritems/5,
|
process_rosteritems/5,
|
||||||
depends/2]).
|
depends/2, set_item_and_notify_clients/3]).
|
||||||
|
|
||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
-include("xmpp.hrl").
|
-include("xmpp.hrl").
|
||||||
|
@ -441,23 +441,34 @@ decode_item(Item, R, Managed) ->
|
||||||
|
|
||||||
process_iq_set(#iq{from = _From, to = To,
|
process_iq_set(#iq{from = _From, to = To,
|
||||||
sub_els = [#roster_query{items = [QueryItem]}]} = IQ) ->
|
sub_els = [#roster_query{items = [QueryItem]}]} = IQ) ->
|
||||||
|
case set_item_and_notify_clients(To, QueryItem, false) of
|
||||||
|
ok ->
|
||||||
|
xmpp:make_iq_result(IQ);
|
||||||
|
E ->
|
||||||
|
?ERROR_MSG("roster set failed:~nIQ = ~s~nError = ~p",
|
||||||
|
[xmpp:pp(IQ), E]),
|
||||||
|
xmpp:make_error(IQ, xmpp:err_internal_server_error())
|
||||||
|
end.
|
||||||
|
|
||||||
|
-spec set_item_and_notify_clients(jid(), #roster_item{}, boolean()) -> ok | error.
|
||||||
|
set_item_and_notify_clients(To, #roster_item{jid = LJID} = RosterItem,
|
||||||
|
OverrideSubscription) ->
|
||||||
#jid{luser = LUser, lserver = LServer} = To,
|
#jid{luser = LUser, lserver = LServer} = To,
|
||||||
LJID = jid:tolower(QueryItem#roster_item.jid),
|
|
||||||
F = fun () ->
|
F = fun () ->
|
||||||
Item = get_roster_item(LUser, LServer, LJID),
|
Item = get_roster_item(LUser, LServer, LJID),
|
||||||
Item2 = decode_item(QueryItem, Item, false),
|
Item2 = decode_item(RosterItem, Item, OverrideSubscription),
|
||||||
Item3 = ejabberd_hooks:run_fold(roster_process_item,
|
Item3 = ejabberd_hooks:run_fold(roster_process_item,
|
||||||
LServer, Item2,
|
LServer, Item2,
|
||||||
[LServer]),
|
[LServer]),
|
||||||
case Item3#roster.subscription of
|
case Item3#roster.subscription of
|
||||||
remove -> del_roster_t(LUser, LServer, LJID);
|
remove -> del_roster_t(LUser, LServer, LJID);
|
||||||
_ -> update_roster_t(LUser, LServer, LJID, Item3)
|
_ -> update_roster_t(LUser, LServer, LJID, Item3)
|
||||||
end,
|
end,
|
||||||
case roster_version_on_db(LServer) of
|
case roster_version_on_db(LServer) of
|
||||||
true -> write_roster_version_t(LUser, LServer);
|
true -> write_roster_version_t(LUser, LServer);
|
||||||
false -> ok
|
false -> ok
|
||||||
end,
|
end,
|
||||||
{Item, Item3}
|
{Item, Item3}
|
||||||
end,
|
end,
|
||||||
case transaction(LUser, LServer, [LJID], F) of
|
case transaction(LUser, LServer, [LJID], F) of
|
||||||
{atomic, {OldItem, Item}} ->
|
{atomic, {OldItem, Item}} ->
|
||||||
|
@ -468,11 +479,9 @@ process_iq_set(#iq{from = _From, to = To,
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
xmpp:make_iq_result(IQ);
|
ok;
|
||||||
E ->
|
E ->
|
||||||
?ERROR_MSG("roster set failed:~nIQ = ~s~nError = ~p",
|
E
|
||||||
[xmpp:pp(IQ), E]),
|
|
||||||
xmpp:make_error(IQ, xmpp:err_internal_server_error())
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
push_item(To, OldItem, NewItem) ->
|
push_item(To, OldItem, NewItem) ->
|
||||||
|
|
Loading…
Reference in New Issue