From cfdd6d29109937be006db1be4d4a87db36d9e70e Mon Sep 17 00:00:00 2001
From: shushu <shushu.i@gmail.com>
Date: Wed, 9 Mar 2011 10:16:28 +0200
Subject: [PATCH] Add views filters to the views.get method

---
 services/views_service/views_service.inc    |   24 +++++++++++++++++++++++-
 services/views_service/views_service.module |    6 ++++++
 2 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/services/views_service/views_service.inc b/services/views_service/views_service.inc
index 9c26c20..d3339dd 100644
--- a/services/views_service/views_service.inc
+++ b/services/views_service/views_service.inc
@@ -20,10 +20,17 @@
  * @param format_output
  *   Boolean (optional). TRUE if view should be formatted using the defined
  *   style plugin.
+ * @param $filters
+ *   Array (optional). A list of filters in a key=value format
  * @return
  *   Array. The views return.
  */
-function views_service_get($view_name, $display_id = 'default', $args = array(), $offset = 0, $limit = 0, $format_output = FALSE) {
+function views_service_get($view_name, $display_id = 'default', $args = array(), $offset = 0, $limit = 0, $format_output = FALSE, $filters = array()) {
+  // Avoid problems when testing via www.example.com/admin/build/services/browse - set 'default' display if empty
+  if ($display_id == '') {
+    $display_id = 'default';
+  }
+
   $result = array();
   $view = views_get_view($view_name);
 
@@ -38,6 +45,21 @@ function views_service_get($view_name, $display_id = 'default', $args = array(),
     // Disable the user pager.
     $view->set_use_pager(FALSE);
   }
+  if (count($filters) > 0) {
+    foreach ($filters as $filter) {
+      $split = explode("=", $filter);
+      if (count($split) == 2) {
+        $key = $split[0];
+        $value = $split[1];
+
+        $filter_object = $view->get_item($display_id, 'filter', $key);
+        if ($filter_object != NULL) {
+          $filter_object['value']['value'] = $value;
+          $view->set_item($display_id, 'filter', $key, $filter_object);
+        }
+      }
+    }
+  }
   if (!$format_output) {
     $view->set_display($display_id);
     $view->execute();
diff --git a/services/views_service/views_service.module b/services/views_service/views_service.module
index ba43b40..81e8468 100644
--- a/services/views_service/views_service.module
+++ b/services/views_service/views_service.module
@@ -51,6 +51,12 @@ function views_service_service() {
           '#optional'       => TRUE,
           '#description'    => t('TRUE if view should be formatted, or only the view result returned (FALSE by default).')
         ),
+        array(
+          '#name'           => 'filters',
+          '#type'           => 'array',
+          '#optional'       => TRUE,
+          '#description'    => t('An array of filters in a key=value format to pass to the view.')
+        ),
       ),
       '#return'           => 'array',
       '#help'             => t('Retrieves a view defined in views.module.')),
-- 
1.7.4.msysgit.0

