* src/jd2ejd.erl: Updated to work with ODBC
* src/mod_roster_odbc.erl: Updated * src/mod_offline_odbc.erl: Bugfix * src/mod_last_odbc.erl: Bugfix SVN Revision: 379
This commit is contained in:
parent
d520f35819
commit
02d3151ee7
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2005-07-26 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/jd2ejd.erl: Updated to work with ODBC
|
||||||
|
|
||||||
|
* src/mod_roster_odbc.erl: Updated
|
||||||
|
|
||||||
|
2005-07-22 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/mod_offline_odbc.erl: Bugfix
|
||||||
|
|
||||||
|
* src/mod_last_odbc.erl: Bugfix
|
||||||
|
|
||||||
2005-07-20 Alexey Shchepin <alexey@sevcom.net>
|
2005-07-20 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/mod_pubsub/mod_pubsub.erl: Updated to J-EAI version
|
* src/mod_pubsub/mod_pubsub.erl: Updated to J-EAI version
|
||||||
|
|
|
@ -99,37 +99,55 @@ xdb_data(User, Server, {xmlcdata, _CData}) ->
|
||||||
ok;
|
ok;
|
||||||
xdb_data(User, Server, {xmlelement, _Name, Attrs, _Els} = El) ->
|
xdb_data(User, Server, {xmlelement, _Name, Attrs, _Els} = El) ->
|
||||||
From = jlib:make_jid(User, Server, ""),
|
From = jlib:make_jid(User, Server, ""),
|
||||||
|
LServer = jlib:nameprep(Server),
|
||||||
case xml:get_attr_s("xmlns", Attrs) of
|
case xml:get_attr_s("xmlns", Attrs) of
|
||||||
?NS_AUTH ->
|
?NS_AUTH ->
|
||||||
Password = xml:get_tag_cdata(El),
|
Password = xml:get_tag_cdata(El),
|
||||||
ejabberd_auth:set_password(User, Server, Password),
|
ejabberd_auth:set_password(User, Server, Password),
|
||||||
ok;
|
ok;
|
||||||
?NS_ROSTER ->
|
?NS_ROSTER ->
|
||||||
catch mod_roster:set_items(User, Server, El),
|
case lists:member(mod_roster_odbc,
|
||||||
|
gen_mod:loaded_modules(LServer)) of
|
||||||
|
true ->
|
||||||
|
catch mod_roster_odbc:set_items(User, Server, El);
|
||||||
|
false ->
|
||||||
|
catch mod_roster:set_items(User, Server, El)
|
||||||
|
end,
|
||||||
ok;
|
ok;
|
||||||
?NS_LAST ->
|
?NS_LAST ->
|
||||||
TimeStamp = xml:get_attr_s("last", Attrs),
|
TimeStamp = xml:get_attr_s("last", Attrs),
|
||||||
Status = xml:get_tag_cdata(El),
|
Status = xml:get_tag_cdata(El),
|
||||||
catch mod_last:store_last_info(User,
|
case lists:member(mod_last_odbc,
|
||||||
Server,
|
gen_mod:loaded_modules(LServer)) of
|
||||||
list_to_integer(TimeStamp),
|
true ->
|
||||||
Status),
|
catch mod_last_odbc:store_last_info(
|
||||||
|
User,
|
||||||
|
Server,
|
||||||
|
list_to_integer(TimeStamp),
|
||||||
|
Status);
|
||||||
|
false ->
|
||||||
|
catch mod_last:store_last_info(
|
||||||
|
User,
|
||||||
|
Server,
|
||||||
|
list_to_integer(TimeStamp),
|
||||||
|
Status)
|
||||||
|
end,
|
||||||
ok;
|
ok;
|
||||||
?NS_VCARD ->
|
?NS_VCARD ->
|
||||||
catch mod_vcard:process_sm_iq(
|
catch mod_vcard:process_sm_iq(
|
||||||
From,
|
From,
|
||||||
jlib:make_jid("", ?MYNAME, ""),
|
jlib:make_jid("", Server, ""),
|
||||||
#iq{type = set, xmlns = ?NS_VCARD, sub_el = El}),
|
#iq{type = set, xmlns = ?NS_VCARD, sub_el = El}),
|
||||||
ok;
|
ok;
|
||||||
"jabber:x:offline" ->
|
"jabber:x:offline" ->
|
||||||
process_offline(From, El),
|
process_offline(Server, From, El),
|
||||||
ok;
|
ok;
|
||||||
XMLNS ->
|
XMLNS ->
|
||||||
case xml:get_attr_s("j_private_flag", Attrs) of
|
case xml:get_attr_s("j_private_flag", Attrs) of
|
||||||
"1" ->
|
"1" ->
|
||||||
catch mod_private:process_sm_iq(
|
catch mod_private:process_sm_iq(
|
||||||
From,
|
From,
|
||||||
jlib:make_jid("", ?MYNAME, ""),
|
jlib:make_jid("", Server, ""),
|
||||||
#iq{type = set, xmlns = ?NS_PRIVATE,
|
#iq{type = set, xmlns = ?NS_PRIVATE,
|
||||||
sub_el = {xmlelement, "query", [],
|
sub_el = {xmlelement, "query", [],
|
||||||
[jlib:remove_attr(
|
[jlib:remove_attr(
|
||||||
|
@ -142,12 +160,13 @@ xdb_data(User, Server, {xmlelement, _Name, Attrs, _Els} = El) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
process_offline(To, {xmlelement, _, _, Els}) ->
|
process_offline(Server, To, {xmlelement, _, _, Els}) ->
|
||||||
|
LServer = jlib:nameprep(Server),
|
||||||
lists:foreach(fun({xmlelement, _, Attrs, _} = El) ->
|
lists:foreach(fun({xmlelement, _, Attrs, _} = El) ->
|
||||||
FromS = xml:get_attr_s("from", Attrs),
|
FromS = xml:get_attr_s("from", Attrs),
|
||||||
From = case FromS of
|
From = case FromS of
|
||||||
"" ->
|
"" ->
|
||||||
jlib:make_jid("", ?MYNAME, "");
|
jlib:make_jid("", Server, "");
|
||||||
_ ->
|
_ ->
|
||||||
jlib:string_to_jid(FromS)
|
jlib:string_to_jid(FromS)
|
||||||
end,
|
end,
|
||||||
|
@ -155,7 +174,9 @@ process_offline(To, {xmlelement, _, _, Els}) ->
|
||||||
error ->
|
error ->
|
||||||
ok;
|
ok;
|
||||||
_ ->
|
_ ->
|
||||||
catch mod_offline:store_packet(From, To, El)
|
ejabberd_hooks:run(offline_message_hook,
|
||||||
|
LServer,
|
||||||
|
[From, To, El])
|
||||||
end
|
end
|
||||||
end, Els).
|
end, Els).
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ process_sm_iq(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
|
||||||
{Subscription, _Groups} =
|
{Subscription, _Groups} =
|
||||||
ejabberd_hooks:run_fold(
|
ejabberd_hooks:run_fold(
|
||||||
roster_get_jid_info, Server,
|
roster_get_jid_info, Server,
|
||||||
{none, []}, [User, From]),
|
{none, []}, [User, Server, From]),
|
||||||
if
|
if
|
||||||
(Subscription == both) or (Subscription == from) ->
|
(Subscription == both) or (Subscription == from) ->
|
||||||
case catch mod_privacy:get_user_list(User, Server) of
|
case catch mod_privacy:get_user_list(User, Server) of
|
||||||
|
@ -130,7 +130,7 @@ on_presence_update(User, Server, _Resource, Status) ->
|
||||||
|
|
||||||
store_last_info(User, Server, TimeStamp, Status) ->
|
store_last_info(User, Server, TimeStamp, Status) ->
|
||||||
LUser = jlib:nodeprep(User),
|
LUser = jlib:nodeprep(User),
|
||||||
LServer = jlib:nameprep(User),
|
LServer = jlib:nameprep(Server),
|
||||||
Username = ejabberd_odbc:escape(LUser),
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
Seconds = ejabberd_odbc:escape(integer_to_list(TimeStamp)),
|
Seconds = ejabberd_odbc:escape(integer_to_list(TimeStamp)),
|
||||||
State = ejabberd_odbc:escape(Status),
|
State = ejabberd_odbc:escape(Status),
|
||||||
|
|
|
@ -217,7 +217,10 @@ pop_offline_messages(Ls, User, Server) ->
|
||||||
"select * from spool where username='", EUser, "';"
|
"select * from spool where username='", EUser, "';"
|
||||||
"delete from spool where username='", EUser, "';"
|
"delete from spool where username='", EUser, "';"
|
||||||
"commit"]) of
|
"commit"]) of
|
||||||
{selected, ["username","xml"], Rs} ->
|
[{updated, undefined},
|
||||||
|
{selected, ["username","xml"], Rs},
|
||||||
|
{updated, _},
|
||||||
|
{updated, undefined}] ->
|
||||||
Ls ++ lists:flatmap(
|
Ls ++ lists:flatmap(
|
||||||
fun({_, XML}) ->
|
fun({_, XML}) ->
|
||||||
case xml_stream:parse_element(XML) of
|
case xml_stream:parse_element(XML) of
|
||||||
|
|
|
@ -30,7 +30,9 @@
|
||||||
jid,
|
jid,
|
||||||
name = "",
|
name = "",
|
||||||
subscription = none,
|
subscription = none,
|
||||||
ask = none}).
|
ask = none,
|
||||||
|
groups = []
|
||||||
|
}).
|
||||||
|
|
||||||
start(Host, Opts) ->
|
start(Host, Opts) ->
|
||||||
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
|
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
|
||||||
|
@ -118,13 +120,30 @@ process_iq_get(From, _To, #iq{sub_el = SubEl} = IQ) ->
|
||||||
{selected, ["username", "jid", "nick", "subscription", "ask",
|
{selected, ["username", "jid", "nick", "subscription", "ask",
|
||||||
"server", "subscribe", "type"],
|
"server", "subscribe", "type"],
|
||||||
Items} when is_list(Items) ->
|
Items} when is_list(Items) ->
|
||||||
|
JIDGroups = case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer,
|
||||||
|
["select jid, grp from rostergroups "
|
||||||
|
"where username='", Username, "'"]) of
|
||||||
|
{selected, ["jid","grp"],
|
||||||
|
JGrps} when is_list(JGrps) ->
|
||||||
|
JGrps;
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
XItems = lists:flatmap(
|
XItems = lists:flatmap(
|
||||||
fun(I) ->
|
fun(I) ->
|
||||||
case raw_to_record(I) of
|
case raw_to_record(I) of
|
||||||
error ->
|
error ->
|
||||||
[];
|
[];
|
||||||
R ->
|
R ->
|
||||||
[item_to_xml(R)]
|
SJID = jlib:jid_to_string(R#roster.jid),
|
||||||
|
Groups = lists:flatmap(
|
||||||
|
fun({S, G}) when S == SJID ->
|
||||||
|
[G];
|
||||||
|
(_) ->
|
||||||
|
[]
|
||||||
|
end, JIDGroups),
|
||||||
|
[item_to_xml(R#roster{groups = Groups})]
|
||||||
end
|
end
|
||||||
end, Items),
|
end, Items),
|
||||||
IQ#iq{type = result,
|
IQ#iq{type = result,
|
||||||
|
@ -188,11 +207,9 @@ item_to_xml(Item) ->
|
||||||
_ ->
|
_ ->
|
||||||
Attrs3
|
Attrs3
|
||||||
end,
|
end,
|
||||||
% TODO
|
SubEls = lists:map(fun(G) ->
|
||||||
%SubEls = lists:map(fun(G) ->
|
{xmlelement, "group", [], [{xmlcdata, G}]}
|
||||||
% {xmlelement, "group", [], [{xmlcdata, G}]}
|
end, Item#roster.groups),
|
||||||
% end, Item#roster.groups),
|
|
||||||
SubEls = [],
|
|
||||||
{xmlelement, "item", Attrs, SubEls}.
|
{xmlelement, "item", Attrs, SubEls}.
|
||||||
|
|
||||||
|
|
||||||
|
@ -231,7 +248,8 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
|
||||||
name = ""}
|
name = ""}
|
||||||
end,
|
end,
|
||||||
Item1 = process_item_attrs(Item, Attrs),
|
Item1 = process_item_attrs(Item, Attrs),
|
||||||
case Item1#roster.subscription of
|
Item2 = process_item_els(Item1, Els),
|
||||||
|
case Item2#roster.subscription of
|
||||||
remove ->
|
remove ->
|
||||||
catch ejabberd_odbc:sql_query(
|
catch ejabberd_odbc:sql_query(
|
||||||
LServer,
|
LServer,
|
||||||
|
@ -244,7 +262,8 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
|
||||||
" and jid='", SJID, "';"
|
" and jid='", SJID, "';"
|
||||||
"commit"]);
|
"commit"]);
|
||||||
_ ->
|
_ ->
|
||||||
ItemVals = record_to_string(Item1),
|
ItemVals = record_to_string(Item2),
|
||||||
|
ItemGroups = groups_to_string(Item2),
|
||||||
catch ejabberd_odbc:sql_query(
|
catch ejabberd_odbc:sql_query(
|
||||||
LServer,
|
LServer,
|
||||||
["begin;"
|
["begin;"
|
||||||
|
@ -258,12 +277,15 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
|
||||||
" values ", ItemVals, ";"
|
" values ", ItemVals, ";"
|
||||||
"delete from rostergroups "
|
"delete from rostergroups "
|
||||||
" where username='", Username, "' "
|
" where username='", Username, "' "
|
||||||
" and jid='", SJID, "';"
|
" and jid='", SJID, "';",
|
||||||
% TODO
|
[["insert into rostergroups("
|
||||||
|
" username, jid, grp) "
|
||||||
|
" values ", ItemGroup, ";"] ||
|
||||||
|
ItemGroup <- ItemGroups],
|
||||||
"commit"])
|
"commit"])
|
||||||
end,
|
end,
|
||||||
push_item(User, To, Item1),
|
push_item(User, LServer, To, Item2),
|
||||||
case Item1#roster.subscription of
|
case Item2#roster.subscription of
|
||||||
remove ->
|
remove ->
|
||||||
IsTo = case Item#roster.subscription of
|
IsTo = case Item#roster.subscription of
|
||||||
both -> true;
|
both -> true;
|
||||||
|
@ -334,49 +356,42 @@ process_item_attrs(Item, []) ->
|
||||||
Item.
|
Item.
|
||||||
|
|
||||||
|
|
||||||
% TODO
|
process_item_els(Item, [{xmlelement, Name, Attrs, SEls} | Els]) ->
|
||||||
%process_item_els(Item, [{xmlelement, Name, Attrs, SEls} | Els]) ->
|
case Name of
|
||||||
% case Name of
|
"group" ->
|
||||||
% "group" ->
|
Groups = [xml:get_cdata(SEls) | Item#roster.groups],
|
||||||
% Groups = [xml:get_cdata(SEls) | Item#roster.groups],
|
process_item_els(Item#roster{groups = Groups}, Els);
|
||||||
% process_item_els(Item#roster{groups = Groups}, Els);
|
_ ->
|
||||||
% _ ->
|
process_item_els(Item, Els)
|
||||||
% case xml:get_attr_s("xmlns", Attrs) of
|
end;
|
||||||
% "" ->
|
|
||||||
% process_item_els(Item, Els);
|
|
||||||
% _ ->
|
|
||||||
% XEls = [{xmlelement, Name, Attrs, SEls} | Item#roster.xs],
|
|
||||||
% process_item_els(Item#roster{xs = XEls}, Els)
|
|
||||||
% end
|
|
||||||
% end;
|
|
||||||
process_item_els(Item, [{xmlcdata, _} | Els]) ->
|
process_item_els(Item, [{xmlcdata, _} | Els]) ->
|
||||||
process_item_els(Item, Els);
|
process_item_els(Item, Els);
|
||||||
process_item_els(Item, []) ->
|
process_item_els(Item, []) ->
|
||||||
Item.
|
Item.
|
||||||
|
|
||||||
|
|
||||||
push_item(User, From, Item) ->
|
push_item(User, Server, From, Item) ->
|
||||||
ejabberd_sm:route(jlib:make_jid("", "", ""),
|
ejabberd_sm:route(jlib:make_jid("", "", ""),
|
||||||
jlib:make_jid(User, "", ""),
|
jlib:make_jid(User, Server, ""),
|
||||||
{xmlelement, "broadcast", [],
|
{xmlelement, "broadcast", [],
|
||||||
[{item,
|
[{item,
|
||||||
Item#roster.jid,
|
Item#roster.jid,
|
||||||
Item#roster.subscription}]}),
|
Item#roster.subscription}]}),
|
||||||
lists:foreach(fun(Resource) ->
|
lists:foreach(fun(Resource) ->
|
||||||
push_item(User, Resource, From, Item)
|
push_item(User, Server, Resource, From, Item)
|
||||||
end, ejabberd_sm:get_user_resources(User, 'TODO')).
|
end, ejabberd_sm:get_user_resources(User, Server)).
|
||||||
|
|
||||||
% TODO: don't push to those who not load roster
|
% TODO: don't push to those who not load roster
|
||||||
-ifdef(PSI_ROSTER_WORKAROUND).
|
-ifdef(PSI_ROSTER_WORKAROUND).
|
||||||
|
|
||||||
push_item(User, Resource, _From, Item) ->
|
push_item(User, Server, Resource, _From, Item) ->
|
||||||
ResIQ = #iq{type = set, xmlns = ?NS_ROSTER,
|
ResIQ = #iq{type = set, xmlns = ?NS_ROSTER,
|
||||||
sub_el = [{xmlelement, "query",
|
sub_el = [{xmlelement, "query",
|
||||||
[{"xmlns", ?NS_ROSTER}],
|
[{"xmlns", ?NS_ROSTER}],
|
||||||
[item_to_xml(Item)]}]},
|
[item_to_xml(Item)]}]},
|
||||||
ejabberd_router:route(
|
ejabberd_router:route(
|
||||||
jlib:make_jid(User, ?MYNAME, Resource),
|
jlib:make_jid(User, Server, Resource),
|
||||||
jlib:make_jid(User, ?MYNAME, Resource),
|
jlib:make_jid(User, Server, Resource),
|
||||||
jlib:iq_to_xml(ResIQ)).
|
jlib:iq_to_xml(ResIQ)).
|
||||||
|
|
||||||
-else.
|
-else.
|
||||||
|
@ -388,7 +403,7 @@ push_item(User, Resource, From, Item) ->
|
||||||
[item_to_xml(Item)]}]},
|
[item_to_xml(Item)]}]},
|
||||||
ejabberd_router:route(
|
ejabberd_router:route(
|
||||||
From,
|
From,
|
||||||
jlib:make_jid(User, ?MYNAME, Resource),
|
jlib:make_jid(User, Server, Resource),
|
||||||
jlib:iq_to_xml(ResIQ)).
|
jlib:iq_to_xml(ResIQ)).
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
@ -505,12 +520,12 @@ process_subscription(Direction, User, Server, JID1, Type) ->
|
||||||
unsubscribed -> "unsubscribed"
|
unsubscribed -> "unsubscribed"
|
||||||
end,
|
end,
|
||||||
ejabberd_router:route(
|
ejabberd_router:route(
|
||||||
jlib:make_jid(User, ?MYNAME, ""), JID1,
|
jlib:make_jid(User, Server, ""), JID1,
|
||||||
{xmlelement, "presence", [{"type", T}], []})
|
{xmlelement, "presence", [{"type", T}], []})
|
||||||
end,
|
end,
|
||||||
case Push of
|
case Push of
|
||||||
{push, PushItem} ->
|
{push, PushItem} ->
|
||||||
push_item(User, jlib:make_jid("", ?MYNAME, ""), PushItem),
|
push_item(User, Server, jlib:make_jid("", Server, ""), PushItem),
|
||||||
true;
|
true;
|
||||||
none ->
|
none ->
|
||||||
false
|
false
|
||||||
|
@ -628,66 +643,58 @@ set_items(User, Server, SubEl) ->
|
||||||
{xmlelement, _Name, _Attrs, Els} = SubEl,
|
{xmlelement, _Name, _Attrs, Els} = SubEl,
|
||||||
LUser = jlib:nodeprep(User),
|
LUser = jlib:nodeprep(User),
|
||||||
LServer = jlib:nameprep(Server),
|
LServer = jlib:nameprep(Server),
|
||||||
F = fun() ->
|
catch ejabberd_odbc:sql_query(
|
||||||
lists:foreach(fun(El) ->
|
LServer,
|
||||||
process_item_set_t(LUser, LServer, El)
|
["begin;",
|
||||||
end, Els)
|
lists:map(fun(El) ->
|
||||||
end,
|
process_item_set_t(LUser, LServer, El)
|
||||||
mnesia:transaction(F).
|
end, Els),
|
||||||
|
"commit"]).
|
||||||
|
|
||||||
process_item_set_t(LUser, LServer, {xmlelement, _Name, Attrs, Els}) ->
|
process_item_set_t(LUser, LServer, {xmlelement, _Name, Attrs, Els}) ->
|
||||||
JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
|
JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
|
||||||
case JID1 of
|
case JID1 of
|
||||||
error ->
|
error ->
|
||||||
ok;
|
[];
|
||||||
_ ->
|
_ ->
|
||||||
JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
|
JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
|
||||||
LJID = {JID1#jid.luser, JID1#jid.lserver, JID1#jid.lresource},
|
LJID = {JID1#jid.luser, JID1#jid.lserver, JID1#jid.lresource},
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
SJID = ejabberd_odbc:escape(jlib:jid_to_string(LJID)),
|
||||||
Item = #roster{user = LUser,
|
Item = #roster{user = LUser,
|
||||||
jid = LJID},
|
jid = LJID},
|
||||||
Item1 = process_item_attrs_ws(Item, Attrs),
|
Item1 = process_item_attrs_ws(Item, Attrs),
|
||||||
Item2 = process_item_els(Item1, Els),
|
Item2 = process_item_els(Item1, Els),
|
||||||
case Item2#roster.subscription of
|
case Item2#roster.subscription of
|
||||||
remove ->
|
remove ->
|
||||||
mnesia:delete({roster, {LUser, LJID}});
|
["delete from rosterusers "
|
||||||
_ ->
|
" where username='", Username, "' "
|
||||||
mnesia:write(Item2)
|
" and jid='", SJID, "';"
|
||||||
|
"delete from rostergroups "
|
||||||
|
" where username='", Username, "' "
|
||||||
|
" and jid='", SJID, "';"];
|
||||||
|
_ ->
|
||||||
|
ItemVals = record_to_string(Item1),
|
||||||
|
ItemGroups = groups_to_string(Item2),
|
||||||
|
["delete from rosterusers "
|
||||||
|
" where username='", Username, "' "
|
||||||
|
" and jid='", SJID, "';"
|
||||||
|
"insert into rosterusers("
|
||||||
|
" username, jid, nick, "
|
||||||
|
" subscription, ask, "
|
||||||
|
" server, subscribe, type) "
|
||||||
|
" values ", ItemVals, ";"
|
||||||
|
"delete from rostergroups "
|
||||||
|
" where username='", Username, "' "
|
||||||
|
" and jid='", SJID, "';",
|
||||||
|
[["insert into rostergroups("
|
||||||
|
" username, jid, grp) "
|
||||||
|
" values ", ItemGroup, ";"] ||
|
||||||
|
ItemGroup <- ItemGroups]]
|
||||||
end
|
end
|
||||||
% TODO
|
|
||||||
%case Item2#roster.subscription of
|
|
||||||
% remove ->
|
|
||||||
% catch ejabberd_odbc:sql_query(
|
|
||||||
% LServer,
|
|
||||||
% ["begin;"
|
|
||||||
% "delete from rosterusers "
|
|
||||||
% " where username='", Username, "' "
|
|
||||||
% " and jid='", SJID, "';"
|
|
||||||
% "delete from rostergroups "
|
|
||||||
% " where username='", Username, "' "
|
|
||||||
% " and jid='", SJID, "';"
|
|
||||||
% "commit"]);
|
|
||||||
% _ ->
|
|
||||||
% ItemVals = record_to_string(Item1),
|
|
||||||
% catch ejabberd_odbc:sql_query(
|
|
||||||
% LServer,
|
|
||||||
% ["begin;"
|
|
||||||
% "delete from rosterusers "
|
|
||||||
% " where username='", Username, "' "
|
|
||||||
% " and jid='", SJID, "';"
|
|
||||||
% "insert into rosterusers("
|
|
||||||
% " username, jid, nick, "
|
|
||||||
% " subscription, ask, "
|
|
||||||
% " server, subscribe, type) "
|
|
||||||
% " values ", ItemVals, ";"
|
|
||||||
% "delete from rostergroups "
|
|
||||||
% " where username='", Username, "' "
|
|
||||||
% " and jid='", SJID, "';"
|
|
||||||
% % TODO
|
|
||||||
% "commit"])
|
|
||||||
%end
|
|
||||||
end;
|
end;
|
||||||
process_item_set_t(_LUser, _LServer, _) ->
|
process_item_set_t(_LUser, _LServer, _) ->
|
||||||
ok.
|
[].
|
||||||
|
|
||||||
process_item_attrs_ws(Item, [{Attr, Val} | Attrs]) ->
|
process_item_attrs_ws(Item, [{Attr, Val} | Attrs]) ->
|
||||||
case Attr of
|
case Attr of
|
||||||
|
@ -733,28 +740,69 @@ process_item_attrs_ws(Item, []) ->
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
get_jid_info(_, User, Server, JID) ->
|
get_jid_info(_, User, Server, JID) ->
|
||||||
% TODO
|
LUser = jlib:nodeprep(User),
|
||||||
% LUser = jlib:nodeprep(User),
|
LServer = jlib:nameprep(Server),
|
||||||
% LJID = jlib:jid_tolower(JID),
|
LJID = jlib:jid_tolower(JID),
|
||||||
% case catch mnesia:dirty_read(roster, {LUser, LJID}) of
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
% [#roster{subscription = Subscription, groups = Groups}] ->
|
SJID = ejabberd_odbc:escape(jlib:jid_to_string(LJID)),
|
||||||
% {Subscription, Groups};
|
case catch ejabberd_odbc:sql_query(
|
||||||
% _ ->
|
LServer,
|
||||||
% LRJID = jlib:jid_tolower(jlib:jid_remove_resource(JID)),
|
["select subscription from rosterusers "
|
||||||
% if
|
"where username='", Username, "' "
|
||||||
% LRJID == LJID ->
|
"and jid='", SJID, "'"]) of
|
||||||
% {none, []};
|
{selected, ["subscription"], [{SSubscription}]} ->
|
||||||
% true ->
|
Subscription = case SSubscription of
|
||||||
% case catch mnesia:dirty_read(roster, {LUser, LRJID}) of
|
"B" -> both;
|
||||||
% [#roster{subscription = Subscription,
|
"T" -> to;
|
||||||
% groups = Groups}] ->
|
"F" -> from;
|
||||||
% {Subscription, Groups};
|
_ -> none
|
||||||
% _ ->
|
end,
|
||||||
% {none, []}
|
Groups = case catch ejabberd_odbc:sql_query(
|
||||||
% end
|
LServer,
|
||||||
% end
|
["select grp from rostergroups "
|
||||||
% end.
|
"where username='", Username, "' "
|
||||||
{none, []}.
|
"and jid='", SJID, "'"]) of
|
||||||
|
{selected, ["grp"], JGrps} when is_list(JGrps) ->
|
||||||
|
JGrps;
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
{Subscription, Groups};
|
||||||
|
_ ->
|
||||||
|
LRJID = jlib:jid_tolower(jlib:jid_remove_resource(JID)),
|
||||||
|
if
|
||||||
|
LRJID == LJID ->
|
||||||
|
{none, []};
|
||||||
|
true ->
|
||||||
|
SRJID = ejabberd_odbc:escape(jlib:jid_to_string(LRJID)),
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer,
|
||||||
|
["select subscription from rosterusers "
|
||||||
|
"where username='", Username, "' "
|
||||||
|
"and jid='", SRJID, "'"]) of
|
||||||
|
{selected, ["subscription"], [{SSubscription}]} ->
|
||||||
|
Subscription = case SSubscription of
|
||||||
|
"B" -> both;
|
||||||
|
"T" -> to;
|
||||||
|
"F" -> from;
|
||||||
|
_ -> none
|
||||||
|
end,
|
||||||
|
Groups = case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer,
|
||||||
|
["select grp from rostergroups "
|
||||||
|
"where username='", Username, "' "
|
||||||
|
"and jid='", SRJID, "'"]) of
|
||||||
|
{selected, ["grp"], JGrps} when is_list(JGrps) ->
|
||||||
|
JGrps;
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
{Subscription, Groups};
|
||||||
|
_ ->
|
||||||
|
{none, []}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
@ -816,3 +864,13 @@ record_to_string(#roster{user = User,
|
||||||
"'", SAsk, "',"
|
"'", SAsk, "',"
|
||||||
"'N', '', 'item')"].
|
"'N', '', 'item')"].
|
||||||
|
|
||||||
|
groups_to_string(#roster{user = User,
|
||||||
|
jid = JID,
|
||||||
|
groups = Groups}) ->
|
||||||
|
Username = ejabberd_odbc:escape(User),
|
||||||
|
SJID = ejabberd_odbc:escape(jlib:jid_to_string(JID)),
|
||||||
|
[["("
|
||||||
|
"'", Username, "',"
|
||||||
|
"'", SJID, "',"
|
||||||
|
"'", ejabberd_odbc:escape(Group), "')"] || Group <- Groups].
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue