From ee77257d41e8c4dc45ccf8c5bb4963e887786ef0 Mon Sep 17 00:00:00 2001 From: Badlop Date: Tue, 12 Jan 2010 12:02:50 +0000 Subject: [PATCH] Support in user list page of WebAdmin when mod_offline is disabled (EJAB-377) SVN Revision: 2877 --- src/mod_offline.erl | 7 +++++-- src/mod_offline_odbc.erl | 16 ++++++++++------ src/web/ejabberd_web_admin.erl | 18 ++++++++++++++++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 78c3b2eca..34b66d4fa 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -39,6 +39,7 @@ remove_expired_messages/0, remove_old_messages/1, remove_user/2, + get_queue_length/2, webadmin_page/3, webadmin_user/4, webadmin_user_parse_query/5]). @@ -612,9 +613,11 @@ user_queue_parse_query(US, Query) -> us_to_list({User, Server}) -> jlib:jid_to_string({User, Server, ""}). +get_queue_length(User, Server) -> + length(mnesia:dirty_read({offline_msg, {User, Server}})). + webadmin_user(Acc, User, Server, Lang) -> - US = {jlib:nodeprep(User), jlib:nameprep(Server)}, - QueueLen = length(mnesia:dirty_read({offline_msg, US})), + QueueLen = get_queue_length(jlib:nodeprep(User), jlib:nameprep(Server)), FQueueLen = [?AC("queue/", integer_to_list(QueueLen))], Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen ++ [?C(" "), ?INPUTT("submit", "removealloffline", "Remove All Offline Messages")]. diff --git a/src/mod_offline_odbc.erl b/src/mod_offline_odbc.erl index d7bbd3bf3..7f37340ad 100644 --- a/src/mod_offline_odbc.erl +++ b/src/mod_offline_odbc.erl @@ -38,6 +38,7 @@ pop_offline_messages/3, get_sm_features/5, remove_user/2, + get_queue_length/2, webadmin_page/3, webadmin_user/4, webadmin_user_parse_query/5]). @@ -479,11 +480,8 @@ user_queue_parse_query(Username, LServer, Query) -> us_to_list({User, Server}) -> jlib:jid_to_string({User, Server, ""}). -webadmin_user(Acc, User, Server, Lang) -> - LUser = jlib:nodeprep(User), - LServer = jlib:nameprep(Server), - Username = ejabberd_odbc:escape(LUser), - QueueLen = case catch ejabberd_odbc:sql_query( +get_queue_length(Username, LServer) -> + case catch ejabberd_odbc:sql_query( LServer, ["select count(*) from spool" " where username='", Username, "';"]) of @@ -491,7 +489,13 @@ webadmin_user(Acc, User, Server, Lang) -> SCount; _ -> 0 - end, + end. + +webadmin_user(Acc, User, Server, Lang) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + Username = ejabberd_odbc:escape(LUser), + QueueLen = get_queue_length(Username, LServer), FQueueLen = [?AC("queue/", QueueLen)], Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen ++ [?C(" "), ?INPUTT("submit", "removealloffline", "Remove All Offline Messages")]. diff --git a/src/web/ejabberd_web_admin.erl b/src/web/ejabberd_web_admin.erl index 06890f142..a9681e001 100644 --- a/src/web/ejabberd_web_admin.erl +++ b/src/web/ejabberd_web_admin.erl @@ -1546,6 +1546,7 @@ list_users_in_diapason(Host, Diap, Lang, URLFunc) -> list_given_users(Host, Users, Prefix, Lang, URLFunc) -> ModLast = get_lastactivity_module(Host), + ModOffline = get_offlinemsg_module(Host), ?XE("table", [?XE("thead", [?XE("tr", @@ -1556,10 +1557,10 @@ list_given_users(Host, Users, Prefix, Lang, URLFunc) -> lists:map( fun(_SU = {Server, User}) -> US = {User, Server}, - QueueLen = length(mnesia:dirty_read({offline_msg, US})), + QueueLenStr = get_offlinemsg_length(ModOffline, User, Server), FQueueLen = [?AC(URLFunc({users_queue, Prefix, User, Server}), - pretty_string_int(QueueLen))], + QueueLenStr)], FLast = case ejabberd_sm:get_user_resources(User, Server) of [] -> @@ -1591,6 +1592,19 @@ list_given_users(Host, Users, Prefix, Lang, URLFunc) -> end, Users) )]). +get_offlinemsg_length(ModOffline, User, Server) -> + case ModOffline of + none -> "disabled"; + _ -> pretty_string_int(ModOffline:get_queue_length(User, Server)) + end. + +get_offlinemsg_module(Server) -> + case [mod_offline, mod_offline_odbc] -- gen_mod:loaded_modules(Server) of + [mod_offline, mod_offline_odbc] -> none; + [mod_offline_odbc] -> mod_offline; + [mod_offline] -> mod_offline_odbc + end. + get_lastactivity_module(Server) -> case lists:member(mod_last, gen_mod:loaded_modules(Server)) of true -> mod_last;