From 23c3761c5c33bfca775462f8559f63d29acf690e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kasper=20Garn=C3=A6s?= <kasper@reload.dk>
Date: Mon, 16 Jan 2012 11:50:29 +0100
Subject: [PATCH] Added support for nodequeue events

Events supported:
- Adding and removing nodes to a queue
- Saving a queue
---
 nodequeue.module |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/nodequeue.module b/nodequeue.module
index 32603dc..bcebeb9 100644
--- a/nodequeue.module
+++ b/nodequeue.module
@@ -294,6 +294,41 @@ function nodequeue_action_info() {
 }
 
 /**
+ * Implementation of hook_rules_event_info().
+ */
+function nodequeue_rules_event_info() {
+  $items = array();
+  $queues = nodequeue_load_queues(array_keys(nodequeue_get_all_qids()));
+  foreach ($queues as $queue) {
+    $args = array(
+      'node' => array(
+        'type' => 'node',
+        'label' => t('Queued node'),
+    ),
+    );
+    // For each nodequeue we define two events
+    $items['nodequeue_added_' . $queue->name] = array(
+      'label' => t('Node added to the nodequeue "@queue-title"', array('@queue-title' => $queue->title)),
+      'module' => 'Nodequeue',
+      'arguments' => $args,
+    );
+
+    $items['nodequeue_removed_' . $queue->name] = array(
+      'label' => t('Node removed from nodequeue "@queue-title"', array('@queue-title' => $queue->title)),
+      'module' => 'Nodequeue',
+      'arguments' => $args,
+    );
+
+    $items['nodequeue_saved_' . $queue->name] = array(
+      'label' => t('Nodequeue "@queue-title" is saved', array('@queue-title' => $queue->title)),
+      'module' => 'Nodequeue',
+      'arguments' => array(),
+    );
+  }
+  return $items;
+}
+
+/**
  * Implementation of hook_theme().
  */
 function nodequeue_theme() {
@@ -953,6 +988,11 @@ function nodequeue_save(&$queue) {
       nodequeue_add_subqueue($queue, $title, $reference);
     }
   }
+
+  if (module_exists('rules')) {
+    rules_invoke_event('nodequeue_saved_' . $queue->name, NULL);
+  }
+
   return $queue->qid;
 }
 
@@ -2020,6 +2060,28 @@ function nodequeue_remove_action_submit($form, &$form_state) {
   );
 }
 
+/* --- EVENTS ---------------------------------------------------------------- */
+
+/**
+ * Implementation of hook_nodequeue_add().
+ */
+function rules_nodequeue_add($sqid, $nid) {
+  // When a node is added to a nodequeue invoke the corresponding rules event
+  $subqueue = nodequeue_load_subqueue($sqid);
+  $queue = nodequeue_load($subqueue->qid);
+  rules_invoke_event('nodequeue_added_' . $queue->name, array('node' => node_load($node)));
+}
+
+/**
+ * Implementation of hook_nodequeue_remove().
+ */
+function rules_nodequeue_remove($sqid, $nid) {
+  // When a node is added to a nodequeue invoke the corresponding rules event
+  $subqueue = nodequeue_load_subqueue($sqid);
+  $queue = nodequeue_load($subqueue->qid);
+  rules_invoke_event('nodequeue_removed_' . $queue->name, array('node' => node_load($node)));
+}
+
 /* --- THEME ---------------------------------------------------------------- */
 
 /**
-- 
1.7.7+GitX