]> granicus.if.org Git - ejabberd/commitdiff
Remove MAM archives on MUC room destroy
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 19 Aug 2015 13:15:02 +0000 (16:15 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Mon, 24 Aug 2015 10:28:58 +0000 (13:28 +0300)
src/mod_mam.erl
src/mod_muc.erl

index bbe279cb90959de878f1fdcb2ceea59f1038d6b3..af4245f90091b642c65e2a3aca6dad34b58ec84c 100644 (file)
@@ -34,7 +34,8 @@
 
 -export([user_send_packet/4, user_receive_packet/5,
         process_iq_v0_2/3, process_iq_v0_3/3, remove_user/2,
-        mod_opt_type/1, muc_process_iq/4, muc_filter_message/5]).
+        remove_user/3, mod_opt_type/1, muc_process_iq/4,
+        muc_filter_message/5]).
 
 -include_lib("stdlib/include/ms_transform.hrl").
 -include("jlib.hrl").
index 725051e6652344555a1c0f2127477f56db876765..e68472a29e3327557de0d535100254263f034f5e 100644 (file)
@@ -200,13 +200,16 @@ forget_room(ServerHost, Host, Name) ->
     forget_room(LServer, Host, Name,
                gen_mod:db_type(LServer, ?MODULE)).
 
-forget_room(_LServer, Host, Name, mnesia) ->
+forget_room(LServer, Host, Name, mnesia) ->
+    remove_room_mam(LServer, Host, Name),
     F = fun () -> mnesia:delete({muc_room, {Name, Host}})
        end,
     mnesia:transaction(F);
-forget_room(_LServer, Host, Name, riak) ->
+forget_room(LServer, Host, Name, riak) ->
+    remove_room_mam(LServer, Host, Name),
     {atomic, ejabberd_riak:delete(muc_room, {Name, Host})};
 forget_room(LServer, Host, Name, odbc) ->
+    remove_room_mam(LServer, Host, Name),
     SName = ejabberd_odbc:escape(Name),
     SHost = ejabberd_odbc:escape(Host),
     F = fun () ->
@@ -216,6 +219,22 @@ forget_room(LServer, Host, Name, odbc) ->
        end,
     ejabberd_odbc:sql_transaction(LServer, F).
 
+remove_room_mam(LServer, Host, Name) ->
+    case gen_mod:is_loaded(LServer, mod_mam) of
+       true ->
+           U = jlib:nodeprep(Name),
+           S = jlib:nameprep(Host),
+           DBType = gen_mod:db_type(LServer, mod_mam),
+           if DBType == odbc ->
+                   mod_mam:remove_user(jlib:jid_to_string({U, S, <<>>}),
+                                       LServer, DBType);
+              true ->
+                   mod_mam:remove_user(U, S, DBType)
+           end;
+       false ->
+           ok
+    end.
+
 process_iq_disco_items(Host, From, To,
                       #iq{lang = Lang} = IQ) ->
     Rsm = jlib:rsm_decode(IQ),