From: Christophe Romain Date: Mon, 29 Jun 2009 21:46:13 +0000 (+0000) Subject: minor bugfixes on dag nodes X-Git-Tag: v2.1.0~18^2~211 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=35dc60c534f8710c7bd4a540d3a89b85023c7c19;p=ejabberd minor bugfixes on dag nodes SVN Revision: 2343 --- diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 67ecf5c74..6ddfc945d 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -2651,7 +2651,7 @@ sub_to_deliver(_LJID, NotifyType, Depth, SubOptions) -> sub_option_can_deliver(items, _, {subscription_type, nodes}) -> false; sub_option_can_deliver(nodes, _, {subscription_type, items}) -> false; sub_option_can_deliver(_, _, {subscription_depth, all}) -> true; -sub_option_can_deliver(_, Depth, {subscription_depth, D}) -> Depth < D; +sub_option_can_deliver(_, Depth, {subscription_depth, D}) -> Depth =< D; sub_option_can_deliver(_, _, {deliver, false}) -> false; sub_option_can_deliver(_, _, {expire, When}) -> now() < When; sub_option_can_deliver(_, _, _) -> true. diff --git a/src/mod_pubsub/node_dag.erl b/src/mod_pubsub/node_dag.erl index 954a26a95..a276f08f0 100644 --- a/src/mod_pubsub/node_dag.erl +++ b/src/mod_pubsub/node_dag.erl @@ -86,8 +86,25 @@ unsubscribe_node(NodeID, Sender, Subscriber, SubID) -> node_hometree:unsubscribe_node(NodeID, Sender, Subscriber, SubID). publish_item(NodeID, Publisher, Model, MaxItems, ItemID, Payload) -> - node_hometree:publish_item(NodeID, Publisher, Model, MaxItems, - ItemID, Payload). + %% TODO: should look up the NodeTree plugin here. There's no + %% access to the Host of the request at this level, so for now we + %% just use nodetree_dag. + case nodetree_dag:get_node(NodeID) of + #pubsub_node{options = Options} -> + case find_opt(node_type, Options) of + collection -> + {error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "publish")}; + _ -> + node_hometree:publish_item(NodeID, Publisher, Model, + MaxItems, ItemID, Payload) + end; + Err -> + Err + end. + +find_opt(_, []) -> false; +find_opt(Option, [{Option, Value} | _]) -> Value; +find_opt(Option, [_ | T]) -> find_opt(Option, T). remove_extra_items(NodeID, MaxItems, ItemIDs) -> node_hometree:remove_extra_items(NodeID, MaxItems, ItemIDs). diff --git a/src/mod_pubsub/nodetree_dag.erl b/src/mod_pubsub/nodetree_dag.erl index 1a5921fb8..091bc52ad 100644 --- a/src/mod_pubsub/nodetree_dag.erl +++ b/src/mod_pubsub/nodetree_dag.erl @@ -108,6 +108,7 @@ delete_node(Key, NodeID) -> end, get_subnodes(Key, NodeID)), %% Remove and return the requested node. + pubsub_index:free(node, Node#pubsub_node.id), mnesia:delete_object(pubsub_node, Node, write), [Node] end. diff --git a/src/mod_pubsub/nodetree_virtual.erl b/src/mod_pubsub/nodetree_virtual.erl index e003f9058..01706560b 100644 --- a/src/mod_pubsub/nodetree_virtual.erl +++ b/src/mod_pubsub/nodetree_virtual.erl @@ -150,13 +150,8 @@ get_subnodes_tree(_Host, _Node) -> %% @doc

No node record is stored on database. Any valid node %% is considered as already created.

%%

default allowed nodes: /home/host/user/any/node/name

-create_node(Host, Node, _Type, Owner, _Options) -> - UserName = Owner#jid.luser, - UserHost = Owner#jid.lserver, - case Node of - ["home", UserHost, UserName | _] -> {error, {virtual, {Host, Node}}}; - _ -> {error, ?ERR_NOT_ALLOWED} - end. +create_node(Host, Node, _Type, _Owner, _Options) -> + {error, {virtual, {Host, Node}}}. %% @spec (Host, Node) -> [mod_pubsub:node()] %% Host = mod_pubsub:host()