You are here

function salesforce_pull_check_merged_records in Salesforce Suite 7.3

Get all the merged records since the last delete.

Parameters

string $merge_record_type: The Salesforce record type containing the merge history.

1 call to salesforce_pull_check_merged_records()
salesforce_pull_get_deleted_records in modules/salesforce_pull/salesforce_pull.module
Get deleted records from salesforce.

File

modules/salesforce_pull/salesforce_pull.module, line 801
Pull updates from Salesforce when a Salesforce object is updated.

Code

function salesforce_pull_check_merged_records($merge_record_type) {
  $sfapi = salesforce_get_api();
  $merge_fields = array(
    'type' => $merge_record_type,
    'merged_contact_key' => 'Contact__c',
    'old_contact_key' => 'Old_Contact__c',
    'modified_date' => 'LastModifiedDate',
  );
  drupal_alter('salesforce_pull_entity_merge_fields', $merge_fields);
  $objInfo = $sfapi
    ->objects(array(
    'name' => $merge_fields['type'],
  ));
  if (empty($objInfo)) {
    return array(
      'records' => array(),
    );
  }
  $last_delete_sync = variable_get('salesforce_pull_delete_last_' . $merge_fields['type'], REQUEST_TIME);
  $soql = new SalesforceSelectQuery($merge_fields['type']);

  // Convert field mappings to SOQL.
  $soql->fields = array(
    'Id' => 'Id',
    $merge_fields['merged_contact_key'] => $merge_fields['merged_contact_key'],
    $merge_fields['old_contact_key'] => $merge_fields['old_contact_key'],
    $merge_fields['modified_date'] => $merge_fields['modified_date'],
  );

  // If no lastupdate, get all records, else get records since last pull.
  $sf_last_sync = variable_get('salesforce_pull_last_sync_' . $merge_fields['type'], NULL);
  if ($sf_last_sync) {
    $last_sync = gmdate('Y-m-d\\TH:i:s\\Z', $sf_last_sync);
    $soql
      ->addCondition($last_delete_sync, $last_sync, '>');
  }

  // Execute query.
  $results = $sfapi
    ->query($soql);
  $version_path = parse_url($sfapi
    ->getApiEndPoint(), PHP_URL_PATH);
  if (!isset($results['errorCode'])) {
    $merged_records = $results;

    // Handle requests larger than the batch limit (usually 2000).
    $next_records_url = isset($results['nextRecordsUrl']) ? str_replace($version_path, '', $results['nextRecordsUrl']) : FALSE;
    while ($next_records_url) {
      $new_result = $sfapi
        ->apiCall($next_records_url);
      if (!isset($new_result['errorCode'])) {

        // Write items to the queue.
        foreach ($new_result['records'] as $result) {
          $merged_records[] = $result;
        }
      }
      $next_records_url = isset($new_result['nextRecordsUrl']) ? str_replace($version_path, '', $new_result['nextRecordsUrl']) : FALSE;
    }
    return $merged_records;
  }
  else {

    // Return a properly structure null result:
    return array(
      'records' => array(),
    );
  }
}