/[drupal]/contributions/modules/category/category_menu/category_menu.module
ViewVC logotype

Diff of /contributions/modules/category/category_menu/category_menu.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.54, Sun May 31 10:24:23 2009 UTC revision 1.55, Wed Aug 5 04:52:54 2009 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id: category_menu.module,v 1.53 2009/02/07 11:37:14 jaza Exp $  // $Id: category_menu.module,v 1.54 2009/05/31 10:24:23 jaza Exp $
3    
4  /**  /**
5   * @file   * @file
# Line 71  function category_menu_nodeapi(&$node, $ Line 71  function category_menu_nodeapi(&$node, $
71    
72      case 'prepare':      case 'prepare':
73        $behavior = variable_get('category_behavior_'. $node->type, 0);        $behavior = variable_get('category_behavior_'. $node->type, 0);
74        if (!empty($behavior)) {        if (!empty($behavior) && $behavior == 'container') {
         $links_for_nodes = $_POST['category']['menu']['links_for_nodes'];  
         $container_has_parent_link = $_POST['category']['menu']['container_has_parent_link'];  
   
75          // Prepare defaults for the add/edit form.          // Prepare defaults for the add/edit form.
76          if (empty($node->category_menu)) {          if (empty($node->category_menu)) {
77            $node->category_menu = array();            $node->category_menu = array();
78          }          }
   
         if (!empty($links_for_nodes) && is_array($links_for_nodes)) {  
           $links_for_nodes = array_intersect_key(node_get_types('names'), $links_for_nodes);  
           foreach (array_keys($links_for_nodes) as $node_type) {  
             $links_for_nodes[$node_type] = $node_type;  
           }  
           $node->category_menu['links_for_nodes'] = $links_for_nodes;  
         }  
         if (isset($_POST['category']['menu']['container_has_parent_link'])) {  
           $node->category_menu['container_has_parent_link'] = $container_has_parent_link;  
         }  
   
         if (!isset($node->category_menu['container_has_parent_link'])) {  
           $node->category_menu['container_has_parent_link'] = !empty($node->category_menu['plid_for_container']);  
         }  
         if (!empty($node->category_menu['plid_for_container'])) {  
           $item = db_fetch_array(db_query("SELECT m.*, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE ml.mlid = %d", $node->category_menu['plid_for_container']));  
           $node->category_menu['plid_value_for_container'] = $node->category_menu['plid_for_container'];  
           $node->category_menu['plid_for_container'] = $item['menu_name'] .':'. $node->category_menu['plid_for_container'];  
         }  
79        }        }
80          // No break: Remove menu-on-the-fly information retrieved by core menu module (just in case)
81    
82        case 'presave':
83          // Remove any menu-on-the-fly information prior to saving a node,
84          // so that core menu module doesn't save any menu items.
85          unset($node->menu);
86        break;        break;
87    
88      case 'insert':      case 'insert':
89      case 'update':      case 'update':
90        $behavior = variable_get('category_behavior_'. $node->type, 0);        $behavior = variable_get('category_behavior_'. $node->type, 0);
       _category_menu_flatten_values($node);  
   
91        if (!empty($behavior) && $behavior == 'container') {        if (!empty($behavior) && $behavior == 'container') {
92            // On updates of already populated containers, show a reminder to refresh
93            // site's data through category_resave, if critical menu settings changed.
94            if ($op == 'update' && db_fetch_array(db_query("SELECT * FROM {category} WHERE cnid = %d", $node->nid))) {
95              $old_settings = (array) category_menu_get_container($node->nid);
96              if (!empty($node->category_menu['links_for_nodes'])) {
97                $node->category_menu['links_for_nodes'] = array_filter($node->category_menu['links_for_nodes']);
98              }
99              foreach (array('links_for_cats', 'expanded_for_cats', 'menu_name', 'links_for_nodes') as $key) {
100                if (isset($old_settings[$key]) && $old_settings[$key] != $node->category_menu[$key]) {
101                  drupal_set_message(t('Your changes affected behavior of generated menu links. To apply these changes properly, you need to refresh categories and/or nodes in this container now. The <em>category resave</em> module offers an easy way to perform this operation on existing content.'));
102                  break;
103                }
104              }
105            }
106          category_menu_save_container($node);          category_menu_save_container($node);
107        }        }
108    
# Line 116  function category_menu_nodeapi(&$node, $ Line 111  function category_menu_nodeapi(&$node, $
111    
112      case 'delete':      case 'delete':
113        $behavior = variable_get('category_behavior_'. $node->type, 0);        $behavior = variable_get('category_behavior_'. $node->type, 0);
   
114        if (!empty($behavior) && $behavior == 'container') {        if (!empty($behavior) && $behavior == 'container') {
115          category_menu_del_container($node->nid);          category_menu_del_container($node->nid);
116        }        }
# Line 127  function category_menu_nodeapi(&$node, $ Line 121  function category_menu_nodeapi(&$node, $
121  }  }
122    
123  /**  /**
124     * Implementation of hook_menu_link_alter().
125     *
126     * Deals with external changes to maintained menu links before they are saved,
127     * either by merging the changes back into category system, or disallowing
128     * the changes to be saved.
129     */
130    function category_menu_menu_link_alter(&$item, $menu) {
131      if ($item['module'] == 'category_menu' && empty($item['options']['category_menu_unlock']) && !empty($item['mlid']) && $old_item = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE mlid = %d", $item['mlid']))) {
132        // Disallow changes to these values, because we cannot keep them: Next
133        // edit of the node is going to overwrite them.
134        foreach (array('expanded', 'plid', 'link_title', 'hidden') as $key) {
135          if ($item[$key] != $old_item[$key]) {
136            $item[$key] = $old_item[$key];
137          }
138        }
139        // Merge new menu item weight back to category, so that reordering of menus work.
140        // This is split into two queries, to avoid PgSQL compatibility issues on JOINs.
141        if ($item['weight'] != $old_item['weight']) {
142          $node = db_fetch_array(db_query("SELECT * FROM {category_menu_map} WHERE mlid = %d", $item['mlid']));
143          if (!empty($node['nid'])) {
144            db_query("UPDATE {category} SET weight = %d WHERE cid = %d", $item['weight'], $node['nid']);
145            category_cache_op('flush', 'all');
146          }
147        }
148      }
149      unset($item['options']['category_menu_unlock']);
150    }
151    
152    /**
153   * Implementation of hook_form_alter().   * Implementation of hook_form_alter().
154   *   *
155   * Adds the category menu settings to the container node form.   * Adds the category menu settings to the container node form,
156     * and alters menu overview screen for compatibility.
157   */   */
158  function category_menu_form_alter(&$form, $form_state, $form_id) {  function category_menu_form_alter(&$form, $form_state, $form_id) {
159    if (isset($form['type']) && isset($form['#node']) && $form['type']['#value']    if (isset($form['type']) && isset($form['#node']) && $form['type']['#value']
160    .'_node_form' == $form_id) {    .'_node_form' == $form_id) {
161        // Remove the menu-on-the-fly fieldset added by core menu module.
162        unset($form['menu']);
163    
164      // Add elements to the node form      // Add elements to the node form
165      $node = $form['#node'];      $node = $form['#node'];
166    
# Line 145  function category_menu_form_alter(&$form Line 172  function category_menu_form_alter(&$form
172          '#value' => $node->category_menu_map['mlid'],          '#value' => $node->category_menu_map['mlid'],
173        );        );
174      }      }
175        $form['#submit'][] = 'category_menu_node_form_submit';
176    
177      $behavior = variable_get('category_behavior_'. $node->type, 0);      $behavior = variable_get('category_behavior_'. $node->type, 0);
178    
179      if (!empty($behavior) && $behavior == 'container') {      if (!empty($behavior) && $behavior == 'container') {
180          // Prepare existing settings
181          if (!isset($node->category_menu['container_has_parent_link'])) {
182            $node->category_menu['container_has_parent_link'] = !empty($node->category_menu['plid_for_container']);
183          }
184          if (!empty($node->category_menu['plid_for_container'])) {
185            $item = db_fetch_array(db_query("SELECT m.*, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE ml.mlid = %d", $node->category_menu['plid_for_container']));
186            $node->category_menu['plid_value_for_container'] = $node->category_menu['plid_for_container'];
187            $node->category_menu['plid_for_container'] = $item['menu_name'] .':'. $node->category_menu['plid_for_container'];
188          }
189    
190        $form['category']['menu'] = array(        $form['category']['menu'] = array(
191          '#type' => 'fieldset',          '#type' => 'fieldset',
192          '#title' => t('Menu links'),          '#title' => t('Menu links'),
# Line 197  function category_menu_form_alter(&$form Line 235  function category_menu_form_alter(&$form
235    
236          $default_options = array();          $default_options = array();
237          $taken_options = array();          $taken_options = array();
238          if (!empty($node->category_menu['links_for_nodes'])) {          $is_preset = !empty($node->category_menu['links_for_nodes']);
239            $default_options = $node->category_menu['links_for_nodes'];          foreach (array_keys($nodes_options) as $type) {
240          }            $type_setting = variable_get('category_menu_links_'. $type, 0);
241          else {            $was_selected = ($is_preset && !empty($node->category_menu['links_for_nodes'][$type]));
242            foreach (array_keys($nodes_options) as $type) {            if (!empty($type_setting)) {
243              $type_setting = variable_get('category_menu_links_'. $type, 0);              if ($type_setting == $node->nid) {
244              if (!empty($type_setting)) {                if (!$is_preset || $was_selected) {
               if ($type_setting == $node->nid) {  
245                  $default_options[$type] = $type;                  $default_options[$type] = $type;
246                }                }
               else {  
                 $taken_options[$type] = $type;  
               }  
247              }              }
248                else {
249                  $taken_options[$type] = $type;
250                }
251              }
252              else if ($was_selected) {
253                $default_options[$type] = $type;
254            }            }
255          }          }
256          $category_link['links_for_nodes'] = $nodes_options;          $category_link['links_for_nodes'] = $nodes_options;
# Line 301  function category_menu_form_alter(&$form Line 341  function category_menu_form_alter(&$form
341        }        }
342      }      }
343    }    }
344    
345      // Grey-out incompatible settings for maintained menu items on the menu overview
346      // screen, and swap edit link to point to corresponding node edit.
347      if ($form_id == 'menu_overview_form') {
348        $title = t('To change this item, you need to edit the corresponding node.');
349        foreach ($form as $key => $row) {
350          if (!empty($row['#item']['module']) && $row['#item']['module'] == 'category_menu') {
351            $form[$key]['hidden']['#disabled'] = TRUE;
352            $form[$key]['expanded']['#disabled'] = TRUE;
353            $form[$key]['operations']['edit']['#value'] = l(t('edit node'), $row['#item']['link_path'] .'/edit', array('query' => drupal_get_destination(), 'attributes' => array('title' => $title)));
354          }
355        }
356      }
357    }
358    
359    /**
360     * Additional form submit handler for node forms.
361     *
362     * Flattens and processes the $form_state['values']['category']['menu']
363     * and ...['menu_map'] arrays on both submits and previews.
364     */
365    function category_menu_node_form_submit($form, &$form_state) {
366      $fieldsets = array(
367        'menu' => TRUE,
368        'menu_map' => TRUE,
369      );
370      if (!empty($form_state['values']['category']) && is_array($form_state['values']['category'])) {
371        foreach ($form_state['values']['category'] as $key => $value) {
372          if (isset($fieldsets[$key]) && is_array($value)) {
373            if (isset($value['plid_for_container']) && preg_match('/^[A-Za-z0-9\-_]+:[0-9]+$/', $value['plid_for_container'])) {
374              $value_parts = explode(':', $value['plid_for_container']);
375              $value['plid_for_container'] = $value_parts[1];
376            }
377    
378            $fieldset = 'category_'. $key;
379            if (empty($form_state['values'][$fieldset])) {
380              $form_state['values'][$fieldset] = array();
381            }
382            $form_state['values'][$fieldset] = $value + $form_state['values'][$fieldset];
383    
384            unset($form_state['values']['category'][$key]);
385          }
386        }
387      }
388  }  }
389    
390  /**  /**
# Line 498  function category_menu_category_legacy($ Line 582  function category_menu_category_legacy($
582   *   The menu settings for the specified node.   *   The menu settings for the specified node.
583   */   */
584  function category_menu_get_container($nid) {  function category_menu_get_container($nid) {
585    $result = db_query("SELECT * FROM {category_menu} WHERE cid = %d", $nid);    $cache_key = 'cmenu_get_cont';
586      $container = category_cache_op('get', $nid, $cache_key);
587    if ($container = db_fetch_object($result)) {    if (!isset($container)) {
588      $links_for_nodes = array();  
589      foreach (array_keys(node_get_types('names')) as $type) {      $result = db_query("SELECT * FROM {category_menu} WHERE cid = %d", $nid);
590        $links_setting = variable_get('category_menu_links_'. $type, 0);  
591        if (!empty($links_setting) && $links_setting == $nid) {      if ($container = db_fetch_object($result)) {
592          $links_for_nodes[$type] = $type;        $links_for_nodes = array();
593          foreach (array_keys(node_get_types('names')) as $type) {
594            $links_setting = variable_get('category_menu_links_'. $type, 0);
595            if (!empty($links_setting) && $links_setting == $nid) {
596              $links_for_nodes[$type] = $type;
597            }
598        }        }
599          $container->links_for_nodes = $links_for_nodes;
600        }
601        else {
602          $container = (object) array();
603      }      }
     $container->links_for_nodes = $links_for_nodes;  
604    
605      return $container;      category_cache_op('set', $nid, $cache_key, $container);
606    }    }
607      return $container;
608  }  }
609    
610  /**  /**
# Line 546  function category_menu_save_container(&$ Line 639  function category_menu_save_container(&$
639      }      }
640    }    }
641    
642      category_cache_op('flush', 'all');
643    return $status;    return $status;
644  }  }
645    
# Line 565  function category_menu_del_container($ni Line 659  function category_menu_del_container($ni
659        variable_del('category_menu_links_'. $type);        variable_del('category_menu_links_'. $type);
660      }      }
661    }    }
662      category_cache_op('flush', 'all');
663  }  }
664    
665  /**  /**
# Line 585  function category_menu_map_load($mlid) { Line 680  function category_menu_map_load($mlid) {
680   * during hook_nodeapi('load').   * during hook_nodeapi('load').
681   */   */
682  function category_menu_map_load_by_nid($nid) {  function category_menu_map_load_by_nid($nid) {
683    if ($item = db_fetch_array(db_query('SELECT ml.*, cmm.nid, m.* FROM {menu_links} ml INNER JOIN {category_menu_map} cmm ON cmm.mlid = ml.mlid LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE cmm.nid = %d', $nid))) {    $cache_key = 'cmenu_map_load_nid';
684      $item = category_cache_op('get', $nid, $cache_key);
685      if (!isset($item)) {
686    
687      $item['options'] = unserialize($item['options']);      if ($item = db_fetch_array(db_query('SELECT m.*, cmm.nid, ml.* FROM {menu_links} ml INNER JOIN {category_menu_map} cmm ON cmm.mlid = ml.mlid LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE cmm.nid = %d', $nid))) {
688      return $item;        $item['options'] = unserialize($item['options']);
689        }
690        else {
691          $item = FALSE;
692        }
693    
694        category_cache_op('set', $nid, $cache_key, $item);
695    }    }
696    return FALSE;    return $item;
697  }  }
698    
699  /**  /**
# Line 650  function category_menu_map_save($node) { Line 753  function category_menu_map_save($node) {
753      }      }
754    
755      $node->category_menu_map['expanded'] = $container_settings['expanded_for_cats'];      $node->category_menu_map['expanded'] = $container_settings['expanded_for_cats'];
756        $node->category_menu_map['weight'] = $node->category['weight'];
757    }    }
758    // Logic for assigned node types.    // Logic for assigned node types.
759    else {    else {
# Line 692  function category_menu_map_save($node) { Line 796  function category_menu_map_save($node) {
796      }      }
797    
798      $new_plid = $assigned_cat_menu_link['mlid'];      $new_plid = $assigned_cat_menu_link['mlid'];
799        // Weight for nodes will be re-saved as is (if available), to keep possible
800        // menu order customizations.
801    }    }
802    
803    $node->category_menu_map['menu_name'] = category_menu_menu_name($container_settings['menu_name'], $container_settings['cid']);    $node->category_menu_map['menu_name'] = category_menu_menu_name($container_settings['menu_name'], $container_settings['cid']);
# Line 700  function category_menu_map_save($node) { Line 806  function category_menu_map_save($node) {
806    $node->category_menu_map['parent_mismatch'] = FALSE;    $node->category_menu_map['parent_mismatch'] = FALSE;
807    $node->category_menu_map['module'] = 'category_menu';    $node->category_menu_map['module'] = 'category_menu';
808    $node->category_menu_map['plid'] = $new_plid;    $node->category_menu_map['plid'] = $new_plid;
809      $node->category_menu_map['hidden'] = (int) !$node->status;
810    $menu_name = $node->category_menu_map['menu_name'];    $menu_name = $node->category_menu_map['menu_name'];
811    
812      $node->category_menu_map['options']['category_menu_unlock'] = TRUE;
813    if (menu_link_save($node->category_menu_map)) {    if (menu_link_save($node->category_menu_map)) {
814      if ($new) {      if ($new) {
815        // Insert new.        // Insert new.
# Line 739  function category_menu_map_save($node) { Line 847  function category_menu_map_save($node) {
847   *   by the category hierarchy), or 0 if no suitable menu link was found.   *   by the category hierarchy), or 0 if no suitable menu link was found.
848   */   */
849  function _category_menu_map_save_category($nid) {  function _category_menu_map_save_category($nid) {
850    $parents = category_get_parents($nid, 'cid', TRUE, TRUE);    category_cache_op('flush', 'all');
851      $parents = category_get_parents($nid, 'cid', TRUE);
852    $parent = reset($parents);    $parent = reset($parents);
853    
854    if (empty($parent->cid)) {    if (empty($parent->cid)) {
# Line 831  function category_menu_build_active_trai Line 940  function category_menu_build_active_trai
940   * children of bottom-level menu items.   * children of bottom-level menu items.
941   */   */
942  function category_menu_tree_all_data($menu_name, &$item, $max_depth = NULL, $cache_prefix = 'category-menu-') {  function category_menu_tree_all_data($menu_name, &$item, $max_depth = NULL, $cache_prefix = 'category-menu-') {
943    // Start with a regular tree, based on the specified item, containing    // Cache key employs current user's roles, to cover access check performed
944    // items local to the $menu_name menu.    // inside _category_menu_tree_all_data(). (TODO: Check whether that check is
945    $tree = _category_menu_tree_all_data($menu_name, $item, $cache_prefix, $max_depth);    // necessary, considering these are our own generated menu items.)
946      global $user;
947    // Next, find top-level items with defined parents, and extend the tree    $cache_key = 'cmenu_tree_all_data'. $menu_name .':'. $item[$mlid] .':'. $max_depth .':'. implode(':', $user->roles);
948    // to include such parents and their ancestors.    $tree = category_cache_op('get', 0, $cache_key);
949    $parent_link = reset($tree);    if (!isset($tree)) {
950    $parent_link_key = key($tree);  
951    while ($parent_link['link']['plid']) {      // Start with a regular tree, based on the specified item, containing
952      $item['has_children'] = 1;      // items local to the $menu_name menu.
953      $ancestor_link = menu_link_load($parent_link['link']['plid']);      $tree = _category_menu_tree_all_data($menu_name, $item, $cache_prefix, $max_depth);
954      if ($ancestor_link['menu_name'] != $menu_name) {  
955        $tree = _category_menu_tree_all_data($ancestor_link['menu_name'], $ancestor_link, $cache_prefix);      // Next, find top-level items with defined parents, and extend the tree
956        _category_menu_tree_above($tree, array(      // to include such parents and their ancestors.
957          'key' => $parent_link_key,      $parent_link = reset($tree);
958          'value' => $parent_link,      $parent_link_key = key($tree);
959        ));      while ($parent_link['link']['plid']) {
960          $item['has_children'] = 1;
961          $ancestor_link = menu_link_load($parent_link['link']['plid']);
962          if ($ancestor_link['menu_name'] != $menu_name) {
963            $tree = _category_menu_tree_all_data($ancestor_link['menu_name'], $ancestor_link, $cache_prefix);
964            _category_menu_tree_above($tree, array(
965              'key' => $parent_link_key,
966              'value' => $parent_link,
967            ));
968    
969        $parent_link = reset($tree);          $parent_link = reset($tree);
970        $parent_link_key = key($tree);          $parent_link_key = key($tree);
971      }        }
972      else {        else {
973        $parent_link['link']['plid'] = 0;          $parent_link['link']['plid'] = 0;
974      }        }
975    };      };
976    
977    $query_nodetypes1 = '';      $query_nodetypes1 = '';
978    $query_nodetypes2 = '';      $query_nodetypes2 = '';
979    $args = array($item['mlid'], $menu_name);      $args = array($item['mlid'], $menu_name);
980    if ($category = db_fetch_object(db_query('SELECT c.* FROM {category} c INNER JOIN {category_menu_map} cmm ON c.cid = cmm.nid WHERE cmm.mlid = %d', $item['mlid']))) {      if ($category = db_fetch_object(db_query('SELECT c.* FROM {category} c INNER JOIN {category_menu_map} cmm ON c.cid = cmm.nid WHERE cmm.mlid = %d', $item['mlid']))) {
981      $cnid = !empty($category->cnid) ? $category->cnid : $category->cid;        $cnid = !empty($category->cnid) ? $category->cnid : $category->cid;
982      $node_types = array();        $node_types = array();
983      $query_nodetypes = db_query('SELECT type FROM {category_cont_node_types} WHERE cid = %d', $cnid);        $query_nodetypes = db_query('SELECT type FROM {category_cont_node_types} WHERE cid = %d', $cnid);
984    
985      while ($node_type = db_fetch_object($query_nodetypes)) {        while ($node_type = db_fetch_object($query_nodetypes)) {
986        $node_types[] = 'category-menu-toc-'. $node_type->type;          $node_types[] = 'category-menu-toc-'. $node_type->type;
987      }        }
988    
989      if (!empty($node_types)) {        if (!empty($node_types)) {
990        $query_nodetypes1 = ' LEFT JOIN {category_menu_map} cmm ON ml.mlid = cmm.mlid LEFT JOIN {node} n ON cmm.nid = n.nid';          $query_nodetypes1 = ' LEFT JOIN {category_menu_map} cmm ON ml.mlid = cmm.mlid LEFT JOIN {node} n ON cmm.nid = n.nid';
991    
992        $placeholders = db_placeholders($node_types, 'varchar');          $placeholders = db_placeholders($node_types, 'varchar');
993        $query_nodetypes2 = ' AND ml.menu_name NOT IN('. $placeholders .')';          $query_nodetypes2 = ' AND ml.menu_name NOT IN('. $placeholders .')';
994        $args = array_merge($args, $node_types);          $args = array_merge($args, $node_types);
995          }
996      }      }
   }  
997    
998    $query = "SELECT m.*, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path". $query_nodetypes1 ." WHERE ml.plid = %d AND ml.menu_name != '%s'". $query_nodetypes2;      $query = "SELECT m.*, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path". $query_nodetypes1 ." WHERE ml.plid = %d AND ml.menu_name != '%s'". $query_nodetypes2;
999    
1000    if (isset($max_depth)) {      if (isset($max_depth)) {
1001      $query .= ' AND ml.depth < %d';        $query .= ' AND ml.depth < %d';
1002      $args[] = $max_depth - 1;        $args[] = $max_depth - 1;
1003    }      }
1004    // Finally, find distant children with the specified item as their parent,      // Finally, find distant children with the specified item as their parent,
1005    // and extend the tree to include such children and their descendants.      // and extend the tree to include such children and their descendants.
1006    $children = db_query($query, $args);      $children = db_query($query, $args);
1007    $child_tree_prev = array();      $child_tree_prev = array();
1008    
1009    while ($child_link = db_fetch_array($children)) {      while ($child_link = db_fetch_array($children)) {
1010      $item['has_children'] = 1;        $item['has_children'] = 1;
1011      _menu_link_translate($child_link);        _menu_link_translate($child_link);
1012      $child_tree = _category_menu_tree_all_data($child_link['menu_name'], $child_link, $cache_prefix);        $child_tree = _category_menu_tree_all_data($child_link['menu_name'], $child_link, $cache_prefix);
1013      if (!empty($child_tree) && $child_tree != $child_tree_prev) {        if (!empty($child_tree) && $child_tree != $child_tree_prev) {
1014        _category_menu_tree_below($tree, $child_tree, $item);          _category_menu_tree_below($tree, $child_tree, $item);
1015        $child_tree_prev = $child_tree;          $child_tree_prev = $child_tree;
1016          }
1017      }      }
1018    
1019      category_cache_op('set', 0, $cache_key, $tree);
1020    }    }
1021    
1022    return $tree;    return $tree;
# Line 1034  function _category_menu_tree_above(&$tre Line 1154  function _category_menu_tree_above(&$tre
1154      }      }
1155    }    }
1156  }  }
   
 /**  
  * Helper function to flatten the $node->category['menu'] array.  
  */  
 function _category_menu_flatten_values(&$node) {  
   $fieldsets = array(  
     'menu' => TRUE,  
     'menu_map' => TRUE,  
   );  
   if (!empty($node->category) && is_array($node->category)) {  
     foreach ($node->category as $key => $value) {  
       if (isset($fieldsets[$key]) && is_array($value)) {  
         if (isset($value['plid_for_container']) && preg_match('/^[A-Za-z0-9\-_]+:[0-9]+$/', $value['plid_for_container'])) {  
           $value_parts = explode(':', $value['plid_for_container']);  
           $value['plid_for_container'] = $value_parts[1];  
         }  
   
         $fieldset = 'category_'. $key;  
         if (empty($node->$fieldset)) {  
           $node->$fieldset = array();  
         }  
         $node->$fieldset += $value;  
   
         unset($node->category[$key]);  
       }  
     }  
   }  
 }  

Legend:
Removed from v.1.54  
changed lines
  Added in v.1.55

  ViewVC Help
Powered by ViewVC 1.1.2