From 56f024dd8557dfff7c5c30de0c7ef60627d6dcf2 Mon Sep 17 00:00:00 2001 From: Silvio Date: Thu, 17 May 2012 16:46:18 -0300 Subject: Syncing with svn --- taxonomy_node_tree.module | 245 +++------------------------------------------- 1 file changed, 15 insertions(+), 230 deletions(-) diff --git a/taxonomy_node_tree.module b/taxonomy_node_tree.module index 34c1693..c344e82 100644 --- a/taxonomy_node_tree.module +++ b/taxonomy_node_tree.module @@ -42,7 +42,6 @@ function taxonomy_node_tree_parents($vid) { * * @param $nodes * Array with node objects. - * * @param $terms * Array with term objects. * @@ -52,9 +51,6 @@ function taxonomy_node_tree_parents($vid) { * @todo * It is assumed that nodes are just associated with a single term. * This could be changed to support multiple relationships. - * - * Also, current result rewind method should support postgresql - * data structures. */ function taxonomy_node_tree_index($nodes, $terms) { while ($node = db_fetch_object($nodes)) { @@ -67,15 +63,6 @@ function taxonomy_node_tree_index($nodes, $terms) { $tree[$term->tid] = $term; } } - - // Rewind result so it can be used again. - if (is_object($nodes)) { - $nodes->data_seek(0); - } - else if (mysql_num_rows($nodes) > 0) { - mysql_data_seek($nodes, 0); - } - return $tree; } @@ -106,7 +93,6 @@ function taxonomy_node_tree_relation($tree) { * * @param $tree * Tree with term objects to be changed (by reference). - * * @param $term * Term object. */ @@ -135,124 +121,13 @@ function taxonomy_node_tree_sort(&$tree, $term) { */ function taxonomy_node_tree_hierarchy($tree) { if (is_array($tree) && $tree != NULL) { - foreach ($tree as &$term) { + foreach ($tree as $term) { taxonomy_node_tree_sort($tree, $term); } } return $tree; } -/** - * Count descendant nodes. - * - * @param $term - * Term object. - * - * @param $count - * Optional initial count offset. Also used for recursion. - * - * @return - * Number of descendant nodes. - */ -function taxonomy_node_tree_count($term, &$count = 0) { - if (isset($term->below)) { - foreach ($term->below as &$below) { - taxonomy_node_tree_count($below, $count); - } - } - - if (isset($term->nodes)) { - $count += count($term->nodes); - } - - return $count; -} - -/** - * Build a list of empty terms. - * - * @param $term - * Term object. - * - * @param $clean - * Set to true to cleanup term before adding to list. - * - * @param $parents - * Set to FALSE to exclude parent items even if they - * don't have descendant nodes. - * - * @param $list - * Array to store term list. - * - * @return - * Array with terms without descendant nodes. - */ -function taxonomy_node_tree_get_empty($term, $clean = FALSE, $parents = TRUE, &$list = array()) { - if (taxonomy_node_tree_count($term) == 0) { - // Skip parents. - if ($term->parents[0] != 0 || ($term->parents[0] == 0 && $parents)) { - $save = drupal_clone($term); - - if ($clean == TRUE) { - unset($save->nodes); - unset($save->below); - unset($save->children); - } - - $list[] = $save; - } - } - else if (isset($term->below)) { - foreach ($term->below as $below) { - taxonomy_node_tree_get_empty($below, $clean, $parents, $list); - } - } - - return $list; -} - -/** - * Build a list of non-nempty terms. - * - * @param $term - * Term object. - * - * @param $clean - * Set to true to cleanup term before adding to list. - * - * @param $parents - * Set to TRUE to keep parent items even if they don't have - * descendant nodes. - * - * @param $list - * Array to store term list. - * - * @return - * Array with terms with descendant nodes. - */ -function taxonomy_node_tree_get_non_empty($term, $clean = FALSE, $parents = FALSE, &$list = array()) { - // Add parents and terms with descendant nodes. - if (($term->parents[0] == 0 && $parents) || taxonomy_node_tree_count($term) > 0) { - $save = drupal_clone($term); - - if ($clean == TRUE) { - unset($save->nodes); - unset($save->below); - unset($save->children); - } - - $list[] = $save; - } - - if (is_array($term->below)) { - foreach ($term->below as $below) { - taxonomy_node_tree_get_non_empty($below, $clean, $parents, $list); - } - } - - return $list; -} - /** * Setup a full taxonomy node hierarchical tree. * @@ -261,35 +136,16 @@ function taxonomy_node_tree_get_non_empty($term, $clean = FALSE, $parents = FALS * * @param $nodes * Array with node objects. - * * @param $terms * Array with term objects. * - * @param $clean - * Set to TRUE to remove branches without descendant nodes. - * - * @param $parents - * Set to TRUE to keep parent items even if they don't have - * descendant nodes. Used just when $clean is also set to TRUE. - * * @return * Hierarchical tree. */ -function taxonomy_node_tree_build($nodes, $terms, $clean = FALSE, $parents = FALSE) { +function taxonomy_node_tree_build($nodes, $terms) { $tree = taxonomy_node_tree_index($nodes, $terms); $tree = taxonomy_node_tree_relation($tree); $tree = taxonomy_node_tree_hierarchy($tree); - - if ($clean == TRUE && is_array($tree)) { - $terms = array(); - foreach ($tree as $term) { - $list = taxonomy_node_tree_get_non_empty($term, TRUE, $parents); - $terms = array_merge($terms, $list); - } - - $tree = taxonomy_node_tree_build($nodes, $terms, FALSE); - } - return $tree; } @@ -300,23 +156,20 @@ function taxonomy_node_tree_build($nodes, $terms, $clean = FALSE, $parents = FAL * * @param $vid * Which vocabulary to generate the tree for. - * * @param $parent * The term ID under which to generate the tree. If 0, generate the tree * for the entire vocabulary. - * * @param $depth * Internal use only. - * * @param $max_depth * The number of levels of the tree to return. Leave NULL to return all levels. - * * @param $cache * Whether to use cache results. * * @return * An array of all term objects in the tree. Each term object is extended * to have "depth" and "parents" attributes in addition to its normal ones. + * Results are statically cached. */ function taxonomy_node_tree_taxonomy_get_tree($vid, $parent = 0, $depth = -1, $max_depth = NULL, $cache = FALSE) { static $children, $parents, $terms; @@ -355,48 +208,13 @@ function taxonomy_node_tree_taxonomy_get_tree($vid, $parent = 0, $depth = -1, $m return $tree; } -/** - * Implementation of hook_theme(). - */ -function taxonomy_node_tree_theme() { - return array( - 'taxonomy_node_tree_list' => array( - 'arguments' => array( - 'term' => NULL, - 'id' => NULL, - 'class' => NULL, - 'baselink' => NULL, - 'level' => NULL, - ), - 'function' => 'theme_taxonomy_node_tree_list', - ), - ); -} - /** * Recursively build an HTML taxonomy node tree. * * @ingroup themeable - * - * @param $term - * Current of starting term. - * - * @param $id - * Base id for list elements. - * - * @param $class - * Class for list elements. - * - * @param $baselink - * Base link for urls. - * - * @param $level - * Nesting level user for recursion. - * - * @return - * Rendered HTML tree. + * @todo Usage with hook_theme(). */ -function theme_taxonomy_node_tree_list($term, $id, $class, $baselink = NULL, &$level = NULL) { +function taxonomy_node_tree_list($term, $id, $class, $baselink = NULL, &$level = NULL, $active_link = NULL) { if ($level == NULL) { $level = 0; @@ -405,64 +223,31 @@ function theme_taxonomy_node_tree_list($term, $id, $class, $baselink = NULL, &$l $level++; if (isset($term->tid)) { - $output = '
  • '; - + $output .= '
  • '; + $output .= $term->name; if (isset($term->below)) { - $output .= $term->name; $output .= ''; } elseif (isset($term->nodes)) { - $output .= $term->name; $output .= ''; } - else { - $output .= ''. $term->name .''; - } - $output .= '
  • '; } return $output; } - -/** - * Build an array with a node and it's parent terms. - * - * @param $parents - * Direct or all parent terms. - * - * @return - * Array with node and parent terms. - */ -function taxonomy_node_tree_trail($nid, $tid, $parents = 'direct') { - $trail = array(); - - // Add term hierarchy - if ($parents == 'direct') { - $function = 'taxonomy_get_parents'; - } - else { - $function = 'taxonomy_get_parents_all'; - } - - // Build array - foreach (array_reverse($function($tid)) as $term) { - $trail[] = $term->name; - } - - // Add node title - $node = node_load($nid); - $trail[] = $node->title; - - return $trail; -} -- cgit v1.2.3