aboutsummaryrefslogtreecommitdiff
path: root/src/mod_muc_admin.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_muc_admin.erl')
-rw-r--r--src/mod_muc_admin.erl62
1 files changed, 29 insertions, 33 deletions
diff --git a/src/mod_muc_admin.erl b/src/mod_muc_admin.erl
index 5197c1b71..ac11283ad 100644
--- a/src/mod_muc_admin.erl
+++ b/src/mod_muc_admin.erl
@@ -29,7 +29,7 @@
-behaviour(gen_mod).
-export([start/2, stop/1, reload/3, depends/2, muc_online_rooms/1,
- muc_register_nick/3, muc_unregister_nick/1,
+ muc_register_nick/3, muc_unregister_nick/2,
create_room_with_opts/4, create_room/3, destroy_room/2,
create_rooms_file/1, destroy_rooms_file/1,
rooms_unused_list/2, rooms_unused_destroy/2,
@@ -62,7 +62,12 @@ start(Host, _Opts) ->
ejabberd_hooks:add(webadmin_page_host, Host, ?MODULE, web_page_host, 50).
stop(Host) ->
- ejabberd_commands:unregister_commands(get_commands_spec()),
+ case gen_mod:is_loaded_elsewhere(Host, ?MODULE) of
+ false ->
+ ejabberd_commands:unregister_commands(get_commands_spec());
+ true ->
+ ok
+ end,
ejabberd_hooks:delete(webadmin_menu_main, ?MODULE, web_menu_main, 50),
ejabberd_hooks:delete(webadmin_menu_host, Host, ?MODULE, web_menu_host, 50),
ejabberd_hooks:delete(webadmin_page_main, ?MODULE, web_page_main, 50),
@@ -91,16 +96,18 @@ get_commands_spec() ->
args = [{host, binary}],
result = {rooms, {list, {room, string}}}},
#ejabberd_commands{name = muc_register_nick, tags = [muc],
- desc = "Register a nick in the MUC service",
+ desc = "Register a nick to a User JID in the MUC service of a server",
module = ?MODULE, function = muc_register_nick,
- args_desc = ["Nick", "User JID", "MUC service"],
- args_example = [<<"Tim">>, <<"tim@example.org">>, <<"muc.example.org">>],
- args = [{nick, binary}, {jid, binary}, {domain, binary}],
+ args_desc = ["Nick", "User JID", "Server Host"],
+ args_example = [<<"Tim">>, <<"tim@example.org">>, <<"example.org">>],
+ args = [{nick, binary}, {jid, binary}, {serverhost, binary}],
result = {res, rescode}},
#ejabberd_commands{name = muc_unregister_nick, tags = [muc],
- desc = "Unregister the nick in the MUC service",
+ desc = "Unregister the nick registered by that account in the MUC service",
module = ?MODULE, function = muc_unregister_nick,
- args = [{nick, binary}],
+ args_desc = ["User JID", "MUC service"],
+ args_example = [<<"tim@example.org">>, <<"example.org">>],
+ args = [{jid, binary}, {serverhost, binary}],
result = {res, rescode}},
#ejabberd_commands{name = create_room, tags = [muc_room],
@@ -305,31 +312,14 @@ muc_online_rooms(ServerHost) ->
|| {Name, _, _} <- mod_muc:get_online_rooms(Host)]
end, Hosts).
-muc_register_nick(Nick, JIDBinary, Domain) ->
- try jid:decode(JIDBinary) of
- JID ->
- F = fun (MHost, MNick) ->
- mnesia:write(#muc_registered{us_host=MHost, nick=MNick})
- end,
- case mnesia:transaction(F, [{{JID#jid.luser, JID#jid.lserver},
- Domain}, Nick]) of
- {atomic, ok} -> ok;
- {aborted, _Error} -> error
- end
- catch _:{bad_jid, _} -> throw({error, "Malformed JID"})
- end.
+muc_register_nick(Nick, FromBinary, ServerHost) ->
+ Host = find_host(ServerHost),
+ From = jid:decode(FromBinary),
+ Lang = <<"en">>,
+ mod_muc:iq_set_register_info(ServerHost, Host, From, Nick, Lang).
-muc_unregister_nick(Nick) ->
- F2 = fun(N) ->
- [{_,Key,_}|_] = mnesia:index_read(muc_registered, N, 3),
- mnesia:delete({muc_registered, Key})
- end,
- case mnesia:transaction(F2, [Nick], 1) of
- {atomic, ok} ->
- ok;
- {aborted, _Error} ->
- error
- end.
+muc_unregister_nick(FromBinary, ServerHost) ->
+ muc_register_nick(<<"">>, FromBinary, ServerHost).
get_user_rooms(LUser, LServer) ->
lists:flatmap(
@@ -817,7 +807,13 @@ get_room_occupants(Pid) ->
dict:to_list(S#state.users)).
get_room_occupants_number(Room, Host) ->
- length(get_room_occupants(Room, Host)).
+ case get_room_pid(Room, Host) of
+ room_not_found ->
+ throw({error, room_not_found});
+ Pid ->
+ S = get_room_state(Pid),
+ dict:size(S#state.users)
+ end.
%%----------------------------
%% Send Direct Invitation