mirror of
https://github.com/processone/ejabberd.git
synced 2024-09-27 14:30:55 +02:00
Get rid of duplicated code
This commit is contained in:
parent
41a0eae0bd
commit
cea23b055b
@ -305,7 +305,7 @@ export_muc_room(Server, Output) ->
|
|||||||
true ->
|
true ->
|
||||||
SName = ejabberd_odbc:escape(Name),
|
SName = ejabberd_odbc:escape(Name),
|
||||||
SRoomHost = ejabberd_odbc:escape(RoomHost),
|
SRoomHost = ejabberd_odbc:escape(RoomHost),
|
||||||
SOpts = mod_muc_odbc:encode_opts(Opts),
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
["delete from muc_room where name='", SName,
|
["delete from muc_room where name='", SName,
|
||||||
"' and host='", SRoomHost, "';",
|
"' and host='", SRoomHost, "';",
|
||||||
"insert into muc_room(name, host, opts) values (",
|
"insert into muc_room(name, host, opts) values (",
|
||||||
@ -345,7 +345,7 @@ export_irc_custom(Server, Output) ->
|
|||||||
jlib:jid_to_string(
|
jlib:jid_to_string(
|
||||||
jlib:make_jid(U, S, ""))),
|
jlib:make_jid(U, S, ""))),
|
||||||
SIRCHost = ejabberd_odbc:escape(IRCHost),
|
SIRCHost = ejabberd_odbc:escape(IRCHost),
|
||||||
SData = mod_irc_odbc:encode_data(Data),
|
SData = ejabberd_odbc:encode_term(Data),
|
||||||
["delete from irc_custom where jid='", SJID,
|
["delete from irc_custom where jid='", SJID,
|
||||||
"' and host='", SIRCHost, "';"
|
"' and host='", SIRCHost, "';"
|
||||||
"insert into irc_custom(jid, host, data) values ("
|
"insert into irc_custom(jid, host, data) values ("
|
||||||
@ -407,7 +407,7 @@ export_sr_group(Server, Output) ->
|
|||||||
fun(Host, #sr_group{group_host = {Group, LServer}, opts = Opts})
|
fun(Host, #sr_group{group_host = {Group, LServer}, opts = Opts})
|
||||||
when LServer == Host ->
|
when LServer == Host ->
|
||||||
SGroup = ejabberd_odbc:escape(Group),
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
SOpts = mod_shared_roster_odbc:encode_opts(Opts),
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
["delete from sr_group where name='", Group, "';"
|
["delete from sr_group where name='", Group, "';"
|
||||||
"insert into sr_group(name, opts) values ('",
|
"insert into sr_group(name, opts) values ('",
|
||||||
SGroup, "', '", SOpts, "');"];
|
SGroup, "', '", SOpts, "');"];
|
||||||
|
@ -742,7 +742,8 @@ announce_motd(Host, Packet) ->
|
|||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun({U, _S, _R}) ->
|
fun({U, _S, _R}) ->
|
||||||
Username = ejabberd_odbc:escape(U),
|
Username = ejabberd_odbc:escape(U),
|
||||||
update_t("motd",
|
odbc_queries:update_t(
|
||||||
|
"motd",
|
||||||
["username", "xml"],
|
["username", "xml"],
|
||||||
[Username, ""],
|
[Username, ""],
|
||||||
["username='", Username, "'"])
|
["username='", Username, "'"])
|
||||||
@ -777,7 +778,8 @@ announce_motd_update(LServer, Packet) ->
|
|||||||
announce_motd_delete(LServer),
|
announce_motd_delete(LServer),
|
||||||
XML = ejabberd_odbc:escape(xml:element_to_binary(Packet)),
|
XML = ejabberd_odbc:escape(xml:element_to_binary(Packet)),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t("motd",
|
odbc_queries:update_t(
|
||||||
|
"motd",
|
||||||
["username", "xml"],
|
["username", "xml"],
|
||||||
["", XML],
|
["", XML],
|
||||||
["username=''"])
|
["username=''"])
|
||||||
@ -829,8 +831,8 @@ send_motd(#jid{luser = LUser, lserver = LServer} = JID) when LUser /= "" ->
|
|||||||
Local = jlib:make_jid("", LServer, ""),
|
Local = jlib:make_jid("", LServer, ""),
|
||||||
ejabberd_router:route(Local, JID, Packet),
|
ejabberd_router:route(Local, JID, Packet),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t(
|
odbc_queries:update_t(
|
||||||
["motd"],
|
"motd",
|
||||||
["username", "xml"],
|
["username", "xml"],
|
||||||
[Username, ""],
|
[Username, ""],
|
||||||
["username='", Username, "'"])
|
["username='", Username, "'"])
|
||||||
@ -881,27 +883,3 @@ send_announcement_to_all(Host, SubjectS, BodyS) ->
|
|||||||
Dest = jlib:make_jid(U, S, R),
|
Dest = jlib:make_jid(U, S, R),
|
||||||
ejabberd_router:route(Local, Dest, Packet)
|
ejabberd_router:route(Local, Dest, Packet)
|
||||||
end, Sessions).
|
end, Sessions).
|
||||||
|
|
||||||
%% Almost a copy of string:join/2.
|
|
||||||
%% We use this version because string:join/2 is relatively
|
|
||||||
%% new function (introduced in R12B-0).
|
|
||||||
join([], _Sep) ->
|
|
||||||
[];
|
|
||||||
join([H|T], Sep) ->
|
|
||||||
[H, [[Sep, X] || X <- T]].
|
|
||||||
|
|
||||||
%% Safe atomic update.
|
|
||||||
update_t(Table, Fields, Vals, Where) ->
|
|
||||||
UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
|
|
||||||
Fields, Vals),
|
|
||||||
case ejabberd_odbc:sql_query_t(
|
|
||||||
["update ", Table, " set ",
|
|
||||||
join(UPairs, ", "),
|
|
||||||
" where ", Where, ";"]) of
|
|
||||||
{updated, 1} ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ejabberd_odbc:sql_query_t(
|
|
||||||
["insert into ", Table, "(", join(Fields, ", "),
|
|
||||||
") values ('", join(Vals, "', '"), "');"])
|
|
||||||
end.
|
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
-export([start_link/2,
|
-export([start_link/2,
|
||||||
start/2,
|
start/2,
|
||||||
stop/1,
|
stop/1,
|
||||||
encode_data/1,
|
|
||||||
closed_connection/3,
|
closed_connection/3,
|
||||||
get_connection_params/3]).
|
get_connection_params/3]).
|
||||||
|
|
||||||
@ -549,7 +548,7 @@ get_form(ServerHost, Host, From, [], Lang) ->
|
|||||||
["select data from irc_custom where "
|
["select data from irc_custom where "
|
||||||
"jid='", SJID, "' and host='", SHost, "';"]) of
|
"jid='", SJID, "' and host='", SHost, "';"]) of
|
||||||
{selected, ["data"], [{SData}]} ->
|
{selected, ["data"], [{SData}]} ->
|
||||||
Data = decode_data(SData),
|
Data = ejabberd_odbc:decode_term(SData),
|
||||||
{xml:get_attr_s(username, Data),
|
{xml:get_attr_s(username, Data),
|
||||||
xml:get_attr_s(connections_params, Data)};
|
xml:get_attr_s(connections_params, Data)};
|
||||||
{'EXIT', _} ->
|
{'EXIT', _} ->
|
||||||
@ -647,7 +646,7 @@ set_form(ServerHost, Host, From, [], _Lang, XData) ->
|
|||||||
{ok, Tokens, _} ->
|
{ok, Tokens, _} ->
|
||||||
case erl_parse:parse_term(Tokens) of
|
case erl_parse:parse_term(Tokens) of
|
||||||
{ok, ConnectionsParams} ->
|
{ok, ConnectionsParams} ->
|
||||||
SData = encode_data(
|
SData = ejabberd_odbc:encode_term(
|
||||||
[{username,
|
[{username,
|
||||||
Username},
|
Username},
|
||||||
{connections_params,
|
{connections_params,
|
||||||
@ -655,7 +654,8 @@ set_form(ServerHost, Host, From, [], _Lang, XData) ->
|
|||||||
case ejabberd_odbc:sql_transaction(
|
case ejabberd_odbc:sql_transaction(
|
||||||
LServer,
|
LServer,
|
||||||
fun() ->
|
fun() ->
|
||||||
update_t("irc_custom",
|
odbc_queries:update_t(
|
||||||
|
"irc_custom",
|
||||||
["jid", "host", "data"],
|
["jid", "host", "data"],
|
||||||
[SJID, SHost, SData],
|
[SJID, SHost, SData],
|
||||||
["jid='", SJID,
|
["jid='", SJID,
|
||||||
@ -715,7 +715,7 @@ get_connection_params(Host, ServerHost, From, IRCServer) ->
|
|||||||
{selected, ["data"], []} ->
|
{selected, ["data"], []} ->
|
||||||
{User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
|
{User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
|
||||||
{selected, ["data"], [{SData}]} ->
|
{selected, ["data"], [{SData}]} ->
|
||||||
Data = decode_data(SData),
|
Data = ejabberd_odbc:decode_term(SData),
|
||||||
Username = xml:get_attr_s(username, Data),
|
Username = xml:get_attr_s(username, Data),
|
||||||
{NewUsername, NewEncoding, NewPort, NewPassword} =
|
{NewUsername, NewEncoding, NewPort, NewPassword} =
|
||||||
case lists:keysearch(
|
case lists:keysearch(
|
||||||
@ -844,7 +844,7 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang,
|
|||||||
Username = User,
|
Username = User,
|
||||||
ConnectionsParams = [];
|
ConnectionsParams = [];
|
||||||
{selected, ["data"], [{Data1}]} ->
|
{selected, ["data"], [{Data1}]} ->
|
||||||
Data = decode_data(Data1),
|
Data = ejabberd_odbc:decode_term(Data1),
|
||||||
Username = xml:get_attr_s(username, Data),
|
Username = xml:get_attr_s(username, Data),
|
||||||
ConnectionsParams = xml:get_attr_s(connections_params, Data)
|
ConnectionsParams = xml:get_attr_s(connections_params, Data)
|
||||||
end,
|
end,
|
||||||
@ -870,12 +870,14 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang,
|
|||||||
if Error /= false ->
|
if Error /= false ->
|
||||||
Error;
|
Error;
|
||||||
Action == "complete" ->
|
Action == "complete" ->
|
||||||
SData = encode_data([{username, Username},
|
SData = ejabberd_odbc:encode_term(
|
||||||
|
[{username, Username},
|
||||||
{connections_params, ConnectionsParams}]),
|
{connections_params, ConnectionsParams}]),
|
||||||
case catch ejabberd_odbc:sql_transaction(
|
case catch ejabberd_odbc:sql_transaction(
|
||||||
LServer,
|
LServer,
|
||||||
fun() ->
|
fun() ->
|
||||||
update_t("irc_custom",
|
odbc_queries:update_t(
|
||||||
|
"irc_custom",
|
||||||
["jid", "host", "data"],
|
["jid", "host", "data"],
|
||||||
[SJID, SHost, SData],
|
[SJID, SHost, SData],
|
||||||
["jid='", SJID,
|
["jid='", SJID,
|
||||||
@ -1029,35 +1031,3 @@ parse_connections_params([{ServerN, Server} | Servers], Encodings, Ports, Passwo
|
|||||||
{NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN),
|
{NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN),
|
||||||
{NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN),
|
{NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN),
|
||||||
[{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)].
|
[{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)].
|
||||||
|
|
||||||
encode_data(Data) ->
|
|
||||||
ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Data))).
|
|
||||||
|
|
||||||
decode_data(Str) ->
|
|
||||||
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
|
|
||||||
{ok, Data} = erl_parse:parse_term(Tokens),
|
|
||||||
Data.
|
|
||||||
|
|
||||||
%% Almost a copy of string:join/2.
|
|
||||||
%% We use this version because string:join/2 is relatively
|
|
||||||
%% new function (introduced in R12B-0).
|
|
||||||
join([], _Sep) ->
|
|
||||||
[];
|
|
||||||
join([H|T], Sep) ->
|
|
||||||
[H, [[Sep, X] || X <- T]].
|
|
||||||
|
|
||||||
%% Safe atomic update.
|
|
||||||
update_t(Table, Fields, Vals, Where) ->
|
|
||||||
UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
|
|
||||||
Fields, Vals),
|
|
||||||
case ejabberd_odbc:sql_query_t(
|
|
||||||
["update ", Table, " set ",
|
|
||||||
join(UPairs, ", "),
|
|
||||||
" where ", Where, ";"]) of
|
|
||||||
{updated, 1} ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ejabberd_odbc:sql_query_t(
|
|
||||||
["insert into ", Table, "(", join(Fields, ", "),
|
|
||||||
") values ('", join(Vals, "', '"), "');"])
|
|
||||||
end.
|
|
||||||
|
@ -41,8 +41,6 @@
|
|||||||
create_room/5,
|
create_room/5,
|
||||||
process_iq_disco_items/4,
|
process_iq_disco_items/4,
|
||||||
broadcast_service_message/2,
|
broadcast_service_message/2,
|
||||||
encode_opts/1,
|
|
||||||
decode_opts/1,
|
|
||||||
can_use_nick/4]).
|
can_use_nick/4]).
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
@ -115,11 +113,12 @@ store_room(ServerHost, Host, Name, Opts) ->
|
|||||||
SName = ejabberd_odbc:escape(Name),
|
SName = ejabberd_odbc:escape(Name),
|
||||||
SHost = ejabberd_odbc:escape(Host),
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
LServer = jlib:nameprep(ServerHost),
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t(
|
odbc_queries:update_t(
|
||||||
"muc_room",
|
"muc_room",
|
||||||
["name", "host", "opts"],
|
["name", "host", "opts"],
|
||||||
[SName, SHost, encode_opts(Opts)],
|
[SName, SHost, SOpts],
|
||||||
["name='", SName, "' and host='", SHost, "'"])
|
["name='", SName, "' and host='", SHost, "'"])
|
||||||
end,
|
end,
|
||||||
ejabberd_odbc:sql_transaction(LServer, F).
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
@ -132,7 +131,7 @@ restore_room(ServerHost, Host, Name) ->
|
|||||||
LServer, ["select opts from muc_room where name='",
|
LServer, ["select opts from muc_room where name='",
|
||||||
SName, "' and host='", SHost, "';"]) of
|
SName, "' and host='", SHost, "';"]) of
|
||||||
{selected, ["opts"], [{Opts}]} ->
|
{selected, ["opts"], [{Opts}]} ->
|
||||||
decode_opts(Opts);
|
ejabberd_odbc:decode_term(Opts);
|
||||||
_ ->
|
_ ->
|
||||||
error
|
error
|
||||||
end.
|
end.
|
||||||
@ -549,7 +548,7 @@ load_permanent_rooms(Host, ServerHost, Access, HistorySize, RoomShaper) ->
|
|||||||
Room,
|
Room,
|
||||||
HistorySize,
|
HistorySize,
|
||||||
RoomShaper,
|
RoomShaper,
|
||||||
decode_opts(Opts),
|
ejabberd_odbc:decode_term(Opts),
|
||||||
?MODULE),
|
?MODULE),
|
||||||
register_room(Host, Room, Pid);
|
register_room(Host, Room, Pid);
|
||||||
_ ->
|
_ ->
|
||||||
@ -577,7 +576,8 @@ start_new_room(Host, ServerHost, Access, Room,
|
|||||||
?DEBUG("MUC: restore room '~s'~n", [Room]),
|
?DEBUG("MUC: restore room '~s'~n", [Room]),
|
||||||
mod_muc_room:start(Host, ServerHost, Access,
|
mod_muc_room:start(Host, ServerHost, Access,
|
||||||
Room, HistorySize,
|
Room, HistorySize,
|
||||||
RoomShaper, decode_opts(Opts), ?MODULE)
|
RoomShaper, ejabberd_odbc:decode_term(Opts),
|
||||||
|
?MODULE)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
register_room(Host, Room, Pid) ->
|
register_room(Host, Room, Pid) ->
|
||||||
@ -766,7 +766,7 @@ iq_set_register_info(ServerHost, Host, From, Nick, Lang) ->
|
|||||||
true
|
true
|
||||||
end,
|
end,
|
||||||
if Allow ->
|
if Allow ->
|
||||||
update_t(
|
odbc_queries:update_t(
|
||||||
"muc_registered",
|
"muc_registered",
|
||||||
["jid", "host", "nick"],
|
["jid", "host", "nick"],
|
||||||
[SJID, SHost, SNick],
|
[SJID, SHost, SNick],
|
||||||
@ -873,35 +873,3 @@ clean_table_from_bad_node(Node, Host) ->
|
|||||||
end, Es)
|
end, Es)
|
||||||
end,
|
end,
|
||||||
mnesia:async_dirty(F).
|
mnesia:async_dirty(F).
|
||||||
|
|
||||||
encode_opts(Opts) ->
|
|
||||||
ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
|
|
||||||
|
|
||||||
decode_opts(Str) ->
|
|
||||||
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
|
|
||||||
{ok, Opts} = erl_parse:parse_term(Tokens),
|
|
||||||
Opts.
|
|
||||||
|
|
||||||
%% Almost a copy of string:join/2.
|
|
||||||
%% We use this version because string:join/2 is relatively
|
|
||||||
%% new function (introduced in R12B-0).
|
|
||||||
join([], _Sep) ->
|
|
||||||
[];
|
|
||||||
join([H|T], Sep) ->
|
|
||||||
[H, [[Sep, X] || X <- T]].
|
|
||||||
|
|
||||||
%% Safe atomic update.
|
|
||||||
update_t(Table, Fields, Vals, Where) ->
|
|
||||||
UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
|
|
||||||
Fields, Vals),
|
|
||||||
case ejabberd_odbc:sql_query_t(
|
|
||||||
["update ", Table, " set ",
|
|
||||||
join(UPairs, ", "),
|
|
||||||
" where ", Where, ";"]) of
|
|
||||||
{updated, 1} ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ejabberd_odbc:sql_query_t(
|
|
||||||
["insert into ", Table, "(", join(Fields, ", "),
|
|
||||||
") values ('", join(Vals, "', '"), "');"])
|
|
||||||
end.
|
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
get_group_explicit_users/2,
|
get_group_explicit_users/2,
|
||||||
is_user_in_group/3,
|
is_user_in_group/3,
|
||||||
add_user_to_group/3,
|
add_user_to_group/3,
|
||||||
encode_opts/1,
|
|
||||||
remove_user_from_group/3]).
|
remove_user_from_group/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
@ -403,7 +402,7 @@ groups_with_opts(Host) ->
|
|||||||
case ejabberd_odbc:sql_query(
|
case ejabberd_odbc:sql_query(
|
||||||
Host, ["select name, opts from sr_group;"]) of
|
Host, ["select name, opts from sr_group;"]) of
|
||||||
{selected, ["name", "opts"], Rs} ->
|
{selected, ["name", "opts"], Rs} ->
|
||||||
[{G, decode_opts(Opts)} || {G, Opts} <- Rs];
|
[{G, ejabberd_odbc:decode_term(Opts)} || {G, Opts} <- Rs];
|
||||||
_ ->
|
_ ->
|
||||||
[]
|
[]
|
||||||
end.
|
end.
|
||||||
@ -413,9 +412,9 @@ create_group(Host, Group) ->
|
|||||||
|
|
||||||
create_group(Host, Group, Opts) ->
|
create_group(Host, Group, Opts) ->
|
||||||
SGroup = ejabberd_odbc:escape(Group),
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
SOpts = encode_opts(Opts),
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t("sr_group",
|
odbc_queries:update_t("sr_group",
|
||||||
["name", "opts"],
|
["name", "opts"],
|
||||||
[SGroup, SOpts],
|
[SGroup, SOpts],
|
||||||
["name='", SGroup, "'"])
|
["name='", SGroup, "'"])
|
||||||
@ -438,16 +437,16 @@ get_group_opts(Host, Group) ->
|
|||||||
Host, ["select opts from sr_group "
|
Host, ["select opts from sr_group "
|
||||||
"where name='", SGroup, "';"]) of
|
"where name='", SGroup, "';"]) of
|
||||||
{selected, ["opts"], [{SOpts}]} ->
|
{selected, ["opts"], [{SOpts}]} ->
|
||||||
decode_opts(SOpts);
|
ejabberd_odbc:decode_term(SOpts);
|
||||||
_ ->
|
_ ->
|
||||||
error
|
error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
set_group_opts(Host, Group, Opts) ->
|
set_group_opts(Host, Group, Opts) ->
|
||||||
SGroup = ejabberd_odbc:escape(Group),
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
SOpts = encode_opts(Opts),
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t("sr_group",
|
odbc_queries:update_t("sr_group",
|
||||||
["name", "opts"],
|
["name", "opts"],
|
||||||
[SGroup, SOpts],
|
[SGroup, SOpts],
|
||||||
["name='", SGroup, "'"])
|
["name='", SGroup, "'"])
|
||||||
@ -473,7 +472,7 @@ is_group_enabled(Host1, Group1) ->
|
|||||||
Host, ["select opts from sr_group "
|
Host, ["select opts from sr_group "
|
||||||
"where name='", SGroup, "';"]) of
|
"where name='", SGroup, "';"]) of
|
||||||
{selected, ["opts"], [{SOpts}]} ->
|
{selected, ["opts"], [{SOpts}]} ->
|
||||||
Opts = decode_opts(SOpts),
|
Opts = ejabberd_odbc:decode_term(SOpts),
|
||||||
not lists:member(disabled, Opts);
|
not lists:member(disabled, Opts);
|
||||||
_ ->
|
_ ->
|
||||||
false
|
false
|
||||||
@ -486,7 +485,7 @@ get_group_opt(Host, Group, Opt, Default) ->
|
|||||||
Host, ["select opts from sr_group "
|
Host, ["select opts from sr_group "
|
||||||
"where name='", SGroup, "';"]) of
|
"where name='", SGroup, "';"]) of
|
||||||
{selected, ["opts"], [{SOpts}]} ->
|
{selected, ["opts"], [{SOpts}]} ->
|
||||||
Opts = decode_opts(SOpts),
|
Opts = ejabberd_odbc:decode_term(SOpts),
|
||||||
case lists:keysearch(Opt, 1, Opts) of
|
case lists:keysearch(Opt, 1, Opts) of
|
||||||
{value, {_, Val}} ->
|
{value, {_, Val}} ->
|
||||||
Val;
|
Val;
|
||||||
@ -659,7 +658,8 @@ add_user_to_group(Host, US, Group) ->
|
|||||||
SJID = make_jid_s(US),
|
SJID = make_jid_s(US),
|
||||||
SGroup = ejabberd_odbc:escape(Group),
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t("sr_user",
|
odbc_queries:update_t(
|
||||||
|
"sr_user",
|
||||||
["jid", "grp"],
|
["jid", "grp"],
|
||||||
[SJID, SGroup],
|
[SJID, SGroup],
|
||||||
["jid='", SJID, "' and grp='", SGroup, "'"])
|
["jid='", SJID, "' and grp='", SGroup, "'"])
|
||||||
@ -1163,35 +1163,3 @@ make_jid_s(U, S) ->
|
|||||||
|
|
||||||
make_jid_s({U, S}) ->
|
make_jid_s({U, S}) ->
|
||||||
make_jid_s(U, S).
|
make_jid_s(U, S).
|
||||||
|
|
||||||
encode_opts(Opts) ->
|
|
||||||
ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
|
|
||||||
|
|
||||||
decode_opts(Str) ->
|
|
||||||
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
|
|
||||||
{ok, Opts} = erl_parse:parse_term(Tokens),
|
|
||||||
Opts.
|
|
||||||
|
|
||||||
%% Almost a copy of string:join/2.
|
|
||||||
%% We use this version because string:join/2 is relatively
|
|
||||||
%% new function (introduced in R12B-0).
|
|
||||||
join([], _Sep) ->
|
|
||||||
[];
|
|
||||||
join([H|T], Sep) ->
|
|
||||||
[H, [[Sep, X] || X <- T]].
|
|
||||||
|
|
||||||
%% Safe atomic update.
|
|
||||||
update_t(Table, Fields, Vals, Where) ->
|
|
||||||
UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
|
|
||||||
Fields, Vals),
|
|
||||||
case ejabberd_odbc:sql_query_t(
|
|
||||||
["update ", Table, " set ",
|
|
||||||
join(UPairs, ", "),
|
|
||||||
" where ", Where, ";"]) of
|
|
||||||
{updated, 1} ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ejabberd_odbc:sql_query_t(
|
|
||||||
["insert into ", Table, "(", join(Fields, ", "),
|
|
||||||
") values ('", join(Vals, "', '"), "');"])
|
|
||||||
end.
|
|
||||||
|
@ -75,8 +75,8 @@ add_xupdate(LUser, LServer, Hash) ->
|
|||||||
Username = ejabberd_odbc:escape(LUser),
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
SHash = ejabberd_odbc:escape(Hash),
|
SHash = ejabberd_odbc:escape(Hash),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
update_t(
|
odbc_queries:update_t(
|
||||||
["vcard_xupdate"],
|
"vcard_xupdate",
|
||||||
["username", "hash"],
|
["username", "hash"],
|
||||||
[Username, SHash],
|
[Username, SHash],
|
||||||
["username='", Username, "'"])
|
["username='", Username, "'"])
|
||||||
@ -131,27 +131,3 @@ build_xphotoel(User, Host) ->
|
|||||||
end,
|
end,
|
||||||
PhotoEl = [{xmlelement, "photo", [], PhotoSubEls}],
|
PhotoEl = [{xmlelement, "photo", [], PhotoSubEls}],
|
||||||
{xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], PhotoEl}.
|
{xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], PhotoEl}.
|
||||||
|
|
||||||
%% Almost a copy of string:join/2.
|
|
||||||
%% We use this version because string:join/2 is relatively
|
|
||||||
%% new function (introduced in R12B-0).
|
|
||||||
join([], _Sep) ->
|
|
||||||
[];
|
|
||||||
join([H|T], Sep) ->
|
|
||||||
[H, [[Sep, X] || X <- T]].
|
|
||||||
|
|
||||||
%% Safe atomic update.
|
|
||||||
update_t(Table, Fields, Vals, Where) ->
|
|
||||||
UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
|
|
||||||
Fields, Vals),
|
|
||||||
case ejabberd_odbc:sql_query_t(
|
|
||||||
["update ", Table, " set ",
|
|
||||||
join(UPairs, ", "),
|
|
||||||
" where ", Where, ";"]) of
|
|
||||||
{updated, 1} ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ejabberd_odbc:sql_query_t(
|
|
||||||
["insert into ", Table, "(", join(Fields, ", "),
|
|
||||||
") values ('", join(Vals, "', '"), "');"])
|
|
||||||
end.
|
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
escape/1,
|
escape/1,
|
||||||
escape_like/1,
|
escape_like/1,
|
||||||
to_bool/1,
|
to_bool/1,
|
||||||
|
encode_term/1,
|
||||||
|
decode_term/1,
|
||||||
keep_alive/1]).
|
keep_alive/1]).
|
||||||
|
|
||||||
%% gen_fsm callbacks
|
%% gen_fsm callbacks
|
||||||
@ -169,6 +171,14 @@ to_bool(true) -> true;
|
|||||||
to_bool(1) -> true;
|
to_bool(1) -> true;
|
||||||
to_bool(_) -> false.
|
to_bool(_) -> false.
|
||||||
|
|
||||||
|
encode_term(Term) ->
|
||||||
|
escape(erl_prettypr:format(erl_syntax:abstract(Term))).
|
||||||
|
|
||||||
|
decode_term(Str) ->
|
||||||
|
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
|
||||||
|
{ok, Term} = erl_parse:parse_term(Tokens),
|
||||||
|
Term.
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% Callback functions from gen_fsm
|
%%% Callback functions from gen_fsm
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
-author("mremond@process-one.net").
|
-author("mremond@process-one.net").
|
||||||
|
|
||||||
-export([get_db_type/0,
|
-export([get_db_type/0,
|
||||||
|
update_t/4,
|
||||||
sql_transaction/2,
|
sql_transaction/2,
|
||||||
get_last/2,
|
get_last/2,
|
||||||
set_last_t/4,
|
set_last_t/4,
|
||||||
|
Loading…
Reference in New Issue
Block a user