mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-22 17:28:25 +01:00
Add new "MAM Archive" page to webadmin
This commit is contained in:
parent
c900f0ad83
commit
31b85351f2
105
src/mod_mam.erl
105
src/mod_mam.erl
@ -46,13 +46,20 @@
|
|||||||
is_empty_for_user/2, is_empty_for_room/3, check_create_room/4,
|
is_empty_for_user/2, is_empty_for_room/3, check_create_room/4,
|
||||||
process_iq/3, store_mam_message/7, make_id/0, wrap_as_mucsub/2, select/7,
|
process_iq/3, store_mam_message/7, make_id/0, wrap_as_mucsub/2, select/7,
|
||||||
get_mam_count/2,
|
get_mam_count/2,
|
||||||
|
webadmin_menu_hostuser/4,
|
||||||
|
webadmin_page_hostuser/4,
|
||||||
|
get_mam_messages/2, webadmin_user/4,
|
||||||
delete_old_messages_batch/5, delete_old_messages_status/1, delete_old_messages_abort/1,
|
delete_old_messages_batch/5, delete_old_messages_status/1, delete_old_messages_abort/1,
|
||||||
remove_message_from_archive/3]).
|
remove_message_from_archive/3]).
|
||||||
|
|
||||||
|
-import(ejabberd_web_admin, [make_command/4, make_command/2]).
|
||||||
|
|
||||||
-include_lib("xmpp/include/xmpp.hrl").
|
-include_lib("xmpp/include/xmpp.hrl").
|
||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
-include("mod_muc_room.hrl").
|
-include("mod_muc_room.hrl").
|
||||||
-include("ejabberd_commands.hrl").
|
-include("ejabberd_commands.hrl").
|
||||||
|
-include("ejabberd_http.hrl").
|
||||||
|
-include("ejabberd_web_admin.hrl").
|
||||||
-include("mod_mam.hrl").
|
-include("mod_mam.hrl").
|
||||||
-include("translate.hrl").
|
-include("translate.hrl").
|
||||||
|
|
||||||
@ -150,6 +157,12 @@ start(Host, Opts) ->
|
|||||||
set_room_option, 50),
|
set_room_option, 50),
|
||||||
ejabberd_hooks:add(store_mam_message, Host, ?MODULE,
|
ejabberd_hooks:add(store_mam_message, Host, ?MODULE,
|
||||||
store_mam_message, 100),
|
store_mam_message, 100),
|
||||||
|
ejabberd_hooks:add(webadmin_menu_hostuser, Host, ?MODULE,
|
||||||
|
webadmin_menu_hostuser, 50),
|
||||||
|
ejabberd_hooks:add(webadmin_page_hostuser, Host, ?MODULE,
|
||||||
|
webadmin_page_hostuser, 50),
|
||||||
|
ejabberd_hooks:add(webadmin_user, Host, ?MODULE,
|
||||||
|
webadmin_user, 50),
|
||||||
case mod_mam_opt:assume_mam_usage(Opts) of
|
case mod_mam_opt:assume_mam_usage(Opts) of
|
||||||
true ->
|
true ->
|
||||||
ejabberd_hooks:add(message_is_archived, Host, ?MODULE,
|
ejabberd_hooks:add(message_is_archived, Host, ?MODULE,
|
||||||
@ -223,6 +236,12 @@ stop(Host) ->
|
|||||||
set_room_option, 50),
|
set_room_option, 50),
|
||||||
ejabberd_hooks:delete(store_mam_message, Host, ?MODULE,
|
ejabberd_hooks:delete(store_mam_message, Host, ?MODULE,
|
||||||
store_mam_message, 100),
|
store_mam_message, 100),
|
||||||
|
ejabberd_hooks:delete(webadmin_menu_hostuser, Host, ?MODULE,
|
||||||
|
webadmin_menu_hostuser, 50),
|
||||||
|
ejabberd_hooks:delete(webadmin_page_hostuser, Host, ?MODULE,
|
||||||
|
webadmin_page_hostuser, 50),
|
||||||
|
ejabberd_hooks:delete(webadmin_user, Host, ?MODULE,
|
||||||
|
webadmin_user, 50),
|
||||||
case mod_mam_opt:assume_mam_usage(Host) of
|
case mod_mam_opt:assume_mam_usage(Host) of
|
||||||
true ->
|
true ->
|
||||||
ejabberd_hooks:delete(message_is_archived, Host, ?MODULE,
|
ejabberd_hooks:delete(message_is_archived, Host, ?MODULE,
|
||||||
@ -619,11 +638,43 @@ message_is_archived(false, #{lserver := LServer}, Pkt) ->
|
|||||||
%%% Commands
|
%%% Commands
|
||||||
%%%
|
%%%
|
||||||
|
|
||||||
|
%% @format-begin
|
||||||
|
|
||||||
get_mam_count(User, Host) ->
|
get_mam_count(User, Host) ->
|
||||||
Jid = jid:make(User, Host),
|
Jid = jid:make(User, Host),
|
||||||
{_, _, Count} = select(Host, Jid, Jid, [], #rsm_set{}, chat, only_count),
|
{_, _, Count} = select(Host, Jid, Jid, [], #rsm_set{}, chat, only_count),
|
||||||
Count.
|
Count.
|
||||||
|
|
||||||
|
get_mam_messages(User, Host) ->
|
||||||
|
Jid = jid:make(User, Host),
|
||||||
|
{Messages, _, _} = select(Host, Jid, Jid, [], #rsm_set{}, chat, only_messages),
|
||||||
|
format_user_messages(Messages).
|
||||||
|
|
||||||
|
format_user_messages(Messages) ->
|
||||||
|
lists:map(fun({_ID, _IDInt, Fwd}) ->
|
||||||
|
El = hd(Fwd#forwarded.sub_els),
|
||||||
|
FPacket =
|
||||||
|
ejabberd_web_admin:pretty_print_xml(
|
||||||
|
xmpp:encode(El)),
|
||||||
|
SFrom = jid:encode(El#message.from),
|
||||||
|
STo = jid:encode(El#message.to),
|
||||||
|
Time = format_time(Fwd#forwarded.delay#delay.stamp),
|
||||||
|
{Time, SFrom, STo, FPacket}
|
||||||
|
end,
|
||||||
|
Messages).
|
||||||
|
|
||||||
|
format_time(Now) ->
|
||||||
|
{{Year, Month, Day}, {Hour, Minute, Second}} = calendar:now_to_local_time(Now),
|
||||||
|
str:format("~w-~.2.0w-~.2.0w ~.2.0w:~.2.0w:~.2.0w",
|
||||||
|
[Year, Month, Day, Hour, Minute, Second]).
|
||||||
|
|
||||||
|
webadmin_user(Acc, User, Server, R) ->
|
||||||
|
Acc
|
||||||
|
++ [make_command(get_mam_count,
|
||||||
|
R,
|
||||||
|
[{<<"user">>, User}, {<<"host">>, Server}],
|
||||||
|
[{result_links, [{value, arg_host, 4, <<"user/", User/binary, "/mam/">>}]}])].
|
||||||
|
%% @format-end
|
||||||
|
|
||||||
%%%
|
%%%
|
||||||
%%% Commands: Purge
|
%%% Commands: Purge
|
||||||
@ -1512,6 +1563,17 @@ get_commands_spec() ->
|
|||||||
result_example = 5,
|
result_example = 5,
|
||||||
result_desc = "Number",
|
result_desc = "Number",
|
||||||
result = {value, integer}},
|
result = {value, integer}},
|
||||||
|
#ejabberd_commands{name = get_mam_messages,
|
||||||
|
tags = [internal, mam],
|
||||||
|
desc = "Get the mam messages",
|
||||||
|
policy = user,
|
||||||
|
module = mod_mam, function = get_mam_messages,
|
||||||
|
args = [],
|
||||||
|
result = {archive, {list, {messages, {tuple, [{time, string},
|
||||||
|
{from, string},
|
||||||
|
{to, string},
|
||||||
|
{packet, string}
|
||||||
|
]}}}}},
|
||||||
|
|
||||||
#ejabberd_commands{name = delete_old_mam_messages, tags = [mam, purge],
|
#ejabberd_commands{name = delete_old_mam_messages, tags = [mam, purge],
|
||||||
desc = "Delete MAM messages older than DAYS",
|
desc = "Delete MAM messages older than DAYS",
|
||||||
@ -1581,6 +1643,49 @@ get_commands_spec() ->
|
|||||||
result_example = {ok, <<"MAM archive removed">>}}
|
result_example = {ok, <<"MAM archive removed">>}}
|
||||||
].
|
].
|
||||||
|
|
||||||
|
|
||||||
|
%%%
|
||||||
|
%%% WebAdmin
|
||||||
|
%%%
|
||||||
|
|
||||||
|
webadmin_menu_hostuser(Acc, _Host, _Username, _Lang) ->
|
||||||
|
Acc ++ [{<<"mam">>, <<"MAM">>},
|
||||||
|
{<<"mam-archive">>, <<"MAM Archive">>}].
|
||||||
|
|
||||||
|
webadmin_page_hostuser(_, Host, U,
|
||||||
|
#request{us = _US, path = [<<"mam">>]} = R) ->
|
||||||
|
Res = ?H1GL(<<"MAM">>, <<"modules/#mod_mam">>, <<"mod_mam">>)
|
||||||
|
++ [make_command(get_mam_count,
|
||||||
|
R,
|
||||||
|
[{<<"user">>, U}, {<<"host">>, Host}],
|
||||||
|
[{result_links,
|
||||||
|
[{value, arg_host, 5, <<"user/", U/binary, "/mam-archive/">>}]}]),
|
||||||
|
make_command(remove_mam_for_user,
|
||||||
|
R,
|
||||||
|
[{<<"user">>, U}, {<<"host">>, Host}],
|
||||||
|
[{style, danger}]),
|
||||||
|
make_command(remove_mam_for_user_with_peer,
|
||||||
|
R,
|
||||||
|
[{<<"user">>, U}, {<<"host">>, Host}],
|
||||||
|
[{style, danger}])],
|
||||||
|
{stop, Res};
|
||||||
|
webadmin_page_hostuser(_, Host, U,
|
||||||
|
#request{us = _US, path = [<<"mam-archive">> | RPath],
|
||||||
|
lang = Lang} = R) ->
|
||||||
|
PageTitle =
|
||||||
|
str:translate_and_format(Lang, ?T("~ts's MAM Archive"), [jid:encode({U, Host, <<"">>})]),
|
||||||
|
Head = ?H1GL(PageTitle, <<"modules/#mod_mam">>, <<"mod_mam">>),
|
||||||
|
Res = make_command(get_mam_messages, R, [{<<"user">>, U},
|
||||||
|
{<<"host">>, Host}],
|
||||||
|
[{table_options, {10, RPath}},
|
||||||
|
{result_links, [{packet, paragraph, 1, <<"">>}]}]),
|
||||||
|
{stop, Head ++ [Res]};
|
||||||
|
webadmin_page_hostuser(Acc, _, _, _) -> Acc.
|
||||||
|
|
||||||
|
%%%
|
||||||
|
%%% Documentation
|
||||||
|
%%%
|
||||||
|
|
||||||
mod_opt_type(compress_xml) ->
|
mod_opt_type(compress_xml) ->
|
||||||
econf:bool();
|
econf:bool();
|
||||||
mod_opt_type(assume_mam_usage) ->
|
mod_opt_type(assume_mam_usage) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user