Index: salesforce/salesforce_api/salesforce_api.admin.css
===================================================================
RCS file: salesforce/salesforce_api/salesforce_api.admin.css
diff -N salesforce/salesforce_api/salesforce_api.admin.css
--- salesforce/salesforce_api/salesforce_api.admin.css	25 Apr 2009 05:59:20 -0000	1.2.2.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
-/* $Id: salesforce_api.admin.css,v 1.2.2.2 2009/04/25 05:59:20 bevan Exp $ */
-
-.source-cell label {
-  display: none;
-}
Index: salesforce/salesforce_api/salesforce_api.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.admin.inc,v
retrieving revision 1.2.2.21
diff -u -p -r1.2.2.21 salesforce_api.admin.inc
--- salesforce/salesforce_api/salesforce_api.admin.inc	23 Feb 2010 20:54:11 -0000	1.2.2.21
+++ salesforce/salesforce_api/salesforce_api.admin.inc	25 Feb 2010 18:32:46 -0000
@@ -293,6 +293,12 @@ function salesforce_api_fieldmap_delete_
  * Displays the edit form for adding field associations to a fieldmap.
  */
 function salesforce_api_fieldmap_edit_form(&$form_state, $fieldmap) {
+  
+  // Include the CSS and JS for the form.
+  $path = drupal_get_path("module", "salesforce_api");
+  drupal_add_css($path .'/misc/salesforce_api.admin.css');
+  drupal_add_js($path ."/misc/salesforce_api.admin.js"); 
+  
   // Load the fieldmap from the database.
   $map = salesforce_api_fieldmap_load($fieldmap);
 
@@ -302,8 +308,6 @@ function salesforce_api_fieldmap_edit_fo
     drupal_goto(SALESFORCE_PATH_FIELDMAPS);
   }
 
-  // Include the CSS file for the form.
-  drupal_add_css(drupal_get_path('module', 'salesforce_api') .'/salesforce_api.admin.css');
 
   $form = array();
 
@@ -376,16 +380,42 @@ function salesforce_api_fieldmap_edit_fo
     $row = array(
       'target' => array('#value' => $value['label'] . $required),
     );
+    
+    // Adding fixed value option
+    $options = salesforce_api_fieldmap_field_options($source);
+    $options['Other']['fixed'] = t('Fixed value');
+    if( user_access('use php for salesforce fixed values') ) {
+      $options['Other']['php'] = t('Evaluate PHP');
+    }
+    if (is_array($map['fields'][$key])) {
+      $default_key = $map['fields'][$key]['type'];
+      $default_value = $map['fields'][$key]['value'];
+    } else {
+      $default_key = $map['fields'][$key];
+      $default_value = null;
+    }
 
     // Add the select list for the associated target field.
     $row['source'][$key] = array(
       '#type' => 'select',
       '#title' => $value['label'],
-      '#options' => salesforce_api_fieldmap_field_options($source),
-      '#default_value' => $map['fields'][$key],
+      '#options' => $options,
+      '#default_value' => $default_key,
       '#required' => $type == 'required',
+      '#attributes' => array('class' => 'sf_fieldmap_options', 'id' => 'sf-fieldmap-option-' . $key),
     );
-
+    $row['source'][$key ."_extra"] = array(
+      '#type' => 'textfield',
+      '#title' => t('Value'),
+      '#default_value' => $default_value,
+      '#size' => 20,
+      '#maxlength' => 128,
+      '#required' => FALSE,
+      '#prefix' => '<div id="'. $key .'-extra-hidden" class="fieldmap-extra-text">',
+      '#suffix' => '</div>',
+      '#description' => 'Omit &lt;?php ?&gt; tags. Return the value to set. Standard caveats apply.',
+    );
+    
     // Add the row to the correct rows array.
     $rows[$type][] = $row;
   }
@@ -402,6 +432,13 @@ function salesforce_api_fieldmap_edit_fo
   return $form;
 }
 
+function salesforce_api_fieldmap_edit_form_validate($form, &$form_state) {
+  // Include the CSS and JS for the form if it gets reloaded.
+  $path = drupal_get_path("module", "salesforce_api");
+  drupal_add_css($path .'/misc/salesforce_api.admin.css');
+  drupal_add_js($path ."/misc/salesforce_api.admin.js"); 
+}
+
 /**
  * FAPI submit handler for fieldmap editor
  */
