From 3a2b553ee32dbf386855302cb162193263406621 Mon Sep 17 00:00:00 2001
From: shushu <shushu.i@gmail.com>
Date: Sun, 13 Mar 2011 17:33:27 +0200
Subject: [PATCH] Add filter for view.get method

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

diff --git a/services/views_service/views_service.inc b/services/views_service/views_service.inc
index 9c26c20..9e89f7b 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 = NULL) {
+  // 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,17 @@ function views_service_get($view_name, $display_id = 'default', $args = array(),
     // Disable the user pager.
     $view->set_use_pager(FALSE);
   }
+  if ($filters != NULL) {
+    $arr = (array)$filters;
+    foreach ($arr as $key => $value) {
+      $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);
+      }
+      $filter_object = $view->get_item($display_id, 'filter', $key);
+    }
+  }
   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..f56b580 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'           => 'struct',
+          '#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

