]> granicus.if.org Git - ejabberd/commitdiff
option to prevent archive removal on room destroy
authorChristoph Scholz <christoph.scholz@gmail.com>
Sun, 13 Jan 2019 09:35:03 +0000 (10:35 +0100)
committerChristoph Scholz <christoph.scholz@gmail.com>
Mon, 18 Feb 2019 12:42:45 +0000 (13:42 +0100)
src/mod_mam.erl

index 294d4f4013e0626bee73af865618df4a3cfdcf5a..b104e0f97a13bb3d44631d90daae248ca85de1cc 100644 (file)
@@ -113,8 +113,6 @@ start(Host, Opts) ->
                               disco_sm_features, 50),
            ejabberd_hooks:add(remove_user, Host, ?MODULE,
                               remove_user, 50),
-           ejabberd_hooks:add(remove_room, Host, ?MODULE,
-                              remove_room, 50),
            ejabberd_hooks:add(get_room_config, Host, ?MODULE,
                               get_room_config, 50),
            ejabberd_hooks:add(set_room_option, Host, ?MODULE,
@@ -126,11 +124,21 @@ start(Host, Opts) ->
                false ->
                    ok
            end,
+           case gen_mod:get_opt(clear_archive_on_room_destroy, Opts) of
+               true ->
+                   ejabberd_hooks:add(remove_room, Host, ?MODULE,
+                                      remove_room, 50);
+               false ->
+                   ok
+           end,
            ejabberd_commands:register_commands(get_commands_spec());
        Err ->
            Err
     end.
 
+
+
+
 use_cache(Mod, Host) ->
     case erlang:function_exported(Mod, use_cache, 2) of
        true -> Mod:use_cache(Host);
@@ -180,8 +188,6 @@ stop(Host) ->
                          disco_sm_features, 50),
     ejabberd_hooks:delete(remove_user, Host, ?MODULE,
                          remove_user, 50),
-    ejabberd_hooks:delete(remove_room, Host, ?MODULE,
-                         remove_room, 50),
     ejabberd_hooks:delete(get_room_config, Host, ?MODULE,
                          get_room_config, 50),
     ejabberd_hooks:delete(set_room_option, Host, ?MODULE,
@@ -193,6 +199,13 @@ stop(Host) ->
        false ->
            ok
     end,
+    case gen_mod:get_module_opt(Host, ?MODULE, clear_archive_on_room_destroy) of
+       true ->
+           ejabberd_hooks:delete(remove_room, Host, ?MODULE,
+                                 remove_room, 50);
+       false ->
+           ok
+    end,
     case gen_mod:is_loaded_elsewhere(Host, ?MODULE) of
         false ->
             ejabberd_commands:unregister_commands(get_commands_spec());
@@ -1211,6 +1224,8 @@ mod_opt_type(default) ->
        (roster) -> roster
     end;
 mod_opt_type(request_activates_archiving) ->
+    fun (B) when is_boolean(B) -> B end;
+mod_opt_type(clear_archive_on_room_destroy) ->
     fun (B) when is_boolean(B) -> B end.
 
 mod_options(Host) ->
@@ -1218,6 +1233,7 @@ mod_options(Host) ->
      {default, never},
      {request_activates_archiving, false},
      {compress_xml, false},
+     {clear_archive_on_room_destroy, true},
      {db_type, ejabberd_config:default_db(Host, ?MODULE)},
      {use_cache, ejabberd_config:use_cache(Host)},
      {cache_size, ejabberd_config:cache_size(Host)},