? nodequeue_992326_1_hook_nodequeue_reorder.patch
? nodequeue_service_save_subqueue.patch
? nq_992326_2_reorder_hook.patch
Index: addons/nodequeue_service/nodequeue_service.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/addons/nodequeue_service/nodequeue_service.inc,v
retrieving revision 1.1
diff -u -p -r1.1 nodequeue_service.inc
--- addons/nodequeue_service/nodequeue_service.inc	10 Jun 2009 19:08:44 -0000	1.1
+++ addons/nodequeue_service/nodequeue_service.inc	1 Feb 2011 05:39:47 -0000
@@ -76,6 +76,58 @@ function nodequeue_service_get_subqueues
   }
 }
 
+function nodequeue_service_save_subqueue($subqueue) {
+  $subqueue = (object) $subqueue;
+  $is_basic = FALSE; // Whether the node queue is just a standard queue with a single subqueue
+  if (isset($subqueue->queue_name)) {
+    // We must get the qid by the machine name of the queue
+    // We also need to know the owner of the queue to determine what the refernce value will refer to.
+    $result = db_query("SELECT qid, owner FROM {nodequeue_queue} WHERE name = '%s'", $subqueue->queue_name);
+    if ($row = db_fetch_array($result)) {
+      $qid = $row['qid'];
+      $is_basic = $row['owner'] == 'nodequeue';
+    }
+    else {
+      return services_error(t('Specified node queue does not exist.'));
+    }
+  }
+  elseif (isset($subqueue->qid)) {
+    $qid = $subqueue->qid;
+    $owner = db_result(db_query("SELECT owner from {nodequeue_queue} WHERE qid = %d", $qid));
+    if (!$owner) {
+      return services_error(t('Specified node queue does not exist.'));
+    }
+    $is_basic = $owner == 'nodequeue';
+  }
+  else {
+    return services_error(t('No queue was specified.'));
+  }
+
+  // If this is a basic nodequeue, then we should use the local qid as our reference
+  // when looking for the sqid.
+  $ref = $is_basic ? $qid : $subqueue->reference;
+  
+  // Get the local sqid for this subqueue.
+  $sqid = db_result(db_query_range("SELECT sqid FROM {nodequeue_subqueue} WHERE qid = %d AND reference = '%s'", $qid, $ref, 0, 1));
+  if (!$sqid) {
+    return services_error(t('Specified subqueue does not exist.'));
+  }
+  $saved = nodequeue_save_subqueue_order($subqueue->nodes, $qid, $sqid);
+  if ($saved[0] != NODEQUEUE_OK) {
+    return services_error(t('Invalid subqueue order, could not be saved.'));
+  }
+  return $sqid;
+}
+
+/**
+ * access callback function for the subqueue.save service
+ */
+function nodequeue_service_save_subqueue_access() {
+  if (user_access('manipulate all queues')) {
+    return TRUE;
+  }
+}
+
 /**
  * access callback function for the nodequeue service
  */
Index: addons/nodequeue_service/nodequeue_service.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/addons/nodequeue_service/nodequeue_service.module,v
retrieving revision 1.1
diff -u -p -r1.1 nodequeue_service.module
--- addons/nodequeue_service/nodequeue_service.module	10 Jun 2009 19:08:44 -0000	1.1
+++ addons/nodequeue_service/nodequeue_service.module	1 Feb 2011 05:39:47 -0000
@@ -39,6 +39,21 @@ function nodequeue_service_service() {
       '#return'   => 'struct',
       '#help'     => t('Returns a keyed array by sqid of available subqueues and their settings.')
     ),
+    array(
+      '#method'   => 'subqueue.save',
+      '#callback' => 'nodequeue_service_save_subqueue',
+      '#access callback' => 'nodequeue_service_save_subqueue_access',
+      '#file' => array('file' => 'inc', 'module' => 'nodequeue_service'),
+      '#args'             => array(
+        array(
+          '#name'           => 'subqueue',
+          '#type'           => 'struct',
+          '#description'    => t('The subqueue to update.'),
+        ),
+      ),
+      '#return'   => 'struct',
+      '#help'     => t('Save the contents of the given subqueue.')
+    ),
   );
 }
 
