]> granicus.if.org Git - ejabberd/commitdiff
get odbc subscriptions bugfix
authorChristophe Romain <christophe.romain@process-one.net>
Thu, 27 Aug 2009 22:14:48 +0000 (22:14 +0000)
committerChristophe Romain <christophe.romain@process-one.net>
Thu, 27 Aug 2009 22:14:48 +0000 (22:14 +0000)
SVN Revision: 2554

src/mod_pubsub/mod_pubsub.erl
src/mod_pubsub/mod_pubsub_odbc.erl
src/mod_pubsub/node_hometree_odbc.erl
src/mod_pubsub/pubsub_odbc.patch
src/mod_pubsub/pubsub_subscription_odbc.erl

index 017a3d2fa40f4ac7dd5add95674344cfc9d3cb6e..b4c49741fc513dbaaa91dfcc485d30a3ca012492 100644 (file)
@@ -2512,8 +2512,7 @@ set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
     end.
 
 write_sub(Subscriber, NodeID, SubID, Options) ->
-    case pubsub_subscription:set_subscription(Subscriber, NodeID, SubID,
-                                             Options) of
+    case pubsub_subscription:set_subscription(Subscriber, NodeID, SubID, Options) of
        {error, notfound} ->
            {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
        {result, _} ->
index 08fe35a7db32c8f657d9725e681354a902e20826..86cc1d007af2d17e9758373ae289137d0e4418ff 100644 (file)
@@ -2289,7 +2289,7 @@ get_options_helper(JID, Lang, NodeID, SubID, Type) ->
 read_sub(Subscriber, NodeID, SubID, Lang) ->
     case pubsub_subscription_odbc:get_subscription(Subscriber, NodeID, SubID) of
        {error, notfound} ->
-           {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
+           pubsub_subscription_odbc:get_options_xform(Lang, []);
        {result, #pubsub_subscription{options = Options}} ->
            pubsub_subscription_odbc:get_options_xform(Lang, Options)
     end.
@@ -2336,8 +2336,7 @@ set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
     end.
 
 write_sub(Subscriber, NodeID, SubID, Options) ->
-    case pubsub_subscription_odbc:set_subscription(Subscriber, NodeID, SubID,
-                                             Options) of
+    case pubsub_subscription_odbc:set_subscription(Subscriber, NodeID, SubID, Options) of
        {error, notfound} ->
            {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
        {result, _} ->
index 514e7d959bc995f533d5d4e5d5b6a83a65def0b8..df9dfc35918ba98763915ac30f59053371dd89e7 100644 (file)
@@ -665,10 +665,18 @@ get_entity_subscriptions(Host, Owner) ->
     end,
     Reply = case catch ejabberd_odbc:sql_query_t(Query) of
        {selected, ["node", "type", "nodeid", "jid", "subscriptions"], RItems} ->
-           lists:map(fun({N, T, I, J, S}) ->
+           lists:foldl(fun({N, T, I, J, S}, Acc) ->
                Node = nodetree_tree_odbc:raw_to_node(Host, {N, "", T, I}),
-               {Node, decode_subscriptions(S), decode_jid(J)}
-           end, RItems);
+               Jid = decode_jid(J),
+               case decode_subscriptions(S) of
+                   [] ->
+                       [{Node, none, Jid}|Acc];
+                   Subs ->
+                       lists:foldl(fun({Sub, SubId}, Acc2) -> [{Node, Sub, SubId, Jid}|Acc2];
+                                      (Sub, Acc2) -> [{Node, Sub, Jid}|Acc2]
+                       end, Acc, Subs)
+               end
+           end, [], RItems);
        _ ->
            []
        end,
index a1426b0a20694653bebdecc8505f255d3b74949a..91fbd3f32c8ac417c0e922aeff2790251c5b3a89 100644 (file)
@@ -1,5 +1,5 @@
---- mod_pubsub.erl     2009-08-27 23:21:24.000000000 +0200
-+++ mod_pubsub_odbc.erl        2009-08-27 23:36:47.000000000 +0200
+--- mod_pubsub.erl     2009-08-27 23:47:01.000000000 +0200
++++ mod_pubsub_odbc.erl        2009-08-27 23:56:49.000000000 +0200
 @@ -45,7 +45,7 @@
  %%% TODO
  %%% plugin: generate Reply (do not use broadcast atom anymore)
 -    case pubsub_subscription:get_subscription(Subscriber, NodeID, SubID) of
 +    case pubsub_subscription_odbc:get_subscription(Subscriber, NodeID, SubID) of
        {error, notfound} ->
-           {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
+-          {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
++          pubsub_subscription_odbc:get_options_xform(Lang, []);
        {result, #pubsub_subscription{options = Options}} ->
 -          pubsub_subscription:get_options_xform(Lang, Options)
 +          pubsub_subscription_odbc:get_options_xform(Lang, Options)
      end.
  
  write_sub(Subscriber, NodeID, SubID, Options) ->
--    case pubsub_subscription:set_subscription(Subscriber, NodeID, SubID,
-+    case pubsub_subscription_odbc:set_subscription(Subscriber, NodeID, SubID,
-                                             Options) of
+-    case pubsub_subscription:set_subscription(Subscriber, NodeID, SubID, Options) of
++    case pubsub_subscription_odbc:set_subscription(Subscriber, NodeID, SubID, Options) of
        {error, notfound} ->
            {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
-@@ -2681,8 +2505,8 @@
+       {result, _} ->
+@@ -2680,8 +2504,8 @@
                                     {"subscription", subscription_to_string(Sub)} | nodeAttr(Node)], []}]}]},
                ejabberd_router ! {route, service_jid(Host), jlib:make_jid(JID), Stanza}
            end,
                                true ->
                                    Result = lists:foldl(fun({JID, Subscription, SubId}, Acc) ->
  
-@@ -2964,7 +2788,7 @@
+@@ -2963,7 +2787,7 @@
                        {Depth, [{N, get_node_subs(N)} || N <- Nodes]}
            end, tree_call(Host, get_parentnodes_tree, [Host, Node, service_jid(Host)]))}
        end,
        {result, CollSubs} -> CollSubs;
        _ -> []
      end.
-@@ -2978,9 +2802,9 @@
+@@ -2977,9 +2801,9 @@
  
  get_options_for_subs(NodeID, Subs) ->
      lists:foldl(fun({JID, subscribed, SubID}, Acc) ->
                            _ -> Acc
                        end;
                    (_, Acc) ->
-@@ -3174,6 +2998,30 @@
+@@ -3173,6 +2997,30 @@
            Result
      end.
  
  %% @spec (Host, Options) -> MaxItems
  %%     Host = host()
  %%     Options = [Option]
-@@ -3547,7 +3395,13 @@
+@@ -3546,7 +3394,13 @@
  tree_action(Host, Function, Args) ->
      ?DEBUG("tree_action ~p ~p ~p",[Host,Function,Args]),
      Fun = fun() -> tree_call(Host, Function, Args) end,
  
  %% @doc <p>node plugin call.</p>
  node_call(Type, Function, Args) ->
-@@ -3567,13 +3421,13 @@
+@@ -3566,13 +3420,13 @@
  
  node_action(Host, Type, Function, Args) ->
      ?DEBUG("node_action ~p ~p ~p ~p",[Host,Type,Function,Args]),
                        case tree_call(Host, get_node, [Host, Node]) of
                            N when is_record(N, pubsub_node) ->
                                case Action(N) of
-@@ -3586,8 +3440,14 @@
+@@ -3585,8 +3439,14 @@
                        end
                end, Trans).
  
        {result, Result} -> {result, Result};
        {error, Error} -> {error, Error};
        {atomic, {result, Result}} -> {result, Result};
-@@ -3595,6 +3455,15 @@
+@@ -3594,6 +3454,15 @@
        {aborted, Reason} ->
            ?ERROR_MSG("transaction return internal error: ~p~n", [{aborted, Reason}]),
            {error, ?ERR_INTERNAL_SERVER_ERROR};
        {'EXIT', Reason} ->
            ?ERROR_MSG("transaction return internal error: ~p~n", [{'EXIT', Reason}]),
            {error, ?ERR_INTERNAL_SERVER_ERROR};
-@@ -3603,6 +3472,17 @@
+@@ -3602,6 +3471,17 @@
            {error, ?ERR_INTERNAL_SERVER_ERROR}
      end.
  
index eebb7d8380f2c870a116b9940029463bfd562178..f05523081e1c16664e7bc40dfb37068ccfe5c782 100644 (file)
@@ -87,9 +87,9 @@ init() ->
     ok = create_table().
 
 subscribe_node(_JID, _NodeID, Options) ->
-    SubId = make_subid(),
-    ?DB_MOD:add_subscription(#pubsub_subscription{subid = SubId, options = Options}),
-    {result, SubId}.
+    SubID = make_subid(),
+    ?DB_MOD:add_subscription(#pubsub_subscription{subid = SubID, options = Options}),
+    {result, SubID}.
 
 
 unsubscribe_node(_JID, _NodeID, SubID) ->
@@ -114,7 +114,8 @@ set_subscription(_JID, _NodeID, SubID, Options) ->
             ?DB_MOD:update_subscription(#pubsub_subscription{subid = SubID, options = Options}),
             {result, ok};
        notfound -> 
-            {error, notfound}
+            ?DB_MOD:add_subscription(#pubsub_subscription{subid = SubID, options = Options}),
+            {result, ok}
     end.