diff options
Diffstat (limited to 'src/mod_configure.erl')
-rw-r--r-- | src/mod_configure.erl | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/src/mod_configure.erl b/src/mod_configure.erl index 9d4086559..d0e0166a4 100644 --- a/src/mod_configure.erl +++ b/src/mod_configure.erl @@ -35,7 +35,8 @@ get_local_features/5, get_local_items/5, adhoc_local_items/4, adhoc_local_commands/4, get_sm_identity/5, get_sm_features/5, get_sm_items/5, - adhoc_sm_items/4, adhoc_sm_commands/4, mod_opt_type/1]). + adhoc_sm_items/4, adhoc_sm_commands/4, mod_opt_type/1, + depends/2]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -95,6 +96,9 @@ stop(Host) -> gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_COMMANDS). +depends(_Host, _Opts) -> + [{mod_adhoc, hard}, {mod_last, soft}]. + %%%----------------------------------------------------------------------- -define(INFO_IDENTITY(Category, Type, Name, Lang), @@ -1913,21 +1917,29 @@ set_form(From, Host, ?NS_ADMINL(<<"end-user-session">>), Xmlelement = ?SERRT_POLICY_VIOLATION(Lang, <<"has been kicked">>), case JID#jid.lresource of <<>> -> - SIDs = mnesia:dirty_select(session, - [{#session{sid = {'$1', '$2'}, - usr = {LUser, LServer, '_'}, - _ = '_'}, - [{is_pid, '$2'}], - [{{'$1', '$2'}}]}]), - [Pid ! {kick, kicked_by_admin, Xmlelement} || {_, Pid} <- SIDs]; + SIs = mnesia:dirty_select(session, + [{#session{usr = {LUser, LServer, '_'}, + sid = '$1', + info = '$2', + _ = '_'}, + [], [{{'$1', '$2'}}]}]), + Pids = [P || {{_, P}, Info} <- SIs, + not proplists:get_bool(offline, Info)], + lists:foreach(fun(Pid) -> + Pid ! {kick, kicked_by_admin, Xmlelement} + end, Pids); R -> - [{_, Pid}] = mnesia:dirty_select(session, - [{#session{sid = {'$1', '$2'}, - usr = {LUser, LServer, R}, - _ = '_'}, - [{is_pid, '$2'}], - [{{'$1', '$2'}}]}]), - Pid ! {kick, kicked_by_admin, Xmlelement} + [{{_, Pid}, Info}] = mnesia:dirty_select( + session, + [{#session{usr = {LUser, LServer, R}, + sid = '$1', + info = '$2', + _ = '_'}, + [], [{{'$1', '$2'}}]}]), + case proplists:get_bool(offline, Info) of + true -> ok; + false -> Pid ! {kick, kicked_by_admin, Xmlelement} + end end, {result, []}; set_form(From, Host, |