]> granicus.if.org Git - ejabberd/commitdiff
minor bugfixes on dag nodes
authorChristophe Romain <christophe.romain@process-one.net>
Mon, 29 Jun 2009 21:46:13 +0000 (21:46 +0000)
committerChristophe Romain <christophe.romain@process-one.net>
Mon, 29 Jun 2009 21:46:13 +0000 (21:46 +0000)
SVN Revision: 2343

src/mod_pubsub/mod_pubsub.erl
src/mod_pubsub/node_dag.erl
src/mod_pubsub/nodetree_dag.erl
src/mod_pubsub/nodetree_virtual.erl

index 67ecf5c74a86cd253b67ff727e4b8cfce507d6c2..6ddfc945d3551e2214794ae86c9c4f2560cbc26c 100644 (file)
@@ -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.
index 954a26a95d4192c5474d587938826dda7c9aefde..a276f08f0a702c3d30c4e86be920701a5117ba39 100644 (file)
@@ -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).
index 1a5921fb87cf873801da35c4e4d6249d1a3e181f..091bc52ad059d083662d4062b634f8924d7fe07f 100644 (file)
@@ -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.
index e003f9058043f7534f438e05763645ae9d2bb4d9..01706560b3676da1ba461b1906e82d1eb2df760f 100644 (file)
@@ -150,13 +150,8 @@ get_subnodes_tree(_Host, _Node) ->
 %% @doc <p>No node record is stored on database. Any valid node
 %% is considered as already created.</p>
 %% <p>default allowed nodes: /home/host/user/any/node/name</p>
-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()