You are here

function salesforce_api_fieldmap_field_delete in Salesforce Suite 6.2

Same name and namespace in other branches
  1. 7 salesforce_api/salesforce_api.module \salesforce_api_fieldmap_field_delete()
  2. 7.2 salesforce_api/salesforce_api.module \salesforce_api_fieldmap_field_delete()

Remove a field from all fieldmaps. This is particularly useful for implementations of hook_content_fieldapi('delete instance'). May be use to delete an occurence in a single fieldmap (by supplying drupal_type and/or salesforce_type), or every occurence in all fieldmaps (by supplying only fieldname).

@todo I'm sure this can be done more elegantly, but I can't spend anymore braincells on it right now.

Parameters

$fieldname: The name of the field to be deleted. Either a CCK field, or a Salesforce field

$drupal_type (optional): If given, limit deleting of the field to this Drupal content type

$salesforce_type (optional): If given, limit

See also

sf_node/sf_node.module:sf_node_content_fieldapi

1 call to salesforce_api_fieldmap_field_delete()
sf_node_content_fieldapi in sf_node/sf_node.module
Implementation of hook_content_fieldapi() Delete a field from a Salesforce fieldmap when the field instance is deleted.

File

salesforce_api/salesforce_api.module, line 638
Defines an API that enables modules to interact with the Salesforce server.

Code

function salesforce_api_fieldmap_field_delete($fieldname, $drupal_type = NULL, $salesforce_type = NULL) {
  if ($drupal_type && $salesforce_type) {
    $result = db_query('SELECT fieldmap, name FROM {salesforce_field_map} WHERE drupal = "%s" AND salesforce = "%s"', $drupal_type, $salesforce_type);
  }
  elseif ($drupal_type) {
    $result = db_query('SELECT fieldmap, name FROM {salesforce_field_map} WHERE drupal = "%s"', $drupal_type);
  }
  elseif ($salesforce_type) {
    $result = db_query('SELECT fieldmap, name FROM {salesforce_field_map} WHERE salesforce = "%s"', $salesforce_type);
  }
  else {
    $result = db_query('SELECT fieldmap, name FROM {salesforce_field_map}');
  }
  while ($row = db_fetch_array($result)) {
    $map = salesforce_api_fieldmap_load($row['name']);

    // In the extremely unlikely event that a Salesforce field and a Drupal
    // field share the same name, this function handles both.
    if ($drupal_type) {
      $key1 = array_search($fieldname, $map->fields);
      if ($key1) {
        unset($map->fields[$key1]);
        if (user_access('administer salesforce')) {
          drupal_set_message(t('Removed Drupal field from salesforce_api !link', array(
            '!link' => l('fieldmap ' . $fieldmap_id, SALESFORCE_PATH_OBJECT . '/' . $fieldmap_id),
          )));
        }
        salesforce_api_fieldmap_save($map);
      }
    }
    if ($salesforce_type) {
      if (!empty($map->fields[$key2])) {
        unset($map->fields[$key2]);
        if (user_access('administer salesforce')) {
          drupal_set_message(t('Removed Salesforce field from salesforce_api !link', array(
            '@link' => l('fieldmap ' . $fieldmap_id, SALESFORCE_PATH_OBJECT . '/' . $fieldmap_id),
          )));
        }
        salesforce_api_fieldmap_save($map);
      }
    }
  }
}