You are here

function services_client_error_services_client_before_request in Services Client 7.2

Implements hook_sc_process_data().

File

services_client_error/services_client_error.module, line 185
Services Client error handling, re-try and reporting.

Code

function services_client_error_services_client_before_request($handler, $object) {

  // Don't react on syncs triggred by services client error handling.
  if ($handler
    ->hasTag('sc_error')) {
    return;
  }

  // Load entity_id
  $event = $handler
    ->getEvent();
  list($id) = entity_extract_ids($event->entity_type, $handler
    ->getEntity());

  // Get list of unprocessed errors, that are related to entity. Mark them as
  // overwritten and store new data.
  $result = db_query("SELECT eid FROM {services_client_error} WHERE entity_type = :type AND entity_id = :id AND status = :status AND event = :event", array(
    ':type' => $event->entity_type,
    ':id' => $id,
    ':status' => SC_ERROR_UNPROCESSED,
    ':event' => $event->name,
  ))
    ->fetchAllKeyed(0, 0);

  // No errors are unprocessed.
  if (empty($result)) {
    return;
  }

  // Mark all as overwritten.
  db_update('services_client_error')
    ->fields(array(
    'status' => SC_ERROR_OVERWRITTEN,
  ))
    ->condition('eid', $result, 'IN')
    ->execute();
  foreach ($result as $eid) {
    $log = array(
      'eid' => $eid,
      'message' => 'Overwritten by data update.',
      'status_change' => SC_ERROR_OVERWRITTEN,
      'entity' => $handler
        ->getEntity(),
    );
    services_client_error_log_save($log);
  }
}