Index: customfilter.module
===================================================================
--- customfilter.module	(revision 446)
+++ customfilter.module	(working copy)
@@ -20,18 +20,21 @@
  *   Array of filter sets
  */
 function customfilter_get_sets($cols = array('sid', 'name', 'description'), $cond = '1=1') {
-  $sets = array();
-
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
-
-  // Query & fetch
-  $result = db_query("SELECT %s FROM {customfilter_set} WHERE %s ORDER BY name", $columns, $cond);
-  while ($set = db_fetch_array($result)) {
-    $sets[] = $set;
-  };
+  static $sets;
+  if (!is_array($sets)) {
+    $sets = array();
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Query & fetch
+    $result = db_query("SELECT %s FROM {customfilter_set} WHERE %s ORDER BY name", $columns, $cond);
+    while ($set = db_fetch_array($result)) {
+      $sets[] = $set;
+    };
 
+  }
+   
   return $sets;
 }
 
@@ -47,14 +50,21 @@
  *   The filter set
  */
 function customfilter_get_set($sid, $cols = array('sid', 'name', 'description')) {
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
-
-  // Query & Fetch
-  $set = db_fetch_array(db_query("SELECT %s FROM {customfilter_set} WHERE sid=%d", $columns, $sid));
+  static $sets;
+  if (!is_array($sets)) {
+    $sets = array();
+  }
+  if (!$sets[$sid]) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Query & Fetch
+    $set = db_fetch_array(db_query("SELECT %s FROM {customfilter_set} WHERE sid=%d", $columns, $sid));
+    $sets[$sid] = $set;
+  }
 
-  return $set;
+  return $sets[$sid];
 }
 
 /**
@@ -73,32 +83,36 @@
  *   Array of filters (each have ['sub'], contains subfilters if any)
  */
 function customfilter_get_filters($sid, $root = 0, $sortby = 'weight', $cols = '*') {
-  $filters = array();
-
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
-
-  // Prepare nodes
-  $nodes = array();
-  if (is_array($root)) {
-    $nodes = $root;
+  static $filters;
+  if (!is_array($filters)) {
+    $filters = array();
   }
-  else {
-    $nodes = array($root);
-  }
-
-  foreach ($nodes as $node) {
-    $result = db_query("SELECT %s FROM {customfilter_filter} WHERE sid=%d and parentid=%d ORDER BY %s", $columns, $sid, $node, $sortby);
-
-    while ($filter = db_fetch_array($result)) {
-      $filter['sub'] = customfilter_get_filters($sid, $filter['fid'], $sortby, $cols);
+  if (!isset($filters[$sid]) || $root > 0) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Prepare nodes
+    $nodes = array();
+    if (is_array($root)) {
+      $nodes = $root;
+    }
+    else {
+      $nodes = array($root);
+    }
 
-      $filters[$filter['fid']] = $filter;
+    foreach ($nodes as $node) {
+      $result = db_query("SELECT %s FROM {customfilter_filter} WHERE sid=%d and parentid=%d ORDER BY %s", $columns, $sid, $node, $sortby);
+    
+      while ($filter = db_fetch_array($result)) {
+        $filter['sub'] = customfilter_get_filters($sid, $filter['fid'], $sortby, $cols);
+        
+        $filters[$sid][$filter['fid']] = $filter;
+      };
     };
-  };
-
-  return $filters;
+  }
+    
+  return $filters[$sid];
 }
 
 /**
@@ -113,13 +127,19 @@
  *   The filter
  */
 function customfilter_get_filter($fid, $cols = '*') {
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
-
-  $filter = db_fetch_array(db_query("SELECT %s FROM {customfilter_filter} WHERE fid=%d", $columns, $fid));
+  static $filters;
+  if (!is_array($filters)) {
+    $filters = array();
+  }
+  if (!isset($filters[$fid])) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
 
-  return $filter;
+    $filter = db_fetch_array(db_query("SELECT %s FROM {customfilter_filter} WHERE fid=%d", $columns, $fid));
+    $filters[$fid] = $filter;
+  }
+  return $filters[$fid];
 }
 
 /**
@@ -303,7 +323,9 @@
 
         if (is_numeric(arg(4))) {
           $fid = arg(4);
-          $filter = customfilter_get_filter($fid, 'name');
+          
+          // Select * if using static filters array as filter is cached for editing
+          $filter = customfilter_get_filter($fid, '*');
 
           // Filter: List
           $items[] = array(
