24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-24 22:25:47 +02:00

* src/odbc/pg.sql: Updated

* src/mod_shared_roster.erl: Updated

* src/ejabberd_sm.erl: Bugfix

* src/mod_roster.erl: Bugfix
* src/mod_roster_odbc.erl: Likewise

SVN Revision: 570
This commit is contained in:
Alexey Shchepin 2006-05-26 00:00:32 +00:00
parent 42cdf80cd4
commit c737ce1b8c
6 changed files with 102 additions and 74 deletions

View File

@ -1,3 +1,14 @@
2006-05-26 Alexey Shchepin <alexey@sevcom.net>
* src/odbc/pg.sql: Updated
* src/mod_shared_roster.erl: Updated
* src/ejabberd_sm.erl: Bugfix
* src/mod_roster.erl: Bugfix
* src/mod_roster_odbc.erl: Likewise
2006-05-23 Mickael Remond <mickael.remond@process-one.net> 2006-05-23 Mickael Remond <mickael.remond@process-one.net>
* src/mod_roster.erl: The subscribe request are now resend at login as * src/mod_roster.erl: The subscribe request are now resend at login as

View File

@ -8,7 +8,6 @@
-module(ejabberd_sm). -module(ejabberd_sm).
-author('alexey@sevcom.net'). -author('alexey@sevcom.net').
-vsn('$Revision$ ').
-behaviour(gen_server). -behaviour(gen_server).
@ -306,8 +305,9 @@ do_route(From, To, Packet) ->
{Pass, Subsc} = {Pass, Subsc} =
case xml:get_attr_s("type", Attrs) of case xml:get_attr_s("type", Attrs) of
"subscribe" -> "subscribe" ->
Reason = xml:get_tag_cdata( Reason = xml:get_path_s(
xml:get_subtag(Packet, "status")), Packet,
[{elem, "status"}, cdata]),
{ejabberd_hooks:run_fold( {ejabberd_hooks:run_fold(
roster_in_subscription, roster_in_subscription,
LServer, LServer,

View File

@ -417,7 +417,7 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
AskMessage = case NewState of AskMessage = case NewState of
{_, both} -> Reason; {_, both} -> Reason;
{_, in} -> Reason; {_, in} -> Reason;
{_, _} -> [] _ -> ""
end, end,
case NewState of case NewState of
none -> none ->
@ -641,35 +641,37 @@ process_item_attrs_ws(Item, []) ->
Item. Item.
get_in_pending_subscriptions(Ls, User, Server) -> get_in_pending_subscriptions(Ls, User, Server) ->
JID = jlib:make_jid(User, Server,""), JID = jlib:make_jid(User, Server, ""),
case mnesia:dirty_index_read(roster, {User,Server}, #roster.us) of US = {JID#jid.luser, JID#jid.lserver},
case mnesia:dirty_index_read(roster, US, #roster.us) of
Result when list(Result) -> Result when list(Result) ->
Ls ++ lists:map( Ls ++ lists:map(
fun(R) -> fun(R) ->
Message = R#roster.askmessage, Message = R#roster.askmessage,
Status = if is_binary(Message) -> Status = if is_binary(Message) ->
binary_to_list(Message); binary_to_list(Message);
true -> true ->
[] ""
end, end,
{xmlelement, "presence", [{"from", jlib:jid_to_string(R#roster.jid)}, {xmlelement, "presence",
{"to", jlib:jid_to_string(JID)}, [{"from", jlib:jid_to_string(R#roster.jid)},
{"type", "subscribe"}], {"to", jlib:jid_to_string(JID)},
[{xmlelement, "status", [], {"type", "subscribe"}],
[{xmlcdata, Status}]}]} [{xmlelement, "status", [],
end, [{xmlcdata, Status}]}]}
lists:filter( end,
fun(R) -> lists:filter(
case R#roster.ask of fun(R) ->
in -> true; case R#roster.ask of
both -> true; in -> true;
_ -> false both -> true;
end _ -> false
end, end
Result)); end,
_ -> [] Result));
_ ->
Ls
end. end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -8,7 +8,6 @@
-module(mod_roster_odbc). -module(mod_roster_odbc).
-author('alexey@sevcom.net'). -author('alexey@sevcom.net').
-vsn('$Revision$ ').
-behaviour(gen_mod). -behaviour(gen_mod).
@ -126,10 +125,10 @@ get_user_roster(Acc, {LUser, LServer}) ->
case catch ejabberd_odbc:sql_query( case catch ejabberd_odbc:sql_query(
LServer, LServer,
["select username, jid, nick, subscription, ask, " ["select username, jid, nick, subscription, ask, "
"server, subscribe, type from rosterusers " "askmessage, server, subscribe, type from rosterusers "
"where username='", Username, "'"]) of "where username='", Username, "'"]) of
{selected, ["username", "jid", "nick", "subscription", "ask", {selected, ["username", "jid", "nick", "subscription", "ask",
"server", "subscribe", "type"], "askmessage", "server", "subscribe", "type"],
Items} when is_list(Items) -> Items} when is_list(Items) ->
JIDGroups = case catch ejabberd_odbc:sql_query( JIDGroups = case catch ejabberd_odbc:sql_query(
LServer, LServer,
@ -216,11 +215,12 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
F = fun() -> F = fun() ->
{selected, {selected,
["username", "jid", "nick", "subscription", ["username", "jid", "nick", "subscription",
"ask", "server", "subscribe", "type"], "ask", "askmessage", "server", "subscribe", "type"],
Res} = Res} =
ejabberd_odbc:sql_query_t( ejabberd_odbc:sql_query_t(
["select username, jid, nick, subscription, " ["select username, jid, nick, subscription, "
"ask, server, subscribe, type from rosterusers " "ask, askmessage, server, subscribe, type "
"from rosterusers "
"where username='", Username, "' " "where username='", Username, "' "
"and jid='", SJID, "'"]), "and jid='", SJID, "'"]),
Item = case Res of Item = case Res of
@ -410,10 +410,10 @@ get_subscription_lists(_, User, Server) ->
case catch ejabberd_odbc:sql_query( case catch ejabberd_odbc:sql_query(
LServer, LServer,
["select username, jid, nick, subscription, ask, " ["select username, jid, nick, subscription, ask, "
"server, subscribe, type from rosterusers " "askmessage, server, subscribe, type from rosterusers "
"where username='", Username, "'"]) of "where username='", Username, "'"]) of
{selected, ["username", "jid", "nick", "subscription", "ask", {selected, ["username", "jid", "nick", "subscription", "ask",
"server", "subscribe", "type"], "askmessage", "server", "subscribe", "type"],
Items} when is_list(Items) -> Items} when is_list(Items) ->
fill_subscription_lists(LServer, Items, [], []); fill_subscription_lists(LServer, Items, [], []);
_ -> _ ->
@ -458,12 +458,13 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
Item = Item =
case ejabberd_odbc:sql_query_t( case ejabberd_odbc:sql_query_t(
["select username, jid, nick, subscription, ask, " ["select username, jid, nick, subscription, ask, "
"server, subscribe, type from rosterusers " "askmessage, server, subscribe, type "
"from rosterusers "
"where username='", Username, "' " "where username='", Username, "' "
"and jid='", SJID, "';"]) of "and jid='", SJID, "';"]) of
{selected, {selected,
["username", "jid", "nick", "subscription", "ask", ["username", "jid", "nick", "subscription", "ask",
"server", "subscribe", "type"], "askmessage", "server", "subscribe", "type"],
[I]} -> [I]} ->
R = raw_to_record(LServer, I), R = raw_to_record(LServer, I),
Groups = Groups =
@ -506,7 +507,7 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
AskMessage = case NewState of AskMessage = case NewState of
{_, both} -> Reason; {_, both} -> Reason;
{_, in} -> Reason; {_, in} -> Reason;
{_, _} -> [] _ -> ""
end, end,
case NewState of case NewState of
none -> none ->
@ -770,35 +771,47 @@ process_item_attrs_ws(Item, []) ->
get_in_pending_subscriptions(Ls, User, Server) -> get_in_pending_subscriptions(Ls, User, Server) ->
JID = jlib:make_jid(User, Server,""), JID = jlib:make_jid(User, Server, ""),
case mnesia:dirty_index_read(roster, {User,Server}, #roster.us) of LUser = JID#jid.luser,
Result when list(Result) -> LServer = JID#jid.lserver,
Username = ejabberd_odbc:escape(LUser),
case catch ejabberd_odbc:sql_query(
LServer,
["select username, jid, nick, subscription, ask, "
"askmessage, server, subscribe, type from rosterusers "
"where username='", Username, "'"]) of
{selected, ["username", "jid", "nick", "subscription", "ask",
"askmessage", "server", "subscribe", "type"],
Items} when is_list(Items) ->
Ls ++ lists:map( Ls ++ lists:map(
fun(R) -> fun(R) ->
Message = R#roster.askmessage, Message = R#roster.askmessage,
Status = if is_binary(Message) -> Status = if is_binary(Message) ->
binary_to_list(Message); binary_to_list(Message);
true -> true ->
[] ""
end, end,
{xmlelement, "presence", [{"from", jlib:jid_to_string(R#roster.jid)}, {xmlelement, "presence",
{"to", jlib:jid_to_string(JID)}, [{"from", jlib:jid_to_string(R#roster.jid)},
{"type", "subscribe"}], {"to", jlib:jid_to_string(JID)},
[{xmlelement, "status", [], {"type", "subscribe"}],
[{xmlcdata, Status}]}]} [{xmlelement, "status", [],
end, [{xmlcdata, Status}]}]}
lists:filter( end,
fun(R) -> lists:flatmap(
case R#roster.ask of fun(I) ->
in -> true; R = raw_to_record(LServer, I),
both -> true; case R#roster.ask of
_ -> false in -> [R];
end both -> [R];
end, _ -> []
Result)); end
_ -> [] end,
Items));
_ ->
Ls
end. end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -869,7 +882,7 @@ get_jid_info(_, User, Server, JID) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk, raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk, SAskMessage,
_SServer, _SSubscribe, _SType}) -> _SServer, _SSubscribe, _SType}) ->
case jlib:string_to_jid(SJID) of case jlib:string_to_jid(SJID) of
error -> error ->
@ -895,7 +908,8 @@ raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk,
jid = LJID, jid = LJID,
name = Nick, name = Nick,
subscription = Subscription, subscription = Subscription,
ask = Ask} ask = Ask,
askmessage = SAskMessage}
end. end.
record_to_string(#roster{us = {User, _Server}, record_to_string(#roster{us = {User, _Server},

View File

@ -8,7 +8,6 @@
-module(mod_shared_roster). -module(mod_shared_roster).
-author('alexey@sevcom.net'). -author('alexey@sevcom.net').
-vsn('$Revision: 24 $ ').
-behaviour(gen_mod). -behaviour(gen_mod).
@ -16,7 +15,7 @@
get_user_roster/2, get_user_roster/2,
get_subscription_lists/3, get_subscription_lists/3,
get_jid_info/4, get_jid_info/4,
in_subscription/5, in_subscription/6,
out_subscription/4, out_subscription/4,
list_groups/1, list_groups/1,
create_group/2, create_group/2,
@ -148,7 +147,7 @@ get_jid_info({Subscription, Groups}, User, Server, JID) ->
{Subscription, Groups} {Subscription, Groups}
end. end.
in_subscription(Acc, User, Server, JID, Type) -> in_subscription(Acc, User, Server, JID, Type, _Reason) ->
process_subscription(in, User, Server, JID, Type, Acc). process_subscription(in, User, Server, JID, Type, Acc).
out_subscription(User, Server, JID, Type) -> out_subscription(User, Server, JID, Type) ->

View File

@ -18,7 +18,7 @@ CREATE TABLE rosterusers (
nick text, nick text,
subscription character(1) NOT NULL, subscription character(1) NOT NULL,
ask character(1) NOT NULL, ask character(1) NOT NULL,
askmessage text, askmessage text NOT NULL,
server character(1) NOT NULL, server character(1) NOT NULL,
subscribe text, subscribe text,
"type" text "type" text
@ -99,4 +99,6 @@ CREATE INDEX i_vcard_search_lorgunit ON vcard_search(lorgunit);
-- ALTER TABLE spool ALTER COLUMN seq SET NOT NULL; -- ALTER TABLE spool ALTER COLUMN seq SET NOT NULL;
--- To update from 1.x: --- To update from 1.x:
-- ALTER TABLE rosterusers ADD COLUMN askmessage text AFTER ask; -- ALTER TABLE rosterusers ADD COLUMN askmessage text;
-- UPDATE rosterusers SET askmessage = '';
-- ALTER TABLE rosterusers ALTER COLUMN askmessage SET NOT NULL;