Index: node_breadcrumb.features.inc =================================================================== RCS file: node_breadcrumb.features.inc diff -N node_breadcrumb.features.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ node_breadcrumb.features.inc 13 Jan 2011 02:12:38 -0000 @@ -0,0 +1,175 @@ + $rule) { + $export['features']['node_breadcrumb_rule'][$component_id] = $component_id; + } + return array(); +} + +/** + * Implementation of hook_features_export_render(). + * + * Generates the PHP dump representing the settings + * + * @param array $data + * An array of machine names for the component in question + * to be exported. + */ +function node_breadcrumb_rule_features_export_render($module, $data, $export = NULL) { + $code = array(); + $code[] = ' $node_breadcrumb_rules = array();'; + $code[] = ''; + + $rules = node_breadcrumb_rule_load_all(); + // Dump all profiles if not defined + if (empty($data)) { + $data = array_keys($rules); + } + + foreach ($data as $rule_id) { + $rule = $rules[$rule_id]; + $rule = node_breadcrumb_rule_sanitize($rule); + $setting_identifier = features_var_export($rule_id); + $setting_export = features_var_export($rule, ' '); + $code[] = " // Exported rule: {$setting_name}"; + $code[] = " \$node_breadcrumb_rules[{$setting_identifier}] = {$setting_export};"; + $code[] = ""; + } + + $code[] = ' return $node_breadcrumb_rules;'; + $code = implode("\n", $code); + + return array('node_breadcrumb_rule_defaults' => $code); +} + + +/** + * Implementation of hook_features_revert(). + */ +function node_breadcrumb_rule_features_revert($module_name) { + node_breadcrumb_rule_features_rebuild($module_name); +} + +/** + * Rebuild all component objects for a given feature module. That is, re- + * import the exported feature settings as defined in + * node_breadcrumb_rule_features_export_render + * + * + * @param string $module_name + * The name of the feature module whose components should be rebuilt. + */ +function node_breadcrumb_rule_features_rebuild($module_name) { + $component_type = 'node_breadcrumb_rule'; + // This call will return the data structure serialized in the feature module + $mycomponents = features_get_default($component_type, $module_name); + + // Merge the imported named settings into the array of settings + if (!empty($mycomponents)) { + foreach ($mycomponents as $component_id => $mycomponent) { + node_breadcrumb_rule_save($mycomponent); + drupal_set_message("Updated $component_id as a $module setting"); + } + } +} \ No newline at end of file Index: node_breadcrumb.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/node_breadcrumb/node_breadcrumb.module,v retrieving revision 1.26 diff -u -p -r1.26 node_breadcrumb.module --- node_breadcrumb.module 22 Oct 2009 11:27:09 -0000 1.26 +++ node_breadcrumb.module 13 Jan 2011 02:12:38 -0000 @@ -4,6 +4,16 @@ function _node_breadcrumb_set_location($mid, $last_path, $last_title) { $add_active_class = variable_get('node_breadcrumb_add_active_class', FALSE); $menu_item = menu_link_load($mid); + + if (empty($menu_item)) { + // Setting a node breadcrumb rule with a non-existent or deleted menu id causes + // strange errors (the rule removes all navigation) so the import will fail if + // the mlid is invalid. + // Ensure that doesn't happen + watchdog('node_breadcrumb', 'Node breadcrumb rule refers to a non-existent menu link id. Ignoring', array(), WATCHDOG_ERROR); + return; + } + menu_local_tasks(0); menu_local_tasks(1); menu_set_item($_GET['q'], $menu_item);