function sf_node_nodeapi in Salesforce Suite 6.2
Same name and namespace in other branches
- 5.2 sf_node/sf_node.module \sf_node_nodeapi()
Implementation of hook_nodeapi().
File
- sf_node/
sf_node.module, line 53 - Integrates the core node object and various node related modules with the Salesforce API.
Code
function sf_node_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'load':
$node->salesforce = salesforce_api_id_load('node', $node->nid);
break;
case 'delete':
$maps = salesforce_api_salesforce_field_map_load_by(array(
'drupal' => 'node_' . $node->type,
));
$map = current($maps);
if ($map->automatic & SALESFORCE_AUTO_SYNC_DELETE) {
$continue = TRUE;
$continues = module_invoke_all('salesforce_api_delete', $node->salesforce->sfid, $map, $node->nid);
if (!empty($continues)) {
foreach ($continues as $continue) {
if ($continue === FALSE) {
break;
}
}
}
if ($continue) {
salesforce_api_delete_salesforce_objects($node->salesforce->sfid);
}
}
salesforce_api_delete_object_map('node', $node->nid);
break;
case 'update':
case 'insert':
// When importing *from* Salesforce, don't export *back* to Salesforce.
if (isset($node->sf_node_skip_export)) {
break;
}
// If this is an update, and the node already has a salesforce mapping,
// try to load it. If the load fails, we need to fetch the appropriate
// fieldmap. Either way, we're upserting the salesforce record.
$salesforce = (object) array(
'name' => NULL,
'sfid' => NULL,
);
if ($node->nid) {
$salesforce = salesforce_api_id_load('node', $node->nid);
}
// If we have an existing link, attempt to load the assoc'd map.
if (!empty($salesforce->name)) {
$map = salesforce_api_fieldmap_load($salesforce->name);
}
// If the sf link wasn't found, or if it was found but assoc'd to a
// non-existent map, grab any maps assoc'd with this node type.
if (empty($salesforce->name) || empty($map)) {
$maps = salesforce_api_salesforce_field_map_load_by(array(
'drupal' => 'node_' . $node->type,
));
if (empty($maps)) {
break;
}
}
else {
$maps = array(
$map->name => $map,
);
}
foreach ($maps as $map) {
$auto_create = $map->automatic & SALESFORCE_AUTO_SYNC_CREATE;
$auto_update = $map->automatic & SALESFORCE_AUTO_SYNC_UPDATE;
if (!$auto_create && $op == 'insert' || !$auto_update && $op == 'update') {
unset($maps[$map->name]);
}
}
// If all our maps were unset, abort this procedure.
if (empty($maps)) {
break;
}
// Otherwise, use the first fieldmap.
$map = reset($maps);
$salesforce->name = $map->name;
// Check if there is more than one fieldmap in the result.
if (user_access('administer salesforce') and next($maps)) {
if (!empty($map->description)) {
$description = '(' . $map->description . ')';
}
drupal_set_message(t('Warning: more than one "automatic" salesforce mapping detected. Used fieldmap !map_name @map_description.', array(
'!map_name' => l($map->name, SALESFORCE_PATH_FIELDMAPS . '/' . $map->name . '/edit'),
'@map_description' => $description,
)), 'warning');
}
// Finally, export the node to Salesforce.
try {
sf_node_export($node, $salesforce->name, $salesforce->sfid);
} catch (Exception $e) {
salesforce_api_log(SALESFORCE_LOG_SOME, 'Exception while attempting to export node: ' . $e
->getMessage(), array(), WATCHDOG_ERROR, l('node ' . $node->nid, 'node/' . $node->nid));
}
break;
}
}