Index: faceted_search.features.inc
===================================================================
RCS file: faceted_search.features.inc
diff -N faceted_search.features.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ faceted_search.features.inc	19 Mar 2010 21:33:51 -0000
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * Implementation of hook_features_api().
+ */
+function faceted_search_features_api() {
+  return array(
+    'faceted_search' => array(
+      'name' => t('Faceted Search'),
+      'default_hook' => 'faceted_search_defaults',
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_features_export_options()
+ */
+function faceted_search_features_export_options() {
+
+  $options = array();
+  $result = db_query("SELECT * FROM {faceted_search_env}");
+  while ($environment = db_fetch_object($result)) {
+    $options[$environment->name] = $environment->name;
+  }
+  return $options;
+}
+
+/**
+ * Implementation of hook_features_export()
+ */
+function faceted_search_features_export($data, &$export, $module_name = '') {
+
+  $pipe = array();
+  $export['dependencies']['faceted_search'] = 'faceted_search';
+  foreach ($data as $instance) {
+    $export['features']['faceted_search'][$instance] = $instance;
+    $env = db_fetch_object(db_query("SELECT * FROM {faceted_search_env} WHERE name = '%s'", $instance));
+    $filters = faceted_search_load_filter_settings($env, TRUE);
+    $facets = array();
+    foreach (module_implements('faceted_search_collect') as $module) {
+      $hook = $module .'_faceted_search_collect';
+      $hook($facets, 'facets', $env, NULL);
+      foreach ($facets as $facet) {
+        if (isset($filters[$facet->get_key()])) {
+          $export['dependencies'][$module] = $module;
+        }
+      }
+    }
+  }
+  return $pipe;
+}
+
+/**
+ * Implementation of hook_features_export_render()
+ */
+function faceted_search_features_export_render($module = 'foo', $data) {
+  $translatables = $code = array();
+
+  $code[] = '  $environments = array();';
+  foreach ($data as $instance) {
+    $filters = array();
+    $environment = db_fetch_object(db_query("SELECT * FROM {faceted_search_env} WHERE name = '%s'", $instance));
+    $environment->settings = unserialize($environment->settings);
+    $result = db_query("SELECT * FROM {faceted_search_filters} WHERE env_id = %d ORDER BY filter_key, filter_id ASC", $environment->env_id);
+    while ($filter = db_fetch_array($result)) {
+      unset($filter['env_id']);
+      $filters[$filter['filter_key']] = $filter;
+    }
+    unset($environment->env_id);
+    $environment->filters = $filters;
+    $code[] = '  $environments'."['". $instance ."'] = ". features_var_export($environment, '  ') .';';
+    $code[] = '';
+  }
+
+  $code[] = '  return $environments;';
+  $code = implode("\n", $code);
+  return array('faceted_search_defaults' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ */
+function faceted_search_features_revert($module) {
+  faceted_search_features_rebuild($module);
+}
+
+/**
+ * Implementation of hook_features_rebuild().
+ */
+function faceted_search_features_rebuild($module) {
+
+  $environments = module_invoke($module, 'faceted_search_defaults');
+  if (!empty($environments)) {
+    foreach ($environments as $name => $data) {
+
+      $filters = $data['filters'];
+      unset($data['filters']);
+      $update = FALSE;
+      if ($result = db_fetch_array(db_query("SELECT * FROM {faceted_search_env} WHERE name = '%s'", $data['name']))) {
+        drupal_write_record('faceted_search_env', $data, array('name'));
+        $update = TRUE;
+      }
+      else {
+        unset($data['env_id']);
+        drupal_write_record('faceted_search_env', $data);
+        $data['env_id'] = db_last_insert_id('faceted_search_env', 'env_id');
+      }
+
+      foreach ($filters as $filter_key => $filter) {
+        if ($update) {
+          $filter['env_id'] = $result['env_id'];
+          drupal_write_record('faceted_search_filters', $filter, array('env_id', 'filter_key', 'filter_id'));
+        }
+        else {
+          $filter['env_id'] = $data['env_id'];
+          drupal_write_record('faceted_search_filters', $filter);
+        }
+
+      }
+    }
+  }
+}
Index: faceted_search.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/faceted_search/faceted_search.module,v
retrieving revision 1.56
diff -u -p -r1.56 faceted_search.module
--- faceted_search.module	4 May 2009 23:08:03 -0000	1.56
+++ faceted_search.module	19 Mar 2010 21:33:52 -0000
@@ -7,6 +7,7 @@
  */
 
 require_once('./'. drupal_get_path('module', 'faceted_search') .'/faceted_search.inc');
+include 'faceted_search.features.inc';
 
 /**
  * Implementation of hook_help().
