mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-22 17:28:25 +01:00
* src/mod_muc/mod_muc_room.erl: Kick non-members when room
reconfigured to be member-only or when membership is revoked in member-only room, allowed "true" and "false" in x:data forms (thanks to Sergei Golovan) * src/mod_configure.erl: Added "Host" parameter to get_form and set_form functions (thanks to Sergei Golovan) * src/ejabberd_s2s_out.erl: Bugfix * src/msgs/es.msg: Updated (thanks to Badlop) * src/web/ejabberd_web.erl: Bugfix (thanks to Badlop) * src/mod_irc/mod_irc.erl: Updated copyright dates * src/mod_muc/mod_muc.erl: Likewise * src/mod_pubsub/mod_pubsub.erl: Likewise * src/mod_vcard.erl: Likewise * src/mod_vcard_ldap.erl: Likewise * src/mod_vcard_odbc.erl: Likewise * src/web/ejabberd_web_admin.erl: Likewise SVN Revision: 500
This commit is contained in:
parent
cf10843071
commit
0cc168a9aa
24
ChangeLog
24
ChangeLog
@ -1,3 +1,27 @@
|
||||
2006-02-05 Alexey Shchepin <alexey@sevcom.net>
|
||||
|
||||
* src/mod_muc/mod_muc_room.erl: Kick non-members when room
|
||||
reconfigured to be member-only or when membership is revoked in
|
||||
member-only room, allowed "true" and "false" in x:data forms
|
||||
(thanks to Sergei Golovan)
|
||||
|
||||
* src/mod_configure.erl: Added "Host" parameter to get_form and
|
||||
set_form functions (thanks to Sergei Golovan)
|
||||
|
||||
* src/ejabberd_s2s_out.erl: Bugfix
|
||||
|
||||
* src/msgs/es.msg: Updated (thanks to Badlop)
|
||||
|
||||
* src/web/ejabberd_web.erl: Bugfix (thanks to Badlop)
|
||||
|
||||
* src/mod_irc/mod_irc.erl: Updated copyright dates
|
||||
* src/mod_muc/mod_muc.erl: Likewise
|
||||
* src/mod_pubsub/mod_pubsub.erl: Likewise
|
||||
* src/mod_vcard.erl: Likewise
|
||||
* src/mod_vcard_ldap.erl: Likewise
|
||||
* src/mod_vcard_odbc.erl: Likewise
|
||||
* src/web/ejabberd_web_admin.erl: Likewise
|
||||
|
||||
2006-02-03 Alexey Shchepin <alexey@sevcom.net>
|
||||
|
||||
* src/ejabberd_auth_odbc.erl: Added ejabberd_odbc_sup to ejabberd
|
||||
|
@ -25,6 +25,7 @@
|
||||
wait_for_features/2,
|
||||
wait_for_auth_result/2,
|
||||
wait_for_starttls_proceed/2,
|
||||
reopen_socket/2,
|
||||
stream_established/2,
|
||||
handle_event/3,
|
||||
handle_sync_event/4,
|
||||
@ -209,10 +210,9 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) ->
|
||||
?INFO_MSG("restarted: ~p", [{StateData#state.myname,
|
||||
StateData#state.server}]),
|
||||
% TODO: clear message queue
|
||||
(StateData#state.sockmod):close(StateData#state.socket),
|
||||
gen_fsm:send_event(self(), init),
|
||||
{next_state, open_socket, StateData#state{socket = undefined,
|
||||
use_v10 = false}};
|
||||
ejabberd_receiver:close(StateData#state.receiver),
|
||||
{next_state, reopen_socket, StateData#state{socket = undefined,
|
||||
use_v10 = false}};
|
||||
_ ->
|
||||
send_text(StateData, ?INVALID_NAMESPACE_ERR),
|
||||
{stop, normal, StateData}
|
||||
@ -351,9 +351,8 @@ wait_for_features({xmlstreamelement, El}, StateData) ->
|
||||
StartTLSRequired and (not StateData#state.tls) ->
|
||||
?INFO_MSG("restarted: ~p", [{StateData#state.myname,
|
||||
StateData#state.server}]),
|
||||
(StateData#state.sockmod):close(StateData#state.socket),
|
||||
gen_fsm:send_event(self(), init),
|
||||
{next_state, open_socket,
|
||||
ejabberd_receiver:close(StateData#state.receiver),
|
||||
{next_state, reopen_socket,
|
||||
StateData#state{socket = undefined,
|
||||
use_v10 = false}};
|
||||
true ->
|
||||
@ -409,9 +408,8 @@ wait_for_auth_result({xmlstreamelement, El}, StateData) ->
|
||||
?NS_SASL ->
|
||||
?INFO_MSG("restarted: ~p", [{StateData#state.myname,
|
||||
StateData#state.server}]),
|
||||
(StateData#state.sockmod):close(StateData#state.socket),
|
||||
gen_fsm:send_event(self(), init),
|
||||
{next_state, open_socket,
|
||||
ejabberd_receiver:close(StateData#state.receiver),
|
||||
{next_state, reopen_socket,
|
||||
StateData#state{socket = undefined}};
|
||||
_ ->
|
||||
send_text(StateData,
|
||||
@ -498,6 +496,19 @@ wait_for_starttls_proceed(closed, StateData) ->
|
||||
{stop, normal, StateData}.
|
||||
|
||||
|
||||
reopen_socket({xmlstreamelement, El}, StateData) ->
|
||||
{next_state, reopen_socket, StateData};
|
||||
reopen_socket({xmlstreamend, Name}, StateData) ->
|
||||
{next_state, reopen_socket, StateData};
|
||||
reopen_socket({xmlstreamerror, _}, StateData) ->
|
||||
{next_state, reopen_socket, StateData};
|
||||
reopen_socket(timeout, StateData) ->
|
||||
{stop, normal, StateData};
|
||||
reopen_socket(closed, StateData) ->
|
||||
gen_fsm:send_event(self(), init),
|
||||
{next_state, open_socket, StateData}.
|
||||
|
||||
|
||||
stream_established({xmlstreamelement, El}, StateData) ->
|
||||
?INFO_MSG("stream established", []),
|
||||
case is_verify_res(El) of
|
||||
|
@ -645,7 +645,7 @@ adhoc_local_commands(Acc, From, #jid{lserver = LServer} = To,
|
||||
Acc
|
||||
end.
|
||||
|
||||
adhoc_local_commands(_From, _To,
|
||||
adhoc_local_commands(_From, #jid{lserver = LServer} = _To,
|
||||
#adhoc_request{lang = Lang,
|
||||
node = Node,
|
||||
sessionid = SessionID,
|
||||
@ -665,7 +665,7 @@ adhoc_local_commands(_From, _To,
|
||||
#adhoc_response{status = canceled});
|
||||
XData == false, ActionIsExecute ->
|
||||
%% User requests form
|
||||
case get_form(LNode, Lang) of
|
||||
case get_form(LServer, LNode, Lang) of
|
||||
{result, Form} ->
|
||||
adhoc:produce_response(
|
||||
Request,
|
||||
@ -680,7 +680,7 @@ adhoc_local_commands(_From, _To,
|
||||
invalid ->
|
||||
{error, ?ERR_BAD_REQUEST};
|
||||
Fields ->
|
||||
case set_form(LNode, Lang, Fields) of
|
||||
case set_form(LServer, LNode, Lang, Fields) of
|
||||
{result, _Res} ->
|
||||
adhoc:produce_response(
|
||||
#adhoc_response{lang = Lang,
|
||||
@ -730,7 +730,7 @@ adhoc_local_commands(_From, _To,
|
||||
|
||||
|
||||
|
||||
get_form(["running nodes", ENode, "DB"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "DB"], Lang) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -766,12 +766,12 @@ get_form(["running nodes", ENode, "DB"], Lang) ->
|
||||
end
|
||||
end;
|
||||
|
||||
get_form(["running nodes", ENode, "modules", "stop"], Lang) ->
|
||||
get_form(Host, ["running nodes", ENode, "modules", "stop"], Lang) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
Node ->
|
||||
case rpc:call(Node, gen_mod, loaded_modules, []) of
|
||||
case rpc:call(Node, gen_mod, loaded_modules, [Host]) of
|
||||
{badrpc, _Reason} ->
|
||||
{error, ?ERR_INTERNAL_SERVER_ERROR};
|
||||
Modules ->
|
||||
@ -793,7 +793,7 @@ get_form(["running nodes", ENode, "modules", "stop"], Lang) ->
|
||||
end
|
||||
end;
|
||||
|
||||
get_form(["running nodes", ENode, "modules", "start"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "modules", "start"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -812,7 +812,7 @@ get_form(["running nodes", ENode, "modules", "start"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["running nodes", ENode, "backup", "backup"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "backup"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -831,7 +831,7 @@ get_form(["running nodes", ENode, "backup", "backup"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["running nodes", ENode, "backup", "restore"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -850,7 +850,7 @@ get_form(["running nodes", ENode, "backup", "restore"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["running nodes", ENode, "backup", "textfile"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -869,7 +869,7 @@ get_form(["running nodes", ENode, "backup", "textfile"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["running nodes", ENode, "import", "file"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -888,7 +888,7 @@ get_form(["running nodes", ENode, "import", "file"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["running nodes", ENode, "import", "dir"], Lang) ->
|
||||
get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -907,7 +907,7 @@ get_form(["running nodes", ENode, "import", "dir"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["config", "hostname"], Lang) ->
|
||||
get_form(_Host, ["config", "hostname"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -925,7 +925,7 @@ get_form(["config", "hostname"], Lang) ->
|
||||
[{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
|
||||
]}]};
|
||||
|
||||
get_form(["config", "acls"], Lang) ->
|
||||
get_form(_Host, ["config", "acls"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -950,7 +950,7 @@ get_form(["config", "acls"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["config", "access"], Lang) ->
|
||||
get_form(_Host, ["config", "access"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -981,7 +981,7 @@ get_form(["config", "access"], Lang) ->
|
||||
}
|
||||
]}]};
|
||||
|
||||
get_form(["config", "remusers"], Lang) ->
|
||||
get_form(Host, ["config", "remusers"], Lang) ->
|
||||
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
|
||||
[{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
@ -991,7 +991,7 @@ get_form(["config", "remusers"], Lang) ->
|
||||
[{xmlcdata,
|
||||
translate:translate(
|
||||
Lang, "Choose users to remove")}]}] ++
|
||||
case catch ejabberd_auth:dirty_get_registered_users() of
|
||||
case catch ejabberd_auth:get_vh_registered_users(Host) of
|
||||
{'EXIT', _Reason} ->
|
||||
[];
|
||||
Users ->
|
||||
@ -1001,12 +1001,12 @@ get_form(["config", "remusers"], Lang) ->
|
||||
end
|
||||
}]};
|
||||
|
||||
get_form(_, _Lang) ->
|
||||
get_form(_Host, _, _Lang) ->
|
||||
{error, ?ERR_SERVICE_UNAVAILABLE}.
|
||||
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "DB"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "DB"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1040,7 +1040,7 @@ set_form(["running nodes", ENode, "DB"], _Lang, XData) ->
|
||||
{result, []}
|
||||
end;
|
||||
|
||||
set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
|
||||
set_form(Host, ["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1050,7 +1050,7 @@ set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
|
||||
case Vals of
|
||||
["1"] ->
|
||||
Module = list_to_atom(Var),
|
||||
rpc:call(Node, gen_mod, stop_module, [Module]);
|
||||
rpc:call(Node, gen_mod, stop_module, [Host, Module]);
|
||||
_ ->
|
||||
ok
|
||||
end
|
||||
@ -1058,7 +1058,7 @@ set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
|
||||
{result, []}
|
||||
end;
|
||||
|
||||
set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) ->
|
||||
set_form(Host, ["running nodes", ENode, "modules", "start"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1079,7 +1079,7 @@ set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) ->
|
||||
rpc:call(Node,
|
||||
gen_mod,
|
||||
start_module,
|
||||
[Module, Args])
|
||||
[Host, Module, Args])
|
||||
end, Modules),
|
||||
{result, []};
|
||||
_ ->
|
||||
@ -1094,7 +1094,7 @@ set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "backup", "backup"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "backup", "backup"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1117,7 +1117,7 @@ set_form(["running nodes", ENode, "backup", "backup"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "backup", "restore"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "backup", "restore"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1141,7 +1141,7 @@ set_form(["running nodes", ENode, "backup", "restore"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "backup", "textfile"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "backup", "textfile"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1164,7 +1164,7 @@ set_form(["running nodes", ENode, "backup", "textfile"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "import", "file"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "import", "file"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1181,7 +1181,7 @@ set_form(["running nodes", ENode, "import", "file"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["running nodes", ENode, "import", "dir"], _Lang, XData) ->
|
||||
set_form(_Host, ["running nodes", ENode, "import", "dir"], _Lang, XData) ->
|
||||
case search_running_node(ENode) of
|
||||
false ->
|
||||
{error, ?ERR_ITEM_NOT_FOUND};
|
||||
@ -1198,7 +1198,7 @@ set_form(["running nodes", ENode, "import", "dir"], _Lang, XData) ->
|
||||
end;
|
||||
|
||||
|
||||
set_form(["config", "hostname"], _Lang, XData) ->
|
||||
set_form(_Host, ["config", "hostname"], _Lang, XData) ->
|
||||
case lists:keysearch("hostname", 1, XData) of
|
||||
false ->
|
||||
{error, ?ERR_BAD_REQUEST};
|
||||
@ -1211,7 +1211,7 @@ set_form(["config", "hostname"], _Lang, XData) ->
|
||||
{error, ?ERR_BAD_REQUEST}
|
||||
end;
|
||||
|
||||
set_form(["config", "acls"], _Lang, XData) ->
|
||||
set_form(_Host, ["config", "acls"], _Lang, XData) ->
|
||||
case lists:keysearch("acls", 1, XData) of
|
||||
{value, {_, Strings}} ->
|
||||
String = lists:foldl(fun(S, Res) ->
|
||||
@ -1237,7 +1237,7 @@ set_form(["config", "acls"], _Lang, XData) ->
|
||||
{error, ?ERR_BAD_REQUEST}
|
||||
end;
|
||||
|
||||
set_form(["config", "access"], _Lang, XData) ->
|
||||
set_form(_Host, ["config", "access"], _Lang, XData) ->
|
||||
SetAccess =
|
||||
fun(Rs) ->
|
||||
mnesia:transaction(
|
||||
@ -1283,19 +1283,19 @@ set_form(["config", "access"], _Lang, XData) ->
|
||||
{error, ?ERR_BAD_REQUEST}
|
||||
end;
|
||||
|
||||
set_form(["config", "remusers"], _Lang, XData) ->
|
||||
set_form(Host, ["config", "remusers"], _Lang, XData) ->
|
||||
lists:foreach(
|
||||
fun({Var, Vals}) ->
|
||||
case Vals of
|
||||
["1"] ->
|
||||
catch ejabberd_auth:remove_user(Var);
|
||||
catch ejabberd_auth:remove_user(Var, Host);
|
||||
_ ->
|
||||
ok
|
||||
end
|
||||
end, XData),
|
||||
{result, []};
|
||||
|
||||
set_form(_, _Lang, _XData) ->
|
||||
set_form(_Host, _, _Lang, _XData) ->
|
||||
{error, ?ERR_SERVICE_UNAVAILABLE}.
|
||||
|
||||
|
||||
|
@ -307,7 +307,7 @@ iq_get_vcard(Lang) ->
|
||||
"http://ejabberd.jabberstudio.org/"}]},
|
||||
{xmlelement, "DESC", [],
|
||||
[{xmlcdata, translate:translate(Lang, "ejabberd IRC module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
process_register(Host, From, To, #iq{} = IQ) ->
|
||||
case catch process_irc_register(Host, From, To, IQ) of
|
||||
|
@ -581,7 +581,7 @@ iq_get_vcard(Lang) ->
|
||||
"http://ejabberd.jabberstudio.org/"}]},
|
||||
{xmlelement, "DESC", [],
|
||||
[{xmlcdata, translate:translate(Lang, "ejabberd MUC module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
|
||||
broadcast_service_message(Host, Msg) ->
|
||||
|
@ -1564,6 +1564,18 @@ process_admin_items_set(UJID, Items, Lang, StateData) ->
|
||||
catch send_kickban_presence(
|
||||
JID, Reason, "307", SD),
|
||||
set_role(JID, none, SD);
|
||||
{JID, affiliation, none, Reason} ->
|
||||
case (SD#state.config)#config.members_only of
|
||||
true ->
|
||||
catch send_kickban_presence(
|
||||
JID, Reason, "321", SD),
|
||||
SD1 = set_affiliation(JID, none, SD),
|
||||
set_role(JID, none, SD1);
|
||||
_ ->
|
||||
SD1 = set_affiliation(JID, none, SD),
|
||||
send_update_presence(JID, SD1),
|
||||
SD1
|
||||
end;
|
||||
{JID, affiliation, outcast, Reason} ->
|
||||
catch send_kickban_presence(
|
||||
JID, Reason, "301", SD),
|
||||
@ -2105,7 +2117,9 @@ set_config(XEl, StateData) ->
|
||||
-define(SET_BOOL_XOPT(Opt, Val),
|
||||
case Val of
|
||||
"0" -> set_xoption(Opts, Config#config{Opt = false});
|
||||
"false" -> set_xoption(Opts, Config#config{Opt = false});
|
||||
"1" -> set_xoption(Opts, Config#config{Opt = true});
|
||||
"true" -> set_xoption(Opts, Config#config{Opt = true});
|
||||
_ -> {error, ?ERR_BAD_REQUEST}
|
||||
end).
|
||||
|
||||
@ -2159,8 +2173,29 @@ change_config(Config, StateData) ->
|
||||
mod_muc:forget_room(NSD#state.host, NSD#state.room);
|
||||
{false, false} ->
|
||||
ok
|
||||
end,
|
||||
{result, [], NSD}.
|
||||
end,
|
||||
case {(StateData#state.config)#config.members_only,
|
||||
Config#config.members_only} of
|
||||
{false, true} ->
|
||||
NSD1 = remove_nonmembers(NSD),
|
||||
{result, [], NSD1};
|
||||
_ ->
|
||||
{result, [], NSD}
|
||||
end.
|
||||
|
||||
remove_nonmembers(StateData) ->
|
||||
lists:foldl(
|
||||
fun({_LJID, #user{jid = JID}}, SD) ->
|
||||
Affiliation = get_affiliation(JID, SD),
|
||||
case Affiliation of
|
||||
none ->
|
||||
catch send_kickban_presence(
|
||||
JID, "", "322", SD),
|
||||
set_role(JID, none, SD);
|
||||
_ ->
|
||||
SD
|
||||
end
|
||||
end, StateData, ?DICT:to_list(StateData#state.users)).
|
||||
|
||||
|
||||
-define(CASE_CONFIG_OPT(Opt),
|
||||
|
@ -395,7 +395,7 @@ iq_get_vcard(Lang) ->
|
||||
[{xmlcdata, translate:translate(
|
||||
Lang,
|
||||
"ejabberd pub/sub module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
|
||||
iq_pubsub(Host, From, Type, SubEl) ->
|
||||
|
@ -147,7 +147,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
|
||||
translate:translate(
|
||||
Lang,
|
||||
"Erlang Jabber Server\n"
|
||||
"Copyright (c) 2002-2005 Alexey Shchepin")}]},
|
||||
"Copyright (c) 2002-2006 Alexey Shchepin")}]},
|
||||
{xmlelement, "BDAY", [],
|
||||
[{xmlcdata, "2002-11-16"}]}
|
||||
]}]}
|
||||
@ -416,7 +416,7 @@ iq_get_vcard(Lang) ->
|
||||
[{xmlcdata, translate:translate(
|
||||
Lang,
|
||||
"ejabberd vCard module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
|
||||
find_xdata_el1(SubEls).
|
||||
|
@ -108,7 +108,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
|
||||
translate:translate(
|
||||
Lang,
|
||||
"Erlang Jabber Server\n"
|
||||
"Copyright (c) 2002-2005 Alexey Shchepin")}]},
|
||||
"Copyright (c) 2002-2006 Alexey Shchepin")}]},
|
||||
{xmlelement, "BDAY", [],
|
||||
[{xmlcdata, "2002-11-16"}]}
|
||||
]}]}
|
||||
@ -374,7 +374,7 @@ iq_get_vcard(Lang) ->
|
||||
[{xmlcdata, translate:translate(
|
||||
Lang,
|
||||
"ejabberd vCard module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
|
||||
find_xdata_el1(SubEls).
|
||||
|
@ -111,7 +111,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
|
||||
translate:translate(
|
||||
Lang,
|
||||
"Erlang Jabber Server\n"
|
||||
"Copyright (c) 2002-2005 Alexey Shchepin")}]},
|
||||
"Copyright (c) 2002-2006 Alexey Shchepin")}]},
|
||||
{xmlelement, "BDAY", [],
|
||||
[{xmlcdata, "2002-11-16"}]}
|
||||
]}]}
|
||||
@ -413,7 +413,7 @@ iq_get_vcard(Lang) ->
|
||||
[{xmlcdata, translate:translate(
|
||||
Lang,
|
||||
"ejabberd vCard module\n"
|
||||
"Copyright (c) 2003-2005 Alexey Shchepin")}]}].
|
||||
"Copyright (c) 2003-2006 Alexey Shchepin")}]}].
|
||||
|
||||
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
|
||||
find_xdata_el1(SubEls).
|
||||
|
@ -116,7 +116,7 @@
|
||||
{"Only service administrators are allowed to send service messages", "Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}.
|
||||
{"Conference room does not exist", "La sala de conferencias no existe"}.
|
||||
{"Access denied by service policy", "Acceso denegado por la política del servicio"}.
|
||||
{"You must fill in field \"nick\" in the form", "Debes rellenar el campo \"apodo\" en el formulario"}.
|
||||
{"You must fill in field \"Nickname\" in the form", "Debes rellenar el campo \"Apodo\" en el formulario"}.
|
||||
{"Specified nickname is already registered", "El apodo especificado ya está registrado, tendrás que buscar otro"}.
|
||||
{"Room creation is denied by service policy", "Se te ha denegado crear la sala por política del servicio"}.
|
||||
{"ejabberd MUC module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo de MUC para ejabbed\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
||||
@ -126,20 +126,20 @@
|
||||
{"You need an x:data capable client to configure room", "Necesitas un cliente con soporte de x:data para configurar la sala"}.
|
||||
{"Configuration for ", "Configuración para "}.
|
||||
{"Room title", "Título de la sala"}.
|
||||
{"Allow users to change subject?", "Permitir a los usuarios cambiar el asunto"}.
|
||||
{"Allow users to query other users?", "Permitir a los usuarios consultar a otros usuarios"}.
|
||||
{"Allow users to send private messages?", "Permitir a los usuarios enviar mensajes privados"}.
|
||||
{"Make room public searchable?", "Hacer la sala públicamente visible"}.
|
||||
{"Make participants list public?", "Hacer pública la lista de participantes"}.
|
||||
{"Make room persistent?", "Hacer la sala permanente"}.
|
||||
{"Make room moderated?", "Hacer la sala moderada"}.
|
||||
{"Default users as members?", "Los usuarios son miembros por defecto"}.
|
||||
{"Make room members only?", "Hacer la sala sólo para miembros"}.
|
||||
{"Allow users to send invites?", "Permitir a los usuarios enviar invitaciones"}.
|
||||
{"Make room password protected?", "Proteger la sala con contraseña"}.
|
||||
{"Allow users to change subject", "Permitir a los usuarios cambiar el asunto"}.
|
||||
{"Allow users to query other users", "Permitir a los usuarios consultar a otros usuarios"}.
|
||||
{"Allow users to send private messages", "Permitir a los usuarios enviar mensajes privados"}.
|
||||
{"Make room public searchable", "Sala públicamente visible"}.
|
||||
{"Make participants list public", "La lista de participantes es pública"}.
|
||||
{"Make room persistent", "Sala permanente"}.
|
||||
{"Make room moderated", "Sala moderada"}.
|
||||
{"Default users as participants", "Los usuarios on participantes por defecto"}.
|
||||
{"Make room members-only", "Sala sólo para miembros"}.
|
||||
{"Allow users to send invites", "Permitir a los usuarios enviar invitaciones"}.
|
||||
{"Make room password protected", "Proteger la sala con contraseña"}.
|
||||
{"Password", "Contraseña"}.
|
||||
{"Make room anonymous?", "Hacer anónima la sala"}.
|
||||
{"Enable logging?", "Guardar históricos"}.
|
||||
{"This room is not anonymous", "Sala no anónima"}.
|
||||
{"Enable logging", "Guardar históricos"}.
|
||||
{"Only moderators and participants are allowed to change subject in this room", "Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}.
|
||||
{"Only moderators are allowed to change subject in this room", "Solo los moderadores pueden cambiar el asunto de esta sala"}.
|
||||
{"Visitors are not allowed to send messages to all occupants", "Los visitantes no pueden enviar mensajes a todos los ocupantes"}.
|
||||
@ -165,6 +165,9 @@
|
||||
{"Invalid role: ~s", "Rol no válido: ~s"}.
|
||||
{"Owner privileges required", "Se requieren privilegios de propietario de la sala"}.
|
||||
{"private, ", "privado"}.
|
||||
{"Make room semianonymous", "Hacer la sala semianónima"}.
|
||||
{"Description", "Descripción"}.
|
||||
{"Number of occupants", "Número de ocupantes"}.
|
||||
|
||||
% mod_irc/mod_irc.erl
|
||||
{"You need an x:data capable client to configure mod_irc settings", "Necesitas un cliente con soporte de x:data para configurar las opciones de mod_irc"}.
|
||||
@ -289,6 +292,25 @@
|
||||
{"JID", "JID"}.
|
||||
{"Fill in fields to search for any matching Jabber User", "Rellena campos para buscar usuarios Jabber que concuerden"}.
|
||||
|
||||
% mod_adhoc.erl
|
||||
{"Commands", "Comandos"}.
|
||||
{"Ping", "Ping"}.
|
||||
{"Pong", "Pong"}.
|
||||
|
||||
% mod_announce.erl
|
||||
{"Really delete message of the day?", "¿Está seguro de quere borrar el mensaje del dia?"}.
|
||||
{"Subject", "Asunto"}.
|
||||
{"Message body", "Cuerpo del mensaje"}.
|
||||
{"No body provided for announce message", "No se ha proporcionado cuerpo de mensaje para el anuncio"}.
|
||||
{"Announcements", "Anuncios"}.
|
||||
{"Send announcement to all users", "Enviar anuncio a todos los usuarios"}.
|
||||
{"Send announcement to all online users", "Enviar anuncio a todos los usuarios conectados"}.
|
||||
{"Send announcement to all online users on all hosts", "Enviar anuncio a todos los usuarios conectados en todos los dominios"}.
|
||||
{"Set message of the day and send to online users", "Poner mensaje del dia y enviar a todos los usuarios conectados"}.
|
||||
{"Update message of the day (don't send)", "Actualizar mensaje del dia, pero no enviarlo"}.
|
||||
{"Delete message of the day", "Borrar mensaje del dia"}.
|
||||
|
||||
% Local Variables:
|
||||
% mode: erlang
|
||||
% End:
|
||||
|
||||
|
@ -84,7 +84,7 @@ process_get({_, true},
|
||||
Host, Request#request{path = RPath,
|
||||
us = US})
|
||||
end;
|
||||
undefined ->
|
||||
unauthorized ->
|
||||
{401,
|
||||
[{"WWW-Authenticate", "basic realm=\"ejabberd\""}],
|
||||
ejabberd_web:make_xhtml([{xmlelement, "h1", [],
|
||||
@ -113,7 +113,7 @@ process_get({_, true},
|
||||
end
|
||||
end;
|
||||
_ ->
|
||||
undefined
|
||||
unauthorized
|
||||
end,
|
||||
case US of
|
||||
{User, Server} ->
|
||||
@ -126,7 +126,7 @@ process_get({_, true},
|
||||
global, Request#request{path = RPath,
|
||||
us = US})
|
||||
end;
|
||||
undefined ->
|
||||
unauthorized ->
|
||||
{401,
|
||||
[{"WWW-Authenticate", "basic realm=\"ejabberd\""}],
|
||||
ejabberd_web:make_xhtml([{xmlelement, "h1", [],
|
||||
|
@ -95,7 +95,7 @@ make_xhtml(Els, global, Lang) ->
|
||||
[?XAE("div",
|
||||
[{"id", "copyright"}],
|
||||
[?XCT("p",
|
||||
"ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One")
|
||||
"ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One")
|
||||
])])])
|
||||
]}};
|
||||
|
||||
@ -150,7 +150,7 @@ make_xhtml(Els, Host, Lang) ->
|
||||
[?XAE("div",
|
||||
[{"id", "copyright"}],
|
||||
[?XCT("p",
|
||||
"ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One")
|
||||
"ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One")
|
||||
])])])
|
||||
]}}.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user