]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_web_admin.erl: Run new hook
authorBadlop <badlop@process-one.net>
Sun, 12 Oct 2008 14:16:05 +0000 (14:16 +0000)
committerBadlop <badlop@process-one.net>
Sun, 12 Oct 2008 14:16:05 +0000 (14:16 +0000)
webadmin_user_parse_query when POST in web admin user
page (thanks to Oleg Palij)(EJAB-747)
* src/mod_offline.erl: Add button "Remove All Offline Messages" in
a user page (thanks to Oleg Palij)(EJAB-747)
* src/mod_offline_odbc.erl: Likewise

SVN Revision: 1643

ChangeLog
src/mod_offline.erl
src/mod_offline_odbc.erl
src/web/ejabberd_web_admin.erl

index ebab255b8f43fb8eae3e187c03af5c5fc346e6a4..e5ba49ceaaedec70d5d0a20dc242fb6232a8d819 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-10-12  Badlop  <badlop@process-one.net>
 
+       * src/web/ejabberd_web_admin.erl: Run new hook
+       webadmin_user_parse_query when POST in web admin user
+       page (thanks to Oleg Palij)(EJAB-747)
+       * src/mod_offline.erl: Add button "Remove All Offline Messages" in
+       a user page (thanks to Oleg Palij)(EJAB-747)
+       * src/mod_offline_odbc.erl: Likewise
+
        * src/web/ejabberd_web_admin.erl: Improve Web Admin navigation
        menu for vhosts and nodes (EJAB-734)
 
index 448f6d0b510e4e8e3e90f4b254fc7673e893adf3..6dc218b3419d21c982db14b51b581e58b318b078 100644 (file)
@@ -39,7 +39,8 @@
         remove_old_messages/1,
         remove_user/2,
         webadmin_page/3,
-        webadmin_user/4]).
+        webadmin_user/4,
+        webadmin_user_parse_query/5]).
 
 -include("ejabberd.hrl").
 -include("jlib.hrl").
@@ -69,6 +70,8 @@ start(Host, Opts) ->
                       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
                       ?MODULE, webadmin_user, 50),
+    ejabberd_hooks:add(webadmin_user_parse_query, Host,
+                       ?MODULE, webadmin_user_parse_query, 50),
     MaxOfflineMsgs = gen_mod:get_opt(user_max_messages, Opts, infinity),
     register(gen_mod:get_module_proc(Host, ?PROCNAME),
             spawn(?MODULE, init, [MaxOfflineMsgs])).
@@ -137,6 +140,8 @@ stop(Host) ->
                          ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
                          ?MODULE, webadmin_user, 50),
+    ejabberd_hooks:delete(webadmin_user_parse_query, Host,
+                          ?MODULE, webadmin_user_parse_query, 50),
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
     exit(whereis(Proc), stop),
     {wait, Proc}.
@@ -554,4 +559,24 @@ webadmin_user(Acc, User, Server, Lang) ->
     QueueLen = length(mnesia:dirty_read({offline_msg, US})),
     FQueueLen = [?AC("queue/",
                     integer_to_list(QueueLen))],
-    Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen.
+    Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen ++ [?C(" "), ?INPUTT("submit", "removealloffline", "Remove All Offline Messages")].
+
+webadmin_user_parse_query(_, "removealloffline", User, Server, _Query) ->
+    US = {User, Server},
+    F = fun() ->
+            mnesia:write_lock_table(offline_msg),
+            lists:foreach(
+              fun(Msg) ->
+                      mnesia:delete_object(Msg)
+              end, mnesia:dirty_read({offline_msg, US}))
+        end,
+    case mnesia:transaction(F) of
+         {aborted, Reason} ->
+            ?ERROR_MSG("Failed to remove offline messages: ~p", [Reason]),
+            {stop, error};
+         {atomic, ok} ->
+            ?INFO_MSG("Removed all offline messages for ~s@~s", [User, Server]),
+            {stop, ok}
+    end;
+webadmin_user_parse_query(Acc, _Action, _User, _Server, _Query) ->
+    Acc.
index 80452d8afc1b31452335ef0ac69a81b51762ba68..85b61fcb5c365ec525c6a6861137960afc13577a 100644 (file)
@@ -38,7 +38,8 @@
         pop_offline_messages/3,
         remove_user/2,
         webadmin_page/3,
