Index: feedapi_mapper.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/feedapi_mapper.module,v
retrieving revision 1.1.2.7.2.24
diff -u -p -r1.1.2.7.2.24 feedapi_mapper.module
--- feedapi_mapper.module	11 Apr 2009 00:16:36 -0000	1.1.2.7.2.24
+++ feedapi_mapper.module	15 Apr 2009 12:19:10 -0000
@@ -26,6 +26,23 @@ function feedapi_mapper_menu() {
     'access callback' => 'feedapi_mapper_access_mapper',
     'access arguments' => array(1),
   );
+  $items['node/%node/map/map'] = array(
+    'title' => 'Map',
+    'page callback' => 'feedapi_mapper_page',
+    'page arguments' => array(1),
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'access callback' => 'feedapi_mapper_access_mapper',
+    'access arguments' => array(1),
+  );
+  $items['node/%node/map/export'] = array(
+    'title' => 'Export',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('feedapi_mapper_export_page', 1),
+    'type' => MENU_LOCAL_TASK,
+    'access callback' => 'feedapi_mapper_access_mapper',
+    'access arguments' => array(1),
+    'weight' => 2,
+  );
   foreach (node_get_types() as $type) {
     $type_url_str = str_replace('_', '-', $type->type);
     $items['admin/content/node-type/'. $type_url_str .'/map'] = array(
@@ -36,7 +53,24 @@ function feedapi_mapper_menu() {
       'type' => MENU_LOCAL_TASK,
       'access callback' => 'feedapi_mapper_access_mapper',
       'access arguments' => array(3),
-      );
+    );
+    $items['admin/content/node-type/'. $type_url_str .'/map/map'] = array(
+      'title' => 'Map',
+      'page callback' => 'feedapi_mapper_page',
+      'page arguments' => array(1),
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+      'access callback' => 'feedapi_mapper_access_mapper',
+      'access arguments' => array(1),
+    );
+    $items['admin/content/node-type/'. $type_url_str .'/map/export'] = array(
+      'title' => 'Export',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('feedapi_mapper_export_page', 1),
+      'type' => MENU_LOCAL_TASK,
+      'access callback' => 'feedapi_mapper_access_mapper',
+      'access arguments' => array(1),
+      'weight' => 2,
+    );
   }
   return $items;
 }
@@ -171,6 +205,26 @@ function feedapi_mapper_page($node) {
 }
 
 /**
+ * Callback function for hook_menu().
+ */
+function feedapi_mapper_export_page($form_state, $node) {
+  $mapping = array();
+  $type = is_string($node) ? $node : $node->nid;
+  $mapping = _feedapi_mapper_load_mapping($type);
+  $head = "
+<?php
+\$feedapi_mapper[\"$type\"] = ";
+  $tail = ';';
+  $form['show'] = array(
+    '#title' => t('PHP code'),
+    '#type' => 'textarea',
+    '#default_value' => $head . var_export($mapping, TRUE) . $tail,
+    '#description' => t('To import the mapping to another site you should put the code above into feedapi_mapper/import/!typename.inc', array('!typename' => $type)),
+  );
+  return $form;
+}
+
+/**
  * Mapping form.
  */
 function feedapi_mapper_form($form_state, $node) {
@@ -310,17 +364,33 @@ function _feedapi_mapper_store_mapping($
  */
 function _feedapi_mapper_load_mapping($param) {
   static $mappings;
-  if (is_numeric($param)) {
-    if (isset($mappings[$param])) {
-      return $mappings[$param];
+  if (isset($mappings[$param])) {
+    return $mappings[$param];
+  }
+  $file = './'. drupal_get_path('module', 'feedapi_mapper') ."/import/". $param .".inc";
+  $from_file = array();
+  if (is_file($file)) {
+    include $file;
+    if (isset($feedapi_mapper[$param])) {
+      $from_file = $feedapi_mapper[$param];
     }
+  }
+  if (is_numeric($param)) {
     if ($mapping = db_result(db_query('SELECT mapping FROM {feedapi_mapper} WHERE nid = %d', $param))) {
       $mappings[$param] = unserialize($mapping);
-      return $mappings[$param];
+      $from_db = $mappings[$param];
     }
   }
   else if (is_string($param)) {
-    return variable_get('feedapi_mapper_mapping_'. $param, array());
+    $from_db = variable_get('feedapi_mapper_mapping_'. $param, array());
+  }
+  if (!empty($from_file) && empty($from_db)) {
+    $mappings[$param] = $from_file;
+    return $from_file;
+  }
+  else {
+    $mappings[$param] = $from_db;
+    return $from_db;
   }
 }
 
