aboutsummaryrefslogtreecommitdiff
path: root/src/mod_pubsub/mod_pubsub_odbc.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_pubsub/mod_pubsub_odbc.erl')
-rw-r--r--src/mod_pubsub/mod_pubsub_odbc.erl38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/mod_pubsub/mod_pubsub_odbc.erl b/src/mod_pubsub/mod_pubsub_odbc.erl
index 38d64f78b..6d1c9ed26 100644
--- a/src/mod_pubsub/mod_pubsub_odbc.erl
+++ b/src/mod_pubsub/mod_pubsub_odbc.erl
@@ -1112,7 +1112,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
{get, "subscriptions"} ->
get_subscriptions(Host, Node, From, Plugins);
{get, "affiliations"} ->
- get_affiliations(Host, From, Plugins);
+ get_affiliations(Host, Node, From, Plugins);
{get, "options"} ->
SubID = xml:get_attr_s("subid", Attrs),
JID = xml:get_attr_s("jid", Attrs),
@@ -2218,7 +2218,7 @@ send_items(Host, Node, NodeId, Type, LJID, Number) ->
%% Reason = stanzaError()
%% Response = [pubsubIQResponse()]
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
-get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
+get_affiliations(Host, <<>>, JID, Plugins) when is_list(Plugins) ->
Result = lists:foldl(
fun(Type, {Status, Acc}) ->
Features = features(Type),
@@ -2247,6 +2247,40 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
{Error, _} ->
Error
end;
+get_affiliations(Host, NodeId, JID, Plugins) when is_list(Plugins) ->
+ Result = lists:foldl(
+ fun(Type, {Status, Acc}) ->
+ Features = features(Type),
+ RetrieveFeature = lists:member("retrieve-affiliations", Features),
+ if
+ not RetrieveFeature ->
+ %% Service does not support retreive affiliatons
+ {{error, extended_error(?ERR_FEATURE_NOT_IMPLEMENTED, unsupported, "retrieve-affiliations")}, Acc};
+ true ->
+ {result, Affiliations} = node_action(Host, Type, get_entity_affiliations, [Host, JID]),
+ {Status, [Affiliations|Acc]}
+ end
+ end, {ok, []}, Plugins),
+ case Result of
+ {ok, Affiliations} ->
+ Entities = lists:flatmap(
+ fun({_, none}) -> [];
+ ({#pubsub_node{nodeid = {_, Node}}, Affiliation})
+ when NodeId == Node ->
+ [{xmlelement, "affiliation",
+ [{"affiliation", affiliation_to_string(Affiliation)}|nodeAttr(Node)],
+ []}];
+ (_) ->
+ []
+ end, lists:usort(lists:flatten(Affiliations))),
+ {result, [{xmlelement, "pubsub", [{"xmlns", ?NS_PUBSUB}],
+ [{xmlelement, "affiliations", [],
+ Entities}]}]};
+ {Error, _} ->
+ Error
+ end.
+
+
get_affiliations(Host, Node, JID) ->
Action = fun(#pubsub_node{type = Type, id = NodeId}) ->
Features = features(Type),