? example.patch
Index: refine_by_taxo.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/refine_by_taxo/refine_by_taxo.info,v
retrieving revision 1.3
diff -u -p -r1.3 refine_by_taxo.info
--- refine_by_taxo.info	4 Mar 2008 20:26:21 -0000	1.3
+++ refine_by_taxo.info	22 Feb 2009 12:17:15 -0000
@@ -1,3 +1,6 @@
-; $Id: refine_by_taxo.info,v 1.3 2008/03/04 20:26:21 ber Exp $
+; $Id: refine_by_taxo.info,v 1.0.0.0 2008/08/26 23:07:00 dww Exp $
 name = Refine by taxonomy
 description = "Provides blocks that enable you to refine a taxonomy view. Some features only work when tagadelic is installed."
+version = "6x-1.x-dev"
+project = "refine_by_taxo"
+core = 6.x
\ No newline at end of file
Index: refine_by_taxo.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/refine_by_taxo/refine_by_taxo.module,v
retrieving revision 1.13
diff -u -p -r1.13 refine_by_taxo.module
--- refine_by_taxo.module	1 May 2008 14:35:06 -0000	1.13
+++ refine_by_taxo.module	22 Feb 2009 12:17:16 -0000
@@ -1,5 +1,5 @@
 <?php
-//$Id: refine_by_taxo.module,v 1.13 2008/05/01 14:35:06 ber Exp $
+//$Id: refine_by_taxo.module,v 1.9.2.2 2008/08/26 16:30:00 Exp $
 
 /**
  * Implementation of hook_block
@@ -36,7 +36,7 @@ function refine_by_taxo_list_blocks() {
 }
 
 function refine_by_taxo_configure_blocks($delta) {
-  $voc = taxonomy_get_vocabulary($delta);
+  $voc = taxonomy_vocabulary_load($delta);
   $form['title'] = array(
     '#type' => 'textfield',
     '#title' => t('Block title'),
@@ -78,7 +78,7 @@ function refine_by_taxo_save_blocks($del
  */
 function refine_by_taxo_view_blocks($delta) {
   list($op, $type) = explode('_', variable_get('refine_by_taxo_type_'. $delta, 'and_node'));
-  $voc = taxonomy_get_vocabulary($delta);
+  $voc = taxonomy_vocabulary_load($delta);
   $terms = array();
 
   //Input sanitizing
@@ -124,9 +124,9 @@ function refine_by_taxo_build_body($term
 
   $content = '';
   foreach ($terms as $term) {
-    // BAH Drupal encodes the paths, what a crap.
+    // BAH Drupal encodes teh paths, what a crap.
     // $items[] = l($term->name, refine_by_taxo_build_url($term->tid, $op));
-    $items[] = '<a href="'. refine_by_taxo_build_url($term->tid, $op) .'">'. check_plain($term->name) .'</a>';
+    $items[] = '<a href="'. refine_by_taxo_build_url($term->tid, $op) .'">'. $term->name .'</a>';
   }
 
   if (count($items) > 0) {
@@ -168,7 +168,7 @@ function refine_by_taxo_build_url($refin
   $replacement = '$0' . $splitter . $refine_tid;
   $path = preg_replace($pattern, $replacement, $_GET['q']);
 
-  return url($path, NULL, NULL, FALSE, FALSE);
+  return url($path, array());
 }
 
 /**
@@ -192,7 +192,7 @@ function refine_by_taxo_find_related_ter
 
   if ($conditions) {
     $sql = db_escape_string('SELECT DISTINCT tn.tid FROM {term_node} tn INNER JOIN {term_data} td ON td.tid = tn.tid WHERE' . $conditions);
-    $result = db_query(db_rewrite_sql($sql, 'tn', 'tid'));
+    $result = db_query(db_rewrite_sql($sql));
     while ($i <= variable_get('refine_by_taxo_block_tags_'. $delta, 12) && ($tid = db_fetch_object($result))) {
       $terms[$tid->tid] = taxonomy_get_term($tid->tid);
       $i++;
@@ -251,7 +251,7 @@ function refine_by_taxo_current_nids() {
 
   $tids = refine_by_taxo_current_terms(FALSE);
   $op = refine_by_taxo_get_leading_op();
-  $result = taxonomy_select_nodes($tids, $op, 0, FALSE);
+  $result = refine_by_taxo_select_nodes($tids, $op);
 
   while ($row = db_fetch_object($result)) {
     $nids[] = $row->nid;
@@ -317,3 +317,50 @@ function _refine_by_taxo_options() {
    'and_hierarchy' => t('Refine tags with AND, interconnected through hierarchy'),
   );
 }
+
+
+
+/** PATCH included from http://drupal.org/node/120271  -- on Sept 7 2007 to add more filters based on more content
+ * Finds all nodes that match selected taxonomy conditions.
+ * Based on taxonomy_select_nodes of taxonomy.module and modified a bit
+ * to always return all the nodes (no just the first 10 or so) and to
+ * not sort the nodes list (for performance reasons).
+ * Also removed some default parameters ($depth) and some superfluous 
+ * code ($sql_count).
+ *
+ * @param $tids
+ *   An array of term IDs to match.
+ * @param $operator
+ *   How to interpret multiple IDs in the array. Can be "or" or "and".
+ * @return
+ *   A resource identifier pointing to the query results.
+ */
+function refine_by_taxo_select_nodes($tids = array(), $operator = 'or') {
+  if (count($tids) > 0) {
+    // For each term ID, generate an array of descendant term IDs to the right depth.
+    $descendant_tids = array();
+    foreach ($tids as $index => $tid) {
+      $term = taxonomy_get_term($tid);
+      $tree = taxonomy_get_tree($term->vid, $tid, -1, 0);
+      $descendant_tids[] = array_merge(array($tid), array_map('_taxonomy_get_tid_from_term', $tree));
+    }
+
+    if ($operator == 'or') {
+      $str_tids = implode(',', call_user_func_array('array_merge', $descendant_tids));
+      $sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $str_tids .') AND n.status = 1 AND n.moderate = 0';
+    }
+    else {
+      $joins = '';
+      $wheres = '';
+      foreach ($descendant_tids as $index => $tids) {
+        $joins .= ' INNER JOIN {term_node} tn'. $index .' ON n.nid = tn'. $index .'.nid';
+        $wheres .= ' AND tn'. $index .'.tid IN ('. implode(',', $tids) .')';
+      }
+      $sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n '. $joins .' WHERE n.status = 1 AND n.moderate = 0 '. $wheres;
+    }
+    $sql = db_rewrite_sql($sql);
+    $result = db_query($sql);
+  }
+
+  return $result;
+}
\ No newline at end of file
