25
1
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:
Alexey Shchepin 2006-02-06 05:12:54 +00:00
parent cf10843071
commit 0cc168a9aa
13 changed files with 166 additions and 74 deletions

View File

@ -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

View File

@ -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

View File

@ -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}.

View File

@ -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

View File

@ -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) ->

View File

@ -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),

View File

@ -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) ->

View File

@ -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).

View File

@ -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).

View File

@ -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).

View File

@ -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:

View File

@ -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", [],

View File

@ -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")
])])])
]}}.