-        webadmin_user/4]).
+        webadmin_user/4,
+        webadmin_user_parse_query/5]).
 
 -include("ejabberd.hrl").
 -include("jlib.hrl").
@@ -63,6 +64,8 @@ start(Host, Opts) ->
                       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
                       ?MODULE, webadmin_user, 50),
+    ejabberd_hooks:add(webadmin_user_parse_query, Host,
+                       ?MODULE, webadmin_user_parse_query, 50),
     MaxOfflineMsgs = gen_mod:get_opt(user_max_messages, Opts, infinity),
     register(gen_mod:get_module_proc(Host, ?PROCNAME),
             spawn(?MODULE, init, [Host, MaxOfflineMsgs])).
@@ -149,6 +152,8 @@ stop(Host) ->
                          ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
                          ?MODULE, webadmin_user, 50),
+    ejabberd_hooks:delete(webadmin_user_parse_query, Host,
+                          ?MODULE, webadmin_user_parse_query, 50),
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
     exit(whereis(Proc), stop),
     ok.
@@ -439,7 +444,22 @@ webadmin_user(Acc, User, Server, Lang) ->
                       0
               end,
     FQueueLen = [?AC("queue/", QueueLen)],
-    Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen.
+    Acc ++ [?XCT("h3", "Offline Messages:")] ++ FQueueLen ++ [?C(" "), ?INPUTT("submit", "removealloffline", "Remove All Offline Messages")].
+
+webadmin_user_parse_query(_, "removealloffline", User, Server, _Query) ->
+    case catch odbc_queries:del_spool_msg(Server, User) of
+         {'EXIT', Reason} ->
+            ?ERROR_MSG("Failed to remove offline messages: ~p", [Reason]),
+            {stop, error};
+         {error, Reason} ->
+            ?ERROR_MSG("Failed to remove offline messages: ~p", [Reason]),
+            {stop, error};
+         _ ->
+            ?INFO_MSG("Removed all offline messages for ~s@~s", [User, Server]),
+            {stop, ok}
+    end;
+webadmin_user_parse_query(Acc, _Action, _User, _Server, _Query) ->
+    Acc.
 
 %% ------------------------------------------------
 %% mod_offline: number of messages quota management
index 3ffab97b0e3d64bdf5dcfce46ee869465989f927..8a24e5f7d508e5a106c9df5bb2386ea17ff1bd6d 100644 (file)
@@ -1470,25 +1470,31 @@ user_info(User, Server, Query, Lang) ->
 
 
 user_parse_query(User, Server, Query) ->
-    case lists:keysearch("chpassword", 1, Query) of
-       {value, _} ->
-           case lists:keysearch("password", 1, Query) of
-               {value, {_, undefined}} ->
-                   error;
-               {value, {_, Password}} ->
-                   ejabberd_auth:set_password(User, Server, Password),
-                   ok;
-               _ ->
-                   error
-           end;
-       _ ->
-           case lists:keysearch("removeuser", 1, Query) of
-               {value, _} ->
-                   ejabberd_auth:remove_user(User, Server),
-                   ok;
-               false ->
-                   nothing
-           end
+    lists:foldl(fun({Action, _Value}, Acc) when Acc == nothing ->
+                      user_parse_query1(Action, User, Server, Query);
+                   ({_Action, _Value}, Acc) ->
+                      Acc
+                end, nothing, Query).
+
+user_parse_query1("password", _User, _Server, _Query) ->
+    nothing;
+user_parse_query1("chpassword", User, Server, Query) ->
+    case lists:keysearch("password", 1, Query) of
+        {value, {_, undefined}} ->
+            error;
+        {value, {_, Password}} ->
+            ejabberd_auth:set_password(User, Server, Password),
+            ok;
+        _ ->
+            error
+    end;
+user_parse_query1("removeuser", User, Server, _Query) ->
+    ejabberd_auth:remove_user(User, Server),
+    ok;
+user_parse_query1(Action, User, Server, Query) ->
+    case ejabberd_hooks:run_fold(webadmin_user_parse_query, Server, [], [Action, User, Server, Query]) of
+         [] -> nothing;
+         Res -> Res
     end.