@@ -422,8 +459,14 @@ function salesforce_api_fieldmap_edit_fo
 
   // Loop through all the fields on the object.
   foreach (array_keys($object['fields']) as $field) {
+    if (!empty($form_state['values'][$field .'_extra'])) {
+      $map['fields'][$field] = array(
+        'type' => $form_state['values'][$field], 
+        'value' => $form_state['values'][$field .'_extra']
+      );
+    }
     // If a field has been mapped to this field on the form...
-    if (!empty($form_state['values'][$field])) {
+    elseif (!empty($form_state['values'][$field])) {
       // Add the association to the fieldmap's fields array.
       $map['fields'][$field] = $form_state['values'][$field];
     }
@@ -457,7 +500,7 @@ function theme_salesforce_api_fieldmap_e
 
   foreach (element_children($form['rows']) as $element) {
     $rows[] = array(
-      drupal_render($form['rows'][$element]['target']),
+      array('data' => drupal_render($form['rows'][$element]['target']), 'class' => 'target-cell'),
       array('data' => drupal_render($form['rows'][$element]['source']), 'class' => 'source-cell'),
     );
   }
Index: salesforce/salesforce_api/salesforce_api.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.module,v
retrieving revision 1.2.2.31
diff -u -p -r1.2.2.31 salesforce_api.module
--- salesforce/salesforce_api/salesforce_api.module	24 Feb 2010 20:35:25 -0000	1.2.2.31
+++ salesforce/salesforce_api/salesforce_api.module	25 Feb 2010 18:32:46 -0000
@@ -137,7 +137,7 @@ function salesforce_api_menu() {
  * Implementation of hook_perm().
  */
 function salesforce_api_perm() {
-  return array('administer salesforce');
+  return array('administer salesforce', 'use php for salesforce fixed values');
 }
 
 /**
@@ -629,8 +629,23 @@ function salesforce_api_fieldmap_export_
 
   // Loop through the fields on the fieldmap.
   foreach ($map['fields'] as $sf_fieldname => $drupal_fieldname) {
+    // See if it's a special field
+    if (is_array($map['fields'][$sf_fieldname]))  {
+      switch ($map['fields'][$sf_fieldname]['type']) {
+        case 'fixed':
+          if (isset($map['fields'][$sf_fieldname]['value'])) {
+            $object->$sf_fieldname = htmlentities($map['fields'][$sf_fieldname]['value']);
+          }
+          break;
+        case 'php':
+          if(isset($map['fields'][$sf_fieldname]['value'])) {
+            $object->$sf_fieldname = htmlentities(eval($map['fields'][$sf_fieldname]['value']));
+          }
+          break;
+      }
+    }
     // If a handler is specified for retrieving a value for the Drupal field...
-    if (isset($drupal_object_definition['fields'][$drupal_fieldname]['export'])) {
+    elseif (isset($drupal_object_definition['fields'][$drupal_fieldname]['export'])) {
       $drupal_field_export_handler = $drupal_object_definition['fields'][$drupal_fieldname]['export'];
       $drupal_field_definition = $drupal_object_definition['fields'][$drupal_fieldname];
       $sf_field_definition = $sf_object_definition['fields'][$sf_fieldname];
Index: salesforce/salesforce_api/misc/salesforce_api.admin.css
===================================================================
RCS file: salesforce/salesforce_api/misc/salesforce_api.admin.css
diff -N salesforce/salesforce_api/misc/salesforce_api.admin.css
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ salesforce/salesforce_api/misc/salesforce_api.admin.css	25 Feb 2010 18:32:46 -0000
@@ -0,0 +1,9 @@
+/* $Id: salesforce_api.admin.css,v 1.2.2.2 2009/04/25 05:59:20 bevan Exp $ */
+
+.source-cell label {
+  display: none;
+}
+
+.fieldmap-extra-text label  {
+  display: inline;
+}
Index: salesforce/salesforce_api/misc/salesforce_api.admin.js
===================================================================
RCS file: salesforce/salesforce_api/misc/salesforce_api.admin.js
diff -N salesforce/salesforce_api/misc/salesforce_api.admin.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ salesforce/salesforce_api/misc/salesforce_api.admin.js	25 Feb 2010 18:32:46 -0000
@@ -0,0 +1,32 @@
+Drupal.behaviors.sf_fieldmap_options = function() {
+  $.fn.sf_fieldmap_option_change = function() {
+    var key = $(this).attr('id');
+    key = key.replace(/sf-fieldmap-option-/, '');
+    $(this).sf_fieldmap_option_toggle(key);
+  }
+
+  $.fn.sf_fieldmap_option_toggle = function(fieldname) { 
+    var fielddiv = '#' + fieldname + '-extra-hidden';
+    if ($(this).val() == 'fixed'
+    || $(this).val() == 'php')  {
+      $(fielddiv).show();
+    } else  {
+      $(fielddiv).hide();
+      $(fielddiv + ' input').val('');
+    }
+  }
+  
+  // Bind the change action
+  $('.sf_fieldmap_options').bind('change', function() {
+    $(this).sf_fieldmap_option_change();
+  });
+
+  // Hide hidden fields
+  $(".fieldmap-extra-text").hide();
+
+  // Show any text fields that should be shown
+  $('.sf_fieldmap_options').each(function() {
+    $(this).trigger('change');
+  });
+
+}
\ No newline at end of file
Index: salesforce/sf_node/sf_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_node/sf_node.module,v
retrieving revision 1.2.2.26
diff -u -p -r1.2.2.26 sf_node.module
--- salesforce/sf_node/sf_node.module	24 Feb 2010 20:37:08 -0000	1.2.2.26
+++ salesforce/sf_node/sf_node.module	25 Feb 2010 18:32:47 -0000
@@ -375,31 +375,17 @@ function sf_node_salesforce_form(&$form_
 
     // Load the fieldmap data.
     $map = salesforce_api_fieldmap_load($node->salesforce['fieldmap']);
-
-    // Load the object definitions.
-    $drupal_object = salesforce_api_fieldmap_objects_load('drupal', $map['drupal']);
-    $object = salesforce_api_fieldmap_objects_load('salesforce', $map['salesforce']);
+    $sf_object_definition = salesforce_api_fieldmap_objects_load('salesforce', $map['salesforce']);
+    $export_data = salesforce_api_fieldmap_export_create($node->salesforce['fieldmap'], $node);
 
     $header = array(t('Field name'), t('Drupal @type value', array('@type' => salesforce_api_fieldmap_object_label('drupal', $map['drupal']))), t('Salesforce @type value', array('@type' => salesforce_api_fieldmap_object_label('salesforce', $map['salesforce']))));
     $rows = array();
 
-    foreach ($map['fields'] as $key => $value) {
-      if (isset($drupal_object['fields'][$value]['export'])) {
-        $drupal_field_definition = $drupal_object['fields'][$value];
-        $sf_field_definition = $object['fields'][$key];
-        $drupal_value = $drupal_object['fields'][$value]['export']($node, $value, $drupal_field_definition, $sf_field_definition);
-      }
-      elseif (isset($node->$value)) {
-        $drupal_value = $node->$value;
-      }
-      else {
-        $drupal_value = '';
-      }
-
+    foreach ($map['fields'] as $sf_fieldname => $drupal_fieldname) {
       $rows[] = array(
-        $object['fields'][$key]['label'],
-        $drupal_value,
-        $sf_data->$key,
+        $sf_object_definition['fields'][$sf_fieldname]['label'],
+        $export_data->$sf_fieldname,
+        $sf_data->$sf_fieldname,
       );
     }
 
Index: salesforce/sf_prematch/sf_prematch.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_prematch/Attic/sf_prematch.admin.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 sf_prematch.admin.inc
--- salesforce/sf_prematch/sf_prematch.admin.inc	23 Feb 2010 20:23:30 -0000	1.1.2.1
+++ salesforce/sf_prematch/sf_prematch.admin.inc	25 Feb 2010 18:32:47 -0000
@@ -225,10 +225,16 @@ function sf_prematch_get_options($map, $
   // Build terms into ordered options to use in select.
   $options = array();
   // Start with empty option if select is not required.
-  if (!$required) {$options[] = '';}
+  if (!$required) { $options[] = ''; }
 
   // Add terms to options, making key = value so form value is key not integer.
   foreach ($terms as $term) {
+    if (is_array($term)) {
+      $term = implode(' : ', $term);
+      if (strlen($term) > 50) {
+        $term = substr($term, 0, 50) . ' ...';
+      }
+    }
   	$options[$term] = $term;
   }
 
Index: salesforce/sf_user/sf_user.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_user/sf_user.module,v
retrieving revision 1.2.2.16
diff -u -p -r1.2.2.16 sf_user.module
--- salesforce/sf_user/sf_user.module	23 Feb 2010 21:40:56 -0000	1.2.2.16
+++ salesforce/sf_user/sf_user.module	25 Feb 2010 18:32:47 -0000
@@ -199,31 +199,16 @@ function sf_user_salesforce_form(&$form_
 
     // Load the fieldmap data.
     $map = salesforce_api_fieldmap_load($account->salesforce['fieldmap']);
-
-    // Load the object definitions.
-    $drupal_object_definition = salesforce_api_fieldmap_objects_load('drupal', $map['drupal']);
-    $sf_field_definition = salesforce_api_fieldmap_objects_load('salesforce', $map['salesforce']);
+    $sf_object_definition = salesforce_api_fieldmap_objects_load('salesforce', $map['salesforce']);
+    $export_data = salesforce_api_fieldmap_export_create($account->salesforce['fieldmap'], $account);
 
     $header = array(t('Field name'), t('Drupal user value'), t('Salesforce @type value', array('@type' => salesforce_api_fieldmap_object_label('salesforce', $map['salesforce']))));
     $rows = array();
 
     foreach ($map['fields'] as $sf_fieldname => $drupal_fieldname) {
-      if (isset($drupal_object_definition['fields'][$drupal_fieldname]['export'])) {
-        $drupal_field_export_handler = $drupal_object_definition['fields'][$drupal_fieldname]['export'];
-        $drupal_field_definition = $drupal_object_definition['fields'][$drupal_fieldname];
-        $sf_field_definition = $sf_object_definition['fields'][$sf_fieldname];
-        $drupal_value = $drupal_field_export_handler($account, $drupal_fieldname, $drupal_field_definition, $sf_field_definition);
-      }
-      elseif (isset($account->$drupal_fieldname)) {
-        $drupal_value = $account->$drupal_fieldname;
-      }
-      else {
-        $drupal_value = '';
-      }
-
       $rows[] = array(
-        $sf_field_definition['fields'][$sf_fieldname]['label'],
-        $drupal_value,
+        $sf_object_definition['fields'][$sf_fieldname]['label'],
+        $export_data->$sf_fieldname,
         $sf_data->$sf_fieldname,
       );
     }
