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.22
diff -u -p -r1.2.2.22 salesforce_api.admin.inc
--- salesforce/salesforce_api/salesforce_api.admin.inc	25 Feb 2010 19:18:46 -0000	1.2.2.22
+++ salesforce/salesforce_api/salesforce_api.admin.inc	25 Feb 2010 19:29:59 -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);
 
@@ -377,16 +383,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;
   }
@@ -408,9 +440,10 @@ function salesforce_api_fieldmap_edit_fo
  *
  */
 function salesforce_api_fieldmap_edit_form_validate($form, &$form_state) {
-  // Include the CSS file for the form on reload as long as Drupal won't do it for us.
-  $path = drupal_get_path('module', 'salesforce_api');
-  drupal_add_css($path . '/misc/salesforce_api.admin.css');
+  // 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"); 
 }
 
 /**
@@ -433,8 +466,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];
     }
@@ -468,7 +507,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 19:30:00 -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.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 19:30:00 -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_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 19:30:00 -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;
   }
 
